From ea5a2eb1704836fedde54e4e074a4e5c1104a4f0 Mon Sep 17 00:00:00 2001 From: dyzheng Date: Wed, 17 Jul 2024 13:03:28 +0800 Subject: [PATCH 1/7] Fix: error of non-diagonal nonlocal pseudopotential with LCAO (#4705) * Fix: error of non-diagonal nonlocal pseudopotential with LCAO * [pre-commit.ci lite] apply automatic fixes * Test: add GTH pseudopotential tests * Fix: CASES_CPU.txt --------- Co-authored-by: dyzheng Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mohan Chen --- source/module_cell/setup_nonlocal.cpp | 2 +- .../hamilt_lcaodft/LCAO_nl_mu.cpp | 71 +- .../hamilt_lcaodft/fvnl_dbeta_gamma.cpp | 34 +- .../hamilt_lcaodft/fvnl_dbeta_k.cpp | 36 +- tests/PP_ORB/cp2k_Si_7au_100Ry_2s2p1d.orb | 903 ++++++++++++++ tests/PP_ORB/cp2k_gen_gth_pbe_si.upf | 1075 +++++++++++++++++ tests/integrate/101_PW_GTH_CF_CS_Si/INPUT | 22 + tests/integrate/101_PW_GTH_CF_CS_Si/KPT | 4 + tests/integrate/101_PW_GTH_CF_CS_Si/STRU | 18 + tests/integrate/101_PW_GTH_CF_CS_Si/jd | 1 + .../integrate/101_PW_GTH_CF_CS_Si/result.ref | 5 + tests/integrate/201_NO_GTH_CF_CS_Si/INPUT | 22 + tests/integrate/201_NO_GTH_CF_CS_Si/KPT | 4 + tests/integrate/201_NO_GTH_CF_CS_Si/STRU | 21 + tests/integrate/201_NO_GTH_CF_CS_Si/jd | 1 + .../integrate/201_NO_GTH_CF_CS_Si/result.ref | 5 + tests/integrate/CASES_CPU.txt | 4 +- 17 files changed, 2141 insertions(+), 87 deletions(-) create mode 100644 tests/PP_ORB/cp2k_Si_7au_100Ry_2s2p1d.orb create mode 100644 tests/PP_ORB/cp2k_gen_gth_pbe_si.upf create mode 100644 tests/integrate/101_PW_GTH_CF_CS_Si/INPUT create mode 100644 tests/integrate/101_PW_GTH_CF_CS_Si/KPT create mode 100644 tests/integrate/101_PW_GTH_CF_CS_Si/STRU create mode 100644 tests/integrate/101_PW_GTH_CF_CS_Si/jd create mode 100644 tests/integrate/101_PW_GTH_CF_CS_Si/result.ref create mode 100644 tests/integrate/201_NO_GTH_CF_CS_Si/INPUT create mode 100644 tests/integrate/201_NO_GTH_CF_CS_Si/KPT create mode 100644 tests/integrate/201_NO_GTH_CF_CS_Si/STRU create mode 100644 tests/integrate/201_NO_GTH_CF_CS_Si/jd create mode 100644 tests/integrate/201_NO_GTH_CF_CS_Si/result.ref diff --git a/source/module_cell/setup_nonlocal.cpp b/source/module_cell/setup_nonlocal.cpp index b039ab1b60..d9f542240b 100644 --- a/source/module_cell/setup_nonlocal.cpp +++ b/source/module_cell/setup_nonlocal.cpp @@ -92,7 +92,7 @@ void InfoNonlocal::Set_NonLocal(const int& it, } else { - if (is1 == is2 && ip1 == ip2) + if (is1 == is2 && m1 == m2) { coefficient_D_nc_in(ip1 + nh * is1, ip2 + nh * is2) = atom->ncpp.dion(p1, p2); } 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 90a66edbbb..fe6ce2fb87 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_nl_mu.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_nl_mu.cpp @@ -107,8 +107,9 @@ 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 @@ -214,9 +215,9 @@ 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) { @@ -301,8 +302,9 @@ 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 @@ -311,8 +313,9 @@ 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) { @@ -321,22 +324,14 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, if (nspin == 2 || nspin == 1) { double nlm_tmp = 0.0; - const int nproj = ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const double* tmp_d = nullptr; + for (int no = 0; no < ucell.atoms[T0].ncpp.non_zero_count_soc[0]; no++) { - const int L0 = ucell.infoNL.Beta[T0].Proj[nb].getL(); - for (int m = 0; m < 2 * L0 + 1; m++) - { - if (nlm_1[ib] != 0.0 && nlm_2[ib] != 0.0) - { - nlm_tmp += nlm_1[ib] * nlm_2[ib] - * ucell.atoms[T0].ncpp.dion(nb, nb); - } - ib += 1; - } + const int p1 = ucell.atoms[T0].ncpp.index1_soc[0][no]; + const int p2 = ucell.atoms[T0].ncpp.index2_soc[0][no]; + ucell.atoms[T0].ncpp.get_d(0, p1, p2, tmp_d); + nlm_tmp += nlm_2[p2] * nlm_1[p1] * (*tmp_d); } - assert(ib == nlm_1.size()); if (gamma_only_local) { @@ -467,22 +462,17 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, assert(nlm_1.size() == nlm_2[0].size()); - const int nproj = ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const double* tmp_d = nullptr; + for (int no = 0; no < ucell.atoms[T0].ncpp.non_zero_count_soc[0]; no++) { - const int L0 = ucell.infoNL.Beta[T0].Proj[nb].getL(); - for (int m = 0; m < 2 * L0 + 1; m++) + const int p1 = ucell.atoms[T0].ncpp.index1_soc[0][no]; + const int p2 = ucell.atoms[T0].ncpp.index2_soc[0][no]; + ucell.atoms[T0].ncpp.get_d(0, p1, p2, tmp_d); + for (int ir = 0; ir < 3; ir++) { - for (int ir = 0; ir < 3; ir++) - { - nlm[ir] += nlm_2[ir][ib] * nlm_1[ib] - * ucell.atoms[T0].ncpp.dion(nb, nb); - } - ib += 1; + nlm[ir] += nlm_2[ir][p2] * nlm_1[p1] * (*tmp_d); } } - assert(ib == nlm_1.size()); LCAO_domain::set_force(pv, iw1_all, @@ -516,22 +506,17 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, assert(nlm_1.size() == nlm_2[0].size()); - const int nproj = ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const double* tmp_d = nullptr; + for (int no = 0; no < ucell.atoms[T0].ncpp.non_zero_count_soc[0]; no++) { - const int L0 = ucell.infoNL.Beta[T0].Proj[nb].getL(); - for (int m = 0; m < 2 * L0 + 1; m++) + const int p1 = ucell.atoms[T0].ncpp.index1_soc[0][no]; + const int p2 = ucell.atoms[T0].ncpp.index2_soc[0][no]; + ucell.atoms[T0].ncpp.get_d(0, p1, p2, tmp_d); + for (int ir = 0; ir < 3; ir++) { - for (int ir = 0; ir < 3; ir++) - { - nlm[ir] += nlm_2[ir][ib] * nlm_1[ib] - * ucell.atoms[T0].ncpp.dion(nb, nb); - } - ib += 1; + nlm[ir] += nlm_2[ir][p2] * nlm_1[p1] * (*tmp_d); } } - assert(ib == nlm_1.size()); fsr.DHloc_fixedR_x[nnr + nnr_inner] += nlm[0]; fsr.DHloc_fixedR_y[nnr + nnr_inner] += nlm[1]; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/fvnl_dbeta_gamma.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/fvnl_dbeta_gamma.cpp index 9b4a9b8f15..9a874a8bcc 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/fvnl_dbeta_gamma.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/fvnl_dbeta_gamma.cpp @@ -151,18 +151,15 @@ void Force_LCAO::cal_fvnl_dbeta(const elecstate::DensityMatrix::cal_fvnl_dbeta(const elecstate::DensityMatrix>::cal_fvnl_dbeta(const elecstate::DensityMa nlm_2[i] = nlm_tot[iat][key1][iw1_all][i + 1].data(); } - const int nproj = ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const double* tmp_d = nullptr; + for (int no = 0; no < ucell.atoms[T0].ncpp.non_zero_count_soc[0]; no++) { - const int L0 = ucell.infoNL.Beta[T0].Proj[nb].getL(); - for (int m = 0; m < 2 * L0 + 1; m++) + const int p1 = ucell.atoms[T0].ncpp.index1_soc[0][no]; + const int p2 = ucell.atoms[T0].ncpp.index2_soc[0][no]; + ucell.atoms[T0].ncpp.get_d(0, p1, p2, tmp_d); + for (int ir = 0; ir < 3; ir++) { - for (int ir = 0; ir < 3; ir++) - { - nlm[ir] += nlm_2[ir][ib] * nlm_1[ib] - * ucell.atoms[T0].ncpp.dion(nb, nb); - } - ib += 1; + nlm[ir] += nlm_2[ir][p2] * nlm_1[p1] * (*tmp_d); } } @@ -466,19 +462,15 @@ void Force_LCAO>::cal_fvnl_dbeta(const elecstate::DensityMa nlm_2[i] = nlm_tot[iat][key2][iw2_all][i + 1].data(); } - const int nproj = ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const double* tmp_d = nullptr; + for (int no = 0; no < ucell.atoms[T0].ncpp.non_zero_count_soc[0]; no++) { - const int L0 = ucell.infoNL.Beta[T0].Proj[nb].getL(); - for (int m = 0; m < 2 * L0 + 1; m++) + const int p1 = ucell.atoms[T0].ncpp.index1_soc[0][no]; + const int p2 = ucell.atoms[T0].ncpp.index2_soc[0][no]; + ucell.atoms[T0].ncpp.get_d(0, p1, p2, tmp_d); + for (int ir = 0; ir < 3; ir++) { - for (int ir = 0; ir < 3; ir++) - { - nlm1[ir] += nlm_2[ir][ib] * nlm_1[ib] - * ucell.atoms[T0].ncpp.dion(nb, nb); - } - ib += 1; + nlm1[ir] += nlm_2[ir][p1] * nlm_1[p2] * (*tmp_d); } } } diff --git a/tests/PP_ORB/cp2k_Si_7au_100Ry_2s2p1d.orb b/tests/PP_ORB/cp2k_Si_7au_100Ry_2s2p1d.orb new file mode 100644 index 0000000000..9584da2980 --- /dev/null +++ b/tests/PP_ORB/cp2k_Si_7au_100Ry_2s2p1d.orb @@ -0,0 +1,903 @@ +--------------------------------------------------------------------------- +Element Si +Energy Cutoff(Ry) 100.0 +Radius Cutoff(a.u.) 7 +Lmax 2 +Number of Sorbital--> 2 +Number of Porbital--> 2 +Number of Dorbital--> 1 +--------------------------------------------------------------------------- +SUMMARY END + +Mesh 701 +dr 0.01 + Type L N + 0 0 0 + -9.94327772020867e-03 -9.85918654232421e-03 -9.60697963972621e-03 -9.18685682932890e-03 + -8.59915088530649e-03 -7.84432715863854e-03 -6.92298304561070e-03 -5.83584730639540e-03 + -4.58377923515861e-03 -3.16776768343987e-03 -1.58892993885413e-03 1.51489538554255e-04 + 2.05212051968615e-03 4.11146854661615e-03 6.32791660654468e-03 8.69972693610516e-03 + 1.12250429524361e-02 1.39018913072218e-02 1.67281840597182e-02 1.97017209646062e-02 + 2.28201918703632e-02 2.60811792237089e-02 2.94821606755663e-02 3.30205117838811e-02 + 3.66935088085648e-02 4.04983315937700e-02 4.44320665326635e-02 4.84917096098445e-02 + 5.26741695165488e-02 5.69762708337955e-02 6.13947572786592e-02 6.59262950089043e-02 + 7.05674759812690e-02 7.53148213587719e-02 8.01647849624920e-02 8.51137567633801e-02 + 9.01580664097669e-02 9.52939867863480e-02 1.00517737600562e-01 1.05825488992398e-01 + 1.11213365163829e-01 1.16677448024173e-01 1.22213780847873e-01 1.27818371941294e-01 + 1.33487198315299e-01 1.39216209360496e-01 1.45001330522209e-01 1.50838466972318e-01 + 1.56723507275285e-01 1.62652327045782e-01 1.68620792595432e-01 1.74624764566322e-01 + 1.80660101548984e-01 1.86722663682669e-01 1.92808316235775e-01 1.98912933164363e-01 + 2.05032400646739e-01 2.11162620592091e-01 2.17299514121225e-01 2.23439025017404e-01 + 2.29577123145312e-01 2.35709807836143e-01 2.41833111236756e-01 2.47943101620822e-01 + 2.54035886659787e-01 2.60107616651457e-01 2.66154487703876e-01 2.72172744872125e-01 + 2.78158685245527e-01 2.84108660982693e-01 2.90019082291669e-01 2.95886420352397e-01 + 3.01707210178532e-01 3.07478053415575e-01 3.13195621072147e-01 3.18856656181129e-01 + 3.24457976387273e-01 3.29996476457779e-01 3.35469130712271e-01 3.40872995368472e-01 + 3.46205210799829e-01 3.51463003701284e-01 3.56643689159312e-01 3.61744672622338e-01 + 3.66763451767608e-01 3.71697618260627e-01 3.76544859403247e-01 3.81302959666585e-01 + 3.85969802104989e-01 3.90543369647359e-01 3.95021746262258e-01 3.99403117993355e-01 + 4.03685773861961e-01 4.07868106633521e-01 4.11948613445225e-01 4.15925896292063e-01 + 4.19798662368959e-01 4.23565724266882e-01 4.27226000021130e-01 4.30778513010331e-01 + 4.34222391705051e-01 4.37556869265250e-01 4.40781282986244e-01 4.43895073593207e-01 + 4.46897784384692e-01 4.49789060226060e-01 4.52568646394162e-01 4.55236387275076e-01 + 4.57792224917133e-01 4.60236197441966e-01 4.62568437316743e-01 4.64789169491232e-01 + 4.66898709403793e-01 4.68897460860843e-01 4.70785913794790e-01 4.72564641905853e-01 + 4.74234300193611e-01 4.75795622384508e-01 4.77249418261950e-01 4.78596570905936e-01 + 4.79838033849556e-01 4.80974828159953e-01 4.82008039451633e-01 4.82938814840259e-01 + 4.83768359845282e-01 4.84497935249904e-01 4.85128853927072e-01 4.85662477640242e-01 + 4.86100213827761e-01 4.86443512379733e-01 4.86693862416205e-01 4.86852789075482e-01 + 4.86921850321273e-01 4.86902633777237e-01 4.86796753597328e-01 4.86605847380142e-01 + 4.86331573135187e-01 4.85975606308748e-01 4.85539636876670e-01 4.85025366511052e-01 + 4.84434505827431e-01 4.83768771718642e-01 4.83029884781087e-01 4.82219566838677e-01 + 4.81339538569220e-01 4.80391517237507e-01 4.79377214538856e-01 4.78298334556278e-01 + 4.77156571833916e-01 4.75953609568853e-01 4.74691117922776e-01 4.73370752454472e-01 + 4.71994152673540e-01 4.70562940715144e-01 4.69078720135106e-01 4.67543074824081e-01 + 4.65957568039042e-01 4.64323741549820e-01 4.62643114897922e-01 4.60917184764442e-01 + 4.59147424443412e-01 4.57335283416556e-01 4.55482187025039e-01 4.53589536233463e-01 + 4.51658707481054e-01 4.49691052614737e-01 4.47687898898533e-01 4.45650549093571e-01 + 4.43580281602805e-01 4.41478350674457e-01 4.39345986658111e-01 4.37184396307363e-01 + 4.34994763122946e-01 4.32778247730276e-01 4.30535988285474e-01 4.28269100904031e-01 + 4.25978680106441e-01 4.23665799275315e-01 4.21331511118730e-01 4.18976848134796e-01 + 4.16602823072726e-01 4.14210429385992e-01 4.11800641673483e-01 4.09374416104910e-01 + 4.06932690827122e-01 4.04476386348297e-01 4.02006405897446e-01 3.99523635757002e-01 + 3.97028945566706e-01 3.94523188597401e-01 3.92007201993728e-01 3.89481806985152e-01 + 3.86947809065111e-01 3.84405998138462e-01 3.81857148637791e-01 3.79302019609477e-01 + 3.76741354770756e-01 3.74175882539324e-01 3.71606316037332e-01 3.69033353071868e-01 + 3.66457676094289e-01 3.63879952140940e-01 3.61300832758012e-01 3.58720953913432e-01 + 3.56140935898793e-01 3.53561383224430e-01 3.50982884510799e-01 3.48406012379357e-01 + 3.45831323346104e-01 3.43259357720962e-01 3.40690639516045e-01 3.38125676365818e-01 + 3.35564959462010e-01 3.33008963505980e-01 3.30458146681093e-01 3.27912950647434e-01 + 3.25373800560988e-01 3.22841105119178e-01 3.20315256634395e-01 3.17796631136885e-01 + 3.15285588508087e-01 3.12782472645230e-01 3.10287611657693e-01 3.07801318095352e-01 + 3.05323889208827e-01 3.02855607241254e-01 3.00396739750917e-01 2.97947539963781e-01 + 2.95508247154723e-01 2.93079087055942e-01 2.90660272290847e-01 2.88252002831433e-01 + 2.85854466476976e-01 2.83467839351680e-01 2.81092286418715e-01 2.78727962007973e-01 + 2.76375010354709e-01 2.74033566146160e-01 2.71703755073146e-01 2.69385694383621e-01 + 2.67079493435110e-01 2.64785254242984e-01 2.62503072021557e-01 2.60233035715035e-01 + 2.57975228515453e-01 2.55729728364819e-01 2.53496608438846e-01 2.51275937609772e-01 + 2.49067780885972e-01 2.46872199826253e-01 2.44689252926917e-01 2.42518995979925e-01 + 2.40361482400730e-01 2.38216763524580e-01 2.36084888870381e-01 2.33965906371439e-01 + 2.31859862572715e-01 2.29766802794456e-01 2.27686771262351e-01 2.25619811204649e-01 + 2.23565964916908e-01 2.21525273795301e-01 2.19497778339689e-01 2.17483518127843e-01 + 2.15482531762467e-01 2.13494856792849e-01 2.11520529613161e-01 2.09559585339602e-01 + 2.07612057668698e-01 2.05677978719247e-01 2.03757378860436e-01 2.01850286528789e-01 + 1.99956728036631e-01 1.98076727374791e-01 1.96210306012279e-01 1.94357482695646e-01 + 1.92518273250684e-01 1.90692690389104e-01 1.88880743522668e-01 1.87082438587216e-01 + 1.85297777878848e-01 1.83526759904390e-01 1.81769379248118e-01 1.80025626456493e-01 + 1.78295487942519e-01 1.76578945911054e-01 1.74875978306263e-01 1.73186558782091e-01 + 1.71510656696469e-01 1.69848237129675e-01 1.68199260927055e-01 1.66563684766060e-01 + 1.64941461247311e-01 1.63332539009177e-01 1.61736862865117e-01 1.60154373962806e-01 + 1.58585009963886e-01 1.57028705242946e-01 1.55485391104185e-01 1.53954996014026e-01 + 1.52437445847807e-01 1.50932664148542e-01 1.49440572395628e-01 1.47961090281298e-01 + 1.46494135992525e-01 1.45039626496067e-01 1.43597477824273e-01 1.42167605359327e-01 + 1.40749924113548e-01 1.39344349003489e-01 1.37950795115565e-01 1.36569177961072e-01 + 1.35199413718536e-01 1.33841419461474e-01 1.32495113369752e-01 1.31160414922931e-01 + 1.29837245074101e-01 1.28525526402957e-01 1.27225183246989e-01 1.25936141809932e-01 + 1.24658330246776e-01 1.23391678724901e-01 1.22136119461082e-01 1.20891586734363e-01 + 1.19658016874997e-01 1.18435348229887e-01 1.17223521105155e-01 1.16022477686702e-01 + 1.14832161939796e-01 1.13652519488918e-01 1.12483497479289e-01 1.11325044421645e-01 + 1.10177110021979e-01 1.09039644998106e-01 1.07912600885014e-01 1.06795929831064e-01 + 1.05689584387167e-01 1.04593517291135e-01 1.03507681249424e-01 1.02432028718510e-01 + 1.01366511688124e-01 1.00311081468552e-01 9.92656884841469e-02 9.82302820751368e-02 + 9.72048103097316e-02 9.61892198084055e-02 9.51834555821310e-02 9.41874608861815e-02 + 9.32011770909777e-02 9.22245435712779e-02 9.12574976148335e-02 9.02999743514445e-02 + 8.93519067031473e-02 8.84132253560651e-02 8.74838587542437e-02 8.65637331155799e-02 + 8.56527724697449e-02 8.47508987177862e-02 8.38580317128938e-02 8.29740893616092e-02 + 8.20989877445638e-02 8.12326412556489e-02 8.03749627583451e-02 7.95258637577771e-02 + 7.86852545869124e-02 7.78530446051901e-02 7.70291424077501e-02 7.62134560433345e-02 + 7.54058932388528e-02 7.46063616285417e-02 7.38147689856106e-02 7.30310234542398e-02 + 7.22550337797999e-02 7.14867095351802e-02 7.07259613411502e-02 6.99727010787415e-02 + 6.92268420917099e-02 6.84882993772382e-02 6.77569897631505e-02 6.70328320700365e-02 + 6.63157472568355e-02 6.56056585485768e-02 6.49024915451539e-02 6.42061743101829e-02 + 6.35166374391856e-02 6.28338141065379e-02 6.21576400908198e-02 6.14880537784084e-02 + 6.08249961453651e-02 6.01684107178662e-02 5.95182435116335e-02 5.88744429510154e-02 + 5.82369597685624e-02 5.76057468861226e-02 5.69807592786557e-02 5.63619538221262e-02 + 5.57492891269848e-02 5.51427253588793e-02 5.45422240483577e-02 5.39477478914244e-02 + 5.33592605428961e-02 5.27767264045695e-02 5.22001104102568e-02 5.16293778097742e-02 + 5.10644939539734e-02 5.05054240828948e-02 4.99521331190857e-02 4.94045854680786e-02 + 4.88627448279489e-02 4.83265740097867e-02 4.77960347708082e-02 4.72710876617086e-02 + 4.67516918897242e-02 4.62378051987145e-02 4.57293837674148e-02 4.52263821268327e-02 + 4.47287530975793e-02 4.42364477477296e-02 4.37494153716171e-02 4.32676034897583e-02 + 4.27909578699055e-02 4.23194225690202e-02 4.18529399957606e-02 4.13914509928787e-02 + 4.09348949387299e-02 4.04832098669183e-02 4.00363326029224e-02 3.95941989163846e-02 + 3.91567436875970e-02 3.87239010865792e-02 3.82956047630219e-02 3.78717880452639e-02 + 3.74523841463858e-02 3.70373263754302e-02 3.66265483517090e-02 3.62199842201304e-02 + 3.58175688654612e-02 3.54192381234524e-02 3.50249289867849e-02 3.46345798038352e-02 + 3.42481304683341e-02 3.38655225980712e-02 3.34866997009043e-02 3.31116073264517e-02 + 3.27401932019789e-02 3.23724073511439e-02 3.20082021944249e-02 3.16475326302289e-02 + 3.12903560958643e-02 3.09366326077505e-02 3.05863247804356e-02 3.02393978241969e-02 + 2.98958195211998e-02 2.95555601804005e-02 2.92185925715761e-02 2.88848918390696e-02 + 2.85544353960299e-02 2.82272028001157e-02 2.79031756118081e-02 2.75823372366495e-02 + 2.72646727528753e-02 2.69501687260533e-02 2.66388130124674e-02 2.63305945530949e-02 + 2.60255031601188e-02 2.57235292979915e-02 2.54246638611206e-02 2.51288979502836e-02 + 2.48362226498957e-02 2.45466288082460e-02 2.42601068227993e-02 2.39766464326080e-02 + 2.36962365198215e-02 2.34188649221926e-02 2.31445182583794e-02 2.28731817677239e-02 + 2.26048391660515e-02 2.23394725188844e-02 2.20770621333014e-02 2.18175864694958e-02 + 2.15610220729007e-02 2.13073435275522e-02 2.10565234311628e-02 2.08085323921658e-02 + 2.05633390487841e-02 2.03209101099664e-02 2.00812104178203e-02 1.98442030309674e-02 + 1.96098493280429e-02 1.93781091303653e-02 1.91489408426164e-02 1.89223016101968e-02 + 1.86981474917536e-02 1.84764336452346e-02 1.82571145256806e-02 1.80401440928551e-02 + 1.78254760267079e-02 1.76130639485872e-02 1.74028616460554e-02 1.71948232991189e-02 + 1.69889037056642e-02 1.67850585038913e-02 1.65832443895568e-02 1.63834193258818e-02 + 1.61855427440416e-02 1.59895757322380e-02 1.57954812114566e-02 1.56032240961325e-02 + 1.54127714380857e-02 1.52240925522415e-02 1.50371591228214e-02 1.48519452888702e-02 + 1.46684277081807e-02 1.44865855988794e-02 1.43064007581483e-02 1.41278575577764e-02 + 1.39509429164528e-02 1.37756462489389e-02 1.36019593924776e-02 1.34298765110197e-02 + 1.32593939780596e-02 1.30905102390875e-02 1.29232256548572e-02 1.27575423268672e-02 + 1.25934639066252e-02 1.24309953904293e-02 1.22701429015516e-02 1.21109134618349e-02 + 1.19533147548296e-02 1.17973548826883e-02 1.16430421191097e-02 1.14903846606710e-02 + 1.13393903789203e-02 1.11900665756047e-02 1.10424197433944e-02 1.08964553344254e-02 + 1.07521775389218e-02 1.06095890760764e-02 1.04686909992668e-02 1.03294825175573e-02 + 1.01919608352968e-02 1.00561210114612e-02 9.92195584021247e-03 9.78945575395107e-03 + 9.65860874993899e-03 9.52940034134789e-03 9.40181353336397e-03 9.27582882474743e-03 + 9.15142423500435e-03 9.02857535708813e-03 8.90725543530484e-03 8.78743546785575e-03 + 8.66908433321282e-03 8.55216893929208e-03 8.43665439416594e-03 8.32250419684410e-03 + 8.20968044645000e-03 8.09814406793566e-03 7.98785505230669e-03 7.87877270917669e-03 + 7.77085592933803e-03 7.66406345492293e-03 7.55835415463889e-03 7.45368730149438e-03 + 7.35002285038711e-03 7.24732171290674e-03 7.14554602670944e-03 7.04465941684964e-03 + 6.94462724650992e-03 6.84541685464574e-03 6.74699777816612e-03 6.64934195639275e-03 + 6.55242391568959e-03 6.45622093231969e-03 6.36071317177393e-03 6.26588380301959e-03 + 6.17171908633756e-03 6.07820843365056e-03 5.98534444049202e-03 5.89312288901990e-03 + 5.80154272174537e-03 5.71060598591386e-03 5.62031774874836e-03 5.53068598403751e-03 + 5.44172143082098e-03 5.35343742518955e-03 5.26584970647763e-03 5.17897619937304e-03 + 5.09283677370852e-03 5.00745298392177e-03 4.92284779037765e-03 4.83904526493795e-03 + 4.75607028333004e-03 4.67394820701719e-03 4.59270455739481e-03 4.51236468523945e-03 + 4.43295343841044e-03 4.35449483085347e-03 4.27701171597645e-03 4.20052546746104e-03 + 4.12505567054126e-03 4.05061982671732e-03 3.97723307478622e-03 3.90490793095431e-03 + 3.83365405065713e-03 3.76347801454580e-03 3.69438314091019e-03 3.62636932659871e-03 + 3.55943291826182e-03 3.49356661549893e-03 3.42875940721928e-03 3.36499654225021e-03 + 3.30225953493162e-03 3.24052620613560e-03 3.17977075984159e-03 3.11996389508485e-03 + 3.06107295278277e-03 3.00306209663119e-03 2.94589252695405e-03 2.88952272608837e-03 + 2.83390873359515e-03 2.77900444930464e-03 2.72476196194122e-03 2.67113190082287e-03 + 2.61806380790123e-03 2.56550652720025e-03 2.51340860852696e-03 2.46171872216760e-03 + 2.41038608114962e-03 2.35936086754514e-03 2.30859465921498e-03 2.25804085334698e-03 + 2.20765508312558e-03 2.15739562388642e-03 2.10722378515509e-03 2.05710428504591e-03 + 2.00700560360556e-03 1.95690031182185e-03 1.90676537318477e-03 1.85658241488006e-03 + 1.80633796591486e-03 1.75602365971853e-03 1.70563639902870e-03 1.65517848115865e-03 + 1.60465768204693e-03 1.55408729781113e-03 1.50348614286106e-03 1.45287850397020e-03 + 1.40229405005704e-03 1.35176769778302e-03 1.30133943343322e-03 1.25105409190198e-03 + 1.20096109395949e-03 1.15111414332051e-03 1.10157088537314e-03 1.05239252974785e-03 + 1.00364343921588e-03 9.55390687694521e-04 9.07703590406950e-04 8.60653209489703e-04 + 8.14311838563007e-04 7.68752469972291e-04 7.24048248576693e-04 6.80271916094293e-04 + 6.37495250119417e-04 5.95788501999289e-04 5.55219837795823e-04 5.15854786564848e-04 + 4.77755700156758e-04 4.40981228681693e-04 4.05585815687052e-04 3.71619216969593e-04 + 3.39126046784780e-04 3.08145355028539e-04 2.78710238747908e-04 2.50847491093770e-04 + 2.24577290557086e-04 1.99912933039070e-04 1.76860608989630e-04 1.55419227516973e-04 + 1.35580289023449e-04 1.17327807560570e-04 1.00638283725655e-04 8.54807285428347e-05 + 7.18167383904636e-05 5.96006206505428e-05 4.87795693770002e-05 3.92938898993686e-05 + 3.10772709121582e-05 2.40571022418267e-05 1.81548361372246e-05 1.32863896038137e-05 + 9.36258499266726e-06 6.28962576733244e-06 3.96960411018013e-06 2.30103678971205e-06 + 1.17942550463845e-06 4.97837735628967e-07 1.47503990664075e-07 1.84272080442528e-08 + -0.00000000000000e+00 + Type L N + 0 0 1 + 2.58326756381651e+00 2.58284915498767e+00 2.58159413774432e+00 2.57950314016808e+00 + 2.57657721023100e+00 2.57281781753414e+00 2.56822685571112e+00 2.56280664546621e+00 + 2.55655993820863e+00 2.54948992023663e+00 2.54160021741753e+00 2.53289490030285e+00 + 2.52337848961115e+00 2.51305596200523e+00 2.50193275608498e+00 2.49001477851260e+00 + 2.47730841018278e+00 2.46382051234743e+00 2.44955843260187e+00 2.43453001063779e+00 + 2.41874358366748e+00 2.40220799142366e+00 2.38493258064006e+00 2.36692720891924e+00 + 2.34820224789687e+00 2.32876858561420e+00 2.30863762801492e+00 2.28782129948660e+00 + 2.26633204237250e+00 2.24418281538528e+00 2.22138709086037e+00 2.19795885079417e+00 + 2.17391258161923e+00 2.14926326767667e+00 2.12402638335421e+00 2.09821788386679e+00 + 2.07185419466512e+00 2.04495219946677e+00 2.01752922691295e+00 1.98960303586325e+00 + 1.96119179934936e+00 1.93231408721738e+00 1.90298884749714e+00 1.87323538654470e+00 + 1.84307334801242e+00 1.81252269070836e+00 1.78160366541369e+00 1.75033679073337e+00 + 1.71874282806136e+00 1.68684275574688e+00 1.65465774255289e+00 1.62220912050229e+00 + 1.58951835721032e+00 1.55660702780457e+00 1.52349678653571e+00 1.49020933818342e+00 + 1.45676640936232e+00 1.42318971983236e+00 1.38950095391727e+00 1.35572173213287e+00 + 1.32187358312455e+00 1.28797791601042e+00 1.25405599322272e+00 1.22012890393593e+00 + 1.18621753816532e+00 1.15234256161419e+00 1.11852439134263e+00 1.08478317232413e+00 + 1.05113875495044e+00 1.01761067353776e+00 9.84218125881126e-01 9.50979953896079e-01 + 9.17914625380107e-01 8.85040216918839e-01 8.52374397954922e-01 8.19934416030462e-01 + 7.87737083206927e-01 7.55798763659787e-01 7.24135362438625e-01 6.92762315377382e-01 + 6.61694580133544e-01 6.30946628329741e-01 6.00532438766208e-01 5.70465491668108e-01 + 5.40758763927680e-01 5.11424725297705e-01 4.82475335489843e-01 4.53922042128962e-01 + 4.25775779512778e-01 3.98046968124802e-01 3.70745514847866e-01 3.43880813825336e-01 + 3.17461747917417e-01 2.91496690700869e-01 2.65993508961735e-01 2.40959565632548e-01 + 2.16401723127671e-01 1.92326347033090e-01 1.68739310109927e-01 1.45645996574264e-01 + 1.23051306619405e-01 1.00959661150509e-01 7.93750067054406e-02 5.83008205398149e-02 + 3.77401158582995e-02 1.76954471784557e-02 -1.83108418248401e-03 -2.08378245034303e-02 + -3.93235619394259e-02 -5.72875206836221e-02 -7.47293550054895e-02 -9.16491431562002e-02 + -1.08047381129103e-01 -1.23924976260508e-01 -1.39283240653665e-01 -1.54123884406850e-01 + -1.68449008624924e-01 -1.82261098192572e-01 -1.95563014286748e-01 -2.08357986605554e-01 + -2.20649605290984e-01 -2.32441812523568e-01 -2.43738893768008e-01 -2.54545468650373e-01 + -2.64866481449318e-01 -2.74707191186056e-01 -2.84073161300454e-01 -2.92970248903620e-01 + -3.01404593600590e-01 -3.09382605880326e-01 -3.16910955073970e-01 -3.23996556886314e-01 + -3.30646560509529e-01 -3.36868335332468e-01 -3.42669457263082e-01 -3.48057694685850e-01 + -3.53040994080317e-01 -3.57627465331071e-01 -3.61825366763485e-01 -3.65643089943470e-01 + -3.69089144283109e-01 -3.72172141497462e-01 -3.74900779960918e-01 -3.77283829014252e-01 + -3.79330113275918e-01 -3.81048497013138e-01 -3.82447868629897e-01 -3.83537125330095e-01 + -3.84325158014765e-01 -3.84820836472455e-01 -3.85032994921569e-01 -3.84970417962661e-01 + -3.84641826997404e-01 -3.84055867169174e-01 -3.83221094877948e-01 -3.82145965919503e-01 + -3.80838824295756e-01 -3.79307891739509e-01 -3.77561257992897e-01 -3.75606871874525e-01 + -3.73452533165621e-01 -3.71105885340583e-01 -3.68574409162141e-01 -3.65865417155928e-01 + -3.62986048973739e-01 -3.59943267649070e-01 -3.56743856742832e-01 -3.53394418371371e-01 + -3.49901372103249e-01 -3.46270954705615e-01 -3.42509220715503e-01 -3.38622043806126e-01 + -3.34615118913125e-01 -3.30493965080963e-01 -3.26263928985151e-01 -3.21930189081880e-01 + -3.17497760332868e-01 -3.12971499449928e-01 -3.08356110600892e-01 -3.03656151516138e-01 + -2.98876039933046e-01 -2.94020060314369e-01 -2.89092370775602e-01 -2.84097010156141e-01 + -2.79037905169193e-01 -2.73918877566179e-01 -2.68743651252586e-01 -2.63515859294015e-01 + -2.58239050753452e-01 -2.52916697303492e-01 -2.47552199560449e-01 -2.42148893090905e-01 + -2.36710054045191e-01 -2.31238904376689e-01 -2.25738616610443e-01 -2.20212318129499e-01 + -2.14663094952536e-01 -2.09093994981632e-01 -2.03508030704494e-01 -1.97908181340937e-01 + -1.92297394429010e-01 -1.86678586851629e-01 -1.81054645310088e-01 -1.75428426256115e-01 + -1.69802755299340e-01 -1.64180426111990e-01 -1.58564198857334e-01 -1.52956798172819e-01 + -1.47360910742905e-01 -1.41779182500331e-01 -1.36214215497823e-01 -1.30668564495183e-01 + -1.25144733309073e-01 -1.19645170974805e-01 -1.14172267770907e-01 -1.08728351158207e-01 + -1.03315681685655e-01 -9.79364489150797e-02 -9.25927674165240e-02 -8.72866728848239e-02 + -8.20201184265480e-02 -7.67949710644878e-02 -7.16130085044694e-02 -6.64759162064435e-02 + -6.13852847986056e-02 -5.63426078697366e-02 -5.13492801710773e-02 -4.64065962548937e-02 + -4.15157495724858e-02 -3.66778320498068e-02 -3.18938341541026e-02 -2.71646454601393e-02 + -2.24910557196607e-02 -1.78737564328038e-02 -1.33133429152982e-02 -8.81031685046367e-03 + -4.36508931034060e-03 2.20157742453687e-05 4.35075771917554e-03 8.62097479665095e-03 + 1.28325795812421e-02 1.69855539681545e-02 2.10799439025669e-02 2.51158538616193e-02 + 2.90934411329270e-02 3.30129099353823e-02 3.68745054294298e-02 4.06785076650064e-02 + 4.44252255158338e-02 4.81149906488347e-02 5.17481515770216e-02 5.53250678433622e-02 + 5.88461043818054e-02 6.23116260999275e-02 6.57219927254931e-02 6.90775539566933e-02 + 7.23786449529029e-02 7.56255821995672e-02 7.88186597772652e-02 8.19581460611877e-02 + 8.50442808732151e-02 8.80772731045343e-02 9.10572988223534e-02 9.39844998697536e-02 + 9.68589829631698e-02 9.96808192873917e-02 1.02450044583419e-01 1.05166659720002e-01 + 1.07830631735312e-01 1.10441895330943e-01 1.13000354796394e-01 1.15505886338361e-01 + 1.17958340785611e-01 1.20357546636935e-01 1.22703313416746e-01 1.24995435300295e-01 + 1.27233694968283e-01 1.29417867648802e-01 1.31547725303150e-01 1.33623040911084e-01 + 1.35643592810507e-01 1.37609169046457e-01 1.39519571684602e-01 1.41374621045152e-01 + 1.43174159814261e-01 1.44918056991557e-01 1.46606211634382e-01 1.48238556361622e-01 + 1.49815060582686e-01 1.51335733420147e-01 1.52800626297820e-01 1.54209835169578e-01 + 1.55563502367905e-01 1.56861818055126e-01 1.58105021264281e-01 1.59293400520790e-01 + 1.60427294040235e-01 1.61507089501858e-01 1.62533223401565e-01 1.63506179992380e-01 + 1.64426489824369e-01 1.65294727899911e-01 1.66111511463993e-01 1.66877497452661e-01 + 1.67593379626074e-01 1.68259885415572e-01 1.68877772516869e-01 1.69447825263839e-01 + 1.69970850819344e-01 1.70447675221225e-01 1.70879139322762e-01 1.71266094667836e-01 + 1.71609399341388e-01 1.71909913835887e-01 1.72168496974110e-01 1.72386001927780e-01 + 1.72563272370480e-01 1.72701138801702e-01 1.72800415077014e-01 1.72861895177094e-01 + 1.72886350245827e-01 1.72874525924826e-01 1.72827140008619e-01 1.72744880441434e-01 + 1.72628403672950e-01 1.72478333386715e-01 1.72295259611104e-01 1.72079738218770e-01 + 1.71832290816619e-01 1.71553405024336e-01 1.71243535135617e-01 1.70903103152325e-01 + 1.70532500178119e-01 1.70132088154427e-01 1.69702201918247e-01 1.69243151558032e-01 + 1.68755225040958e-01 1.68238691082160e-01 1.67693802224147e-01 1.67120798092533e-01 + 1.66519908792488e-01 1.65891358408949e-01 1.65235368572659e-01 1.64552162053442e-01 + 1.63841966341971e-01 1.63105017181374e-01 1.62341562010646e-01 1.61551863282726e-01 + 1.60736201621420e-01 1.59894878783017e-01 1.59028220390452e-01 1.58136578410180e-01 + 1.57220333344578e-01 1.56279896115558e-01 1.55315709618227e-01 1.54328249926774e-01 + 1.53318027138288e-01 1.52285585843878e-01 1.51231505220245e-01 1.50156398738680e-01 + 1.49060913492358e-01 1.47945729146645e-01 1.46811556520953e-01 1.45659135814409e-01 + 1.44489234491231e-01 1.43302644845139e-01 1.42100181265394e-01 1.40882677230107e-01 + 1.39650982055248e-01 1.38405957430262e-01 1.37148473773443e-01 1.35879406442032e-01 + 1.34599631833595e-01 1.33310023416323e-01 1.32011447726763e-01 1.30704760373839e-01 + 1.29390802088076e-01 1.28070394854564e-01 1.26744338167471e-01 1.25413405442769e-01 + 1.24078340624387e-01 1.22739855017142e-01 1.21398624377647e-01 1.20055286291934e-01 + 1.18710437865735e-01 1.17364633750380e-01 1.16018384523994e-01 1.14672155444241e-01 + 1.13326365585237e-01 1.11981387367536e-01 1.10637546486231e-01 1.09295122238345e-01 + 1.07954348246781e-01 1.06615413574204e-01 1.05278464216430e-01 1.03943604961156e-01 + 1.02610901594282e-01 1.01280383432672e-01 9.99520461589533e-02 9.86258549310160e-02 + 9.73017477361364e-02 9.59796389572258e-02 9.46594231166164e-02 9.33409787610151e-02 + 9.20241724498471e-02 9.07088628081688e-02 8.93949046046616e-02 8.80821528149432e-02 + 8.67704666305419e-02 8.54597133743856e-02 8.41497722845356e-02 8.28405381291657e-02 + 8.15319246174078e-02 8.02238675726625e-02 7.89163278372817e-02 7.76092938801416e-02 + 7.63027840815194e-02 7.49968486728448e-02 7.36915713122636e-02 7.23870702805269e-02 + 7.10834992854348e-02 6.97810478669117e-02 6.84799413987199e-02 6.71804406867801e-02 + 6.58828411680571e-02 6.45874717179011e-02 6.32946930776182e-02 6.20048959177966e-02 + 6.07184985565385e-02 5.94359443551740e-02 5.81576988172545e-02 5.68842464195910e-02 + 5.56160872067901e-02 5.43537331831316e-02 5.30977045376845e-02 5.18485257402708e-02 + 5.06067215472282e-02 4.93728129568807e-02 4.81473131552050e-02 4.69307234923511e-02 + 4.57235295304507e-02 4.45261972025323e-02 4.33391691213372e-02 4.21628610754488e-02 + 4.09976587483632e-02 3.98439146940255e-02 3.87019455998883e-02 3.75720298657931e-02 + 3.64544055239239e-02 3.53492685217788e-02 3.42567713865791e-02 3.31770222858235e-02 + 3.21100844948244e-02 3.10559762780791e-02 3.00146711872729e-02 2.89860987746080e-02 + 2.79701457160618e-02 2.69666573351230e-02 2.59754395135875e-02 2.49962609721405e-02 + 2.40288558997746e-02 2.30729269075868e-02 2.21281482792437e-02 2.11941694873997e-02 + 2.02706189426495e-02 1.93571079392046e-02 1.84532347594427e-02 1.75585888978049e-02 + 1.66727553632127e-02 1.57953190182845e-02 1.49258689131363e-02 1.40640025714682e-02 + 1.32093301869756e-02 1.23614786888667e-02 1.15200956364205e-02 1.06848529040641e-02 + 9.85545012038223e-03 9.03161782676119e-03 8.21312032400857e-03 7.39975817824425e-03 + 6.59137036060652e-03 5.78783599882064e-03 4.98907572241274e-03 4.19505258727317e-03 + 3.40577256935391e-03 2.62128462147443e-03 1.84168029147601e-03 1.06709290426297e-03 + 2.97696314560228e-04 -4.66296758550685e-04 -1.22463680010389e-03 -1.97703995150643e-03 + -2.72319082352029e-03 -3.46274564327433e-03 -4.19533570523312e-03 -4.92057109294587e-03 + -5.63804463561249e-03 -6.34733606104528e-03 -7.04801630453088e-03 -7.73965193139120e-03 + -8.42180962975378e-03 -9.09406072916558e-03 -9.75598570024278e-03 -1.04071785905370e-02 + -1.10472513522311e-02 -1.16758380181364e-02 -1.22925986837577e-02 -1.28972232549035e-02 + -1.34894349224266e-02 -1.40689933281828e-02 -1.46356973891482e-02 -1.51893877498349e-02 + -1.57299488366412e-02 -1.62573104915479e-02 -1.67714491665855e-02 -1.72723886647078e-02 + -1.77602004170821e-02 -1.82350032913013e-02 -1.86969629295871e-02 -1.91462906206608e-02 + -1.95832417135450e-02 -2.00081135860947e-02 -2.04212431854861e-02 -2.08230041621886e-02 + -2.12138036230397e-02 -2.15940785329283e-02 -2.19642917982013e-02 -2.23249280682165e-02 + -2.26764892944496e-02 -2.30194900891667e-02 -2.33544529278987e-02 -2.36819032417541e-02 + -2.40023644469772e-02 -2.43163529600756e-02 -2.46243732472957e-02 -2.49269129572094e-02 + -2.52244381846931e-02 -2.55173889136191e-02 -2.58061746841661e-02 -2.60911705287778e-02 + -2.63727132184975e-02 -2.66510978586715e-02 -2.69265748699035e-02 -2.71993473866475e-02 + -2.74695691020110e-02 -2.77373425832129e-02 -2.80027180777602e-02 -2.82656928257930e-02 + -2.85262108892634e-02 -2.87841635036870e-02 -2.90393899531904e-02 -2.92916789645264e-02 + -2.95407706106694e-02 -2.97863587096159e-02 -3.00280936991102e-02 -3.02655859632770e-02 + -3.04984095825822e-02 -3.07261064742380e-02 -3.09481908861342e-02 -3.11641542036702e-02 + -3.13734700255142e-02 -3.15755994613597e-02 -3.17699966022213e-02 -3.19561141117313e-02 + -3.21334088852939e-02 -3.23013477228413e-02 -3.24594129603330e-02 -3.26071080050457e-02 + -3.27439627201398e-02 -3.28695386049299e-02 -3.29834337187673e-02 -3.30852872983986e-02 + -3.31747840211451e-02 -3.32516578691636e-02 -3.33156955534463e-02 -3.33667394600044e-02 + -3.34046900848745e-02 -3.34295079291186e-02 -3.34412148298383e-02 -3.34398947083366e-02 + -3.34256937218988e-02 -3.33988198111753e-02 -3.33595416407817e-02 -3.33081869364465e-02 + -3.32451402277593e-02 -3.31708400112728e-02 -3.30857753543238e-02 -3.29904819654084e-02 + -3.28855377622380e-02 -3.27715579736417e-02 -3.26491898162344e-02 -3.25191067912054e-02 + -3.23820026506082e-02 -3.22385850861774e-02 -3.20895691968591e-02 -3.19356707939317e-02 + -3.17775996047653e-02 -3.16160524378949e-02 -3.14517063731592e-02 -3.12852120411492e-02 + -3.11171870561365e-02 -3.09482096659708e-02 -3.07788126811925e-02 -3.06094777437624e-02 + -3.04406299934224e-02 -3.02726331867426e-02 -3.01057853204411e-02 -2.99403148065860e-02 + -2.97763772428393e-02 -2.96140528160376e-02 -2.94533443721220e-02 -2.92941761798275e-02 + -2.91363934096147e-02 -2.89797623431678e-02 -2.88239713224158e-02 -2.86686324405303e-02 + -2.85132839707632e-02 -2.83573935223726e-02 -2.82003619062948e-02 -2.80415276867296e-02 + -2.78801723884591e-02 -2.77155263235698e-02 -2.75467749953792e-02 -2.73730660317904e-02 + -2.71935165951055e-02 -2.70072212105376e-02 -2.68132599513414e-02 -2.66107069146487e-02 + -2.63986389188166e-02 -2.61761443503727e-02 -2.59423320865278e-02 -2.56963404177263e-02 + -2.54373458938478e-02 -2.51645720174649e-02 -2.48772977080100e-02 -2.45748654618099e-02 + -2.42566891347070e-02 -2.39222612763841e-02 -2.35711599485364e-02 -2.32030549626611e-02 + -2.28177134774424e-02 -2.24150049004537e-02 -2.19949050441585e-02 -2.15574994919080e-02 + -2.11029861357699e-02 -2.06316768545344e-02 -2.01439983070633e-02 -1.96404918232287e-02 + -1.91218123819764e-02 -1.85887266734645e-02 -1.80421102497382e-02 -1.74829437759105e-02 + -1.69123084012907e-02 -1.63313802772622e-02 -1.57414242558864e-02 -1.51437868101656e-02 + -1.45398882235448e-02 -1.39312141025358e-02 -1.33193062722419e-02 -1.27057531199948e-02 + -1.20921794572538e-02 -1.14802359742922e-02 -1.08715883660025e-02 -1.02679062103162e-02 + -9.67085168327033e-03 -9.08206819659777e-03 -8.50316904488216e-03 -7.93572614977760e-03 + -7.38125898854153e-03 -6.84122379316935e-03 -6.31700310475603e-03 -5.80989576535649e-03 + -5.32110742658397e-03 -4.85174165051241e-03 -4.40279167413871e-03 -3.97513290377885e-03 + -3.56951620032685e-03 -3.18656201036740e-03 -2.82675539172528e-03 -2.49044197522985e-03 + -2.17782489731779e-03 -1.88896273064240e-03 -1.62376843217886e-03 -1.38200932045978e-03 + -1.16330808562819e-03 -9.67144827985093e-04 -7.92860112754626e-04 -6.39659020892191e-04 + -5.06616168046014e-04 -3.92681656274132e-04 -2.96687915879442e-04 -2.17357387842824e-04 + -1.53310990832120e-04 -1.03077310711045e-04 -6.51024449174839e-05 -3.77604290567946e-05 + -1.93641686308397e-05 -8.17679498406123e-06 -2.42336139003565e-06 -3.02792678254376e-07 + 0.00000000000000e+00 + Type L N + 0 1 0 + -0.00000000000000e+00 2.96516755813224e-03 5.93129363858882e-03 8.89933355101735e-03 + 1.18702361932509e-02 1.48449408791593e-02 1.78243742067598e-02 2.08094469795939e-02 + 2.38010511940241e-02 2.68000571046715e-02 2.98073103797053e-02 3.28236293571044e-02 + 3.58498024123579e-02 3.88865854473486e-02 4.19346995093815e-02 4.49948285484903e-02 + 4.80676173202714e-02 5.11536694405799e-02 5.42535455974722e-02 5.73677619248049e-02 + 6.04967885409117e-02 6.36410482547805e-02 6.68009154411528e-02 6.99767150849782e-02 + 7.31687219946756e-02 7.63771601827009e-02 7.96022024109938e-02 8.28439698979862e-02 + 8.61025321830109e-02 8.93779071431523e-02 9.26700611568355e-02 9.59789094077756e-02 + 9.93043163222871e-02 1.02646096132409e-01 1.06004013556825e-01 1.09377784591165e-01 + 1.12767077398938e-01 1.16171513294131e-01 1.19590667806305e-01 1.23024071818987e-01 + 1.26471212772111e-01 1.29931535919346e-01 1.33404445631324e-01 1.36889306735967e-01 + 1.40385445887429e-01 1.43892152955526e-01 1.47408682427930e-01 1.50934254817920e-01 + 1.54468058070952e-01 1.58009248963945e-01 1.61556954491749e-01 1.65110273235938e-01 + 1.68668276711704e-01 1.72230010689366e-01 1.75794496487666e-01 1.79360732236767e-01 + 1.82927694109534e-01 1.86494337520417e-01 1.90059598291899e-01 1.93622393789137e-01 + 1.97181624024069e-01 2.00736172730817e-01 2.04284908414792e-01 2.07826685378402e-01 + 2.11360344726709e-01 2.14884715356788e-01 2.18398614934864e-01 2.21900850865586e-01 + 2.25390221258012e-01 2.28865515892991e-01 2.32325517196745e-01 2.35769001225416e-01 + 2.39194738665312e-01 2.42601495853420e-01 2.45988035822593e-01 2.49353119375526e-01 + 2.52695506191307e-01 2.56013955967984e-01 2.59307229604092e-01 2.62574090421647e-01 + 2.65813305432549e-01 2.69023646649778e-01 2.72203892444133e-01 2.75352828946674e-01 + 2.78469251496310e-01 2.81551966131348e-01 2.84599791123117e-01 2.87611558549098e-01 + 2.90586115902307e-01 2.93522327733034e-01 2.96419077318367e-01 2.99275268354320e-01 + 3.02089826664815e-01 3.04861701921172e-01 3.07589869365309e-01 3.10273331529359e-01 + 3.12911119944024e-01 3.15502296827656e-01 3.18045956747751e-01 3.20541228246366e-01 + 3.22987275420791e-01 3.25383299450778e-01 3.27728540063605e-01 3.30022276928349e-01 + 3.32263830970900e-01 3.34452565601469e-01 3.36587887846653e-01 3.38669249378506e-01 + 3.40696147433494e-01 3.42668125614738e-01 3.44584774571529e-01 3.46445732550710e-01 + 3.48250685815254e-01 3.49999368926045e-01 3.51691564883718e-01 3.53327105128165e-01 + 3.54905869394217e-01 3.56427785422853e-01 3.57892828528184e-01 3.59301021021358e-01 + 3.60652431493440e-01 3.61947173960196e-01 3.63185406872613e-01 3.64367331997839e-01 + 3.65493193176059e-01 3.66563274959627e-01 3.67577901141539e-01 3.68537433181032e-01 + 3.69442268534762e-01 3.70292838902614e-01 3.71089608397725e-01 3.71833071650776e-01 + 3.72523751859010e-01 3.73162198790727e-01 3.73748986756281e-01 3.74284712556736e-01 + 3.74769993421432e-01 3.75205464945695e-01 3.75591779039845e-01 3.75929601900480e-01 + 3.76219612014762e-01 3.76462498208098e-01 3.76658957745205e-01 3.76809694494065e-01 + 3.76915417161728e-01 3.76976837610292e-01 3.76994669260744e-01 3.76969625591582e-01 + 3.76902418738395e-01 3.76793758199723e-01 3.76644349653707e-01 3.76454893889123e-01 + 3.76226085853501e-01 3.75958613820139e-01 3.75653158674850e-01 3.75310393322413e-01 + 3.74930982211760e-01 3.74515580978030e-01 3.74064836198782e-01 3.73579385260781e-01 + 3.73059856333002e-01 3.72506868440717e-01 3.71921031634838e-01 3.71302947250013e-01 + 3.70653208244417e-01 3.69972399613613e-01 3.69261098870425e-01 3.68519876582385e-01 + 3.67749296957972e-01 3.66949918472672e-01 3.66122294525707e-01 3.65266974118208e-01 + 3.64384502543626e-01 3.63475422081240e-01 3.62540272683808e-01 3.61579592650618e-01 + 3.60593919277525e-01 3.59583789475928e-01 3.58549740353105e-01 3.57492309746808e-01 + 3.56412036707615e-01 3.55309461923113e-01 3.54185128078701e-01 3.53039580150449e-01 + 3.51873365626229e-01 3.50687034652070e-01 3.49481140101480e-01 3.48256237566275e-01 + 3.47012885268249e-01 3.45751643891819e-01 3.44473076338578e-01 3.43177747405447e-01 + 3.41866223388887e-01 3.40539071618346e-01 3.39196859922798e-01 3.37840156034904e-01 + 3.36469526937894e-01 3.35085538160838e-01 3.33688753028477e-01 3.32279731872185e-01 + 3.30859031209042e-01 3.29427202896278e-01 3.27984793268590e-01 3.26532342265985e-01 + 3.25070382559934e-01 3.23599438685587e-01 3.22120026187788e-01 3.20632650788502e-01 + 3.19137807583054e-01 3.17635980272340e-01 3.16127640437844e-01 3.14613246865907e-01 + 3.13093244927244e-01 3.11568066017225e-01 3.10038127061889e-01 3.08503830094056e-01 + 3.06965561903292e-01 3.05423693762834e-01 3.03878581235872e-01 3.02330564062905e-01 + 3.00779966131164e-01 2.99227095526377e-01 2.97672244666422e-01 2.96115690515707e-01 + 2.94557694878404e-01 2.92998504767997e-01 2.91438352849924e-01 2.89877457953493e-01 + 2.88316025648629e-01 2.86754248882508e-01 2.85192308670577e-01 2.83630374836062e-01 + 2.82068606791640e-01 2.80507154356613e-01 2.78946158602684e-01 2.77385752721158e-01 + 2.75826062904317e-01 2.74267209233583e-01 2.72709306567090e-01 2.71152465419340e-01 + 2.69596792825729e-01 2.68042393184912e-01 2.66489369072219e-01 2.64937822017649e-01 + 2.63387853242308e-01 2.61839564347590e-01 2.60293057951858e-01 2.58748438269884e-01 + 2.57205811630867e-01 2.55665286931417e-01 2.54126976020515e-01 2.52590994014102e-01 + 2.51057459537582e-01 2.49526494895216e-01 2.47998226166040e-01 2.46472783226614e-01 + 2.44950299701580e-01 2.43430912843655e-01 2.41914763345322e-01 2.40401995085081e-01 + 2.38892754811732e-01 2.37387191770659e-01 2.35885457276652e-01 2.34387704238205e-01 + 2.32894086638686e-01 2.31404758980119e-01 2.29919875695624e-01 2.28439590536825e-01 + 2.26964055942711e-01 2.25493422396572e-01 2.24027837777710e-01 2.22567446714610e-01 + 2.21112389946222e-01 2.19662803697880e-01 2.18218819078194e-01 2.16780561503041e-01 + 2.15348150152478e-01 2.13921697466051e-01 2.12501308681588e-01 2.11087081422142e-01 + 2.09679105335229e-01 2.08277461788054e-01 2.06882223621793e-01 2.05493454967507e-01 + 2.04111211125595e-01 2.02735538510138e-01 2.01366474658837e-01 2.00004048308622e-01 + 1.98648279536405e-01 1.97299179963822e-01 1.95956753024197e-01 1.94620994289406e-01 + 1.93291891853724e-01 1.91969426771240e-01 1.90653573542904e-01 1.89344300648825e-01 + 1.88041571121020e-01 1.86745343151440e-01 1.85455570729799e-01 1.84172204305418e-01 + 1.82895191467156e-01 1.81624477635262e-01 1.80360006758948e-01 1.79101722013417e-01 + 1.77849566490088e-01 1.76603483873858e-01 1.75363419101363e-01 1.74129318994405e-01 + 1.72901132862925e-01 1.71678813072235e-01 1.70462315569554e-01 1.69251600365260e-01 + 1.68046631964748e-01 1.66847379747213e-01 1.65653818288197e-01 1.64465927623269e-01 + 1.63283693450773e-01 1.62107107272110e-01 1.60936166468670e-01 1.59770874315054e-01 + 1.58611239928876e-01 1.57457278157983e-01 1.56309009406548e-01 1.55166459402015e-01 + 1.54029658905468e-01 1.52898643368481e-01 1.51773452539999e-01 1.50654130027292e-01 + 1.49540722815387e-01 1.48433280749812e-01 1.47331855987770e-01 1.46236502423178e-01 + 1.45147275091216e-01 1.44064229558208e-01 1.42987421302787e-01 1.41916905094352e-01 + 1.40852734374843e-01 1.39794960649806e-01 1.38743632894617e-01 1.37698796981580e-01 + 1.36660495133402e-01 1.35628765408278e-01 1.34603641221520e-01 1.33585150908304e-01 + 1.32573317331697e-01 1.31568157539708e-01 1.30569682474628e-01 1.29577896737415e-01 + 1.28592798409365e-01 1.27614378932761e-01 1.26642623051621e-01 1.25677508813111e-01 + 1.24719007629595e-01 1.23767084400748e-01 1.22821697694541e-01 1.21882799985418e-01 + 1.20950337947377e-01 1.20024252799205e-01 1.19104480698587e-01 1.18190953181372e-01 + 1.17283597641861e-01 1.16382337849556e-01 1.15487094497536e-01 1.14597785777258e-01 + 1.13714327974396e-01 1.12836636080093e-01 1.11964624411893e-01 1.11098207238490e-01 + 1.10237299402463e-01 1.09381816935106e-01 1.08531677657621e-01 1.07686801763014e-01 + 1.06847112373251e-01 1.06012536066455e-01 1.05183003369216e-01 1.04358449209405e-01 + 1.03538813325280e-01 1.02724040627062e-01 1.01914081507620e-01 1.01108892099389e-01 + 1.00308434475144e-01 9.95126767907851e-02 9.87215933688463e-02 9.79351647219781e-02 + 9.71533775162473e-02 9.63762244746413e-02 9.56037042217414e-02 9.48358210710803e-02 + 9.40725847572366e-02 9.33140101152458e-02 9.25601167103970e-02 9.18109284219570e-02 + 9.10664729847970e-02 9.03267814932896e-02 8.95918878722075e-02 8.88618283196580e-02 + 8.81366407273592e-02 8.74163640837709e-02 8.67010378657616e-02 8.59907014245974e-02 + 8.52853933720969e-02 8.45851509727908e-02 8.38900095478764e-02 8.32000018966408e-02 + 8.25151577408675e-02 8.18355031975251e-02 8.11610602847710e-02 8.04918464659913e-02 + 7.98278742362409e-02 7.91691507550510e-02 7.85156775291319e-02 7.78674501480345e-02 + 7.72244580753335e-02 7.65866844973707e-02 7.59541062310600e-02 7.53266936916940e-02 + 7.47044109211299e-02 7.40872156761606e-02 7.34750595763097e-02 7.28678883097278e-02 + 7.22656418953175e-02 7.16682549986806e-02 7.10756572989747e-02 7.04877739032794e-02 + 6.99045258046215e-02 6.93258303793932e-02 6.87516019195222e-02 6.81817521944160e-02 + 6.76161910374198e-02 6.70548269512880e-02 6.64975677269846e-02 6.59443210699933e-02 + 6.53949952282428e-02 6.48494996157272e-02 6.43077454259363e-02 6.37696462292987e-02 + 6.32351185489813e-02 6.27040824095905e-02 6.21764618535609e-02 6.16521854203220e-02 + 6.11311865836730e-02 6.06134041431842e-02 6.00987825658717e-02 5.95872722748562e-02 + 5.90788298822082e-02 5.85734183637114e-02 5.80710071738114e-02 5.75715722995867e-02 + 5.70750962531488e-02 5.65815680024593e-02 5.60909828411327e-02 5.56033421983743e-02 + 5.51186533907650e-02 5.46369293181633e-02 5.41581881065224e-02 5.36824527009305e-02 + 5.32097504126593e-02 5.27401124244479e-02 5.22735732586520e-02 5.18101702132528e-02 + 5.13499427710326e-02 5.08929319874899e-02 5.04391798632826e-02 4.99887287071476e-02 + 4.95416204953491e-02 4.90978962337567e-02 4.86575953286446e-02 4.82207549722386e-02 + 4.77874095489109e-02 4.73575900677467e-02 4.69313236269726e-02 4.65086329154496e-02 + 4.60895357560985e-02 4.56740446957463e-02 4.52621666454525e-02 4.48539025749112e-02 + 4.44492472640259e-02 4.40481891142225e-02 4.36507100215077e-02 4.32567853127054e-02 + 4.28663837457105e-02 4.24794675739964e-02 4.20959926750068e-02 4.17159087414562e-02 + 4.13391595339679e-02 4.09656831928894e-02 4.05954126065605e-02 4.02282758327648e-02 + 3.98641965695793e-02 3.95030946713577e-02 3.91448867051374e-02 3.87894865423592e-02 + 3.84368059804379e-02 3.80867553884107e-02 3.77392443706466e-02 3.73941824423958e-02 + 3.70514797108252e-02 3.67110475551003e-02 3.63727992990615e-02 3.60366508700725e-02 + 3.57025214377301e-02 3.53703340262750e-02 3.50400160947686e-02 3.47115000793704e-02 + 3.43847238923833e-02 3.40596313731118e-02 3.37361726860073e-02 3.34143046620477e-02 + 3.30939910798110e-02 3.27752028832490e-02 3.24579183337499e-02 3.21421230946777e-02 + 3.18278102472053e-02 3.15149802368913e-02 3.12036407511016e-02 3.08938065280230e-02 + 3.05854990986619e-02 3.02787464638563e-02 2.99735827089508e-02 2.96700475593826e-02 + 2.93681858809966e-02 2.90680471294492e-02 2.87696847535618e-02 2.84731555579437e-02 + 2.81785190306167e-02 2.78858366417369e-02 2.75951711198153e-02 2.73065857120874e-02 + 2.70201434358739e-02 2.67359063279006e-02 2.64539346986076e-02 2.61742863984787e-02 + 2.58970161033541e-02 2.56221746255586e-02 2.53498082574826e-02 2.50799581539927e-02 + 2.48126597597364e-02 2.45479422870208e-02 2.42858282495213e-02 2.40263330565885e-02 + 2.37694646723959e-02 2.35152233435950e-02 2.32636013985383e-02 2.30145831204862e-02 + 2.27681446965455e-02 2.25242542433998e-02 2.22828719101866e-02 2.20439500581651e-02 + 2.18074335161051e-02 2.15732599096192e-02 2.13413600619630e-02 2.11116584631480e-02 + 2.08840738035578e-02 2.06585195676315e-02 2.04349046825901e-02 2.02131342166321e-02 + 1.99931101205269e-02 1.97747320060820e-02 1.95578979545701e-02 1.93425053478672e-02 + 1.91284517147844e-02 1.89156355848742e-02 1.87039573418557e-02 1.84933200687410e-02 + 1.82836303767525e-02 1.80747992101996e-02 1.78667426196357e-02 1.76593824958369e-02 + 1.74526472574380e-02 1.72464724854164e-02 1.70408014980411e-02 1.68355858603876e-02 + 1.66307858230594e-02 1.64263706853548e-02 1.62223190787575e-02 1.60186191673165e-02 + 1.58152687622032e-02 1.56122753484836e-02 1.54096560229247e-02 1.52074373424446e-02 + 1.50056550836233e-02 1.48043539144982e-02 1.46035869806737e-02 1.44034154085670e-02 + 1.42039077293886e-02 1.40051392282088e-02 1.38071912231750e-02 1.36101502806319e-02 + 1.34141073725279e-02 1.32191569830772e-02 1.30253961721785e-02 1.28329236035537e-02 + 1.26418385459788e-02 1.24522398563033e-02 1.22642249532193e-02 1.20778887909197e-02 + 1.18933228418896e-02 1.17106140980982e-02 1.15298440998020e-02 1.13510880010316e-02 + 1.11744136806130e-02 1.09998809072802e-02 1.08275405670576e-02 1.06574339606407e-02 + 1.04895921779827e-02 1.03240355567061e-02 1.01607732303028e-02 9.99980277138256e-03 + 9.84110993445862e-03 9.68466850196011e-03 9.53044023630514e-03 9.37837493999258e-03 + 9.22841062476185e-03 9.08047378994715e-03 8.93447980921775e-03 8.79033342396008e-03 + 8.64792934062496e-03 8.50715292844826e-03 8.36788101305534e-03 8.22998276059297e-03 + 8.09332064620472e-03 7.95775149987559e-03 7.82312762194073e-03 7.68929795987258e-03 + 7.55610933734828e-03 7.42340772605289e-03 7.29103955020593e-03 7.15885301340487e-03 + 7.02669943707108e-03 6.89443459956082e-03 6.76192006486993e-03 6.62902448981418e-03 + 6.49562489861506e-03 6.36160791395953e-03 6.22687093382950e-03 6.09132324371546e-03 + 5.95488705423592e-03 5.81749845467445e-03 5.67910827351899e-03 5.53968283773716e-03 + 5.39920462324549e-03 5.25767278981809e-03 5.11510359453136e-03 4.97153067874772e-03 + 4.82700522459193e-03 4.68159597786852e-03 4.53538913539123e-03 4.38848809574787e-03 + 4.24101307358684e-03 4.09310057858345e-03 3.94490276131806e-03 3.79658662935638e-03 + 3.64833313786725e-03 3.50033616012722e-03 3.35280134424317e-03 3.20594486336097e-03 + 3.05999206751476e-03 2.91517604609820e-03 2.77173611070448e-03 2.62991620876992e-03 + 2.48996327907321e-03 2.35212556066931e-03 2.21665086728708e-03 2.08378483956596e-03 + 1.95376918777175e-03 1.82683993778984e-03 1.70322569326033e-03 1.58314592668384e-03 + 1.46680931219119e-03 1.35441211244026e-03 1.24613663177092e-03 1.14214974732529e-03 + 1.04260152932634e-03 9.47623961102370e-04 8.57329768758424e-04 7.71811369631244e-04 + 6.91139947826962e-04 6.15364664237150e-04 5.44512007467010e-04 4.78585291094957e-04 + 4.17564301627886e-04 3.61405100418120e-04 3.10039981694614e-04 2.63377587714984e-04 + 2.21303180902544e-04 1.83679071678445e-04 1.50345199562418e-04 1.21119863986632e-04 + 9.58006001733368e-05 7.41651943596250e-05 5.59728316331024e-05 4.09653686683916e-05 + 2.88687227434309e-05 1.93943675654065e-05 1.22409256555541e-05 7.09584634840096e-06 + 3.63715783726158e-06 1.53528117241812e-06 4.54893676712037e-07 5.68289020062867e-08 + 0.00000000000000e+00 + Type L N + 0 1 1 + -0.00000000000000e+00 -2.70540989181889e-03 -5.39804686109035e-03 -8.06517809127827e-03 + -1.06941507887349e-02 -1.32724317224946e-02 -1.57876462013985e-02 -1.82276163064856e-02 + -2.05803982012438e-02 -2.28343183480702e-02 -2.49780084661073e-02 -2.70004390734463e-02 + -2.88909514654681e-02 -3.06392879907602e-02 -3.22356204965365e-02 -3.36705768267204e-02 + -3.49352652677476e-02 -3.60212968496231e-02 -3.69208054227320e-02 -3.76264654442679e-02 + -3.81315074218125e-02 -3.84297309754714e-02 -3.85155154939589e-02 -3.83838283740168e-02 + -3.80302308464660e-02 -3.74508814059172e-02 -3.66425368746202e-02 -3.56025511440221e-02 + -3.43288716502306e-02 -3.28200336516787e-02 -3.10751523887576e-02 -2.90939132159709e-02 + -2.68765598071808e-02 -2.44238805437212e-02 -2.17371932034673e-02 -1.88183280763503e-02 + -1.56696096382238e-02 -1.22938369204179e-02 -8.69426271671155e-03 -4.87457177280094e-03 + -8.38858105645634e-04 3.40839839868870e-03 7.86235595987888e-03 1.25178353029117e-02 + 1.73693443362552e-02 2.24111029653506e-02 2.76370679019262e-02 3.30409573343183e-02 + 3.86162753295125e-02 4.43563358439582e-02 5.02542862272593e-02 5.63031301105840e-02 + 6.24957495799534e-02 6.88249265434203e-02 7.52833632104332e-02 8.18637016113342e-02 + 8.85585420948730e-02 9.53604607517436e-02 1.02262025722401e-01 1.09255812357684e-01 + 1.16334417210984e-01 1.23490470850820e-01 1.30716649492508e-01 1.38005685457255e-01 + 1.45350376476201e-01 1.52743593865770e-01 1.60178289608956e-01 1.67647502384998e-01 + 1.75144362596999e-01 1.82662096453582e-01 1.90194029166487e-01 1.97733587331103e-01 + 2.05274300561261e-01 2.12809802453159e-01 2.20333830956081e-01 2.27840228229514e-01 + 2.35322940067433e-01 2.42776014970902e-01 2.50193602949733e-01 2.57569954132744e-01 + 2.64899417264278e-01 2.72176438162005e-01 2.79395558207768e-01 2.86551412939284e-01 + 2.93638730806083e-01 3.00652332147991e-01 3.07587128449027e-01 3.14438121913659e-01 + 3.21200405406134e-01 3.27869162787049e-01 3.34439669674604e-01 3.40907294651043e-01 + 3.47267500927823e-01 3.53515848476038e-01 3.59647996621640e-01 3.65659707098203e-01 + 3.71546847543247e-01 3.77305395417757e-01 3.82931442322356e-01 3.88421198677834e-01 + 3.93770998732342e-01 3.98977305852609e-01 4.04036718052124e-01 4.08945973705283e-01 + 4.13701957393154e-01 4.18301705823750e-01 4.22742413767504e-01 4.27021439947148e-01 + 4.31136312820239e-01 4.35084736192325e-01 4.38864594599102e-01 4.42473958396874e-01 + 4.45911088502253e-01 4.49174440724167e-01 4.52262669634054e-01 4.55174631923361e-01 + 4.57909389201253e-01 4.60466210189737e-01 4.62844572278012e-01 4.65044162402957e-01 + 4.67064877228024e-01 4.68906822598441e-01 4.70570312256523e-01 4.72055865806902e-01 + 4.73364205927650e-01 4.74496254829438e-01 4.75453129971085e-01 4.76236139045973e-01 + 4.76846774259782e-01 4.77286705925880e-01 4.77557775410260e-01 4.77661987463282e-01 + 4.77601501980472e-01 4.77378625239268e-01 4.76995800662833e-01 4.76455599165866e-01 + 4.75760709140606e-01 4.74913926144098e-01 4.73918142349999e-01 4.72776335829989e-01 + 4.71491559731006e-01 4.70066931415131e-01 4.68505621629014e-01 4.66810843769156e-01 + 4.64985843308349e-01 4.63033887446865e-01 4.60958255049899e-01 4.58762226930027e-01 + 4.56449076530363e-01 4.54022061060445e-01 4.51484413132878e-01 4.48839332944383e-01 + 4.46089981040149e-01 4.43239471695365e-01 4.40290866942543e-01 4.37247171267759e-01 + 4.34111326993338e-01 4.30886210358762e-01 4.27574628305842e-01 4.24179315968412e-01 + 4.20702934861102e-01 4.17148071756142e-01 4.13517238231704e-01 4.09812870870027e-01 + 4.06037332078578e-01 4.02192911502785e-01 3.98281827994479e-01 3.94306232096163e-01 + 3.90268208997600e-01 3.86169781918013e-01 3.82012915864413e-01 3.77799521714320e-01 + 3.73531460569325e-01 3.69210548324660e-01 3.64838560399138e-01 3.60417236569551e-01 + 3.55948285853849e-01 3.51433391388131e-01 3.46874215243697e-01 3.42272403132108e-01 + 3.37629588948328e-01 3.32947399104590e-01 3.28227456610624e-01 3.23471384859185e-01 + 3.18680811079547e-01 3.13857369425577e-01 3.09002703669258e-01 3.04118469474987e-01 + 2.99206336234628e-01 2.94267988448040e-01 2.89305126638691e-01 2.84319467798850e-01 + 2.79312745363743e-01 2.74286708718905e-01 2.69243122249721e-01 2.64183763946743e-01 + 2.59110423584802e-01 2.54024900498179e-01 2.48929000977991e-01 2.43824535321676e-01 + 2.38713314567759e-01 2.33597146952075e-01 2.28477834124239e-01 2.23357167165351e-01 + 2.18236922449727e-01 2.13118857394794e-01 2.08004706144207e-01 2.02896175229740e-01 + 1.97794939257482e-01 1.92702636663517e-01 1.87620865583345e-01 1.82551179878067e-01 + 1.77495085358641e-01 1.72454036247443e-01 1.67429431913899e-01 1.62422613918184e-01 + 1.57434863393822e-01 1.52467398796693e-01 1.47521374044217e-01 1.42597877064724e-01 + 1.37697928772885e-01 1.32822482482988e-01 1.27972423767508e-01 1.23148570764150e-01 + 1.18351674930162e-01 1.13582422238438e-01 1.08841434805666e-01 1.04129272938668e-01 + 9.94464375810661e-02 9.47933731386323e-02 9.01704706580885e-02 8.55780713307956e-02 + 8.10164702897265e-02 7.64859206653910e-02 7.19866378639753e-02 6.75188040289191e-02 + 6.30825726454974e-02 5.86780732466815e-02 5.43054161776952e-02 4.99646973761957e-02 + 4.56560031249611e-02 4.13794147343049e-02 3.71350131121979e-02 3.29228831812139e-02 + 2.87431181029582e-02 2.45958232725234e-02 2.04811200477667e-02 1.63991491807731e-02 + 1.23500739217382e-02 8.33408276864400e-03 4.35139183949267e-03 4.02246847443264e-04 + -3.51307533702079e-03 -7.39426554887647e-03 -1.12409816242610e-02 -1.50528481329913e-02 + -1.88294565477035e-02 -2.25703658453433e-02 -2.62751035327002e-02 -2.99431670837486e-02 + -3.35740257727459e-02 -3.71671228833841e-02 -4.07218782708479e-02 -4.42376912503973e-02 + -4.77139437831340e-02 -5.11500039269185e-02 -5.45452295180408e-02 -5.78989720471909e-02 + -6.12105806915911e-02 -6.44794064638080e-02 -6.77048064368141e-02 -7.08861480042800e-02 + -7.40228131349045e-02 -7.71142025797683e-02 -8.01597399922987e-02 -8.31588759213735e-02 + -8.61110916394363e-02 -8.90159027691585e-02 -9.18728626742203e-02 -9.46815655820987e-02 + -9.74416494093957e-02 -1.00152798263128e-01 -1.02814744594542e-01 -1.05427270985369e-01 + -1.07990211549958e-01 -1.10503452940402e-01 -1.12966934945554e-01 -1.15380650678686e-01 + -1.17744646352438e-01 -1.20059020643603e-01 -1.22323923654149e-01 -1.24539555478675e-01 + -1.26706164392166e-01 -1.28824044675474e-01 -1.30893534099289e-01 -1.32915011090546e-01 + -1.34888891608136e-01 -1.36815625757437e-01 -1.38695694175581e-01 -1.40529604221431e-01 + -1.42317886005981e-01 -1.44061088300306e-01 -1.45759774359240e-01 -1.47414517699616e-01 + -1.49025897872271e-01 -1.50594496266906e-01 -1.52120891988514e-01 -1.53605657843275e-01 + -1.55049356470685e-01 -1.56452536657205e-01 -1.57815729864863e-01 -1.59139447006168e-01 + -1.60424175494229e-01 -1.61670376594297e-01 -1.62878483100039e-01 -1.64048897354676e-01 + -1.65181989633816e-01 -1.66278096903336e-01 -1.67337521962047e-01 -1.68360532975225e-01 + -1.69347363401344e-01 -1.70298212310608e-01 -1.71213245090154e-01 -1.72092594527135e-01 + -1.72936362257317e-01 -1.73744620563362e-01 -1.74517414503694e-01 -1.75254764349714e-01 + -1.75956668306264e-01 -1.76623105487559e-01 -1.77254039118470e-01 -1.77849419928908e-01 + -1.78409189707304e-01 -1.78933284977714e-01 -1.79421640763968e-01 -1.79874194403504e-01 + -1.80290889373114e-01 -1.80671679088798e-01 -1.81016530642179e-01 -1.81325428436648e-01 + -1.81598377687361e-01 -1.81835407750599e-01 -1.82036575249646e-01 -1.82201966966332e-01 + -1.82331702469652e-01 -1.82425936455423e-01 -1.82484860773699e-01 -1.82508706123695e-01 + -1.82497743399129e-01 -1.82452284670254e-01 -1.82372683792328e-01 -1.82259336633826e-01 + -1.82112680921321e-01 -1.81933195701639e-01 -1.81721400425505e-01 -1.81477853660512e-01 + -1.81203151444771e-01 -1.80897925296005e-01 -1.80562839894118e-01 -1.80198590458379e-01 + -1.79805899843235e-01 -1.79385515379454e-01 -1.78938205489688e-01 -1.78464756109693e-01 + -1.77965966948267e-01 -1.77442647620510e-01 -1.76895613690169e-01 -1.76325682657719e-01 + -1.75733669931312e-01 -1.75120384817906e-01 -1.74486626571654e-01 -1.73833180536121e-01 + -1.73160814415979e-01 -1.72470274712593e-01 -1.71762283356392e-01 -1.71037534566989e-01 + -1.70296691969924e-01 -1.69540385996414e-01 -1.68769211589851e-01 -1.67983726239857e-01 + -1.67184448361637e-01 -1.66371856035064e-01 -1.65546386114548e-01 -1.64708433717254e-01 + -1.63858352093599e-01 -1.62996452880401e-01 -1.62123006733408e-01 -1.61238244332345e-01 + -1.60342357748108e-01 -1.59435502158304e-01 -1.58517797894054e-01 -1.57589332797829e-01 + -1.56650164869168e-01 -1.55700325172395e-01 -1.54739820977996e-01 -1.53768639107076e-01 + -1.52786749446451e-01 -1.51794108600261e-01 -1.50790663642762e-01 -1.49776355935949e-01 + -1.48751124975103e-01 -1.47714912225056e-01 -1.46667664910080e-01 -1.45609339720766e-01 + -1.44539906402014e-01 -1.43459351187426e-01 -1.42367680046838e-01 -1.41264921715495e-01 + -1.40151130475487e-01 -1.39026388662378e-01 -1.37890808872601e-01 -1.36744535850046e-01 + -1.35587748033296e-01 -1.34420658748226e-01 -1.33243517034048e-01 -1.32056608094377e-01 + -1.30860253368484e-01 -1.29654810221511e-01 -1.28440671256089e-01 -1.27218263251400e-01 + -1.25988045739297e-01 -1.24750509230596e-01 -1.23506173107990e-01 -1.22255583205243e-01 + -1.20999309095379e-01 -1.19737941113348e-01 -1.18472087141264e-01 -1.17202369186600e-01 + -1.15929419785755e-01 -1.14653878267147e-01 -1.13376386909350e-01 -1.12097587030906e-01 + -1.10818115049116e-01 -1.09538598545515e-01 -1.08259652375734e-01 -1.06981874861101e-01 + -1.05705844098634e-01 -1.04432114425046e-01 -1.03161213068947e-01 -1.01893637023778e-01 + -1.00629850171915e-01 -9.93702806881163e-02 -9.81153187478606e-02 -9.68653145633059e-02 + -9.56205767665239e-02 -9.43813711564259e-02 -9.31479198223731e-02 -9.19204006539256e-02 + -9.06989472425407e-02 -8.94836491773247e-02 -8.82745527332111e-02 -8.70716619462148e-02 + -8.58749400667201e-02 -8.46843113781613e-02 -8.34996633649488e-02 -8.23208492101508e-02 + -8.11476906002541e-02 -7.99799808113634e-02 -7.88174880484578e-02 -7.76599590068531e-02 + -7.65071226228229e-02 -7.53586939784514e-02 -7.42143783242286e-02 -7.30738751816829e-02 + -7.19368824874766e-02 -7.08031007398860e-02 -6.96722371084517e-02 -6.85440094678141e-02 + -6.74181503173535e-02 -6.62944105492161e-02 -6.51725630286292e-02 -6.40524059520726e-02 + -6.29337659508728e-02 -6.18165009100858e-02 -6.07005024751422e-02 -5.95856982215877e-02 + -5.84720534663645e-02 -5.73595727023996e-02 -5.62483006417726e-02 -5.51383228563881e-02 + -5.40297660088545e-02 -5.29227976701209e-02 -5.18176257243314e-02 -5.07144973652551e-02 + -4.96136976925475e-02 -4.85155479199068e-02 -4.74204032109162e-02 -4.63286501619469e-02 + -4.52407039549146e-02 -4.41570052058965e-02 -4.30780165386041e-02 -4.20042189144256e-02 + -4.09361077531888e-02 -3.98741888809252e-02 -3.88189743426993e-02 -3.77709781200185e-02 + -3.67307117934083e-02 -3.56986801914459e-02 -3.46753770678531e-02 -3.36612808481826e-02 + -3.26568504871623e-02 -3.16625214769172e-02 -3.06787020450514e-02 -2.97057695799714e-02 + -2.87440673188705e-02 -2.77939013314910e-02 -2.68555378301577e-02 -2.59292008336547e-02 + -2.50150702093195e-02 -2.41132801142966e-02 -2.32239178532367e-02 -2.23470231658970e-02 + -2.14825879541233e-02 -2.06305564536099e-02 -1.97908258516723e-02 -1.89632473480841e-02 + -1.81476276518386e-02 -1.73437309025597e-02 -1.65512810012290e-02 -1.57699643309580e-02 + -1.49994328447590e-02 -1.42393074936819e-02 -1.34891819653308e-02 -1.27486266996774e-02 + -1.20171931462833e-02 -1.12944182245571e-02 -1.05798289465273e-02 -9.87294715983205e-03 + -9.17329436722839e-03 -8.48039657792416e-03 -7.79378914544639e-03 -7.11302154658377e-03 + -6.43766205618765e-03 -5.76730227328423e-03 -5.10156145503589e-03 -4.44009061658092e-03 + -3.78257635667514e-03 -3.12874437133229e-03 -2.47836262030111e-03 -1.83124411419651e-03 + -1.18724929340045e-03 -5.46287973438978e-04 9.16791646223671e-05 7.26639556144592e-04 + 1.35852822037523e-03 1.98722772212470e-03 2.61256863186850e-03 3.23433048389483e-03 + 3.85224322750667e-03 4.46598916168334e-03 5.07520533906371e-03 5.67948642066168e-03 + 6.27838795841809e-03 6.87143007856006e-03 7.45810153482904e-03 8.03786409697219e-03 + 8.61015723653310e-03 9.17440306891995e-03 9.73001150804272e-03 1.02763855874857e-02 + 1.08129269002753e-02 1.13390411078041e-02 1.18541434674235e-02 1.23576643276123e-02 + 1.28490545394882e-02 1.33277907337513e-02 1.37933804129351e-02 1.42453668100904e-02 + 1.46833334667286e-02 1.51069084849908e-02 1.55157684115816e-02 1.59096417139750e-02 + 1.62883118127547e-02 1.66516196376596e-02 1.69994656789368e-02 1.73318115099231e-02 + 1.76486807613545e-02 1.79501595326861e-02 1.82363962306736e-02 1.85076008305529e-02 + 1.87640435603370e-02 1.90060530139669e-02 1.92340137042657e-02 1.94483630718060e-02 + 1.96495879708680e-02 1.98382206585797e-02 2.00148343180692e-02 2.01800381509541e-02 + 2.03344720787248e-02 2.04788010964924e-02 2.06137093261387e-02 2.07398938190911e-02 + 2.08580581617113e-02 2.09689059386187e-02 2.10731341111301e-02 2.11714263693744e-02 + 2.12644465175197e-02 2.13528319519097e-02 2.14371872917579e-02 2.15180782213607e-02 + 2.15960256015995e-02 2.16714999067832e-02 2.17449160406706e-02 2.18166285828034e-02 + 2.18869275131108e-02 2.19560344591268e-02 2.20240995061289e-02 2.20911986060848e-02 + 2.21573316165235e-02 2.22224209953675e-02 2.22863111724061e-02 2.23487686125123e-02 + 2.24094825799416e-02 2.24680666071612e-02 2.25240606656734e-02 2.25769340302911e-02 + 2.26260888223234e-02 2.26708642112067e-02 2.27105412483058e-02 2.27443483009725e-02 + 2.27714670495306e-02 2.27910390046963e-02 2.28021724981036e-02 2.28039500941089e-02 + 2.27954363669586e-02 2.27756859837289e-02 2.27437520302570e-02 2.26986945145667e-02 + 2.26395889801170e-02 2.25655351595500e-02 2.24756655985429e-02 2.23691541788501e-02 + 2.22452244697018e-02 2.21031578373746e-02 2.19423012439934e-02 2.17620746684327e-02 + 2.15619780845697e-02 2.13415979350634e-02 2.11006130422920e-02 2.08387999020379e-02 + 2.05560373099345e-02 2.02523102755670e-02 1.99277131843809e-02 1.95824521731911e-02 + 1.92168466910277e-02 1.88313302232806e-02 1.84264501635357e-02 1.80028668241142e-02 + 1.75613515830468e-02 1.71027841720052e-02 1.66281491165117e-02 1.61385313464918e-02 + 1.56351110018916e-02 1.51191574645611e-02 1.45920226538978e-02 1.40551336297554e-02 + 1.35099845518413e-02 1.29581280501720e-02 1.24011660661068e-02 1.18407402279894e-02 + 1.12785218294451e-02 1.07162014818944e-02 1.01554785158027e-02 9.59805020758010e-03 + 9.04560091084209e-03 8.49979117193169e-03 7.96224691017608e-03 7.43454874329207e-03 + 6.91822153767076e-03 6.41472426196679e-03 5.92544022048822e-03 5.45166774036314e-03 + 4.99461138334917e-03 4.55537374948298e-03 4.13494793557059e-03 3.73421070681533e-03 + 3.35391643472485e-03 2.99469184884509e-03 2.65703164391092e-03 2.34129497769761e-03 + 2.04770288828110e-03 1.77633665259131e-03 1.52713710115774e-03 1.29990489681772e-03 + 1.09430177797687e-03 9.09852759809430e-04 7.45949279632183e-04 6.01853265627843e-04 + 4.76702101202469e-04 3.69514450564926e-04 2.79196904698741e-04 2.04551400776090e-04 + 1.44283362317391e-04 9.70105020487054e-05 6.12722245071269e-05 3.55395610330392e-05 + 1.82255658840569e-05 7.69609885842202e-06 2.28091704138919e-06 2.84996102101155e-07 + 0.00000000000000e+00 + Type L N + 0 2 0 + -0.00000000000000e+00 1.64870398306465e-04 6.59137642927612e-04 1.48177114291726e-03 + 2.63105744011188e-03 4.10460647683762e-03 5.89936032601543e-03 8.01160433931024e-03 + 1.04369806567662e-02 1.31705040095141e-02 1.62065797357009e-02 1.95390239188432e-02 + 2.31610855474156e-02 2.70654705847089e-02 3.12443678288928e-02 3.56894764348494e-02 + 4.03920349617461e-02 4.53428518035439e-02 5.05323368537209e-02 5.59505342504616e-02 + 6.15871560444487e-02 6.74316166282169e-02 7.34730677637944e-02 7.97004340440791e-02 + 8.61024486230748e-02 9.26676890507363e-02 9.93846130497323e-02 1.06241594073918e-01 + 1.13226956491681e-01 1.20329010241561e-01 1.27536084812615e-01 1.34836562407849e-01 + 1.42218910155639e-01 1.49671711241357e-01 1.57183694839339e-01 1.64743764733852e-01 + 1.72341026526729e-01 1.79964813338861e-01 1.87604709922557e-01 1.95250575112029e-01 + 2.02892562549676e-01 2.10521139636471e-01 2.18127104665505e-01 2.25701602108509e-01 + 2.33236136035920e-01 2.40722581661721e-01 2.48153195014740e-01 2.55520620748381e-01 + 2.62817898110666e-01 2.70038465106129e-01 2.77176160890240e-01 2.84225226445823e-01 + 2.91180303599093e-01 2.98036432440661e-01 3.04789047223890e-01 3.11433970819434e-01 + 3.17967407810582e-01 3.24385936319132e-01 3.30686498655883e-01 3.36866390893572e-01 + 3.42923251462959e-01 3.48855048875056e-01 3.54660068673944e-01 3.60336899725417e-01 + 3.65884419946740e-01 3.71301781582218e-01 3.76588396127909e-01 3.81743919006957e-01 + 3.86768234094376e-01 3.91661438187047e-01 3.96423825510978e-01 4.01055872353682e-01 + 4.05558221904917e-01 4.09931669383943e-01 4.14177147526051e-01 4.18295712495364e-01 + 4.22288530284910e-01 4.26156863658768e-01 4.29902059684654e-01 4.33525537898901e-01 + 4.37028779139161e-01 4.40413315073657e-01 4.43680718449265e-01 4.46832594074298e-01 + 4.49870570545561e-01 4.52796292723158e-01 4.55611414950617e-01 4.58317595012296e-01 + 4.60916488814685e-01 4.63409745773222e-01 4.65799004881594e-01 4.68085891436227e-01 + 4.70272014384802e-01 4.72358964264210e-01 4.74348311690339e-01 4.76241606359535e-01 + 4.78040376519470e-01 4.79746128865495e-01 4.81360348817357e-01 4.82884501130394e-01 + 4.84320030795033e-01 4.85668364178478e-01 4.86930910363039e-01 4.88109062636441e-01 + 4.89204200090727e-01 4.90217689288012e-01 4.91150885953283e-01 4.92005136656675e-01 + 4.92781780450158e-01 4.93482150426304e-01 4.94107575169723e-01 4.94659380074847e-01 + 4.95138888506991e-01 4.95547422786889e-01 4.95886304982350e-01 4.96156857494024e-01 + 4.96360403425721e-01 4.96498266733071e-01 4.96571772147639e-01 4.96582244876767e-01 + 4.96531010082566e-01 4.96419392146340e-01 4.96248713727536e-01 4.96020294628837e-01 + 4.95735450481388e-01 4.95395491266239e-01 4.95001719689974e-01 4.94555429434091e-01 + 4.94057903299063e-01 4.93510411265070e-01 4.92914208492190e-01 4.92270533283389e-01 + 4.91580605033856e-01 4.90845622190251e-01 4.90066760243145e-01 4.89245169775376e-01 + 4.88381974588315e-01 4.87478269927005e-01 4.86535120823930e-01 4.85553560579794e-01 + 4.84534589398075e-01 4.83479173188411e-01 4.82388242551993e-01 4.81262691960172e-01 + 4.80103379135409e-01 4.78911124641559e-01 4.77686711688313e-01 4.76430886152403e-01 + 4.75144356816004e-01 4.73827795820564e-01 4.72481839332200e-01 4.71107088412704e-01 + 4.69704110088268e-01 4.68273438606139e-01 4.66815576867700e-01 4.65330998024837e-01 + 4.63820147225032e-01 4.62283443489296e-01 4.60721281705987e-01 4.59134034722569e-01 + 4.57522055516684e-01 4.55885679427313e-01 4.54225226426478e-01 4.52541003411772e-01 + 4.50833306500031e-01 4.49102423302727e-01 4.47348635164035e-01 4.45572219343164e-01 + 4.43773451123286e-01 4.41952605830338e-01 4.40109960746055e-01 4.38245796900791e-01 + 4.36360400733053e-01 4.34454065604089e-01 4.32527093157428e-01 4.30579794514878e-01 + 4.28612491302169e-01 4.26625516499112e-01 4.24619215110931e-01 4.22593944659110e-01 + 4.20550075491878e-01 4.18487990916129e-01 4.16408087154249e-01 4.14310773130905e-01 + 4.12196470096400e-01 4.10065611094621e-01 4.07918640284927e-01 4.05756012128593e-01 + 4.03578190451472e-01 4.01385647395536e-01 3.99178862272793e-01 3.96958320335723e-01 + 3.94724511478951e-01 3.92477928887222e-01 3.90219067644991e-01 3.87948423322993e-01 + 3.85666490557094e-01 3.83373761634478e-01 3.81070725101858e-01 3.78757864409886e-01 + 3.76435656607274e-01 3.74104571097391e-01 3.71765068469204e-01 3.69417599413439e-01 + 3.67062603733779e-01 3.64700509461732e-01 3.62331732082604e-01 3.59956673878707e-01 + 3.57575723394639e-01 3.55189255028101e-01 3.52797628748381e-01 3.50401189943280e-01 + 3.48000269393881e-01 3.45595183375301e-01 3.43186233880251e-01 3.40773708961029e-01 + 3.38357883184430e-01 3.35939018192950e-01 3.33517363364693e-01 3.31093156563482e-01 + 3.28666624969885e-01 3.26237985983159e-01 3.23807448183571e-01 3.21375212344078e-01 + 3.18941472480008e-01 3.16506416925191e-01 3.14070229422883e-01 3.11633090219865e-01 + 3.09195177152235e-01 3.06756666711723e-01 3.04317735081680e-01 3.01878559132425e-01 + 2.99439317366215e-01 2.97000190802769e-01 2.94561363797050e-01 2.92123024781868e-01 + 2.89685366928753e-01 2.87248588721508e-01 2.84812894437898e-01 2.82378494535911e-01 + 2.79945605942162e-01 2.77514452241029e-01 2.75085263764212e-01 2.72658277581484e-01 + 2.70233737394407e-01 2.67811893335835e-01 2.65393001678970e-01 2.62977324460649e-01 + 2.60565129024423e-01 2.58156687489714e-01 2.55752276154110e-01 2.53352174836422e-01 + 2.50956666168701e-01 2.48566034845814e-01 2.46180566841567e-01 2.43800548600549e-01 + 2.41426266215062e-01 2.39058004596500e-01 2.36696046650507e-01 2.34340672465066e-01 + 2.31992158520409e-01 2.29650776929298e-01 2.27316794715785e-01 2.24990473140017e-01 + 2.22672067076086e-01 2.20361824449211e-01 2.18059985737864e-01 2.15766783545600e-01 + 2.13482442246591e-01 2.11207177707942e-01 2.08941197091014e-01 2.06684698733055e-01 + 2.04437872109532e-01 2.02200897876640e-01 1.99973947992585e-01 1.97757185915339e-01 + 1.95550766873730e-01 1.93354838207950e-01 1.91169539774759e-01 1.88995004412021e-01 + 1.86831358456527e-01 1.84678722308521e-01 1.82537211035834e-01 1.80406935010152e-01 + 1.78288000567566e-01 1.76180510685365e-01 1.74084565666842e-01 1.72000263825839e-01 + 1.69927702162781e-01 1.67866977024073e-01 1.65818184736912e-01 1.63781422211906e-01 + 1.61756787506208e-01 1.59744380340362e-01 1.57744302562569e-01 1.55756658554646e-01 + 1.53781555574643e-01 1.51819104031740e-01 1.49869417689818e-01 1.47932613796874e-01 + 1.46008813138257e-01 1.44098140012546e-01 1.42200722129718e-01 1.40316690432128e-01 + 1.38446178839622e-01 1.36589323920977e-01 1.34746264494620e-01 1.32917141162383e-01 + 1.31102095780754e-01 1.29301270874784e-01 1.27514809000429e-01 1.25742852061673e-01 + 1.23985540589286e-01 1.22243012988487e-01 1.20515404763159e-01 1.18802847724493e-01 + 1.17105469192185e-01 1.15423391196373e-01 1.13756729688537e-01 1.12105593769541e-01 + 1.10470084942814e-01 1.08850296400475e-01 1.07246312349869e-01 1.05658207387611e-01 + 1.04086045927766e-01 1.02529881690288e-01 1.00989757255220e-01 9.94657036875404e-02 + 9.79577402368258e-02 9.64658741151904e-02 9.49901003561564e-02 9.35304017563406e-02 + 9.20867489010095e-02 9.06591002737345e-02 8.92474024495491e-02 8.78515903701828e-02 + 8.64715876991456e-02 8.51073072536490e-02 8.37586515095929e-02 8.24255131751384e-02 + 8.11077758277141e-02 7.98053146086840e-02 7.85179969693538e-02 7.72456834614894e-02 + 7.59882285651033e-02 7.47454815459092e-02 7.35172873345681e-02 7.23034874196582e-02 + 7.11039207461788e-02 6.99184246113700e-02 6.87468355496789e-02 6.75889901988294e-02 + 6.64447261391687e-02 6.53138826987480e-02 6.41963017169602e-02 6.30918282599908e-02 + 6.20003112818379e-02 6.09216042252212e-02 5.98555655573137e-02 5.88020592358972e-02 + 5.77609551022540e-02 5.67321291978449e-02 5.57154640025967e-02 5.47108485934188e-02 + 5.37181787223572e-02 5.27373568146130e-02 5.17682918874464e-02 5.08108993917742e-02 + 4.98651009790426e-02 4.89308241966882e-02 4.80080021162103e-02 4.70965728985341e-02 + 4.61964793019562e-02 4.53076681385243e-02 4.44300896851902e-02 4.35636970565106e-02 + 4.27084455460309e-02 4.18642919437659e-02 4.10311938374100e-02 4.02091089050366e-02 + 3.93979942070998e-02 3.85978054855268e-02 3.78084964775818e-02 3.70300182519994e-02 + 3.62623185746257e-02 3.55053413104723e-02 3.47590258686890e-02 3.40233066964907e-02 + 3.32981128275450e-02 3.25833674897534e-02 3.18789877767131e-02 3.11848843864859e-02 + 3.05009614305835e-02 2.98271163153440e-02 2.91632396971141e-02 2.85092155118819e-02 + 2.78649210792320e-02 2.72302272797100e-02 2.66049988039387e-02 2.59890944710652e-02 + 2.53823676134148e-02 2.47846665235340e-02 2.41958349591634e-02 2.36157127010822e-02 + 2.30441361582222e-02 2.24809390139603e-02 2.19259529070736e-02 2.13790081404901e-02 + 2.08399344106729e-02 2.03085615502722e-02 1.97847202765397e-02 1.92682429379378e-02 + 1.87589642514012e-02 1.82567220227980e-02 1.77613578433126e-02 1.72727177547207e-02 + 1.67906528768396e-02 1.63150199908339e-02 1.58456820724971e-02 1.53825087701528e-02 + 1.49253768223773e-02 1.44741704113665e-02 1.40287814484260e-02 1.35891097887583e-02 + 1.31550633734444e-02 1.27265582972605e-02 1.23035188017323e-02 1.18858771935887e-02 + 1.14735736895467e-02 1.10665561891051e-02 1.06647799777669e-02 1.02682073638211e-02 + 9.87680725249031e-03 9.49055466189848e-03 9.10943018590112e-03 8.73341940937172e-03 + 8.36251228202000e-03 7.99670245724417e-03 7.63598660288028e-03 7.28036369099707e-03 + 6.92983427410129e-03 6.58439975526163e-03 6.24406165971745e-03 5.90882091552956e-03 + 5.57867715073547e-03 5.25362801430572e-03 4.93366852795418e-03 4.61879047553828e-03 + 4.30898183640481e-03 4.00422626858203e-03 3.70450264720873e-03 3.40978466302763e-03 + 3.12004048514729e-03 2.83523249162116e-03 2.55531707068841e-03 2.28024449480048e-03 + 2.00995886879526e-03 1.74439815282619e-03 1.48349425986831e-03 1.22717322685906e-03 + 9.75355457759234e-04 7.27956036076621e-04 4.84885103663280e-04 2.46048301909096e-04 + 1.13472707944710e-05 -2.19319799343902e-04 -4.46057569040104e-04 -6.68972910125710e-04 + -8.88174232005965e-04 -1.10377078080311e-03 -1.31587191869138e-03 -1.52458639097096e-03 + -1.73002158858395e-03 -1.93228281384242e-03 -2.13147255713617e-03 -2.32768979230025e-03 + -2.52102929815532e-03 -2.71158101349146e-03 -2.89942943245282e-03 -3.08465304688385e-03 + -3.26732384174350e-03 -3.44750684917129e-03 -3.62525976620900e-03 -3.80063264054278e-03 + -3.97366762795520e-03 -4.14439882445428e-03 -4.31285217528635e-03 -4.47904546227043e-03 + -4.64298837008469e-03 -4.80468263133399e-03 -4.96412224941758e-03 -5.12129379741475e-03 + -5.27617679041680e-03 -5.42874412797358e-03 -5.57896260258498e-03 -5.72679346947431e-03 + -5.87219307222982e-03 -6.01511351830281e-03 -6.15550339780914e-03 -6.29330853860556e-03 + -6.42847279020729e-03 -6.56093882877609e-03 -6.69064897515245e-03 -6.81754601773243e-03 + -6.94157403188869e-03 -7.06267918763080e-03 -7.18081053726752e-03 -7.29592077499387e-03 + -7.40796696056275e-03 -7.51691119952031e-03 -7.62272127288192e-03 -7.72537120959532e-03 + -7.82484179567871e-03 -7.92112101452575e-03 -8.01420441353323e-03 -8.10409539292452e-03 + -8.19080541340159e-03 -8.27435412005884e-03 -8.35476938082425e-03 -8.43208723854100e-03 + -8.50635177667500e-03 -8.57761489949996e-03 -8.64593602848255e-03 -8.71138171744639e-03 + -8.77402518992470e-03 -8.83394580292561e-03 -8.89122844209441e-03 -8.94596285398582e-03 + -8.99824292182897e-03 -9.04816589177940e-03 -9.09583155719704e-03 -9.14134140896393e-03 + -9.18479776025045e-03 -9.22630285445585e-03 -9.26595796527764e-03 -9.30386249800662e-03 + -9.34011310119940e-03 -9.37480279783974e-03 -9.40802014497029e-03 -9.43984843056128e-03 + -9.47036491606997e-03 -9.49964013275121e-03 -9.52773723930585e-03 -9.55471144789287e-03 + -9.58060952490359e-03 -9.60546937220132e-03 -9.62931969376323e-03 -9.65217975185603e-03 + -9.67405921600909e-03 -9.69495810715225e-03 -9.71486683835609e-03 -9.73376635265724e-03 + -9.75162835749373e-03 -9.76841565430469e-03 -9.78408256088892e-03 -9.79857542317738e-03 + -9.81183321215292e-03 -9.82378820076773e-03 -9.83436671487019e-03 -9.84348995136428e-03 + -9.85107485609614e-03 -9.85703505330153e-03 -9.86128181786506e-03 -9.86372508113319e-03 + -9.86427446060664e-03 -9.86284030350961e-03 -9.85933473400054e-03 -9.85367269365383e-03 + -9.84577296480820e-03 -9.83555916644298e-03 -9.82296071241152e-03 -9.80791372212906e-03 + -9.79036187417864e-03 -9.77025719376440e-03 -9.74756076549150e-03 -9.72224336360087e-03 + -9.69428599250722e-03 -9.66368033129328e-03 -9.63042907668203e-03 -9.59454617993971e-03 + -9.55605697414715e-03 -9.51499818930638e-03 -9.47141785380792e-03 -9.42537508187566e-03 + -9.37693974770552e-03 -9.32619204811876e-03 -9.27322195665215e-03 -9.21812857308761e-03 + -9.16101937347962e-03 -9.10200936675641e-03 -9.04122016494132e-03 -8.97877897495093e-03 + -8.91481752077886e-03 -8.84947090564047e-03 -8.78287642434663e-03 -8.71517233677511e-03 + -8.64649661380775e-03 -8.57698566750791e-03 -8.50677307760496e-03 -8.43598832653709e-03 + -8.36475555537927e-03 -8.29319235293556e-03 -8.22140859012247e-03 -8.14950531149255e-03 + -8.07757369536485e-03 -8.00569409353161e-03 -7.93393516090492e-03 -7.86235308476204e-03 + -7.79099092244607e-03 -7.71987805548096e-03 -7.64902976708757e-03 -7.57844694903145e-03 + -7.50811594261905e-03 -7.43800851748355e-03 -7.36808199057959e-03 -7.29827948655726e-03 + -7.22853033939816e-03 -7.15875063391140e-03 -7.08884388438891e-03 -7.01870184644003e-03 + -6.94820545676229e-03 -6.87722589438030e-03 -6.80562575570124e-03 -6.73326033461063e-03 + -6.65997899777393e-03 -6.58562664432462e-03 -6.51004523822718e-03 -6.43307540079922e-03 + -6.35455805018000e-03 -6.27433607394553e-03 -6.19225602059554e-03 -6.10816979529016e-03 + -6.02193634498499e-03 -5.93342331801892e-03 -5.84250868323960e-03 -5.74908229391741e-03 + -5.65304738198924e-03 -5.55432196860346e-03 -5.45284017747691e-03 -5.34855343825573e-03 + -5.24143156785600e-03 -5.13146371865921e-03 -5.01865918344731e-03 -4.90304804805635e-03 + -4.78468168392197e-03 -4.66363307395160e-03 -4.53999696649387e-03 -4.41388985356326e-03 + -4.28544977091418e-03 -4.15483591902200e-03 -4.02222810551993e-03 -3.88782601112748e-03 + -3.75184828260243e-03 -3.61453145771414e-03 -3.47612872867609e-03 -3.33690855187317e-03 + -3.19715311306153e-03 -3.05715665848789e-03 -2.91722370357505e-03 -2.77766713192753e-03 + -2.63880619841312e-03 -2.50096445098245e-03 -2.36446758667008e-03 -2.22964125788080e-03 + -2.09680884559695e-03 -1.96628921654222e-03 -1.83839448159228e-03 -1.71342777284457e-03 + -1.59168105673290e-03 -1.47343300040727e-03 -1.35894690828833e-03 -1.24846874525696e-03 + -1.14222526235699e-03 -1.04042224016667e-03 -9.43242864152865e-04 -8.50846245358031e-04 + -7.63366098694136e-04 -6.80909589931537e-04 -6.03556361210802e-04 -5.31357743531952e-04 + -4.64336163256085e-04 -4.02484748162644e-04 -3.45767137062089e-04 -2.94117495393896e-04 + -2.47440737635734e-04 -2.05612955750783e-04 -1.68482051286126e-04 -1.35868567155888e-04 + -1.07566713578707e-04 -8.33455811332775e-05 -6.29505324221870e-05 -4.61047624580749e-05 + -3.25110165606227e-05 -2.18534533315998e-05 -1.37996391536832e-05 -8.00265963999442e-06 + -4.10333255869295e-06 -1.73250599039704e-06 -5.13424821266710e-07 -6.41481733191409e-08 + -0.00000000000000e+00 diff --git a/tests/PP_ORB/cp2k_gen_gth_pbe_si.upf b/tests/PP_ORB/cp2k_gen_gth_pbe_si.upf new file mode 100644 index 0000000000..df39e8e362 --- /dev/null +++ b/tests/PP_ORB/cp2k_gen_gth_pbe_si.upf @@ -0,0 +1,1075 @@ + + + + This pseudopotential file has been produced using the code + ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) + scalar-relativistic version 2.1.1, 03/26/2014 by D. R. Hamann + The code is available through a link at URL www.mat-simresearch.com. + Documentation with the package provides a full discription of the + input data below. + + + While it is not required under the terms of the GNU GPL, it is + suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013) + in any publication using these pseudopotentials. + + + Copyright 2015 The Regents of the University of California + + This work is licensed under the Creative Commons Attribution-ShareAlike + 4.0 International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + + This pseudopotential is part of the Schlipf-Gygi norm-conserving + pseudopotential library. Its construction parameters were tuned to + reproduce materials of a training set with very high accuracy and + should be suitable as a general purpose pseudopotential to treat a + variety of different compounds. For details of the construction and + testing of the pseudopotential please refer to: + + [insert reference to paper here] + + We kindly ask that you include this reference in all publications + associated to this pseudopotential. + + + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile + Si 14.00 3 2 4 upf +# +# n l f energy (Ha) + 1 0 2.00 + 2 0 2.00 + 2 1 6.00 + 3 0 2.00 + 3 1 2.00 +# +# PSEUDOPOTENTIAL AND OPTIMIZATION +# lmax + 1 +# +# l, rc, ep, ncon, nbas, qcut + 0 2.26557 -0.39736 5 8 4.77946 + 1 3.56481 -0.14998 5 8 3.13498 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 + 4 5 1.32451 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl + 0 2 0.46066 + 1 2 0.90802 +# +# MODEL CORE CHARGE +# icmod, fcfact + 0 0.00000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh + -5.00 3.00 0.02 +# +# OUTPUT GRID +# rlmax, drl + 6.00 0.01 +# +# TEST CONFIGURATIONS +# ncnf + 0 +# nvcnf +# n l f + + + + + + 7.228531905840E-012 2.312864325289E-010 1.756074521379E-009 7.398569445367E-009 + 2.257270378487E-008 5.615005557072E-008 1.213162927515E-007 2.364223204926E-007 + 4.258290844471E-007 7.207449890120E-007 1.160054909147E-006 1.791139767172E-006 + 2.670685677711E-006 3.865481663061E-006 5.453204962945E-006 7.523192980019E-006 + 1.017720092318E-005 1.353014422206E-005 1.771082482029E-005 2.286264047227E-005 + 2.914427619268E-005 3.673037704274E-005 4.581220145256E-005 5.659825432958E-005 + 6.931489921174E-005 8.420694877757E-005 1.015382330494E-004 1.215921446646E-004 + 1.446721606313E-004 1.711023400177E-004 2.012277970716E-004 2.354151493029E-004 + 2.740529401062E-004 3.175520355465E-004 3.663459949669E-004 4.208914151361E-004 + 4.816682476870E-004 5.491800896434E-004 6.239544468956E-004 7.065429705011E-004 + 7.975216657713E-004 8.974910741177E-004 1.007076427698E-003 1.126927776949E-003 + 1.257720091117E-003 1.400153331984E-003 1.554952500982E-003 1.722867659976E-003 + 1.904673926010E-003 2.101171440373E-003 2.313185312365E-003 2.541565538204E-003 + 2.787186895526E-003 3.050948814001E-003 3.333775222598E-003 3.636614374068E-003 + 3.960438647275E-003 4.306244327987E-003 4.675051368821E-003 5.067903129025E-003 + 5.485866094815E-003 5.930029581032E-003 6.401505414863E-003 6.901427602428E-003 + 7.430951979029E-003 7.991255843892E-003 8.583537580214E-003 9.209016261390E-003 + 9.868931244244E-003 1.056454175014E-002 1.129712643487E-002 1.206798294807E-002 + 1.287842748325E-002 1.372979431910E-002 1.462343535301E-002 1.556071962777E-002 + 1.654303285211E-002 1.757177691615E-002 1.864836940243E-002 1.977424309344E-002 + 2.095084547643E-002 2.217963824638E-002 2.346209680777E-002 2.479970977614E-002 + 2.619397847995E-002 2.764641646372E-002 2.915854899299E-002 3.073191256189E-002 + 3.236805440397E-002 3.406853200696E-002 3.583491263211E-002 3.766877283861E-002 + 3.957169801390E-002 4.154528191019E-002 4.359112618790E-002 4.571083996641E-002 + 4.790603938278E-002 5.017834715870E-002 5.252939217625E-002 5.496080906286E-002 + 5.747423778579E-002 6.007132325664E-002 6.275371494606E-002 6.552306650908E-002 + 6.838103542140E-002 7.132928262675E-002 7.436947219571E-002 7.750327099620E-002 + 8.073234837571E-002 8.405837585567E-002 8.748302683793E-002 9.100797632353E-002 + 9.463490064405E-002 9.836547720532E-002 1.022013842439E-001 1.061443005961E-001 + 1.101959054801E-001 1.143578782902E-001 1.186318984046E-001 1.230196450052E-001 + 1.275227969110E-001 1.321430324236E-001 1.368820291856E-001 1.417414640521E-001 + 1.467230129737E-001 1.518283508934E-001 1.570591516549E-001 1.624170879239E-001 + 1.679038311214E-001 1.735210513687E-001 1.792704174456E-001 1.851535967594E-001 + 1.911722553262E-001 1.973280577639E-001 2.036226672965E-001 2.100577457700E-001 + 2.166349536797E-001 2.233559502079E-001 2.302223932736E-001 2.372359395924E-001 + 2.443982447470E-001 2.517109632686E-001 2.591757487283E-001 2.667942538394E-001 + 2.745681305689E-001 2.824990302595E-001 2.905886037615E-001 2.988385015741E-001 + 3.072503739961E-001 3.158258712863E-001 3.245666438335E-001 3.334743423346E-001 + 3.425506179825E-001 3.517971226631E-001 3.612155091603E-001 3.708074313703E-001 + 3.805745445241E-001 3.905185054189E-001 4.006409726574E-001 4.109436068957E-001 + 4.214280710995E-001 4.320960308078E-001 4.429491544058E-001 4.539891134046E-001 + 4.652175827297E-001 4.766362410170E-001 4.882467709168E-001 5.000508594059E-001 + 5.120501981066E-001 5.242464836148E-001 5.366414178349E-001 5.492367083228E-001 + 5.620340686366E-001 5.750352186954E-001 5.882418851457E-001 6.016558017355E-001 + 6.152787096965E-001 6.291123581344E-001 6.431585044268E-001 6.574189146298E-001 + 6.718953638918E-001 6.865896368767E-001 7.015035281944E-001 7.166388428405E-001 + 7.319973966441E-001 7.475810167245E-001 7.633915419568E-001 7.794308234462E-001 + 7.957007250116E-001 8.122031236787E-001 8.289399101821E-001 8.459129894777E-001 + 8.631242812646E-001 8.805757205168E-001 8.982692580262E-001 9.162068609552E-001 + 9.343905134007E-001 9.528222169690E-001 9.715039913620E-001 9.904378749755E-001 + 1.009625925509E+000 1.029070220588E+000 1.048772858398E+000 1.068735958337E+000 + 1.088961661669E+000 1.109452132207E+000 1.130209556997E+000 1.151236147027E+000 + 1.172534137941E+000 1.194105790777E+000 1.215953392715E+000 1.238079257849E+000 + 1.260485727966E+000 1.283175173350E+000 1.306149993603E+000 1.329412618482E+000 + 1.352965508759E+000 1.376811157098E+000 1.400952088955E+000 1.425390863497E+000 + 1.450130074544E+000 1.475172351538E+000 1.500520360528E+000 1.526176805187E+000 + 1.552144427849E+000 1.578426010572E+000 1.605024376237E+000 1.631942389661E+000 + 1.659182958755E+000 1.686749035695E+000 1.714643618141E+000 1.742869750475E+000 + 1.771430525085E+000 1.800329083670E+000 1.829568618593E+000 1.859152374268E+000 + 1.889083648581E+000 1.919365794358E+000 1.950002220874E+000 1.980996395400E+000 + 2.012351844801E+000 2.044072157181E+000 2.076160983571E+000 2.108622039676E+000 + 2.141459107664E+000 2.174676038024E+000 2.208276751464E+000 2.242265240886E+000 + 2.276645573405E+000 2.311421892445E+000 2.346598419898E+000 2.382179458348E+000 + 2.418169393373E+000 2.454572695920E+000 2.491393924754E+000 2.528637728999E+000 + 2.566308850751E+000 2.604412127792E+000 2.642952496385E+000 2.681934994175E+000 + 2.721364763182E+000 2.761247052908E+000 2.801587223544E+000 2.842390749298E+000 + 2.883663221839E+000 2.925410353867E+000 2.967637982812E+000 3.010352074671E+000 + 3.053558727987E+000 3.097264177970E+000 3.141474800791E+000 3.186197118017E+000 + 3.231437801233E+000 3.277203676836E+000 3.323501731019E+000 3.370339114947E+000 + 3.417723150143E+000 3.465661334090E+000 3.514161346055E+000 3.563231053154E+000 + 3.612878516668E+000 3.663111998616E+000 3.713939968608E+000 3.765371110986E+000 + 3.817414332269E+000 3.870078768920E+000 3.923373795443E+000 3.977309032850E+000 + 4.031894357485E+000 4.087139910253E+000 4.143056106261E+000 4.199653644897E+000 + 4.256943520375E+000 4.314937032760E+000 4.373645799524E+000 4.433081767629E+000 + 4.493257226203E+000 4.554184819816E+000 4.615877562408E+000 4.678348851898E+000 + 4.741612485516E+000 4.805682675913E+000 4.870574068078E+000 4.936301757123E+000 + 5.002881306988E+000 5.070328770130E+000 5.138660708242E+000 5.207894214084E+000 + 5.278046934493E+000 5.349137094648E+000 5.421183523671E+000 5.494205681666E+000 + 5.568223688271E+000 5.643258352849E+000 5.719331206425E+000 5.796464535479E+000 + 5.874681417749E+000 5.954005760167E+000 6.034462339099E+000 6.116076843049E+000 + 6.198875918020E+000 6.282887215716E+000 6.368139444825E+000 6.454662425599E+000 + 6.542487148013E+000 6.631645833757E+000 6.722172002407E+000 6.814100542080E+000 + 6.907467784972E+000 7.002311588172E+000 7.098671420209E+000 7.196588453825E+000 + 7.296105665516E+000 7.397267942450E+000 7.500122197423E+000 7.604717492587E+000 + 7.711105172772E+000 7.819339009305E+000 7.929475355336E+000 8.041573313791E+000 + 8.155694919205E+000 8.271905334840E+000 8.390273066649E+000 8.510870195845E+000 + 8.633772632060E+000 8.759060389306E+000 8.886817887264E+000 9.017134280726E+000 + 9.150103820425E+000 9.285826248894E+000 9.424407235538E+000 9.565958855643E+000 + 9.710600118790E+000 9.858457552895E+000 1.000966585107E+001 1.016436858957E+001 + 1.032271902643E+001 1.048488099195E+001 1.065102988390E+001 1.082135378276E+001 + 1.099605470457E+001 1.117535001252E+001 1.135947401186E+001 1.154867975754E+001 + 1.174324110956E+001 1.194345507794E+001 1.214964450766E+001 1.236216116444E+001 + 1.258138929561E+001 1.280774975627E+001 1.304170481237E+001 1.328376375824E+001 + 1.353448952018E+001 1.379450646144E+001 1.406450966091E+001 1.434527601224E+001 + 1.463767758998E+001 1.494269786185E+001 1.526145150691E+001 1.559520884718E+001 + 1.594542624451E+001 1.631378430061E+001 1.670223639493E+001 1.711307111027E+001 + 1.754899360592E+001 1.801323328759E+001 1.850968868074E+001 1.904312608737E+001 + 1.961945791891E+001 2.024614242797E+001 2.093277449563E+001 2.169198875964E+001 + 2.254089690758E+001 2.350348978035E+001 2.461490370703E+001 2.592961189953E+001 + 2.753887284742E+001 2.961376515718E+001 3.253836568394E+001 3.753823280979E+001 + + + 3.614124658553E-011 5.781889644942E-010 2.926482822178E-009 9.246481950686E-009 + 2.256610649277E-008 4.677201989329E-008 8.660485618259E-008 1.476533978501E-007 + 2.363477113065E-007 3.599512483873E-007 5.265519238488E-007 7.450521803571E-007 + 1.025158054050E-006 1.377367255368E-006 1.812956281504E-006 2.343966578475E-006 + 2.983189772507E-006 3.744151992124E-006 4.641097304007E-006 5.688970287397E-006 + 6.903397773471E-006 8.300669777804E-006 9.897719655635E-006 1.171210351127E-005 + 1.376197889448E-005 1.606608281835E-005 1.864370913430E-005 2.151468530162E-005 + 2.469934859001E-005 2.821852175490E-005 3.209348822650E-005 3.634596685466E-005 + 4.099808625240E-005 4.607235878206E-005 5.159165422875E-005 5.757917320621E-005 + 6.405842034116E-005 7.105317728221E-005 7.858747558006E-005 8.668556948560E-005 + 9.537190871294E-005 1.046711112140E-004 1.146079360114E-004 1.252072561357E-004 + 1.364940317128E-004 1.484932832477E-004 1.612300651479E-004 1.747294395304E-004 + 1.890164503572E-004 2.041160979379E-004 2.200533138429E-004 2.368529362653E-004 + 2.545396858704E-004 2.731381421682E-004 2.926727204461E-004 3.131676492934E-004 + 3.346469487508E-004 3.571344091148E-004 3.806535704247E-004 4.052277026592E-004 + 4.308797866675E-004 4.576324958568E-004 4.855081786566E-004 5.145288417798E-004 + 5.447161342952E-004 5.760913325278E-004 6.086753257976E-004 6.424886030090E-004 + 6.775512400976E-004 7.138828883422E-004 7.515027635455E-004 7.904296360855E-004 + 8.306818218401E-004 8.722771739811E-004 9.152330756359E-004 9.595664334113E-004 + 1.005293671774E-003 1.052430728276E-003 1.100993049621E-003 1.150995588554E-003 + 1.202452801564E-003 1.255378647387E-003 1.309786586292E-003 1.365689580135E-003 + 1.423100093157E-003 1.482030093517E-003 1.542491055533E-003 1.604493962612E-003 + 1.668049310850E-003 1.733167113275E-003 1.799856904713E-003 1.868127747257E-003 + 1.937988236307E-003 2.009446507166E-003 2.082510242158E-003 2.157186678255E-003 + 2.233482615174E-003 2.311404423934E-003 2.390958055836E-003 2.472149051850E-003 + 2.554982552373E-003 2.639463307349E-003 2.725595686716E-003 2.813383691156E-003 + 2.902830963127E-003 2.993940798160E-003 3.086716156383E-003 3.181159674266E-003 + 3.277273676553E-003 3.375060188366E-003 3.474520947462E-003 3.575657416616E-003 + 3.678470796117E-003 3.782962036352E-003 3.889131850474E-003 3.996980727112E-003 + 4.106508943135E-003 4.217716576431E-003 4.330603518697E-003 4.445169488227E-003 + 4.561414042676E-003 4.679336591797E-003 4.798936410127E-003 4.920212649625E-003 + 5.043164352237E-003 5.167790462389E-003 5.294089839393E-003 5.422061269756E-003 + 5.551703479391E-003 5.683015145718E-003 5.815994909645E-003 5.950641387433E-003 + 6.086953182433E-003 6.224928896684E-003 6.364567142389E-003 6.505866553242E-003 + 6.648825795618E-003 6.793443579615E-003 6.939718669959E-003 7.087649896756E-003 + 7.237236166095E-003 7.388476470513E-003 7.541369899305E-003 7.695915648693E-003 + 7.852113031843E-003 8.009961488754E-003 8.169460595985E-003 8.330610076267E-003 + 8.493409807958E-003 8.657859834382E-003 8.823960373027E-003 8.991711824631E-003 + 9.161114782132E-003 9.332170039516E-003 9.504878600543E-003 9.679241687375E-003 + 9.855260749094E-003 1.003293747013E-002 1.021227377861E-002 1.039327185459E-002 + 1.057593413825E-002 1.076026333797E-002 1.094626243842E-002 1.113393470849E-002 + 1.132328370926E-002 1.151431330184E-002 1.170702765530E-002 1.190143125439E-002 + 1.209752890742E-002 1.229532575404E-002 1.249482727296E-002 1.269603928981E-002 + 1.289896798488E-002 1.310361990099E-002 1.331000195127E-002 1.351812142707E-002 + 1.372798600589E-002 1.393960375937E-002 1.415298316127E-002 1.436813309568E-002 + 1.458506286514E-002 1.480378219895E-002 1.502430126158E-002 1.524663066118E-002 + 1.547078145816E-002 1.569676517400E-002 1.592459380012E-002 1.615427980694E-002 + 1.638583615312E-002 1.661927629492E-002 1.685461419585E-002 1.709186433636E-002 + 1.733104172393E-002 1.757216190322E-002 1.781524096658E-002 1.806029556470E-002 + 1.830734291763E-002 1.855640082599E-002 1.880748768253E-002 1.906062248396E-002 + 1.931582484308E-002 1.957311500133E-002 1.983251384160E-002 2.009404290143E-002 + 2.035772438663E-002 2.062358118526E-002 2.089163688204E-002 2.116191577320E-002 + 2.143444288179E-002 2.170924397345E-002 2.198634557267E-002 2.226577497961E-002 + 2.254756028740E-002 2.283173040003E-002 2.311831505083E-002 2.340734482153E-002 + 2.369885116199E-002 2.399286641057E-002 2.428942381516E-002 2.458855755498E-002 + 2.489030276308E-002 2.519469554965E-002 2.550177302610E-002 2.581157332998E-002 + 2.612413565086E-002 2.643950025698E-002 2.675770852297E-002 2.707880295851E-002 + 2.740282723800E-002 2.772982623136E-002 2.805984603589E-002 2.839293400932E-002 + 2.872913880411E-002 2.906851040295E-002 2.941110015561E-002 2.975696081720E-002 + 3.010614658781E-002 3.045871315369E-002 3.081471772998E-002 3.117421910503E-002 + 3.153727768655E-002 3.190395554938E-002 3.227431648519E-002 3.264842605420E-002 + 3.302635163877E-002 3.340816249921E-002 3.379392983183E-002 3.418372682921E-002 + 3.457762874299E-002 3.497571294914E-002 3.537805901589E-002 3.578474877450E-002 + 3.619586639284E-002 3.661149845208E-002 3.703173402661E-002 3.745666476723E-002 + 3.788638498790E-002 3.832099175617E-002 3.876058498747E-002 3.920526754344E-002 + 3.965514533457E-002 4.011032742723E-002 4.057092615550E-002 4.103705723787E-002 + 4.150883989913E-002 4.198639699776E-002 4.246985515909E-002 4.295934491439E-002 + 4.345500084648E-002 4.395696174197E-002 4.446537075055E-002 4.498037555178E-002 + 4.550212852972E-002 4.603078695590E-002 4.656651318091E-002 4.710947483543E-002 + 4.765984504082E-002 4.821780263022E-002 4.878353238038E-002 4.935722525518E-002 + 4.993907866131E-002 5.052929671681E-002 5.112809053345E-002 5.173567851351E-002 + 5.235228666200E-002 5.297814891523E-002 5.361350748666E-002 5.425861323119E-002 + 5.491372602899E-002 5.557911519014E-002 5.625505988135E-002 5.694184957622E-002 + 5.763978453055E-002 5.834917628434E-002 5.907034819227E-002 5.980363598447E-002 + 6.054938835975E-002 6.130796761337E-002 6.207975030178E-002 6.286512794693E-002 + 6.366450778284E-002 6.447831354742E-002 6.530698632289E-002 6.615098542813E-002 + 6.701078936691E-002 6.788689683598E-002 6.877982779761E-002 6.969012462126E-002 + 7.061835329987E-002 7.156510474627E-002 7.253099617610E-002 7.351667258399E-002 + 7.452280832041E-002 7.555010877733E-002 7.659931219144E-002 7.767119157482E-002 + 7.876655678341E-002 7.988625673513E-002 8.103118179030E-002 8.220226630840E-002 + 8.340049139668E-002 8.462688786750E-002 8.588253942317E-002 8.716858608911E-002 + 8.848622791791E-002 8.983672898987E-002 9.122142173791E-002 9.264171162795E-002 + 9.409908222940E-002 9.559510071408E-002 9.713142382668E-002 9.870980437420E-002 + 1.003320982882E-001 1.020002723194E-001 1.037164124320E-001 1.054827329725E-001 + 1.073015866985E-001 1.091754757628E-001 1.111070637598E-001 1.130991889576E-001 + 1.151548788526E-001 1.172773662053E-001 1.194701067336E-001 1.217367986702E-001 + 1.240814044136E-001 1.265081745429E-001 1.290216744999E-001 1.316268142917E-001 + 1.343288816212E-001 1.371335789152E-001 1.400470647952E-001 1.430760006273E-001 + 1.462276028904E-001 1.495097022291E-001 1.529308102106E-001 1.565001949813E-001 + 1.602279672407E-001 1.641251782117E-001 1.682039316070E-001 1.724775119800E-001 + 1.769605323290E-001 1.816691044100E-001 1.866210359404E-001 1.918360597819E-001 + 1.973361013209E-001 2.031455916853E-001 2.092918362349E-001 2.158054500496E-001 + 2.227208750735E-001 2.300769973485E-001 2.379178876979E-001 2.462936956515E-001 + 2.552617349299E-001 2.648878101434E-001 2.752478496574E-001 2.864299303382E-001 + 2.985368084953E-001 3.116891110568E-001 3.260293970810E-001 3.417273796818E-001 + 3.589867145532E-001 3.780539322116E-001 3.992303476860E-001 4.228881735797E-001 + 4.494926755989E-001 4.796331902522E-001 5.140674357628E-001 5.537862744499E-001 + 6.001108557850E-001 6.548427474736E-001 7.205041436746E-001 8.007382143021E-001 + 9.010097129487E-001 1.029906110819E+000 1.201739856345E+000 1.442273367959E+000 + 1.803031432362E+000 2.404238655987E+000 3.606565957123E+000 7.213353039263E+000 + + + + -2.704556867460E+001 -2.704556867460E+001 -2.704556867460E+001 -2.704556867460E+001 + -2.704556867460E+001 -2.704556867460E+001 -2.704556867460E+001 -2.704556867460E+001 + -2.704556867459E+001 -2.704556867457E+001 -2.704556867454E+001 -2.704556867445E+001 + -2.704556867428E+001 -2.704556867393E+001 -2.704556867326E+001 -2.704556867206E+001 + -2.704556866995E+001 -2.704556866638E+001 -2.704556866052E+001 -2.704556865114E+001 + -2.704556863648E+001 -2.704556861406E+001 -2.704556858042E+001 -2.704556853086E+001 + -2.704556845901E+001 -2.704556835642E+001 -2.704556821197E+001 -2.704556801119E+001 + -2.704556773544E+001 -2.704556736094E+001 -2.704556685763E+001 -2.704556618781E+001 + -2.704556530452E+001 -2.704556414979E+001 -2.704556265242E+001 -2.704556072563E+001 + -2.704555826422E+001 -2.704555514142E+001 -2.704555120528E+001 -2.704554627463E+001 + -2.704554013452E+001 -2.704553253108E+001 -2.704552316585E+001 -2.704551168941E+001 + -2.704549769432E+001 -2.704548070741E+001 -2.704546018114E+001 -2.704543548422E+001 + -2.704540589126E+001 -2.704537057150E+001 -2.704532857653E+001 -2.704527882688E+001 + -2.704522009754E+001 -2.704515100228E+001 -2.704506997666E+001 -2.704497525977E+001 + -2.704486487462E+001 -2.704473660706E+001 -2.704458798320E+001 -2.704441624529E+001 + -2.704421832602E+001 -2.704399082109E+001 -2.704372996012E+001 -2.704343157570E+001 + -2.704309107071E+001 -2.704270338365E+001 -2.704226295211E+001 -2.704176367426E+001 + -2.704119886824E+001 -2.704056122958E+001 -2.703984278646E+001 -2.703903485287E+001 + -2.703812797959E+001 -2.703711190296E+001 -2.703597549151E+001 -2.703470669028E+001 + -2.703329246300E+001 -2.703171873196E+001 -2.702997031570E+001 -2.702803086447E+001 + -2.702588279351E+001 -2.702350721412E+001 -2.702088386266E+001 -2.701799102744E+001 + -2.701480547356E+001 -2.701130236589E+001 -2.700745519008E+001 -2.700323567184E+001 + -2.699861369462E+001 -2.699355721566E+001 -2.698803218075E+001 -2.698200243769E+001 + -2.697542964875E+001 -2.696827320231E+001 -2.696049012385E+001 -2.695203498662E+001 + -2.694285982218E+001 -2.693291403119E+001 -2.692214429475E+001 -2.691049448664E+001 + -2.689790558686E+001 -2.688431559692E+001 -2.686965945733E+001 -2.685386896776E+001 + -2.683687271052E+001 -2.681859597779E+001 -2.679896070337E+001 -2.677788539954E+001 + -2.675528509981E+001 -2.673107130825E+001 -2.670515195631E+001 -2.667743136795E+001 + -2.664781023401E+001 -2.661618559680E+001 -2.658245084594E+001 -2.654649572656E+001 + -2.650820636087E+001 -2.646746528449E+001 -2.642415149854E+001 -2.637814053899E+001 + -2.632930456439E+001 -2.627751246349E+001 -2.622262998402E+001 -2.616451988416E+001 + -2.610304210804E+001 -2.603805398680E+001 -2.596941046659E+001 -2.589696436496E+001 + -2.582056665716E+001 -2.574006679350E+001 -2.565531304937E+001 -2.556615290898E+001 + -2.547243348397E+001 -2.537400196815E+001 -2.527070612900E+001 -2.516239483690E+001 + -2.504891863252E+001 -2.493013033283E+001 -2.480588567566E+001 -2.467604400285E+001 + -2.454046898135E+001 -2.439902936141E+001 -2.425159977082E+001 -2.409806154336E+001 + -2.393830357953E+001 -2.377222323698E+001 -2.359972724743E+001 -2.342073265669E+001 + -2.323516778330E+001 -2.304297319129E+001 -2.284410267131E+001 -2.263852422438E+001 + -2.242622104131E+001 -2.220719247055E+001 -2.198145496641E+001 -2.174904300914E+001 + -2.151000998740E+001 -2.126442903356E+001 -2.101239380139E+001 -2.075401917540E+001 + -2.048944190067E+001 -2.021882112185E+001 -1.994233881963E+001 -1.966020013316E+001 + -1.937263355684E+001 -1.907989100020E+001 -1.878224770015E+001 -1.848000197528E+001 + -1.817347481280E+001 -1.786300927987E+001 -1.754896975210E+001 -1.723174095355E+001 + -1.691172680431E+001 -1.658934907357E+001 -1.626504583825E+001 -1.593926974947E+001 + -1.561248611186E+001 -1.528517078312E+001 -1.495780790415E+001 -1.463088747284E+001 + -1.430490277765E+001 -1.398034770983E+001 -1.365771397607E+001 -1.333748823604E+001 + -1.302014919188E+001 -1.270616465879E+001 -1.239598864810E+001 -1.209005849558E+001 + -1.178879206882E+001 -1.149258508852E+001 -1.120180859805E+001 -1.091680661554E+001 + -1.063789400145E+001 -1.036535457251E+001 -1.009943949086E+001 -9.840365953611E+000 + -9.588316204539E+000 -9.343436885131E+000 -9.105838737285E+000 -8.875596664694E+000 + -8.652750154201E+000 -8.437304052531E+000 -8.229229687809E+000 -8.028466319303E+000 + -7.834922893090E+000 -7.648480075899E+000 -7.468992534459E+000 -7.296291423376E+000 + -7.130187040971E+000 -6.970471609858E+000 -6.816922137237E+000 -6.669303309176E+000 + -6.527370373414E+000 -6.390871966580E+000 -6.259552844044E+000 -6.133156473920E+000 + -6.011427460851E+000 -5.894113770072E+000 -5.780968727668E+000 -5.671752778781E+000 + -5.566234991575E+000 -5.464194300860E+000 -5.365420491265E+000 -5.269714925450E+000 + -5.176891028067E+000 -5.086774540673E+000 -4.999203566690E+000 -4.914028428505E+000 + -4.831111360982E+000 -4.750326067006E+000 -4.671557161146E+000 -4.594699527226E+000 + -4.519657614579E+000 -4.446344696148E+000 -4.374682109469E+000 -4.304598499099E+000 + -4.236029076317E+000 -4.168914909085E+000 -4.103202252414E+000 -4.038841926534E+000 + -3.975788747722E+000 -3.914001014324E+000 -3.853440048528E+000 -3.794069792783E+000 + -3.735856458414E+000 -3.678768222999E+000 -3.622774972406E+000 -3.567848082962E+000 + -3.513960239080E+000 -3.461085281706E+000 -3.409198083152E+000 -3.358274444164E+000 + -3.308291009495E+000 -3.259225198645E+000 -3.211055148899E+000 -3.163759668187E+000 + -3.117318195741E+000 -3.071710768855E+000 -3.026917994392E+000 -2.982921023973E+000 + -2.939701532005E+000 -2.897241695905E+000 -2.855524178027E+000 -2.814532108946E+000 + -2.774249071804E+000 -2.734659087545E+000 -2.695746600879E+000 -2.657496466886E+000 + -2.619893938171E+000 -2.582924652524E+000 -2.546574621039E+000 -2.510830216663E+000 + -2.475678163146E+000 -2.441105524378E+000 -2.407099694082E+000 -2.373648385864E+000 + -2.340739623591E+000 -2.308361732091E+000 -2.276503328164E+000 -2.245153311885E+000 + -2.214300858192E+000 -2.183935408752E+000 -2.154046664087E+000 -2.124624575957E+000 + -2.095659339982E+000 -2.067141388503E+000 -2.039061383672E+000 -2.011410210754E+000 + -1.984178971641E+000 -1.957358978569E+000 -1.930941748028E+000 -1.904918994860E+000 + -1.879282626539E+000 -1.854024737618E+000 -1.829137604346E+000 -1.804613679454E+000 + -1.780445587078E+000 -1.756626117849E+000 -1.733148224111E+000 -1.710005015286E+000 + -1.687189753367E+000 -1.664695848541E+000 -1.642516854929E+000 -1.620646466448E+000 + -1.599078512781E+000 -1.577806955464E+000 -1.556825884061E+000 -1.536129512455E+000 + -1.515712175221E+000 -1.495568324096E+000 -1.475692524532E+000 -1.456079452339E+000 + -1.436723890395E+000 -1.417620725438E+000 -1.398764944931E+000 -1.380151633989E+000 + -1.361775972367E+000 -1.343633231516E+000 -1.325718771690E+000 -1.308028039100E+000 + -1.290556563125E+000 -1.273299953561E+000 -1.256253897911E+000 -1.239414158713E+000 + -1.222776570899E+000 -1.206337039182E+000 -1.190091535464E+000 -1.174036096268E+000 + -1.158166820178E+000 -1.142479865294E+000 -1.126971446689E+000 -1.111637833861E+000 + -1.096475348186E+000 -1.081480360349E+000 -1.066649287761E+000 -1.051978591946E+000 + -1.037464775899E+000 -1.023104381391E+000 -1.008893986235E+000 -9.948302014832E-001 + -9.809096685509E-001 -9.671290562653E-001 -9.534850578105E-001 -9.399743875668E-001 + -9.265937778224E-001 -9.133399753434E-001 -9.002097377808E-001 -8.871998298949E-001 + -8.743070195709E-001 -8.615280736006E-001 -8.488597531984E-001 -8.362988092177E-001 + -8.238419770288E-001 -8.114859710129E-001 -7.992274786221E-001 -7.870631539486E-001 + -7.749896107331E-001 -7.630034147403E-001 -7.511010754081E-001 -7.392790366718E-001 + -7.275336668412E-001 -7.158612473914E-001 -7.042579605046E-001 -6.927198751682E-001 + -6.812429316034E-001 -6.698229237514E-001 -6.584554794964E-001 -6.471360382366E-001 + -6.358598253368E-001 -6.246218228996E-001 -6.134167361624E-001 -6.022389546814E-001 + -5.910825072549E-001 -5.799410092968E-001 -5.688076010382E-001 -5.576748745145E-001 + -5.465347867393E-001 -5.353785557309E-001 -5.241965350660E-001 -5.129780613003E-001 + -5.017112667500E-001 -4.903828475716E-001 -4.789777734453E-001 -4.674789199702E-001 + -4.558665972334E-001 -4.441179366457E-001 -4.322060807172E-001 -4.200990931477E-001 + -4.077584626989E-001 -3.951370009601E-001 -3.821758076871E-001 -3.687997485451E-001 + -3.549104559947E-001 -3.403749857899E-001 -3.250063496171E-001 -3.085275641995E-001 + -2.904984544692E-001 -2.701446424505E-001 -2.458636084463E-001 -2.131160526532E-001 + + + + 7.553360761813E-011 2.416797611134E-009 1.834987319333E-008 7.731039285728E-008 + 2.358705436700E-007 5.867327308591E-007 1.267678883312E-006 2.470464407001E-006 + 4.449645847315E-006 7.531331382616E-006 1.212184347583E-005 1.871628293601E-005 + 2.790698397344E-005 4.039184982297E-005 5.698255873607E-005 7.861263032462E-005 + 1.063453424549E-004 1.413814890085E-004 1.850669691841E-004 2.389001991917E-004 + 3.045393374479E-004 3.838093147392E-004 4.787086609814E-004 5.914161207295E-004 + 7.242970496741E-004 8.799095849214E-004 1.061010582088E-003 1.270561312646E-003 + 1.511732915362E-003 1.787911596010E-003 2.102703570007E-003 2.459939742959E-003 + 2.863680124557E-003 3.318217971675E-003 3.828083656847E-003 4.398048258871E-003 + 5.033126872516E-003 5.738581634741E-003 6.519924465330E-003 7.382919519923E-003 + 8.333585354101E-003 9.378196797168E-003 1.052328653470E-002 1.177564639919E-002 + 1.314232836814E-002 1.463064526924E-002 1.624817119231E-002 1.800274160765E-002 + 1.990245319039E-002 2.195566335038E-002 2.417098946692E-002 2.655730782718E-002 + 2.912375226704E-002 3.187971251229E-002 3.483483221763E-002 3.799900670034E-002 + 4.138238036416E-002 4.499534380851E-002 4.884853061646E-002 5.295281381399E-002 + 5.731930199138E-002 6.195933507601E-002 6.688447974401E-002 7.210652445637E-002 + 7.763747410275E-002 8.348954423396E-002 8.967515486152E-002 9.620692380018E-002 + 1.030976595257E-001 1.103603535180E-001 1.180081720553E-001 1.260544474220E-001 + 1.345126684901E-001 1.433964706268E-001 1.527196248817E-001 1.624960263973E-001 + 1.727396819866E-001 1.834646968130E-001 1.946852601061E-001 2.064156298390E-001 + 2.186701162895E-001 2.314630644020E-001 2.448088348601E-001 2.587217837757E-001 + 2.732162408958E-001 2.883064862191E-001 3.040067249132E-001 3.203310604152E-001 + 3.372934655936E-001 3.549077518451E-001 3.731875359943E-001 3.921462048591E-001 + 4.117968773429E-001 4.321523639075E-001 4.532251232803E-001 4.750272162458E-001 + 4.975702563691E-001 5.208653574993E-001 5.449230779010E-001 5.697533608614E-001 + 5.953654716256E-001 6.217679305167E-001 6.489684420995E-001 6.769738202600E-001 + 7.057899090765E-001 7.354214993752E-001 7.658722408729E-001 7.971445498304E-001 + 8.292395121568E-001 8.621567819298E-001 8.958944753243E-001 9.304490599683E-001 + 9.658152397845E-001 1.001985835409E+000 1.038951660323E+000 1.076701392892E+000 + 1.115221444528E+000 1.154495824291E+000 1.194506000279E+000 1.235230758232E+000 + 1.276646057847E+000 1.318724887399E+000 1.361437117321E+000 1.404749353514E+000 + 1.448624791228E+000 1.493023070503E+000 1.537900134205E+000 1.583208089865E+000 + 1.628895076610E+000 1.674905138610E+000 1.721178106585E+000 1.767649489047E+000 + 1.814250375067E+000 1.860907350505E+000 1.907542429730E+000 1.954073005016E+000 + 2.000411815874E+000 2.046466940713E+000 2.092141813301E+000 2.137335266577E+000 + 2.181941606426E+000 2.225850718070E+000 2.268948207747E+000 2.311115582324E+000 + 2.352230469465E+000 2.392166880883E+000 2.430795521074E+000 2.467984143791E+000 + 2.503597958274E+000 2.537500087004E+000 2.569552076419E+000 2.599614461631E+000 + 2.627547385771E+000 2.653211274036E+000 2.676467561966E+000 2.697179476815E+000 + 2.715212870171E+000 2.730437099206E+000 2.742725953101E+000 2.751958620277E+000 + 2.758020691153E+000 2.760805190125E+000 2.760213629483E+000 2.756157076913E+000 + 2.748557227245E+000 2.737347468030E+000 2.722473927609E+000 2.703896493363E+000 + 2.681589787032E+000 2.655544083220E+000 2.625766156648E+000 2.592280043240E+000 + 2.555127699904E+000 2.514369547863E+000 2.470084884562E+000 2.422372149737E+000 + 2.371349031955E+000 2.317152403088E+000 2.259938069567E+000 2.199880331059E+000 + 2.137171339261E+000 2.072020251977E+000 2.004652180326E+000 1.935306929990E+000 + 1.864237540644E+000 1.791708631218E+000 1.717994562227E+000 1.643377430136E+000 + 1.568144912418E+000 1.492587985589E+000 1.416998541981E+000 1.341666934163E+000 + 1.266879478803E+000 1.192915954074E+000 1.120047126530E+000 1.048532344554E+000 + 9.786172358928E-001 9.105315464566E-001 8.444871563789E-001 7.806763073097E-001 + 7.192700720093E-001 6.604170936004E-001 6.042426173314E-001 5.508478325010E-001 + 5.003095364021E-001 4.526801258828E-001 4.079879155578E-001 3.662377750024E-001 + 3.274120706101E-001 2.914718913891E-001 2.583585320015E-001 2.279952010047E-001 + 2.002889177024E-001 1.751325574080E-001 1.524070023865E-001 1.319833543538E-001 + 1.137251642319E-001 9.749063587788E-002 8.313476269564E-002 7.051135930876E-002 + 5.947495471182E-002 4.988251835383E-002 4.159499626389E-002 3.447864039393E-002 + 2.840612060590E-002 2.325741495054E-002 1.892047985651E-002 1.529170737616E-002 + 1.227618154627E-002 9.787750080965E-003 7.748930920417E-003 6.090675554069E-003 + 4.752012505017E-003 3.679594927137E-003 2.827175989782E-003 2.155034699121E-003 + 1.629373147984E-003 1.221704031453E-003 9.082447563794E-004 6.693317527365E-004 + 4.888657998738E-004 3.537964345398E-004 2.536509151522E-004 1.801108618350E-004 + 1.266376345673E-004 8.814578943420E-005 6.072258043253E-005 4.139044702234E-005 + 2.790872487765E-005 1.861040597747E-005 1.226961283048E-005 7.995494321331E-006 + 5.148450484522E-006 3.274905461729E-006 2.057231138526E-006 1.275843313417E-006 + 7.809190405097E-007 4.715960236839E-007 2.808970559550E-007 1.649646846339E-007 + 9.548860426922E-008 5.445967067469E-008 3.059169109432E-008 1.691900920440E-008 + 9.209223430632E-009 4.931476724991E-009 2.596937803523E-009 1.344301442858E-009 + 6.837501565837E-010 3.415654539311E-010 1.675062568639E-010 8.060615601128E-011 + 3.804340647977E-011 1.760162518852E-011 7.979405705592E-012 3.542491314188E-012 + 1.539349358777E-012 6.543631451003E-013 2.719630748242E-013 1.104484646119E-013 + 4.380360553787E-014 1.695487779638E-014 6.400890397548E-015 2.355402554142E-015 + 8.442644768328E-016 2.945650997301E-016 9.996893714013E-017 3.297706229247E-017 + 1.056559999195E-017 3.285289157951E-018 9.906072704096E-019 2.894129894116E-019 + 8.185621921525E-020 2.239334734546E-020 5.920031368287E-021 1.510976058245E-021 + 3.719607063024E-022 8.822782851019E-023 2.014334139538E-023 4.421888158128E-024 + 9.322902236367E-025 1.885652436889E-025 3.654447659182E-026 6.777905628661E-027 + 1.201511311581E-027 2.033029208179E-028 3.279039243391E-029 5.034063635243E-030 + 7.345454960967E-031 1.017141332634E-031 1.334491773097E-032 1.656171659333E-033 + 1.940906653031E-034 2.144072946895E-035 2.228461332817E-036 2.175023802330E-037 + 1.989505042837E-038 1.701928033390E-039 1.358650655566E-040 1.009858555950E-041 + 6.972255205449E-043 4.460419372216E-044 2.637247739741E-045 1.437251898062E-046 + 7.199518662426E-048 3.305137154787E-049 1.386307410355E-050 5.295664848887E-052 + 1.836173604011E-053 5.758525111248E-055 1.627463695428E-056 4.128894196079E-058 + 9.365158489768E-060 1.891051001818E-061 3.384163521055E-063 5.342097921565E-065 + 7.401666831704E-067 8.954351877929E-069 9.406594803345E-071 8.530988453674E-073 + 6.638480458567E-075 4.403750057930E-077 2.473322525683E-079 1.167581811888E-081 + 4.597250655030E-084 1.497496629133E-086 4.000583596769E-089 8.684931408238E-092 + 1.517168430671E-094 2.110502361282E-097 2.311960250163E-100 1.970816884728E-103 + 1.290785853951E-106 6.407428906943E-110 2.375676981287E-113 6.476633360953E-117 + 1.276557649232E-120 1.786352312975E-124 1.740258771325E-128 1.155522489281E-132 + 5.110916693290E-137 1.468825191515E-141 2.669623744347E-146 2.979553483856E-151 + 1.977504233766E-156 7.534981438132E-162 1.586005759244E-167 1.767586964330E-173 + 9.954557402714E-180 2.690287094904E-186 3.294867269708E-193 1.715803847685E-200 + 3.538295897379E-208 2.668082361581E-216 6.725685401446E-225 5.121570569451E-234 + 1.050156520913E-243 5.085312359851E-254 5.003307168887E-265 8.408203846609E-277 + 1.973137720640E-289 5.108914973551E-303 1.105883933318E-317 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + + + 1.073943915431E-032 3.517886044577E-028 1.539785127132E-025 1.151528148997E-023 + 3.270258193426E-022 5.033636686175E-021 5.076784002615E-020 3.757480382458E-019 + 2.195519290063E-018 1.064574820240E-017 4.438813863463E-017 1.633878371215E-016 + 5.416261537267E-016 1.642260877865E-015 4.610911204392E-015 1.210703788740E-014 + 2.997204257140E-014 7.042690001536E-014 1.579601934206E-013 3.397898916568E-013 + 7.038678290627E-013 1.408988514070E-012 2.733850602965E-012 5.155139244113E-012 + 9.469151776360E-012 1.697755241813E-011 2.976597330992E-011 5.111493750131E-011 + 8.609663417654E-011 1.424292241565E-010 2.316835329004E-010 3.709662946555E-010 + 5.852408143612E-010 9.104914721439E-010 1.397994572947E-009 2.120026526630E-009 + 3.177423353257E-009 4.709505416880E-009 6.907000735577E-009 1.002874210742E-008 + 1.442308083208E-008 2.055515648778E-008 2.904139184112E-008 4.069284862379E-008 + 5.656938801424E-008 7.804693393088E-008 1.069005426946E-007 1.454064445633E-007 + 1.964667466784E-007 2.637610789610E-007 3.519301305631E-007 4.667967709698E-007 + 6.156312833037E-007 8.074681645170E-007 1.053482974815E-006 1.367438853793E-006 + 1.766213570346E-006 2.270419344412E-006 2.905129177989E-006 3.700725067295E-006 + 4.693885244145E-006 5.928729518744E-006 7.458143874174E-006 9.345307700252E-006 + 1.166544945615E-005 1.450785912115E-005 1.797818853495E-005 2.220107364463E-005 + 2.732311576733E-005 3.351626224397E-005 4.098163030040E-005 4.995382154344E-005 + 6.070577829595E-005 7.355423690947E-005 8.886583727590E-005 1.070639519774E-004 + 1.286363028510E-004 1.541434371826E-004 1.842281402583E-004 2.196258655641E-004 + 2.611762685060E-004 3.098359340779E-004 3.666923933990E-004 4.329795284141E-004 + 5.100944682575E-004 5.996160847332E-004 7.033251980191E-004 8.232266069426E-004 + 9.615730609319E-004 1.120891292902E-003 1.304010233772E-003 1.514091529901E-003 + 1.754662484333E-003 2.029651541190E-003 2.343426429684E-003 2.700835079822E-003 + 3.107249415793E-003 3.568612124931E-003 4.091486489960E-003 4.683109359484E-003 + 5.351447316295E-003 6.105256084617E-003 6.954143195609E-003 7.908633905004E-003 + 8.980240327277E-003 1.018153371688E-002 1.152621978849E-002 1.302921692447E-002 + 1.470673706857E-002 1.657636904972E-002 1.865716401839E-002 2.096972261016E-002 + 2.353628337612E-002 2.638081193749E-002 2.952909023250E-002 3.300880512601E-002 + 3.684963554733E-002 4.108333720879E-002 4.574382383681E-002 5.086724371912E-002 + 5.649205023614E-002 6.265906490254E-002 6.941153129689E-002 7.679515810417E-002 + 8.485814933923E-002 9.365121966012E-002 1.032275925205E-001 1.136429787526E-001 + 1.249555330193E-001 1.372257854255E-001 1.505165454459E-001 1.648927752027E-001 + 1.804214290263E-001 1.971712561499E-001 2.152125633437E-001 2.346169342739E-001 + 2.554569024020E-001 2.778055743100E-001 3.017362004682E-001 3.273216906508E-001 + 3.546340714664E-001 3.837438838103E-001 4.147195184676E-001 4.476264886150E-001 + 4.825266385889E-001 5.194772890113E-001 5.585303192040E-001 5.997311887813E-001 + 6.431179013834E-001 6.887199147183E-001 7.365570023967E-001 7.866380744838E-001 + 8.389599652411E-001 8.935061981784E-001 9.502457402721E-001 1.009131759007E+000 + 1.070100397741E+000 1.133069586756E+000 1.197937909189E+000 1.264583542830E+000 + 1.332863300428E+000 1.402611792696E+000 1.473640739469E+000 1.545738455562E+000 + 1.618669538514E+000 1.692174785739E+000 1.765971368419E+000 1.839753288738E+000 + 1.913192145747E+000 1.985938233142E+000 2.057621989511E+000 2.127855818108E+000 + 2.196236288916E+000 2.262346730613E+000 2.325760214129E+000 2.386042922714E+000 + 2.442757895933E+000 2.495469126866E+000 2.543745982996E+000 2.587167912156E+000 + 2.625329385447E+000 2.657845019590E+000 2.684354811880E+000 2.704529412061E+000 + 2.718075347359E+000 2.724740109813E+000 2.724317009376E+000 2.716649692162E+000 + 2.701636221210E+000 2.679232617284E+000 2.649455759965E+000 2.612385554687E+000 + 2.568166279639E+000 2.517007037612E+000 2.459181251944E+000 2.395025162464E+000 + 2.324935296718E+000 2.249364913200E+000 2.168819436561E+000 2.083850929136E+000 + 1.995051667996E+000 1.903046921389E+000 1.808487042030E+000 1.712039016442E+000 + 1.614377628581E+000 1.516176411498E+000 1.418098572072E+000 1.320788080226E+000 + 1.224861115070E+000 1.130898055706E+000 1.039436193979E+000 9.509633301929E-001 + 8.659123913071E-001 7.846571846706E-001 7.075093700186E-001 6.347166990035E-001 + 5.664625362671E-001 5.028666401737E-001 4.439871461881E-001 3.898236628169E-001 + 3.403213603137E-001 2.953759071304E-001 2.548390893317E-001 2.185249346015E-001 + 1.862161555097E-001 1.576707265093E-001 1.326284155314E-001 1.108171035684E-001 + 9.195874353417E-002 7.577483198163E-002 6.199129279410E-002 5.034269946703E-002 + 4.057579077121E-002 3.245226215633E-002 2.575084105508E-002 2.026867727843E-002 + 1.582209916180E-002 1.224680148049E-002 9.397542112102E-003 7.147430945846E-003 + 5.386896825739E-003 4.022416769001E-003 2.975086884951E-003 2.179107004842E-003 + 1.580241746311E-003 1.134310309633E-003 8.057464276552E-004 5.662591797338E-004 + 3.936153389234E-004 2.705549357671E-004 1.838440487831E-004 1.234626059004E-004 + 8.192022749334E-005 5.368979364031E-005 3.474633966310E-005 2.219789222458E-005 + 1.399474613926E-005 8.704237291133E-006 5.339087906715E-006 3.228707069073E-006 + 1.924270974658E-006 1.129865403786E-006 6.533606143683E-007 3.719492250159E-007 + 2.083786672940E-007 1.148396196407E-007 6.223354778339E-008 3.314915152204E-008 + 1.734806985522E-008 8.916031787574E-009 4.498206243554E-009 2.226663863775E-009 + 1.080966335643E-009 5.143998166022E-010 2.398300151730E-010 1.094957253239E-010 + 4.892739851186E-011 2.138613197240E-011 9.138912240714E-012 3.815828271603E-012 + 1.555814253741E-012 6.190649669661E-013 2.402433191901E-013 9.087028361413E-014 + 3.347790596217E-014 1.200499734382E-014 4.187218443627E-015 1.419488266705E-015 + 4.673622414904E-016 1.493323086009E-016 4.626838170637E-017 1.388948483023E-017 + 4.036348229042E-018 1.134512044485E-018 3.081430626310E-019 8.079979074247E-020 + 2.043434850466E-020 4.979297356019E-021 1.167834346065E-021 2.633504888958E-022 + 5.703538993531E-023 1.184985393389E-023 2.358974356005E-024 4.494072638904E-025 + 8.182941228053E-026 1.422188062646E-026 2.356067184282E-027 3.715216941799E-028 + 5.568091523150E-029 7.919357151694E-030 1.067198705085E-030 1.360367805601E-031 + 1.637491918071E-032 1.857978108330E-033 1.983520835155E-034 1.988527262555E-035 + 1.868335446887E-036 1.641726703078E-037 1.346251296270E-038 1.027892235082E-039 + 7.290214907661E-041 4.791101706223E-042 2.910162415549E-043 1.629375298267E-044 + 8.385527500623E-046 3.955244220356E-047 1.704590075311E-048 6.690810591348E-050 + 2.383925315353E-051 7.683078994852E-053 2.231550026252E-054 5.818730714387E-056 + 1.356558512320E-057 2.815704735056E-059 5.179993177116E-061 8.406576782511E-063 + 1.197578401858E-064 1.489756918960E-066 1.609394502715E-068 1.501144761049E-070 + 1.201522184784E-072 8.199265368471E-075 4.737771521460E-077 2.301316886692E-079 + 9.324822370083E-082 3.126238189399E-084 8.597200995113E-087 1.921518793411E-089 + 3.456423985260E-092 4.951857266978E-095 5.587655474062E-098 4.907320929246E-101 + 3.311978487238E-104 1.694505205374E-107 6.476907857874E-111 1.820754084204E-114 + 3.701432335164E-118 5.343616679705E-122 5.372027252003E-126 3.681991342703E-130 + 1.681565370195E-134 4.991528441750E-139 9.373627054110E-144 1.081326962618E-148 + 7.420523537248E-154 2.924713414125E-159 6.370493415698E-165 7.350396415466E-171 + 4.287659863319E-177 1.200840882022E-183 1.524922687301E-190 8.238555914071E-198 + 1.763677110455E-205 1.381505871493E-213 3.620152867695E-222 2.867887744512E-231 + 6.122651738456E-241 3.089703706928E-251 3.170954554835E-262 5.564508262925E-274 + 1.365120016208E-286 3.699808756030E-300 8.394545783145E-315 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + + + 7.326217492766E-022 7.500322154341E-019 4.323798897742E-017 7.674942173605E-016 + 7.144087544429E-015 4.420587421945E-014 2.063563624280E-013 7.837121036785E-013 + 2.542437258428E-012 7.283545977841E-012 1.886847042108E-011 4.498197867626E-011 + 1.000057929216E-010 2.095013556891E-010 4.169492964618E-010 7.935677446346E-010 + 1.452232995821E-009 2.566755223219E-009 4.398019771138E-009 7.328791663330E-009 + 1.190929765597E-008 1.891604657073E-008 2.942672458607E-008 4.491440727278E-008 + 6.736476370893E-008 9.942038915355E-008 1.445568902626E-007 2.072958593171E-007 + 2.934604097513E-007 4.104795024909E-007 5.677478692235E-007 7.770489323001E-007 + 1.053048729130E-006 1.413869468916E-006 1.881751978527E-006 2.483816929414E-006 + 3.252935375315E-006 4.228719768075E-006 5.458647253062E-006 6.999327672235E-006 + 8.917929319857E-006 1.129377609794E-005 1.422013030374E-005 1.780617584581E-005 + 2.217921722430E-005 2.748711012333E-005 3.390093994291E-005 4.161796504360E-005 + 5.086484188366E-005 6.190114959436E-005 7.502323185919E-005 9.056837423481E-005 + 1.089193352729E-004 1.305092499672E-004 1.558269241577E-004 1.854225385714E-004 + 2.199137811593E-004 2.599924263014E-004 3.064313792959E-004 3.600922043084E-004 + 4.219331536460E-004 4.930177158190E-004 5.745236993637E-004 6.677528688158E-004 + 7.741411485411E-004 8.952694093346E-004 1.032874851800E-003 1.188862999491E-003 + 1.365320313639E-003 1.564527440003E-003 1.788973096924E-003 2.041368612057E-003 + 2.324663113495E-003 2.642059378996E-003 2.997030344889E-003 3.393336273819E-003 + 3.835042577868E-003 4.326538290723E-003 4.872555179365E-003 5.478187482319E-003 + 6.148912257701E-003 6.890610320154E-003 7.709587741263E-003 8.612597883077E-003 + 9.606863929042E-003 1.070010187077E-002 1.190054390275E-002 1.321696217021E-002 + 1.465869280787E-002 1.623566019933E-002 1.795840137790E-002 1.983809048060E-002 + 2.188656315661E-002 2.411634082074E-002 2.654065463066E-002 2.917346905435E-002 + 3.202950488052E-002 3.512426151065E-002 3.847403835632E-002 4.209595514885E-002 + 4.600797095186E-002 5.022890164882E-002 5.477843565911E-002 5.967714761603E-002 + 6.494650971951E-002 7.060890045461E-002 7.668761034474E-002 8.320684438492E-002 + 9.019172077714E-002 9.766826556533E-002 1.056634027429E-001 1.142049393813E-001 + 1.233215453017E-001 1.330427267912E-001 1.433987938352E-001 1.544208203192E-001 + 1.661405966306E-001 1.785905740661E-001 1.918038004399E-001 2.058138462635E-001 + 2.206547208618E-001 2.363607777776E-001 2.529666088117E-001 2.705069260497E-001 + 2.890164312271E-001 3.085296718035E-001 3.290808831320E-001 3.507038161415E-001 + 3.734315499895E-001 3.972962891875E-001 4.223291447686E-001 4.485598991344E-001 + 4.760167543102E-001 5.047260634378E-001 5.347120454562E-001 5.659964830536E-001 + 5.985984041323E-001 6.325337471986E-001 6.678150112848E-001 7.044508912253E-001 + 7.424458993436E-001 7.817999748648E-001 8.225080826457E-001 8.645598031175E-001 + 9.079389156522E-001 9.526229779074E-001 9.985829040600E-001 1.045782545213E+000 + 1.094178275646E+000 1.143718588976E+000 1.194343708697E+000 1.245985217970E+000 + 1.298565713930E+000 1.351998492163E+000 1.406187267381E+000 1.461025936655E+000 + 1.516398391867E+000 1.572178388332E+000 1.628229476692E+000 1.684405005379E+000 + 1.740548200955E+000 1.796492333632E+000 1.852060975119E+000 1.907068355696E+000 + 1.961319827034E+000 2.014612436738E+000 2.066735619937E+000 2.117472012383E+000 + 2.166598388512E+000 2.213886726760E+000 2.259105403011E+000 2.302020511561E+000 + 2.342397311203E+000 2.380001792194E+000 2.414602357758E+000 2.445971611628E+000 + 2.473888240790E+000 2.498138980175E+000 2.518520643613E+000 2.534842202844E+000 + 2.546926893943E+000 2.554614328142E+000 2.557762581790E+000 2.556250238130E+000 + 2.549978351842E+000 2.538872305799E+000 2.522883528463E+000 2.501991039773E+000 + 2.476202793295E+000 2.445556782978E+000 2.410121884031E+000 2.369998399303E+000 + 2.325318285176E+000 2.276245034276E+000 2.222973196397E+000 2.165727523831E+000 + 2.104761732730E+000 2.040356878235E+000 1.972819347688E+000 1.902478483274E+000 + 1.829683852754E+000 1.754802194356E+000 1.678214069317E+000 1.600310262707E+000 + 1.521487979906E+000 1.442146892192E+000 1.362685090165E+000 1.283495007938E+000 + 1.204959384036E+000 1.127447326570E+000 1.051310550361E+000 9.768798522285E-001 + 9.044618875012E-001 8.343363060796E-001 7.667532999742E-001 7.019316064233E-001 + 6.400570015143E-001 5.812813089605E-001 5.257219375692E-001 4.734619492797E-001 + 4.245506477925E-001 3.790046661043E-001 3.368095200707E-001 2.979215848005E-001 + 2.622704415671E-001 2.297615353147E-001 2.002790769798E-001 1.736891209345E-001 + 1.498427460100E-001 1.285792688099E-001 1.097294203441E-001 9.311842128571E-002 + 7.856889718007E-002 6.590358246684E-002 5.494777089532E-002 4.553147946851E-002 + 3.749130306808E-002 3.067194700667E-002 2.492743455511E-002 2.012199565836E-002 + 1.613065128663E-002 1.283951492415E-002 1.014583840142E-002 7.957833519177E-003 + 6.194303660029E-003 4.784120869128E-003 3.665583804896E-003 2.785690663240E-003 + 2.099358853108E-003 1.568620064821E-003 1.161815655660E-003 8.528132104703E-004 + 6.202609369662E-004 4.468924221978E-004 3.188903742121E-004 2.253144319929E-004 + 1.575950402676E-004 1.090928094279E-004 7.472073544830E-005 5.062513074030E-005 + 3.392007997018E-005 2.246963213001E-005 1.471170667868E-005 9.517756509884E-006 + 6.082522421521E-006 3.838665018881E-006 2.391609981656E-006 1.470539901942E-006 + 8.920691528680E-007 5.337164272996E-007 3.148212669573E-007 1.830231335316E-007 + 1.048284282883E-007 5.913187553519E-008 3.283730439145E-008 1.794509107783E-008 + 9.646734736138E-009 5.099065986633E-009 2.649051756918E-009 1.352035942699E-009 + 6.776210023051E-010 3.333368482791E-010 1.608676110063E-010 7.612502127098E-011 + 3.530514264406E-011 1.603879337557E-011 7.133341760633E-012 3.104267549050E-012 + 1.321051118062E-012 5.494348369720E-013 2.231939425294E-013 8.850000654021E-014 + 3.423064538929E-014 1.290638885493E-014 4.740342008243E-015 1.694795452389E-015 + 5.893924779095E-016 1.992221975709E-016 6.539906537735E-017 2.083286844975E-017 + 6.434295955540E-018 1.925064487882E-018 5.574247414928E-019 1.560681530070E-019 + 4.220900707108E-020 1.101587830370E-020 2.771408600201E-021 6.713931405748E-022 + 1.564436734153E-022 3.502154278983E-023 7.522821426507E-024 1.548624720419E-024 + 3.051139181676E-025 5.745612286374E-026 1.032651178028E-026 1.768780169728E-027 + 2.882908323489E-028 4.464070827126E-029 6.556201756913E-030 9.116788925545E-031 + 1.198161107313E-031 1.485435772251E-032 1.733819398497E-033 1.901399983281E-034 + 1.954930375361E-035 1.880198559427E-036 1.687612023068E-037 1.410173747679E-038 + 1.094178923116E-039 7.862329463341E-041 5.217186639298E-042 3.187563708044E-043 + 1.787599005919E-044 9.171778453791E-046 4.290623354096E-047 1.823495283940E-048 + 7.013874629640E-050 2.431891262949E-051 7.568898570525E-053 2.105195345720E-054 + 5.208157168510E-056 1.140387877453E-057 2.198458479426E-059 3.710799619780E-061 + 5.451831865555E-063 6.928348876887E-065 7.565682362843E-067 7.049116745152E-069 + 5.561989904064E-071 3.686906724859E-073 2.035760862989E-075 9.278303919119E-078 + 3.456671547613E-080 1.041757650590E-082 2.511532426015E-085 4.785869055922E-088 + 7.115843201505E-091 8.141364608332E-094 7.060887285456E-097 4.567444123567E-100 + 2.165301740415E-103 7.381239483835E-107 1.772242701328E-110 2.930338870138E-114 + 3.255643839300E-118 2.365927009903E-122 1.091954150630E-126 3.098606723247E-131 + 5.216347378706E-136 5.007780167048E-141 2.624062113201E-146 7.147970051668E-152 + 9.585969605997E-158 5.954555117221E-164 1.599654907978E-170 1.719894804654E-177 + 6.777422267016E-185 8.853737217437E-193 3.417432728116E-201 3.412873162516E-210 + 7.558616696880E-220 3.100296533063E-230 1.904592632375E-241 1.361733910509E-253 + 8.373045955136E-267 3.068415559955E-281 4.273968620352E-297 1.293476597825E-314 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + + + 4.475870750000E+000 -1.353135410000E+000 0.000000000000E+000 -1.353135410000E+000 + 1.746890300000E+000 0.000000000000E+000 0.000000000000E+000 0.000000000000E+000 + 1.215638365000E+000 + + + + + 3.627507998889E-026 3.713714291990E-023 2.140888542095E-021 3.800175759668E-020 + 3.537328060542E-019 2.188812475024E-018 1.021754211160E-017 3.880477148253E-017 + 1.258864049808E-016 3.606379968691E-016 9.342548959615E-016 2.227241973831E-015 + 4.951700196969E-015 1.037329416351E-014 2.064497557434E-014 3.929320410288E-014 + 7.190743115477E-014 1.270950853683E-013 2.177773419792E-013 3.629157511910E-013 + 5.897766336057E-013 9.368594981427E-013 1.457638353757E-012 2.225291806640E-012 + 3.338630801568E-012 4.929473535637E-012 7.171766604372E-012 1.029280835958E-011 + 1.458698632155E-011 2.043247211164E-011 2.831127546042E-011 3.883285696017E-011 + 5.276101778293E-011 7.104292452938E-011 9.483797236963E-011 1.255433297352E-010 + 1.648139541597E-010 2.145801176632E-010 2.770771801448E-010 3.549183590729E-010 + 4.512494356921E-010 5.700019327453E-010 7.161916323100E-010 8.961181852869E-010 + 1.117297305365E-009 1.388090685199E-009 1.717254003929E-009 2.113795988852E-009 + 2.587439532008E-009 3.149646353619E-009 3.814866006977E-009 4.601602860918E-009 + 5.533025820886E-009 6.636982612953E-009 7.945333891638E-009 9.492623849715E-009 + 1.131443513434E-008 1.344630689638E-008 1.592448199525E-008 1.878952251482E-008 + 2.209278188950E-008 2.590416587179E-008 3.031832725369E-008 3.545627554529E-008 + 4.146078936829E-008 4.848669162673E-008 5.668996752984E-008 6.622156145396E-008 + 7.723144617741E-008 8.988594057178E-008 1.043969511631E-007 1.210572989008E-007 + 1.402732711665E-007 1.625853258883E-007 1.886709223507E-007 2.193291375771E-007 + 2.554534709560E-007 2.980049979669E-007 3.480009490251E-007 4.065327432902E-007 + 4.748224416622E-007 5.543185734262E-007 6.468233172710E-007 7.546354347283E-007 + 8.806892484384E-007 1.028670632606E-006 1.203096671644E-006 1.409355425662E-006 + 1.653714192652E-006 1.943316261564E-006 2.286194896500E-006 2.691337230716E-006 + 3.168828861595E-006 3.730102307318E-006 4.388300309508E-006 5.158750380749E-006 + 6.059532688077E-006 7.112112031236E-006 8.341998514129E-006 9.779401862426E-006 + 1.145985152605E-005 1.342476797099E-005 1.572198817047E-005 1.840626776014E-005 + 2.153980078460E-005 2.519281272130E-005 2.944429136298E-005 3.438292183759E-005 + 4.010828616804E-005 4.673237492556E-005 5.438144023744E-005 6.319819796138E-005 + 7.334436499294E-005 8.500349827446E-005 9.838408765534E-005 1.137228472341E-004 + 1.312881503061E-004 1.513835617951E-004 1.743514384276E-004 2.005765894738E-004 + 2.304900174702E-004 2.645727863384E-004 3.033600908992E-004 3.474456242748E-004 + 3.974863558201E-004 4.542078404109E-004 5.184101792383E-004 5.909747426013E-004 + 6.728717471726E-004 7.651687551599E-004 8.690401326420E-004 9.857774714951E-004 + 1.116800946377E-003 1.263671547800E-003 1.428104106759E-003 1.611981007573E-003 + 1.817366474877E-003 2.046521318730E-003 2.301918028638E-003 2.586256122304E-003 + 2.902477676939E-003 3.253782998289E-003 3.643646413014E-003 4.075832201309E-003 + 4.554410716241E-003 5.083774761675E-003 5.668656319964E-003 6.314143731832E-003 + 7.025699433042E-003 7.809178344674E-003 8.670846995954E-003 9.617403430885E-003 + 1.065599791313E-002 1.179425439883E-002 1.304029269598E-002 1.440275117278E-002 + 1.589080981917E-002 1.751421340562E-002 1.928329442487E-002 2.120899544620E-002 + 2.330289045904E-002 2.557720473565E-002 2.804483270013E-002 3.071935325514E-002 + 3.361504198737E-002 3.674687964854E-002 4.013055629073E-002 4.378247042153E-002 + 4.771972253783E-002 5.196010239447E-002 5.652206936780E-002 6.142472528275E-002 + 6.668777908729E-002 7.233150278032E-002 7.837667802908E-002 8.484453295252E-002 + 9.175666859819E-002 9.913497470480E-002 1.070015344222E-001 1.153785177566E-001 + 1.242880636228E-001 1.337521505183E-001 1.437924559859E-001 1.544302052023E-001 + 1.656860092186E-001 1.775796935835E-001 1.901301182958E-001 2.033549902609E-001 + 2.172706696562E-001 2.318919718407E-001 2.472319666687E-001 2.633017772792E-001 + 2.801103806211E-001 2.976644121412E-001 3.159679771903E-001 3.350224717941E-001 + 3.548264154790E-001 3.753752988373E-001 3.966614484548E-001 4.186739117065E-001 + 4.413983637511E-001 4.648170388236E-001 4.889086876380E-001 5.136485623763E-001 + 5.390084303594E-001 5.649566170759E-001 5.914580787970E-001 6.184745045410E-001 + 6.459644466739E-001 6.738834789599E-001 7.021843804200E-001 7.308173429224E-001 + 7.597302000373E-001 7.888686743413E-001 8.181766400716E-001 8.475963978068E-001 + 8.770689577094E-001 9.065343277896E-001 9.359318036686E-001 9.652002564074E-001 + 9.942784151415E-001 1.023105141505E+000 1.051619693140E+000 1.079761973967E+000 + 1.107472769277E+000 1.134693964210E+000 1.161368744594E+000 1.187441779637E+000 + 1.212859386416E+000 1.237569676539E+000 1.261522685770E+000 1.284670487749E+000 + 1.306967293236E+000 1.328369536507E+000 1.348835950694E+000 1.368327633891E+000 + 1.386808107838E+000 1.404243370889E+000 1.420601946784E+000 1.435854930499E+000 + 1.449976032153E+000 1.462941619607E+000 1.474730760004E+000 1.485325260147E+000 + 1.494709705218E+000 1.502871494992E+000 1.509800876409E+000 1.515490971083E+000 + 1.519937796167E+000 1.523140276857E+000 1.525100248805E+000 1.525822448744E+000 + 1.525314491795E+000 1.523586834096E+000 1.520652719740E+000 1.516528111286E+000 + 1.511231603552E+000 1.504784320783E+000 1.497209797730E+000 1.488533845608E+000 + 1.478784404285E+000 1.467991382449E+000 1.456186487793E+000 1.443403049526E+000 + 1.429675835701E+000 1.415040867963E+000 1.399535236350E+000 1.383196916731E+000 + 1.366064593363E+000 1.348177488842E+000 1.329575203487E+000 1.310297565916E+000 + 1.290384496206E+000 1.269875882685E+000 1.248811473044E+000 1.227230780020E+000 + 1.205173001590E+000 1.182676955202E+000 1.159781025267E+000 1.136523122818E+000 + 1.112940655997E+000 1.089070509801E+000 1.064949033372E+000 1.040612032994E+000 + 1.016094768907E+000 9.914319540420E-001 9.666577528569E-001 9.418057785126E-001 + 9.169090868292E-001 8.920001656237E-001 8.671109182833E-001 8.422726406904E-001 + 8.175159909111E-001 7.928709513719E-001 7.683667835723E-001 7.440319757044E-001 + 7.198941838692E-001 6.959801678772E-001 6.723157228970E-001 6.489256084530E-001 + 6.258334764699E-001 6.030618002072E-001 5.806318060159E-001 5.585634098752E-001 + 5.368751606325E-001 5.155841917636E-001 4.947061833054E-001 4.742553353814E-001 + 4.542443544598E-001 4.346844531451E-001 4.155853639375E-001 3.969553669942E-001 + 3.788013315117E-001 3.611287699411E-001 3.439419038431E-001 3.272437398273E-001 + 3.110361536889E-001 2.953199805895E-001 2.800951089241E-001 2.653605753925E-001 + 2.511146587483E-001 2.373549697448E-001 2.240785349304E-001 2.112818721608E-001 + 1.989610559945E-001 1.871117715054E-001 1.757293554703E-001 1.648088243613E-001 + 1.543448890709E-001 1.443319568048E-001 1.347641210772E-001 1.256351412172E-001 + 1.169384132174E-001 1.086669341236E-001 1.008132624459E-001 9.336947726921E-002 + 8.632713883300E-002 7.967725334277E-002 7.341024465272E-002 6.751593523773E-002 + 6.198353854736E-002 5.680166442275E-002 5.195833876975E-002 4.744103813746E-002 + 4.323673927000E-002 3.933198310338E-002 3.571295209216E-002 3.236555919582E-002 + 2.927554635493E-002 2.642858986465E-002 2.381040972539E-002 2.140687983354E-002 + 1.920413578008E-002 1.718867705836E-002 1.534746064501E-002 1.366798320678E-002 + 1.213834959115E-002 1.074732576549E-002 9.484374959514E-003 8.339676414908E-003 + 7.304126828098E-003 6.369325257429E-003 5.527542924673E-003 4.771679941687E-003 + 4.095211507022E-003 3.492126517788E-003 2.956861806225E-003 2.484235321581E-003 + 2.069381525317E-003 1.707692049536E-003 1.394764290613E-003 1.126360088209E-003 + 8.983759979051E-004 7.068259365436E-004 5.478362017932E-004 4.176520864162E-004 + 3.126545695922E-004 2.293849200589E-004 1.645745323844E-004 1.151769774138E-004 + 7.839911074258E-005 5.172816914624E-005 3.295210122755E-005 2.017091825605E-005 + 1.179759054382E-005 6.547911979895E-006 3.419747870583E-006 1.663084781141E-006 + 7.432103722377E-007 3.000456903890E-007 1.070096030528E-007 3.271386629884E-008 + 8.221677907170E-009 1.599488168184E-009 2.199932765829E-010 1.850065843362E-011 + 7.391104059903E-013 8.557830409437E-015 8.899966653952E-018 1.465496004505E-023 + + + 1.102066070602E-034 3.610004949297E-030 1.580105739459E-027 1.181681914780E-025 + 3.355892747563E-024 5.165446839325E-023 5.209724005776E-022 3.855873273284E-021 + 2.253010871676E-020 1.092451637644E-019 4.555048065297E-019 1.676662898240E-018 + 5.558091064332E-018 1.685264912869E-017 4.731651957040E-017 1.242407136983E-016 + 3.075688733031E-016 7.227109280173E-016 1.620965306320E-015 3.486876291603E-015 + 7.222993674453E-015 1.445884571693E-014 2.805440271567E-014 5.290135115849E-014 + 9.717120956931E-014 1.742215404689E-013 3.054549680177E-013 5.245361273922E-013 + 8.835159325728E-013 1.461598841857E-012 2.377526778598E-012 3.806854313894E-012 + 6.005766731240E-012 9.343560750724E-012 1.434648424763E-011 2.175633588652E-011 + 3.260808040919E-011 4.833176536238E-011 7.088525835688E-011 1.029257917983E-010 + 1.480300392739E-010 2.109744930316E-010 2.980903079798E-010 4.177095713574E-010 + 5.807232000476E-010 8.012744151170E-010 1.097616054911E-009 1.493164925780E-009 + 2.017792015344E-009 2.709393765508E-009 3.615796770222E-009 4.797056257299E-009 + 6.328217537555E-009 8.302619220435E-009 1.083582731526E-008 1.407030021879E-008 + 1.818089584848E-008 2.338134363275E-008 2.993181561688E-008 3.814774272193E-008 + 4.841003477767E-008 6.117687759415E-008 7.699729916934E-008 9.652672317516E-008 + 1.205447646602E-007 1.499755735462E-007 1.859110969647E-007 2.296377085770E-007 + 2.826667325097E-007 3.467694560204E-007 4.240172597004E-007 5.168274815229E-007 + 6.280155683552E-007 7.608539724981E-007 9.191381576454E-007 1.107260031798E-006 + 1.330289153346E-006 1.594062157137E-006 1.905280983629E-006 2.271620623560E-006 + 2.701847203580E-006 3.205947381698E-006 3.795270278989E-006 4.482683608739E-006 + 5.282746257860E-006 6.211900204866E-006 7.288685124071E-006 8.533979113201E-006 + 9.971268535733E-006 1.162694895516E-005 1.353065768298E-005 1.571563685466E-005 + 1.821912458868E-005 2.108277108660E-005 2.435307680912E-005 2.808185123891E-005 + 3.232669310897E-005 3.715149601876E-005 4.262698660004E-005 4.883130527214E-005 + 5.585064159684E-005 6.377993687972E-005 7.272366575006E-005 8.279670603517E-005 + 9.412530263692E-005 1.068481268307E-004 1.211174280680E-004 1.371002716198E-004 + 1.549798528436E-004 1.749568779394E-004 1.972510020362E-004 2.221023183047E-004 + 2.497728962584E-004 2.805483729893E-004 3.147396071461E-004 3.526844113342E-004 + 3.947493836406E-004 4.413318626216E-004 4.928620319217E-004 5.498052005009E-004 + 6.126642822388E-004 6.819824946785E-004 7.583462913144E-004 8.423885356816E-004 + 9.347919192009E-004 1.036292618874E-003 1.147684186048E-003 1.269821654000E-003 + 1.403625850287E-003 1.550087899865E-003 1.710273906764E-003 1.885329805554E-003 + 2.076486378417E-003 2.285064439071E-003 2.512480190430E-003 2.760250768366E-003 + 3.029999988748E-003 3.323464318870E-003 3.642499097169E-003 3.989085026742E-003 + 4.365334968543E-003 4.773501059486E-003 5.215982179060E-003 5.695331785853E-003 + 6.214266142722E-003 6.775672946672E-003 7.382620376827E-003 8.038366571439E-003 + 8.746369542580E-003 9.510297534875E-003 1.033403983207E-002 1.122171801203E-002 + 1.217769764673E-002 1.320660043775E-002 1.431331677095E-002 1.550301866360E-002 + 1.678117306538E-002 1.815355545959E-002 1.962626369315E-002 2.120573194335E-002 + 2.289874470660E-002 2.471245066940E-002 2.665437629561E-002 2.873243893708E-002 + 3.095495924824E-002 3.333067265940E-002 3.586873964016E-002 3.857875446340E-002 + 4.147075216273E-002 4.455521336344E-002 4.784306665781E-002 5.134568819198E-002 + 5.507489813258E-002 5.904295368717E-002 6.326253836353E-002 6.774674716802E-002 + 7.250906746275E-002 7.756335522447E-002 8.292380647494E-002 8.860492368167E-002 + 9.462147696069E-002 1.009884599474E-001 1.077210402387E-001 1.148345043500E-001 + 1.223441971723E-001 1.302654559607E-001 1.386135389357E-001 1.474035486304E-001 + 1.566503501768E-001 1.663684847849E-001 1.765720787380E-001 1.872747482996E-001 + 1.984895010040E-001 2.102286338856E-001 2.225036292842E-001 2.353250489505E-001 + 2.487024272620E-001 2.626441644398E-001 2.771574207392E-001 2.922480126561E-001 + 3.079203122521E-001 3.241771507515E-001 3.410197275953E-001 3.584475261525E-001 + 3.764582372813E-001 3.950476919051E-001 4.142098037145E-001 4.339365230237E-001 + 4.542178027079E-001 4.750415770136E-001 4.963937538794E-001 5.182582212262E-001 + 5.406168674775E-001 5.634496163608E-001 5.867344758150E-001 6.104476006026E-001 + 6.345633679990E-001 6.590544657086E-001 6.838919909527E-001 7.090455594864E-001 + 7.344834231400E-001 7.601725943470E-001 7.860789760312E-001 8.121674951634E-001 + 8.384022382878E-001 8.647465873484E-001 8.911633542156E-001 9.176149124330E-001 + 9.440633248548E-001 9.704704660351E-001 9.967981384506E-001 1.023008181874E+000 + 1.049062575478E+000 1.074923532495E+000 1.100553587535E+000 1.125915676894E+000 + 1.150973212391E+000 1.175690149506E+000 1.200031050696E+000 1.223961144889E+000 + 1.247446384238E+000 1.270453499180E+000 1.292950052841E+000 1.314904495692E+000 + 1.336286221266E+000 1.357065623502E+000 1.377214156118E+000 1.396704394132E+000 + 1.415510097419E+000 1.433606275894E+000 1.450969255695E+000 1.467576745464E+000 + 1.483407901630E+000 1.498443391419E+000 1.512665452173E+000 1.526057945493E+000 + 1.538606404682E+000 1.550298073985E+000 1.561121938232E+000 1.571068741598E+000 + 1.580130994393E+000 1.588302967056E+000 1.595580670745E+000 1.601961824282E+000 + 1.607445807494E+000 1.612033601343E+000 1.615727715605E+000 1.618532105143E+000 + 1.620452076204E+000 1.621494184393E+000 1.621666126289E+000 1.620976626853E+000 + 1.619435324931E+000 1.617052659274E+000 1.613839757514E+000 1.609808330513E+000 + 1.604970574381E+000 1.599339082296E+000 1.592926768009E+000 1.585746802594E+000 + 1.577812565661E+000 1.569137611784E+000 1.559735652491E+000 1.549620553635E+000 + 1.538806347494E+000 1.527307258453E+000 1.515137740643E+000 1.502312525503E+000 + 1.488846676847E+000 1.474755650718E+000 1.460055357097E+000 1.444762220437E+000 + 1.428893235945E+000 1.412466018666E+000 1.395498842630E+000 1.378010667621E+000 + 1.360021151564E+000 1.341550647041E+000 1.322620181000E+000 1.303251417380E+000 + 1.283466603017E+000 1.263288497883E+000 1.242740291338E+000 1.221845506689E+000 + 1.200627896874E+000 1.179111334517E+000 1.157319699917E+000 1.135276770717E+000 + 1.113006117027E+000 1.090531005671E+000 1.067874316926E+000 1.045058476746E+000 + 1.022105406869E+000 9.990364945483E-001 9.758725828925E-001 9.526339819396E-001 + 9.293404997493E-001 9.060114919142E-001 8.826659270682E-001 8.593224652120E-001 + 8.359995450250E-001 8.127154758223E-001 7.894885294658E-001 7.663370273762E-001 + 7.432794178308E-001 7.203343389702E-001 6.975206633847E-001 6.748575207867E-001 + 6.523642960908E-001 6.300606011767E-001 6.079662196920E-001 5.861010253905E-001 + 5.644848756847E-001 5.431374832442E-001 5.220782695635E-001 5.013262053894E-001 + 4.808996437093E-001 4.608161515952E-001 4.410923475572E-001 4.217437511412E-001 + 4.027846513006E-001 3.842279995669E-001 3.660853332474E-001 3.483667328103E-001 + 3.310808162950E-001 3.142347720743E-001 2.978344296223E-001 2.818843661950E-001 + 2.663880455646E-001 2.513479832522E-001 2.367659311502E-001 2.226430730984E-001 + 2.089802219565E-001 1.957780080614E-001 1.830370487358E-001 1.707580887732E-001 + 1.589421025801E-001 1.475903499301E-001 1.367043790575E-001 1.262859730485E-001 + 1.163370381245E-001 1.068594353551E-001 9.785476048197E-002 8.932407974825E-002 + 8.126763274047E-002 7.368451611400E-002 6.657236448591E-002 5.992704657532E-002 + 5.374239566446E-002 4.800999349058E-002 4.271902562172E-002 3.785622413159E-002 + 3.340590992052E-002 2.935014235979E-002 2.566897815164E-002 2.234083458228E-002 + 1.934294496215E-002 1.665188637147E-002 1.424415231878E-002 1.209673615454E-002 + 1.018768571450E-002 8.496586454817E-003 7.004930070587E-003 5.696329081262E-003 + 4.556545849685E-003 3.573317556487E-003 2.735977007366E-003 2.034892527415E-003 + 1.460777547699E-003 1.003949701811E-003 6.536469346717E-004 3.975291981083E-004 + 2.215018266661E-004 1.099812734243E-004 4.667347404107E-005 1.583494810637E-005 + 3.823409655295E-006 5.229008578642E-007 2.353184004389E-008 5.313649495724E-011 + + + + 5.036705391322E-029 5.156400703097E-026 2.972570937435E-024 5.276450317918E-023 + 4.911492769718E-022 3.039112143712E-021 1.418680529793E-020 5.387946928549E-020 + 1.747901804348E-019 5.007370611521E-019 1.297190535585E-018 3.092474266717E-018 + 6.875331964833E-018 1.440314373170E-017 2.866535874981E-017 5.455880146465E-017 + 9.984556802846E-017 1.764804899649E-016 3.024139815784E-016 5.039981547598E-016 + 8.191505116129E-016 1.301462269222E-015 2.025480613491E-015 3.093450922965E-015 + 4.643883683909E-015 6.862421001915E-015 9.995630482328E-015 1.436855720408E-014 + 2.040711159718E-014 2.866662340719E-014 3.986804637025E-014 5.494315710778E-014 + 7.508937368470E-014 1.018333028603E-013 1.371001350268E-013 1.832853962267E-013 + 2.433310614144E-013 3.208274775032E-013 4.202027216907E-013 5.471151761156E-013 + 7.091964636734E-013 9.172363048329E-013 1.186721646047E-012 1.539425343939E-012 + 2.004719604320E-012 2.620687589691E-012 3.435842133658E-012 4.512843015052E-012 + 5.935486576232E-012 7.819431005225E-012 1.032632623286E-011 1.368097182756E-011 + 1.819180623300E-011 2.427578863536E-011 3.248921260926E-011 4.356658414659E-011 + 5.847105447266E-011 7.846209996813E-011 1.051882480455E-010 1.408130842350E-010 + 1.881806401817E-010 2.510225894725E-010 3.342072605709E-010 4.440319845819E-010 + 5.885663781939E-010 7.780634452012E-010 1.025465971819E-009 1.347045858369E-009 + 1.763221299171E-009 2.299597958913E-009 2.988274425719E-009 3.869443053556E-009 + 4.993312289629E-009 6.422381623030E-009 8.234115737066E-009 1.052408624205E-008 + 1.340967389273E-008 1.703445128377E-008 2.157339631187E-008 2.723911683465E-008 + 3.428928882101E-008 4.303551724144E-008 5.385382402174E-008 6.719696483573E-008 + 8.360879466463E-008 1.037409517933E-007 1.283722085504E-007 1.584309314338E-007 + 1.950211887248E-007 2.394531329717E-007 2.932783702297E-007 3.583311124957E-007 + 4.367759956606E-007 5.311635282154E-007 6.444942113012E-007 7.802924431873E-007 + 9.426914097567E-007 1.136530297041E-006 1.367465370713E-006 1.642096764566E-006 + 1.968113198041E-006 2.354457278467E-006 2.811514510590E-006 3.351329621327E-006 + 3.987854318768E-006 4.737231166670E-006 5.618118899241E-006 6.652065246544E-006 + 7.863934188798E-006 9.282395491780E-006 1.094048536840E-005 1.287624814545E-005 + 1.513346988692E-005 1.776251606017E-005 2.082128656996E-005 2.437630288314E-005 + 2.850394357965E-005 3.329184654806E-005 3.884049824829E-005 4.526503304858E-005 + 5.269726867957E-005 6.128800742196E-005 7.120963685296E-005 8.265906891083E-005 + 9.586106175233E-005 1.110719753770E-004 1.285840191941E-004 1.487300574516E-004 + 1.718890464991E-004 1.984921859240E-004 2.290298733997E-004 2.640595603223E-004 + 3.042146117768E-004 3.502142799294E-004 4.028749045209E-004 4.631224578078E-004 + 5.320065541903E-004 6.107160471119E-004 7.005963379252E-004 8.031685236453E-004 + 9.201505132642E-004 1.053480245985E-003 1.205341149719E-003 1.378189984775E-003 + 1.574787226036E-003 1.798230147013E-003 2.051988780752E-003 2.339944945097E-003 + 2.666434532386E-003 3.036293275026E-003 3.454906207092E-003 3.928261046123E-003 + 4.463005716641E-003 5.066510225266E-003 5.746933074334E-003 6.513292364344E-003 + 7.375541683216E-003 8.344650810284E-003 9.432691173582E-003 1.065292588894E-002 + 1.201990407778E-002 1.354955900697E-002 1.525930941788E-002 1.716816321452E-002 + 1.929682246158E-002 2.166778840509E-002 2.430546497221E-002 2.723625893568E-002 + 3.048867464495E-002 3.409340093484E-002 3.808338752839E-002 4.249390795798E-002 + 4.736260574714E-002 5.272952032990E-002 5.863708894728E-002 6.513012056017E-002 + 7.225573766792E-002 8.006328183565E-002 8.860417872377E-002 9.793175849770E-002 + 1.081010276871E-001 1.191683888793E-001 1.311913050816E-001 1.442279061899E-001 + 1.583365357544E-001 1.735752371578E-001 1.900011794016E-001 2.076700239412E-001 + 2.266352353948E-001 2.469473404697E-001 2.686531410628E-001 2.917948891723E-001 + 3.164094329603E-001 3.425273449821E-001 3.701720451893E-001 3.993589327636E-001 + 4.300945420851E-001 4.623757391181E-001 4.961889751498E-001 5.315096150977E-001 + 5.683013574540E-001 6.065157623375E-001 6.460919030479E-001 6.869561549677E-001 + 7.290221336440E-001 7.721907914350E-001 8.163506792795E-001 8.613783770046E-001 + 9.071390922104E-001 9.534874242538E-001 1.000268286299E+000 1.047317974925E+000 + 1.094465373477E+000 1.141533272351E+000 1.188339786760E+000 1.234699850405E+000 + 1.280426761857E+000 1.325333759448E+000 1.369235600093E+000 1.411950117706E+000 + 1.453299737744E+000 1.493112925837E+000 1.531225550440E+000 1.567482141827E+000 + 1.601737032494E+000 1.633855367051E+000 1.663713972815E+000 1.691202085498E+000 + 1.716221927509E+000 1.738689139337E+000 1.758533067194E+000 1.775696912503E+000 + 1.790137750819E+000 1.801826429437E+000 1.810747354090E+000 1.816898175970E+000 + 1.820289390647E+000 1.820943860479E+000 1.818896271787E+000 1.814192537461E+000 + 1.806889154872E+000 1.797052527995E+000 1.784758261647E+000 1.770090434663E+000 + 1.753140857849E+000 1.734008321614E+000 1.712797837404E+000 1.689619876410E+000 + 1.664589608538E+000 1.637826144357E+000 1.609451782569E+000 1.579591265566E+000 + 1.548371045757E+000 1.515918565553E+000 1.482361554155E+000 1.447827344564E+000 + 1.412442214457E+000 1.376330754792E+000 1.339615270081E+000 1.302415214304E+000 + 1.264846666280E+000 1.227021848140E+000 1.189048690128E+000 1.151030444538E+000 + 1.113065351014E+000 1.075246354813E+000 1.037660878923E+000 1.000390650231E+000 + 9.635115791778E-001 9.270936916315E-001 8.912011110385E-001 8.558920882644E-001 + 8.212190759977E-001 7.872288440957E-001 7.539626318690E-001 7.214563329967E-001 + 6.897407085601E-001 6.588416235685E-001 6.287803023262E-001 5.995735980503E-001 + 5.712342722856E-001 5.437712798720E-001 5.171900554904E-001 4.914927981357E-001 + 4.666787502376E-001 4.427444685507E-001 4.196840843668E-001 3.974895510495E-001 + 3.761508773401E-001 3.556563453381E-001 3.359927124897E-001 3.171453973388E-001 + 2.990986491716E-001 2.818357020383E-001 2.653389139277E-001 2.495898921240E-001 + 2.345696059639E-001 2.202584883466E-001 2.066365274257E-001 1.936833499253E-001 + 1.813782974870E-001 1.697004973647E-001 1.586289286548E-001 1.481424850786E-001 + 1.382200351475E-001 1.288404803278E-001 1.199828116127E-001 1.116261646965E-001 + 1.037498737522E-001 9.633352363948E-002 8.935700022389E-002 8.280053837703E-002 + 7.664476715354E-002 7.087075160348E-002 6.546003068116E-002 6.039465074860E-002 + 5.565719424130E-002 5.123080316024E-002 4.709919717101E-002 4.324668622286E-002 + 3.965817773836E-002 3.631917856410E-002 3.321579200466E-002 3.033471038232E-002 + 2.766320366691E-002 2.518910479975E-002 2.290079239000E-002 2.078717148855E-002 + 1.883765314354E-002 1.704213341307E-002 1.539097245749E-002 1.387497425772E-002 + 1.248536741318E-002 1.121378736662E-002 1.005226029006E-002 8.993188751231E-003 + 8.029339169510E-003 7.153830969293E-003 6.360127251415E-003 5.642026733864E-003 + 4.993656663217E-003 4.409466369802E-003 3.884221132138E-003 3.412996028707E-003 + 2.991169485121E-003 2.614416269330E-003 2.278699742895E-003 1.980263238633E-003 + 1.715620500089E-003 1.481545182550E-003 1.275059475253E-003 1.093421957194E-003 + 9.341148422972E-004 7.948308020369E-004 6.734595739699E-004 5.680745727732E-004 + 4.769197164559E-004 3.983966653076E-004 3.310526460559E-004 2.735690004034E-004 + 2.247505576857E-004 1.835158883165E-004 1.488884506608E-004 1.199886018629E-004 + 9.602640573134E-005 7.629514063383E-005 6.016538955049E-005 4.707958437964E-005 + 3.654687777833E-005 2.813822775538E-005 2.148160137398E-005 1.625723182911E-005 + 1.219289469935E-005 9.059200885352E-006 6.664932250361E-006 4.852468419185E-006 + 3.493367580159E-006 2.484169619572E-006 1.742486822096E-006 1.203437087374E-006 + 8.164592717849E-007 5.425323290841E-007 3.518017228032E-007 2.215999576242E-007 + 1.348341696278E-007 7.870300834344E-008 4.369757457612E-008 2.283687915579E-008 + 1.108726098944E-008 4.917783088814E-009 1.950126909979E-009 6.716906802112E-010 + 1.931266623327E-010 4.379280687700E-011 7.190746343428E-012 7.458839318880E-013 + 3.855132765130E-014 6.235645944232E-016 1.046044835353E-018 4.007450402223E-024 + + diff --git a/tests/integrate/101_PW_GTH_CF_CS_Si/INPUT b/tests/integrate/101_PW_GTH_CF_CS_Si/INPUT new file mode 100644 index 0000000000..865002a7a1 --- /dev/null +++ b/tests/integrate/101_PW_GTH_CF_CS_Si/INPUT @@ -0,0 +1,22 @@ +INPUT_PARAMETERS +#Parameters (General) +suffix autotest + +calculation scf + +#Parameters (Accuracy) +ecutwfc 20 +scf_nmax 50 +scf_thr 1.0e-8 + +basis_type pw + +cal_stress 1 +cal_force 1 + +ks_solver cg +mixing_type broyden +mixing_beta 0.7 +mixing_gg0 1.5 +pseudo_dir ../../PP_ORB + diff --git a/tests/integrate/101_PW_GTH_CF_CS_Si/KPT b/tests/integrate/101_PW_GTH_CF_CS_Si/KPT new file mode 100644 index 0000000000..f5f7f4ec34 --- /dev/null +++ b/tests/integrate/101_PW_GTH_CF_CS_Si/KPT @@ -0,0 +1,4 @@ +K_POINTS +0 +Gamma +2 2 2 0 0 0 diff --git a/tests/integrate/101_PW_GTH_CF_CS_Si/STRU b/tests/integrate/101_PW_GTH_CF_CS_Si/STRU new file mode 100644 index 0000000000..69ef473f96 --- /dev/null +++ b/tests/integrate/101_PW_GTH_CF_CS_Si/STRU @@ -0,0 +1,18 @@ +ATOMIC_SPECIES +Si 1.000 cp2k_gen_gth_pbe_si.upf + +LATTICE_CONSTANT +10.2 #Lattice constant + +LATTICE_VECTORS +0.5 0.5 0.0 #Lattice vector 1 +0.5 0.0 0.5 #Lattice vector 2 +0.0 0.5 0.5 #Lattice vector 3 + +ATOMIC_POSITIONS +Cartesian #Cartesian(Unit is LATTICE_CONSTANT) +Si #Name of element +0.0 #Magnetic for this element. +2 #Number of atoms +0.00 0.00 0.00 0 0 0 #x,y,z, move_x, move_y, move_z +0.25 0.25 0.251 1 1 1 diff --git a/tests/integrate/101_PW_GTH_CF_CS_Si/jd b/tests/integrate/101_PW_GTH_CF_CS_Si/jd new file mode 100644 index 0000000000..1864a81e13 --- /dev/null +++ b/tests/integrate/101_PW_GTH_CF_CS_Si/jd @@ -0,0 +1 @@ +GTH pseudopotential for Si, energy, force, stress have been tested with PW base diff --git a/tests/integrate/101_PW_GTH_CF_CS_Si/result.ref b/tests/integrate/101_PW_GTH_CF_CS_Si/result.ref new file mode 100644 index 0000000000..5eae113089 --- /dev/null +++ b/tests/integrate/101_PW_GTH_CF_CS_Si/result.ref @@ -0,0 +1,5 @@ +etotref -211.5954361600755647 +etotperatomref -105.7977180800 +totalforceref 0.125194 +totalstressref 300.384462 +totaltimeref 0.32 diff --git a/tests/integrate/201_NO_GTH_CF_CS_Si/INPUT b/tests/integrate/201_NO_GTH_CF_CS_Si/INPUT new file mode 100644 index 0000000000..76dc37e4be --- /dev/null +++ b/tests/integrate/201_NO_GTH_CF_CS_Si/INPUT @@ -0,0 +1,22 @@ +INPUT_PARAMETERS +#Parameters (General) +suffix autotest + +calculation scf + +#Parameters (Accuracy) +ecutwfc 50 +scf_nmax 50 +scf_thr 1.0e-8 + +basis_type lcao + +cal_stress 1 +cal_force 1 + +mixing_type broyden +mixing_beta 0.7 +mixing_gg0 1.5 +pseudo_dir ../../PP_ORB +orbital_dir ../../PP_ORB + diff --git a/tests/integrate/201_NO_GTH_CF_CS_Si/KPT b/tests/integrate/201_NO_GTH_CF_CS_Si/KPT new file mode 100644 index 0000000000..f5f7f4ec34 --- /dev/null +++ b/tests/integrate/201_NO_GTH_CF_CS_Si/KPT @@ -0,0 +1,4 @@ +K_POINTS +0 +Gamma +2 2 2 0 0 0 diff --git a/tests/integrate/201_NO_GTH_CF_CS_Si/STRU b/tests/integrate/201_NO_GTH_CF_CS_Si/STRU new file mode 100644 index 0000000000..c67ea9b4ff --- /dev/null +++ b/tests/integrate/201_NO_GTH_CF_CS_Si/STRU @@ -0,0 +1,21 @@ +ATOMIC_SPECIES +Si 1.000 cp2k_gen_gth_pbe_si.upf + +NUMERICAL_ORBITAL +cp2k_Si_7au_100Ry_2s2p1d.orb + +LATTICE_CONSTANT +10.2 #Lattice constant + +LATTICE_VECTORS +0.5 0.5 0.0 #Lattice vector 1 +0.5 0.0 0.5 #Lattice vector 2 +0.0 0.5 0.5 #Lattice vector 3 + +ATOMIC_POSITIONS +Cartesian #Cartesian(Unit is LATTICE_CONSTANT) +Si #Name of element +0.0 #Magnetic for this element. +2 #Number of atoms +0.00 0.00 0.00 0 0 0 #x,y,z, move_x, move_y, move_z +0.25 0.25 0.251 1 1 1 diff --git a/tests/integrate/201_NO_GTH_CF_CS_Si/jd b/tests/integrate/201_NO_GTH_CF_CS_Si/jd new file mode 100644 index 0000000000..ab80f31652 --- /dev/null +++ b/tests/integrate/201_NO_GTH_CF_CS_Si/jd @@ -0,0 +1 @@ +GTH pseudopotential for Si, energy, force, stress have been tested with NAO base diff --git a/tests/integrate/201_NO_GTH_CF_CS_Si/result.ref b/tests/integrate/201_NO_GTH_CF_CS_Si/result.ref new file mode 100644 index 0000000000..6755d3100e --- /dev/null +++ b/tests/integrate/201_NO_GTH_CF_CS_Si/result.ref @@ -0,0 +1,5 @@ +etotref -211.6087208400119266 +etotperatomref -105.8043604200 +totalforceref 0.143742 +totalstressref 369.767775 +totaltimeref 0.96 diff --git a/tests/integrate/CASES_CPU.txt b/tests/integrate/CASES_CPU.txt index 2fc34950c7..caaefa94ed 100644 --- a/tests/integrate/CASES_CPU.txt +++ b/tests/integrate/CASES_CPU.txt @@ -19,6 +19,7 @@ 101_PW_upf201_uspp_NaCl 101_PW_VW_pseudopots 101_PW_Coulomb +101_PW_GTH_CF_CS_Si 102_PW_DA_davidson 102_PW_BPCG 102_PW_CG @@ -132,6 +133,7 @@ 201_NO_KP_DJ_Si 201_NO_OU_pseudopots 201_NO_upf201_pseudopots +201_NO_GTH_CF_CS_Si #202_NO_KP_HP_hpseps 203_NO_bspline 203_NO_CF_CS_S1_smallg @@ -342,4 +344,4 @@ 920_OF_MD_LDA 920_OF_MD_LibxcPBE 921_OF_CR_LDA -922_NO_FeBiTe \ No newline at end of file +922_NO_FeBiTe From 958543e7e2b5d88b4086fb958d022c421cea10c5 Mon Sep 17 00:00:00 2001 From: Cstandardlib <49788094+Cstandardlib@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:03:53 +0800 Subject: [PATCH 2/7] Remove redundant code about david in hsolver (#4713) * remove redundant code about david in hsolver * merge #4675 --- source/module_hsolver/diago_david.cpp | 92 +++++++-------------------- source/module_hsolver/diago_david.h | 4 +- source/module_hsolver/hsolver_pw.cpp | 30 ++++----- 3 files changed, 40 insertions(+), 86 deletions(-) diff --git a/source/module_hsolver/diago_david.cpp b/source/module_hsolver/diago_david.cpp index 6752b71a6a..e4ca86beca 100644 --- a/source/module_hsolver/diago_david.cpp +++ b/source/module_hsolver/diago_david.cpp @@ -87,10 +87,7 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, /// - "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 - - // this->dim = psi.get_k_first() ? psi.get_current_nbas() : psi.get_nk() * psi.get_nbasis(); - // this->dmx = psi.get_k_first() ? psi.get_nbasis() : psi.get_nk() * psi.get_nbasis(); - // this->n_band = psi.get_nbands(); + const int nbase_x = this->david_ndim * nband; // maximum dimension of the reduced basis set T *psi_in = psi.get_pointer(); @@ -162,39 +159,20 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, if(this->use_paw) { #ifdef USE_PAW - GlobalC::paw_cell.paw_nl_psi(1, reinterpret_cast*> (psi_in + m*ldPsi/*&psi(m, 0)*/), + GlobalC::paw_cell.paw_nl_psi(1, reinterpret_cast*> (psi_in + m*ldPsi), reinterpret_cast*>(&this->sphi[m * dim])); #endif } else { - /* sPsi func is actually a simple copy currently. - Reserve sPsi logical structure, which can be restored - once needed when S is really implemented. - virtual void sPsi(const T* psi_in, T* spsi, - const int nrow, // dimension of spsi: nbands * nrow - const int npw, // number of plane waves - const int nbands // number of bands - ) const {syncmem_op()(this->ctx, this->ctx, spsi, psi_in, static_cast(nbands * nrow));} - using syncmem_op = base_device::memory::synchronize_memory_op; - */ - /* original code here - phm_in->sPsi(psi_in + m*ldPsi,//&psi(m, 0), - &this->sphi[m * dim], - dim, - dim, - 1); - */ - // doing sPsi by copy, i.e. S=I, spsi=psi - // syncmem_complex_op()(this->ctx, this->ctx, &this->sphi[m * dim], psi_in + m*ldPsi, static_cast(1*dim)); + // phm_in->sPsi(psi_in + m*ldPsi, &this->sphi[m * dim], dim, dim, 1); spsi_func(psi_in + m*ldPsi,&this->sphi[m*dim],dim,dim,1); } } // begin SchmitOrth for (int m = 0; m < nband; m++) { - // haozhihan replace 2022-10-23 - syncmem_complex_op()(this->ctx, this->ctx, pbasis + dim*m /* &basis(m, 0)*/, psi_in + m*ldPsi/*&psi(m, 0)*/, dim); + syncmem_complex_op()(this->ctx, this->ctx, pbasis + dim*m, psi_in + m*ldPsi, dim); this->SchmitOrth(dim, nband, @@ -207,15 +185,13 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, if(this->use_paw) { #ifdef USE_PAW - GlobalC::paw_cell.paw_nl_psi(1,reinterpret_cast*> (pbasis + dim*m /*&basis(m, 0)*/), + GlobalC::paw_cell.paw_nl_psi(1,reinterpret_cast*> (pbasis + dim*m), reinterpret_cast*>(&this->sphi[m * dim])); #endif } else { // phm_in->sPsi(pbasis + dim*m, &this->sphi[m * dim], dim, dim, 1); - // doing sPsi by copy, i.e. S=I, spsi=psi - // syncmem_complex_op()(this->ctx, this->ctx, &this->sphi[m * dim], pbasis + dim*m , static_cast(1*dim)); spsi_func(pbasis + dim*m, &this->sphi[m * dim], dim, dim, 1); } } @@ -286,7 +262,6 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, // ModuleBase::GlobalFunc::ZEROS(psi.get_pointer(), n_band * this->dmx); setmem_complex_op()(this->ctx, psi_in, 0, n_band * ldPsi); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-18 gemm_op()(this->ctx, 'N', 'N', @@ -386,7 +361,6 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil // } // } //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - // replace by haozhihan for (int m = 0; m < notconv; m++) { syncmem_complex_op()(this->ctx, @@ -400,7 +374,6 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-18 gemm_op()(this->ctx, 'N', 'N', @@ -413,7 +386,7 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil vc_ev_vector, // B nbase * notconv nbase, // LDB: if(N) max(1,k) if(T) max(1,n) this->zero, // belta - pbasis + dim*nbase, //&basis(nbase, 0), // C dim * notconv + pbasis + dim*nbase, // C dim * notconv dim // LDC: if(N) max(1, m) ); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -427,7 +400,6 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil // } // } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan replace 2022.11.18 for (int m = 0; m < notconv; m++) { std::vector e_temp_cpu(nbase, (-1.0 * this->eigenvalue[unconv[m]])); @@ -458,7 +430,6 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-18 gemm_op()(this->ctx, 'N', 'N', @@ -471,7 +442,7 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil vc_ev_vector, // B nbase, // LDB: if(N) max(1,k) if(T) max(1,n) this->one, // belta - pbasis + dim*nbase, // &basis(nbase, 0), // C dim * notconv + pbasis + dim*nbase, // C dim * notconv dim // LDC: if(N) max(1, m) ); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -479,14 +450,13 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil for (int m = 0; m < notconv; m++) { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan replace 2022-10-18 if (this->device == base_device::GpuDevice) { #if defined(__CUDA) || defined(__ROCM) vector_div_vector_op()(this->ctx, dim, - pbasis + dim*(nbase + m), //&basis(nbase + m, 0), - pbasis + dim*(nbase + m), //&basis(nbase + m, 0), + pbasis + dim*(nbase + m), + pbasis + dim*(nbase + m), this->d_precondition); #endif } @@ -494,8 +464,8 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil { vector_div_vector_op()(this->ctx, dim, - pbasis + dim*(nbase + m),//&basis(nbase + m, 0), - pbasis + dim*(nbase + m),//&basis(nbase + m, 0), + pbasis + dim*(nbase + m), + pbasis + dim*(nbase + m), this->precondition); } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -520,17 +490,13 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil if(this->use_paw) { #ifdef USE_PAW - GlobalC::paw_cell.paw_nl_psi(1,reinterpret_cast*> (pbasis + dim*(nbase + m) - //&basis(nbase + m, 0) - ), + GlobalC::paw_cell.paw_nl_psi(1,reinterpret_cast*> (pbasis + dim*(nbase + m)), reinterpret_cast*>(&sphi[(nbase + m) * dim])); #endif } else { // phm_in->sPsi(pbasis + dim*(nbase + m), &sphi[(nbase + m) * dim], dim, dim, 1); - // doing sPsi by copy, i.e. S=I, spsi=psi - // syncmem_complex_op()(this->ctx, this->ctx, &sphi[(nbase + m) * dim], pbasis + dim*(nbase + m), static_cast(1*dim)); spsi_func(pbasis + dim*(nbase + m), &sphi[(nbase + m) * dim], dim, dim, 1); } } @@ -538,7 +504,6 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil // calculate the square matrix for future lagranges //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan replace 2022-10-18 gemm_op()(this->ctx, 'C', 'N', @@ -546,7 +511,7 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil notconv, // n: col of B,C dim, // k: col of A, row of B this->one, // alpha - pbasis,//&basis(0, 0), // A + pbasis, // A dim, // LDA: if(N) max(1,m) if(T) max(1,k) &sphi[nbase * dim], // B dim, // LDB: if(N) max(1,k) if(T) max(1,n) @@ -568,17 +533,13 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil if(this->use_paw) { #ifdef USE_PAW - GlobalC::paw_cell.paw_nl_psi(1,reinterpret_cast*> (pbasis + dim*(nbase + m) - // &basis(nbase + m, 0) - ), + GlobalC::paw_cell.paw_nl_psi(1,reinterpret_cast*> (pbasis + dim*(nbase + m)), reinterpret_cast*>(&sphi[(nbase + m) * dim])); #endif } else { // phm_in->sPsi(pbasis + dim*(nbase + m), &sphi[(nbase + m) * dim], dim, dim, 1); - // doing sPsi by copy, i.e. S=I, spsi=psi - // syncmem_complex_op()(this->ctx, this->ctx, &sphi[(nbase + m) * dim], pbasis + dim*(nbase + m), static_cast(1*dim)); spsi_func(pbasis + dim*(nbase + m), &sphi[(nbase + m) * dim], dim, dim, 1); } } @@ -623,7 +584,7 @@ void DiagoDavid::cal_elem(const int& dim, nbase + notconv, dim, this->one, - pbasis + dim*nbase, //&basis(nbase, 0), // dim * notconv + pbasis + dim*nbase, // dim * notconv dim, hphi, // dim * (nbase + notconv) dim, @@ -638,7 +599,7 @@ void DiagoDavid::cal_elem(const int& dim, nbase + notconv, dim, this->one, - pbasis + dim*nbase, //&basis(nbase, 0), // dim * notconv + pbasis + dim*nbase, // dim * notconv dim, sphi, // dim * (nbase + notconv) dim, @@ -776,7 +737,6 @@ void DiagoDavid::refresh(const int& dim, setmem_complex_op()(this->ctx, pbasis , 0, nbase_x * dim); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-18 gemm_op()(this->ctx, 'N', 'N', @@ -794,7 +754,6 @@ void DiagoDavid::refresh(const int& dim, ); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-18 gemm_op()(this->ctx, 'N', 'N', @@ -807,12 +766,12 @@ void DiagoDavid::refresh(const int& dim, this->vcc, // B nbase * nband nbase_x, this->zero, - pbasis + dim*nband,//&basis(nband, 0), // C dim * nband + pbasis + dim*nband, // C dim * nband dim ); - syncmem_complex_op()(this->ctx, this->ctx, hphi, pbasis /*&basis(0, 0)*/, dim * nband); - syncmem_complex_op()(this->ctx, this->ctx, sphi, pbasis + dim*nband/*&basis(nband, 0)*/, dim * nband); + syncmem_complex_op()(this->ctx, this->ctx, hphi, pbasis, dim * nband); + syncmem_complex_op()(this->ctx, this->ctx, sphi, pbasis + dim*nband, dim * nband); /*for (int m = 0; m < nband; m++) { for (int ig = 0; ig < dim; ig++) @@ -828,7 +787,7 @@ void DiagoDavid::refresh(const int& dim, for (int m = 0; m < nband; m++) { - syncmem_complex_op()(this->ctx, this->ctx, pbasis + dim*m/*&basis(m, 0)*/,psi_in + m*ldPsi/*&psi(m, 0)*/, dim); + syncmem_complex_op()(this->ctx, this->ctx, pbasis + dim*m,psi_in + m*ldPsi, dim); /*for (int ig = 0; ig < npw; ig++) basis(m, ig) = psi(m, ig);*/ } @@ -921,7 +880,7 @@ void DiagoDavid::SchmitOrth(const int& dim, assert(m >= 0); assert(m < nband); - T* psi_m = pbasis + dim*m; //&basis(m, 0); + T* psi_m = pbasis + dim*m; // std::complex *lagrange = new std::complex[m + 1]; // ModuleBase::GlobalFunc::ZEROS(lagrange, m + 1); @@ -930,7 +889,6 @@ void DiagoDavid::SchmitOrth(const int& dim, if (mm_size != 0) { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-16 gemm_op()(this->ctx, 'C', 'N', @@ -939,7 +897,6 @@ void DiagoDavid::SchmitOrth(const int& dim, dim, // k: col of A, row of B this->one, // alpha pbasis + dim*(m - mv_size + 1 - mm_size), // A - //&basis(m - mv_size + 1 - mm_size, 0), // A dim, // LDA: if(N) max(1,m) if(T) max(1,k) &sphi[m * dim], // B dim, // LDB: if(N) max(1,k) if(T) max(1,n) @@ -950,13 +907,12 @@ void DiagoDavid::SchmitOrth(const int& dim, } // calculate other lagranges for this band //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-16 gemv_op()(this->ctx, 'C', dim, mv_size, this->one, - pbasis + dim*(m - mv_size + 1),// &basis(m - mv_size + 1, 0), + pbasis + dim*(m - mv_size + 1), dim, &sphi[m * dim], 1, @@ -973,13 +929,12 @@ void DiagoDavid::SchmitOrth(const int& dim, assert(psi_norm > 0.0); - // haozhihan replace 2022-10-24 gemv_op()(this->ctx, 'N', dim, m, this->neg_one, - pbasis, //&basis(0, 0), + pbasis, dim, lagrange_m, 1, @@ -1014,7 +969,6 @@ void DiagoDavid::SchmitOrth(const int& dim, else { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // haozhihan repalce 2022-10-16 vector_div_constant_op()(this->ctx, dim, psi_m, psi_m, psi_norm); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // for (int i = 0; i < npw; i++) diff --git a/source/module_hsolver/diago_david.h b/source/module_hsolver/diago_david.h index 8c171af17c..da614ec821 100644 --- a/source/module_hsolver/diago_david.h +++ b/source/module_hsolver/diago_david.h @@ -98,7 +98,7 @@ class DiagoDavid : public DiagH void cal_elem(const int& dim, int& nbase, - const int nbase_x,// maximum dimension of the reduced basis set + const int nbase_x, const int& notconv, const psi::Psi& basis, const T* hphi, @@ -111,7 +111,7 @@ class DiagoDavid : public DiagH int& nbase, const int nbase_x, const Real* eigenvalue, - const T *psi_in, //const psi::Psi& psi, + const T *psi_in, const int ldPsi, psi::Psi& basis, T* hphi, diff --git a/source/module_hsolver/hsolver_pw.cpp b/source/module_hsolver/hsolver_pw.cpp index 2c955216fe..e9a00df925 100644 --- a/source/module_hsolver/hsolver_pw.cpp +++ b/source/module_hsolver/hsolver_pw.cpp @@ -514,20 +514,24 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, { // Davidson iter parameters - // Allow 5 tries at most. If ntry > ntry_max = 5, exit diag loop. + /// 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. + /// In non-self consistent calculation, do until totally converged. Else + /// allow 5 eigenvecs to be NOT converged. const int notconv_max = ("nscf" == GlobalV::CALCULATION) ? 0 : 5; - // do diag and add davidson iteration counts up to avg_iter + /// convergence threshold const Real david_diag_thr = DiagoIterAssist::PW_DIAG_THR; + /// maximum iterations const int david_maxiter = DiagoIterAssist::PW_DIAG_NMAX; // dimensions of matrix to be solved - const int dim = psi.get_current_nbas(); - const int nband = psi.get_nbands(); - const int ldPsi = psi.get_nbasis(); - + + const int dim = psi.get_current_nbas(); /// dimension of matrix + const int nband = psi.get_nbands(); /// number of eigenpairs sought + const int ldPsi = psi.get_nbasis(); /// leading dimension of psi + + // Davidson matrix-blockvector functions + auto ngk_pointer = psi.get_ngk_pointer(); /// wrap for hpsi function, Matrix \times blockvector auto hpsi_func = [hm, ngk_pointer](T* hpsi_out, @@ -550,6 +554,7 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, ModuleBase::timer::tick("David", "hpsi_func"); }; + /// wrap for spsi function, Matrix \times blockvector auto spsi_func = [hm](const T* psi_in, T* spsi_out, const int nrow, // dimension of spsi: nbands * nrow @@ -561,15 +566,10 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, hm->sPsi(psi_in, spsi_out, nrow, npw, nbands); ModuleBase::timer::tick("David", "spsi_func"); }; - /* - phm_in->sPsi(psi_in + m*ldPsi,//&psi(m, 0), - &this->sphi[m * dim], - dim, - dim, - 1); - */ + DiagoDavid david(pre_condition.data(), GlobalV::PW_DIAG_NDIM, GlobalV::use_paw, comm_info); + // do diag and add davidson iteration counts up to avg_iter DiagoIterAssist::avg_iter += static_cast( david.diag(hpsi_func, spsi_func, dim, nband, ldPsi, psi, eigenvalue, david_diag_thr, david_maxiter, ntry_max, notconv_max)); } From 139a902b308001e5842008082dd43c30be911a46 Mon Sep 17 00:00:00 2001 From: Haozhi Han Date: Wed, 17 Jul 2024 13:05:21 +0800 Subject: [PATCH 3/7] Refactor: separate `parallel_comm` from `parallel_global` (#4715) * separate parallel_comm from global * fix build bug * fix makefile build bug --- source/Makefile.Objects | 1 + source/module_base/CMakeLists.txt | 1 + source/module_base/parallel_comm.cpp | 12 ++++++++++++ source/module_base/parallel_comm.h | 14 +++++++------- source/module_base/parallel_global.cpp | 8 -------- source/module_base/parallel_global.h | 12 +----------- source/module_base/parallel_reduce.cpp | 2 +- source/module_base/test/CMakeLists.txt | 4 ++-- source/module_base/test_parallel/CMakeLists.txt | 4 ++-- .../module_pw/kernels/test/CMakeLists.txt | 1 + source/module_cell/test/CMakeLists.txt | 2 +- .../hamilt_pwdft/test/CMakeLists.txt | 1 + source/module_io/test/CMakeLists.txt | 1 + source/module_md/test/CMakeLists.txt | 1 + 14 files changed, 32 insertions(+), 32 deletions(-) create mode 100644 source/module_base/parallel_comm.cpp diff --git a/source/Makefile.Objects b/source/Makefile.Objects index 87f20643f0..8fd606d933 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -575,6 +575,7 @@ OBJS_MODULE_RI=conv_coulomb_pot_k.o\ OBJS_PARALLEL=parallel_common.o\ parallel_global.o\ + parallel_comm.o\ parallel_grid.o\ parallel_kpoints.o\ parallel_reduce.o\ diff --git a/source/module_base/CMakeLists.txt b/source/module_base/CMakeLists.txt index 819b98c09a..065c2cbe3c 100644 --- a/source/module_base/CMakeLists.txt +++ b/source/module_base/CMakeLists.txt @@ -48,6 +48,7 @@ add_library( abfs-vector3_order.cpp parallel_common.cpp parallel_global.cpp + parallel_comm.cpp parallel_reduce.cpp spherical_bessel_transformer.cpp cubic_spline.cpp diff --git a/source/module_base/parallel_comm.cpp b/source/module_base/parallel_comm.cpp new file mode 100644 index 0000000000..15504b15ad --- /dev/null +++ b/source/module_base/parallel_comm.cpp @@ -0,0 +1,12 @@ +#if defined __MPI + +#include "mpi.h" + +MPI_Comm POOL_WORLD; +MPI_Comm INTER_POOL = MPI_COMM_NULL; // communicator among different pools +MPI_Comm STO_WORLD; +MPI_Comm PARAPW_WORLD; +MPI_Comm GRID_WORLD; // mohan add 2012-01-13 +MPI_Comm DIAG_WORLD; // mohan add 2012-01-13 + +#endif \ No newline at end of file diff --git a/source/module_base/parallel_comm.h b/source/module_base/parallel_comm.h index a84f72737c..8feee297a4 100644 --- a/source/module_base/parallel_comm.h +++ b/source/module_base/parallel_comm.h @@ -2,14 +2,14 @@ #define PARALLEL_COMM_H #ifdef __MPI -#include "mpi.h" -MPI_Comm POOL_WORLD; -MPI_Comm INTER_POOL = MPI_COMM_NULL; // communicator among different pools -MPI_Comm STO_WORLD; -MPI_Comm PARAPW_WORLD; -MPI_Comm GRID_WORLD; // mohan add 2012-01-13 -MPI_Comm DIAG_WORLD; // mohan add 2012-01-13 +#include "mpi.h" +extern MPI_Comm POOL_WORLD; +extern MPI_Comm INTER_POOL; // communicator among different pools +extern MPI_Comm STO_WORLD; +extern MPI_Comm PARAPW_WORLD; +extern MPI_Comm GRID_WORLD; // mohan add 2012-01-13 +extern MPI_Comm DIAG_WORLD; // mohan add 2012-01-13 #endif diff --git a/source/module_base/parallel_global.cpp b/source/module_base/parallel_global.cpp index 4f8700c81c..8d15db036d 100644 --- a/source/module_base/parallel_global.cpp +++ b/source/module_base/parallel_global.cpp @@ -18,15 +18,7 @@ #include #include - #if defined __MPI -MPI_Comm POOL_WORLD; -MPI_Comm INTER_POOL = MPI_COMM_NULL; -MPI_Comm STO_WORLD; -MPI_Comm PARAPW_WORLD; // qianrui add it for sto-dft 2021-4-14 -MPI_Comm GRID_WORLD; // mohan add 2012-01-13z -MPI_Comm DIAG_WORLD; // mohan add 2012-01-13 - namespace Parallel_Global { int mpi_number = 0; diff --git a/source/module_base/parallel_global.h b/source/module_base/parallel_global.h index bd2520b3e2..525b4cacd0 100644 --- a/source/module_base/parallel_global.h +++ b/source/module_base/parallel_global.h @@ -7,17 +7,7 @@ #define PARALLEL_GLOBAL_H #include - -#ifdef __MPI -#include "mpi.h" -extern MPI_Comm POOL_WORLD; -extern MPI_Comm INTER_POOL; // communicator among different pools -extern MPI_Comm STO_WORLD; -extern MPI_Comm PARAPW_WORLD; -extern MPI_Comm GRID_WORLD; // mohan add 2012-01-13 -extern MPI_Comm DIAG_WORLD; // mohan add 2012-01-13 - -#endif +#include "parallel_comm.h" // void myProd(std::complex *in,std::complex *inout,int *len,MPI_Datatype *dptr); diff --git a/source/module_base/parallel_reduce.cpp b/source/module_base/parallel_reduce.cpp index 9fa92942db..1a67bbd3bc 100644 --- a/source/module_base/parallel_reduce.cpp +++ b/source/module_base/parallel_reduce.cpp @@ -1,6 +1,6 @@ #include "parallel_reduce.h" -#include "parallel_global.h" +#include "parallel_comm.h" #include diff --git a/source/module_base/test/CMakeLists.txt b/source/module_base/test/CMakeLists.txt index c4fc2c9a07..5fc434a2c5 100644 --- a/source/module_base/test/CMakeLists.txt +++ b/source/module_base/test/CMakeLists.txt @@ -73,7 +73,7 @@ AddTest( TARGET base_ylmreal LIBS ${math_libs} device SOURCES math_ylmreal_test.cpp ../math_ylmreal.cpp ../complexmatrix.cpp ../global_variable.cpp ../ylm.cpp ../realarray.cpp ../timer.cpp ../matrix.cpp ../vector3.h - ../parallel_reduce.cpp ../parallel_global.cpp ../parallel_common.cpp + ../parallel_reduce.cpp ../parallel_global.cpp ../parallel_comm.cpp ../parallel_common.cpp ../memory.cpp ../libm/branred.cpp ../libm/sincos.cpp ) AddTest( @@ -187,7 +187,7 @@ AddTest( AddTest( TARGET clebsch_gordan_coeff_test SOURCES clebsch_gordan_coeff_test.cpp ../clebsch_gordan_coeff.cpp ../intarray.cpp ../realarray.cpp ../complexmatrix.cpp ../matrix.cpp ../timer.cpp - ../math_ylmreal.cpp ../global_variable.cpp ../ylm.cpp ../timer.cpp ../vector3.h ../parallel_reduce.cpp ../parallel_global.cpp ../parallel_common.cpp + ../math_ylmreal.cpp ../global_variable.cpp ../ylm.cpp ../timer.cpp ../vector3.h ../parallel_reduce.cpp ../parallel_global.cpp ../parallel_comm.cpp ../parallel_common.cpp ../memory.cpp ../libm/branred.cpp ../libm/sincos.cpp ../inverse_matrix.cpp ../lapack_connector.h LIBS ${math_libs} device ) diff --git a/source/module_base/test_parallel/CMakeLists.txt b/source/module_base/test_parallel/CMakeLists.txt index d2b6164d6c..206acdca2f 100644 --- a/source/module_base/test_parallel/CMakeLists.txt +++ b/source/module_base/test_parallel/CMakeLists.txt @@ -7,13 +7,13 @@ AddTest( AddTest( TARGET base_ParaGlobal LIBS MPI::MPI_CXX - SOURCES parallel_global_test.cpp ../global_variable.cpp ../parallel_global.cpp + SOURCES parallel_global_test.cpp ../global_variable.cpp ../parallel_global.cpp ../parallel_comm.cpp ) AddTest( TARGET base_ParaReduce LIBS MPI::MPI_CXX - SOURCES parallel_reduce_test.cpp ../global_variable.cpp ../parallel_global.cpp ../parallel_common.cpp ../parallel_reduce.cpp + SOURCES parallel_reduce_test.cpp ../global_variable.cpp ../parallel_global.cpp ../parallel_comm.cpp ../parallel_common.cpp ../parallel_reduce.cpp ) install(FILES parallel_common_test.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/source/module_basis/module_pw/kernels/test/CMakeLists.txt b/source/module_basis/module_pw/kernels/test/CMakeLists.txt index ab9869eafa..e4ae2bf02e 100644 --- a/source/module_basis/module_pw/kernels/test/CMakeLists.txt +++ b/source/module_basis/module_pw/kernels/test/CMakeLists.txt @@ -6,6 +6,7 @@ AddTest( 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 ) \ No newline at end of file diff --git a/source/module_cell/test/CMakeLists.txt b/source/module_cell/test/CMakeLists.txt index c560b5a38b..9bb738d8d5 100644 --- a/source/module_cell/test/CMakeLists.txt +++ b/source/module_cell/test/CMakeLists.txt @@ -78,7 +78,7 @@ AddTest( TARGET cell_ParaKpoints LIBS MPI::MPI_CXX SOURCES parallel_kpoints_test.cpp ../../module_base/global_variable.cpp ../../module_base/parallel_global.cpp - ../../module_base/parallel_common.cpp ../parallel_kpoints.cpp + ../../module_base/parallel_common.cpp ../../module_base/parallel_comm.cpp ../parallel_kpoints.cpp ) find_program(BASH bash) diff --git a/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt b/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt index 9e6aafc2e6..0bf1c185bf 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt +++ b/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt @@ -16,6 +16,7 @@ AddTest( ../../../module_base/memory.cpp ../../../module_base/timer.cpp ../../../module_base/parallel_global.cpp + ../../../module_base/parallel_comm.cpp ../../../module_base/parallel_common.cpp ../../../module_base/parallel_reduce.cpp ) diff --git a/source/module_io/test/CMakeLists.txt b/source/module_io/test/CMakeLists.txt index 045278c09a..797157d591 100644 --- a/source/module_io/test/CMakeLists.txt +++ b/source/module_io/test/CMakeLists.txt @@ -67,6 +67,7 @@ AddTest( ../../module_base/parallel_reduce.cpp ../../module_base/parallel_common.cpp ../../module_base/parallel_global.cpp + ../../module_base/parallel_comm.cpp ) AddTest( diff --git a/source/module_md/test/CMakeLists.txt b/source/module_md/test/CMakeLists.txt index 0500b648f2..7f4c58c985 100644 --- a/source/module_md/test/CMakeLists.txt +++ b/source/module_md/test/CMakeLists.txt @@ -45,6 +45,7 @@ list(APPEND depend_files ../../module_esolver/esolver_lj.cpp ../../module_base/parallel_reduce.cpp ../../module_base/parallel_global.cpp + ../../module_base/parallel_comm.cpp ) AddTest( From 336702a913ce8283d63f0d5e552aada8a8a96af4 Mon Sep 17 00:00:00 2001 From: GRYS <57103981+grysgreat@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:05:44 +0800 Subject: [PATCH 4/7] Feature: Partial function heterogeneous parallel acceleration of force/stress_cc. (#4555) * Partial function isomerization of force/stress_cc is carried out. * ignore tests. * [pre-commit.ci lite] apply automatic fixes * fix a bug of drhocg. * [pre-commit.ci lite] apply automatic fixes * fix tests. * fix gpu memory. * fix cuda error. * Revert "[pre-commit.ci lite] apply automatic fixes" This reverts commit e7a61d605ff2a8933a5d6b6aaa3b8b5a0bbcc2e7. * revert bots. * Revert "[pre-commit.ci lite] apply automatic fixes" This reverts commit 8421e63a91c9c1cfa96d675b16e5843467360357. * delete force_cc_new. * use gpu kernel of drhoc. * [pre-commit.ci lite] apply automatic fixes * fix a bug. * delete old codes. and remove if. * use vector instead of new and delete. * fix a bug. * fix a bug. * fix a bug. * use omp critical. * reduce if. * use one line for init. --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mohan Chen --- .gitignore | 3 +- source/Makefile.Objects | 1 + .../hamilt_pwdft/CMakeLists.txt | 1 + .../module_hamilt_pw/hamilt_pwdft/forces.cpp | 165 +--------- source/module_hamilt_pw/hamilt_pwdft/forces.h | 10 +- .../hamilt_pwdft/forces_cc.cpp | 309 ++++++++++++++++++ .../hamilt_pwdft/kernels/cuda/stress_op.cu | 108 ++++++ .../hamilt_pwdft/kernels/stress_op.cpp | 83 ++++- .../hamilt_pwdft/kernels/stress_op.h | 52 ++- .../hamilt_pwdft/stress_func.h | 5 +- .../hamilt_pwdft/stress_func_cc.cpp | 132 +++++--- 11 files changed, 635 insertions(+), 234 deletions(-) create mode 100644 source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp diff --git a/.gitignore b/.gitignore index 3ce0cf6879..6653ac00f1 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ time.json *.pyc __pycache__ abacus.json -*.npy \ No newline at end of file +*.npy + diff --git a/source/Makefile.Objects b/source/Makefile.Objects index 8fd606d933..c44f25b2a5 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -594,6 +594,7 @@ OBJS_SRCPW=H_Ewald_pw.o\ forces.o\ forces_us.o\ forces_nl.o\ + forces_cc.o\ fs_nonlocal_tools.o\ force_op.o\ stress_op.o\ diff --git a/source/module_hamilt_pw/hamilt_pwdft/CMakeLists.txt b/source/module_hamilt_pw/hamilt_pwdft/CMakeLists.txt index 0710e27ae2..44eca9406e 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/CMakeLists.txt +++ b/source/module_hamilt_pw/hamilt_pwdft/CMakeLists.txt @@ -9,6 +9,7 @@ list(APPEND objects operator_pw/velocity_pw.cpp operator_pw/operator_pw.cpp forces_nl.cpp + forces_cc.cpp forces.cpp forces_us.cpp stress_func_cc.cpp diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces.cpp index d3a2dafff6..2159e87ebe 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces.cpp @@ -157,7 +157,7 @@ void Forces::cal_force(ModuleBase::matrix& force, // not relevant for PAW if (!GlobalV::use_paw) { - this->cal_force_cc(forcecc, rho_basis, chr); + Forces::cal_force_cc(forcecc, rho_basis, chr); } else { @@ -803,163 +803,6 @@ void Forces::cal_force_ew(ModuleBase::matrix& forceion, return; } -template -void Forces::cal_force_cc(ModuleBase::matrix& forcecc, - ModulePW::PW_Basis* rho_basis, - const Charge* const chr) -{ - ModuleBase::TITLE("Forces", "cal_force_cc"); - // recalculate the exchange-correlation potential. - ModuleBase::timer::tick("Forces", "cal_force_cc"); - - int total_works = 0; - // cal total works for skipping preprocess - for (int it = 0; it < GlobalC::ucell.ntype; ++it) - { - if (GlobalC::ucell.atoms[it].ncpp.nlcc) - { - total_works += GlobalC::ucell.atoms[it].na; - } - } - if (total_works == 0) - { - ModuleBase::timer::tick("Forces", "cal_force_cc"); - return; - } - - ModuleBase::matrix v(GlobalV::NSPIN, rho_basis->nrxx); - - if (XC_Functional::get_func_type() == 3 || XC_Functional::get_func_type() == 5) - { -#ifdef USE_LIBXC - const auto etxc_vtxc_v - = XC_Functional::v_xc_meta(rho_basis->nrxx, GlobalC::ucell.omega, GlobalC::ucell.tpiba, chr); - - // etxc = std::get<0>(etxc_vtxc_v); - // vtxc = std::get<1>(etxc_vtxc_v); - v = std::get<2>(etxc_vtxc_v); -#else - ModuleBase::WARNING_QUIT("cal_force_cc", "to use mGGA, compile with LIBXC"); -#endif - } - else - { - if (GlobalV::NSPIN == 4) - GlobalC::ucell.cal_ux(); - const auto etxc_vtxc_v = XC_Functional::v_xc(rho_basis->nrxx, chr, &GlobalC::ucell); - - // etxc = std::get<0>(etxc_vtxc_v); - // vtxc = std::get<1>(etxc_vtxc_v); - v = std::get<2>(etxc_vtxc_v); - } - - const ModuleBase::matrix vxc = v; - std::complex* psiv = new std::complex[rho_basis->nmaxgr]; - if (GlobalV::NSPIN == 1 || GlobalV::NSPIN == 4) - { -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 1024) -#endif - for (int ir = 0; ir < rho_basis->nrxx; ir++) - { - psiv[ir] = std::complex(vxc(0, ir), 0.0); - } - } - else - { -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 1024) -#endif - for (int ir = 0; ir < rho_basis->nrxx; ir++) - { - psiv[ir] = 0.5 * (vxc(0, ir) + vxc(1, ir)); - } - } - - // to G space - rho_basis->real2recip(psiv, psiv); - - // psiv contains now Vxc(G) - double* rhocg = new double[rho_basis->ngg]; - ModuleBase::GlobalFunc::ZEROS(rhocg, rho_basis->ngg); - - for (int it = 0; it < GlobalC::ucell.ntype; ++it) - { - if (GlobalC::ucell.atoms[it].ncpp.nlcc) - { - chr->non_linear_core_correction(GlobalC::ppcell.numeric, - GlobalC::ucell.atoms[it].ncpp.msh, - GlobalC::ucell.atoms[it].ncpp.r, - GlobalC::ucell.atoms[it].ncpp.rab, - GlobalC::ucell.atoms[it].ncpp.rho_atc, - rhocg); -#ifdef _OPENMP -#pragma omp parallel - { -#endif - for (int ia = 0; ia < GlobalC::ucell.atoms[it].na; ++ia) - { - // get iat form table - int iat = GlobalC::ucell.itia2iat(it, ia); - double force[3] = {0, 0, 0}; -#ifdef _OPENMP -#pragma omp for nowait -#endif - for (int ig = 0; ig < rho_basis->npw; ig++) - { - const ModuleBase::Vector3 gv = rho_basis->gcar[ig]; - const ModuleBase::Vector3 pos = GlobalC::ucell.atoms[it].tau[ia]; - const double rhocgigg = rhocg[rho_basis->ig2igg[ig]]; - const std::complex psiv_conj = conj(psiv[ig]); - - const double arg = ModuleBase::TWO_PI * (gv.x * pos.x + gv.y * pos.y + gv.z * pos.z); - double sinp, cosp; - ModuleBase::libm::sincos(arg, &sinp, &cosp); - const std::complex expiarg = std::complex(sinp, cosp); - - auto ipol0 - = GlobalC::ucell.tpiba * GlobalC::ucell.omega * rhocgigg * gv.x * psiv_conj * expiarg; - force[0] += ipol0.real(); - - auto ipol1 - = GlobalC::ucell.tpiba * GlobalC::ucell.omega * rhocgigg * gv.y * psiv_conj * expiarg; - force[1] += ipol1.real(); - - auto ipol2 - = GlobalC::ucell.tpiba * GlobalC::ucell.omega * rhocgigg * gv.z * psiv_conj * expiarg; - force[2] += ipol2.real(); - } -#ifdef _OPENMP - if (omp_get_num_threads() > 1) - { -#pragma omp atomic - forcecc(iat, 0) += force[0]; -#pragma omp atomic - forcecc(iat, 1) += force[1]; -#pragma omp atomic - forcecc(iat, 2) += force[2]; - } - else -#endif - { - forcecc(iat, 0) += force[0]; - forcecc(iat, 1) += force[1]; - forcecc(iat, 2) += force[2]; - } - } -#ifdef _OPENMP - } // omp parallel -#endif - } - } - - delete[] rhocg; - - 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::cal_force_scc(ModuleBase::matrix& forcescc, @@ -1023,8 +866,9 @@ void Forces::cal_force_scc(ModuleBase::matrix& forcescc, 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 < GlobalC::ucell.ntype; nt++) @@ -1068,8 +912,9 @@ void Forces::cal_force_scc(ModuleBase::matrix& forcescc, #endif for (int ig = 0; ig < rho_basis->npw; ++ig) { - if (ig == ig0) + if (ig == ig0) { continue; +} const ModuleBase::Vector3 gv = rho_basis->gcar[ig]; const double rhocgntigg = rhocgnt[rho_basis->ig2igg[ig]]; const double arg = ModuleBase::TWO_PI * (gv * pos); diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces.h b/source/module_hamilt_pw/hamilt_pwdft/forces.h index fea01c2c7b..d1cb1942af 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces.h +++ b/source/module_hamilt_pw/hamilt_pwdft/forces.h @@ -49,7 +49,6 @@ class Forces void cal_force_loc(ModuleBase::matrix& forcelc, ModulePW::PW_Basis* rho_basis, const Charge* const chr); void cal_force_ew(ModuleBase::matrix& forceion, ModulePW::PW_Basis* rho_basis, const Structure_Factor* p_sf); void cal_force_cc(ModuleBase::matrix& forcecc, ModulePW::PW_Basis* rho_basis, const Charge* const chr); - /** * @brief This routine computes the atomic force of non-local pseudopotential * F^{NL}_i = \sum_{n,k}f_{nk}\sum_I \sum_{lm,l'm'}D_{l,l'}^{I} [ @@ -79,7 +78,14 @@ class Forces const elecstate::ElecState& elec, const UnitCell& ucell); void cal_ylm(int lmax, int npw, const FPTYPE* gk_in, FPTYPE* ylm); - + void deriv_drhoc(const bool& numeric, + const int mesh, + const FPTYPE* r, + const FPTYPE* rab, + const FPTYPE* rhoc, + FPTYPE* drhocg, + ModulePW::PW_Basis* rho_basis, + int type); // used in nonlinear core correction stress private: Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp new file mode 100644 index 0000000000..7c6db88fd9 --- /dev/null +++ b/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp @@ -0,0 +1,309 @@ +#include "forces.h" +#include "stress_func.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_io/output_log.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/potentials/efield.h" +#include "module_elecstate/potentials/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" + +#ifdef _OPENMP +#include +#endif +#ifdef USE_PAW +#include "module_cell/module_paw/paw_cell.h" +#endif + + + +template +void Forces::cal_force_cc(ModuleBase::matrix& forcecc, + ModulePW::PW_Basis* rho_basis, + const Charge* const chr) +{ + ModuleBase::TITLE("Forces", "cal_force_cc"); + // recalculate the exchange-correlation potential. + ModuleBase::timer::tick("Forces", "cal_force_cc"); + + int total_works = 0; + // cal total works for skipping preprocess + for (int it = 0; it < GlobalC::ucell.ntype; ++it) + { + if (GlobalC::ucell.atoms[it].ncpp.nlcc) + { + total_works += GlobalC::ucell.atoms[it].na; + } + } + if (total_works == 0) + { + ModuleBase::timer::tick("Forces", "cal_force_cc"); + return; + } + + ModuleBase::matrix v(GlobalV::NSPIN, rho_basis->nrxx); + + if (XC_Functional::get_func_type() == 3 || XC_Functional::get_func_type() == 5) + { +#ifdef USE_LIBXC + const auto etxc_vtxc_v + = XC_Functional::v_xc_meta(rho_basis->nrxx, GlobalC::ucell.omega, GlobalC::ucell.tpiba, chr); + + // etxc = std::get<0>(etxc_vtxc_v); + // vtxc = std::get<1>(etxc_vtxc_v); + v = std::get<2>(etxc_vtxc_v); +#else + ModuleBase::WARNING_QUIT("cal_force_cc", "to use mGGA, compile with LIBXC"); +#endif + } + else + { + if (GlobalV::NSPIN == 4) + GlobalC::ucell.cal_ux(); + const auto etxc_vtxc_v = XC_Functional::v_xc(rho_basis->nrxx, chr, &GlobalC::ucell); + + // etxc = std::get<0>(etxc_vtxc_v); + // vtxc = std::get<1>(etxc_vtxc_v); + v = std::get<2>(etxc_vtxc_v); + } + + const ModuleBase::matrix vxc = v; + std::complex* psiv = new std::complex[rho_basis->nmaxgr]; + if (GlobalV::NSPIN == 1 || GlobalV::NSPIN == 4) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 1024) +#endif + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + psiv[ir] = std::complex(vxc(0, ir), 0.0); + } + } + else + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 1024) +#endif + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + psiv[ir] = 0.5 * (vxc(0, ir) + vxc(1, ir)); + } + } + + // to G space + rho_basis->real2recip(psiv, psiv); + + // psiv contains now Vxc(G) + double* rhocg = new double[rho_basis->ngg]; + ModuleBase::GlobalFunc::ZEROS(rhocg, rho_basis->ngg); + + for (int it = 0; it < GlobalC::ucell.ntype; ++it) + { + if (GlobalC::ucell.atoms[it].ncpp.nlcc) + { + + // chr->non_linear_core_correction(GlobalC::ppcell.numeric, + // GlobalC::ucell.atoms[it].ncpp.msh, + // GlobalC::ucell.atoms[it].ncpp.r, + // GlobalC::ucell.atoms[it].ncpp.rab, + // GlobalC::ucell.atoms[it].ncpp.rho_atc, + // rhocg); + this->deriv_drhoc(GlobalC::ppcell.numeric, + GlobalC::ucell.atoms[it].ncpp.msh, + GlobalC::ucell.atoms[it].ncpp.r, + GlobalC::ucell.atoms[it].ncpp.rab, + GlobalC::ucell.atoms[it].ncpp.rho_atc, + rhocg, + rho_basis, + 1); +#ifdef _OPENMP +#pragma omp parallel + { +#endif + for (int ia = 0; ia < GlobalC::ucell.atoms[it].na; ++ia) + { + // get iat form table + int iat = GlobalC::ucell.itia2iat(it, ia); + double force[3] = {0, 0, 0}; +#ifdef _OPENMP +#pragma omp for nowait +#endif + for (int ig = 0; ig < rho_basis->npw; ig++) + { + const ModuleBase::Vector3 gv = rho_basis->gcar[ig]; + const ModuleBase::Vector3 pos = GlobalC::ucell.atoms[it].tau[ia]; + const double rhocgigg = rhocg[rho_basis->ig2igg[ig]]; + const std::complex psiv_conj = conj(psiv[ig]); + + const double arg = ModuleBase::TWO_PI * (gv.x * pos.x + gv.y * pos.y + gv.z * pos.z); + double sinp, cosp; + ModuleBase::libm::sincos(arg, &sinp, &cosp); + const std::complex expiarg = std::complex(sinp, cosp); + + auto ipol0 + = GlobalC::ucell.tpiba * GlobalC::ucell.omega * rhocgigg * gv.x * psiv_conj * expiarg; + force[0] += ipol0.real(); + + auto ipol1 + = GlobalC::ucell.tpiba * GlobalC::ucell.omega * rhocgigg * gv.y * psiv_conj * expiarg; + force[1] += ipol1.real(); + + auto ipol2 + = GlobalC::ucell.tpiba * GlobalC::ucell.omega * rhocgigg * gv.z * psiv_conj * expiarg; + force[2] += ipol2.real(); + } +#ifdef _OPENMP +#pragma omp critical + if (omp_get_num_threads() > 1) + { + forcecc(iat, 0) += force[0]; + forcecc(iat, 1) += force[1]; + forcecc(iat, 2) += force[2]; + } + else +#endif + { + forcecc(iat, 0) += force[0]; + forcecc(iat, 1) += force[1]; + forcecc(iat, 2) += force[2]; + } + } +#ifdef _OPENMP + } // omp parallel +#endif + } + } + + delete[] rhocg; + + 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, + ModulePW::PW_Basis* rho_basis, + int type +) +{ + 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 / GlobalC::ucell.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] * GlobalC::ucell.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()(this->ctx, r_d, mesh); + resmem_var_op()(this->ctx, rhoc_d, mesh); + resmem_var_op()(this->ctx, rab_d, mesh); + + resmem_var_op()(this->ctx, aux_d, mesh); + resmem_var_op()(this->ctx, gx_arr_d, rho_basis->ngg); + resmem_var_op()(this->ctx, drhocg_d, rho_basis->ngg); + + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, gx_arr_d, gx_arr.data(), rho_basis->ngg); + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, r_d, r, mesh); + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, rab_d, rab, mesh); + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, 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,GlobalC::ucell.omega,type); + syncmem_var_d2h_op()(this->cpu_ctx, this->ctx, 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,GlobalC::ucell.omega,type); + } + + delmem_var_op()(this->ctx, r_d); + delmem_var_op()(this->ctx, rhoc_d); + delmem_var_op()(this->ctx, rab_d); + delmem_var_op()(this->ctx, gx_arr_d); + delmem_var_op()(this->ctx, drhocg_d); + return; +} + + +template class Forces; +#if ((defined __CUDA) || (defined __ROCM)) +template class Forces; +#endif \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/stress_op.cu b/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/stress_op.cu index 750e40edb0..a507feefc7 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/stress_op.cu +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/stress_op.cu @@ -353,6 +353,88 @@ __global__ void cal_vq_deri( tab, it, ib, tab_2, tab_3, table_interval, gnorm[idx]); } + +template +__global__ void cal_stress_drhoc_aux0( + 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 +){ + const double FOUR_PI = 4.0 * 3.14159265358979323846; + + int idx = threadIdx.x + blockIdx.x * blockDim.x; + + FPTYPE aux_d[2]; + FPTYPE rhocg1=0.0, f_0=0.0, f_2=0.0, f_1=0.0; + + if (idx >= ngg) {return;} + + for( int ir = 0;ir< mesh; ir++) + { + aux_d [ir%2] = r [ir] * rhoc [ir] * (r [ir] * cos (gx_arr[idx] * r [ir] ) / gx_arr[idx] - sin (gx_arr[idx] * r [ir] ) / pow(gx_arr[idx],2)); + + if(ir==0){ + f_0 = aux_d[ir%2]*rab[ir]; + } else if(ir==mesh-2){ + f_2 = aux_d[ir%2]*rab[ir]; + } else if(ir==mesh-1) { + f_1 = aux_d[ir%2]*rab[ir]; + } else if(ir%2==0){ + const double f1 = aux_d[1]*rab[ir-1]; + rhocg1 += f1 + f1 + aux_d[0]*rab[ir]; + } + + }//ir + rhocg1 += f_2+f_2; + rhocg1 += rhocg1; + rhocg1 += f_0 + f_1; + rhocg1/=3.0; + + drhocg [idx] = FOUR_PI / omega * rhocg1; +} + +template +__global__ void cal_stress_drhoc_aux1( + 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 +){ + const double FOUR_PI = 4.0 * 3.14159265358979323846; + + int idx = threadIdx.x + blockIdx.x * blockDim.x; + + FPTYPE aux_d[2]; + FPTYPE rhocg1=0.0, f_0=0.0, f_2=0.0, f_1=0.0; + + if (idx >= ngg) {return;} + + for( int ir = 0;ir< mesh; ir++) + { + aux_d [ir%2] = ir!=0 ? sin(gx_arr[idx] * r[ir]) / (gx_arr[idx] * r[ir]) : 1.0; + aux_d [ir%2] = r[ir] * r[ir] * rhoc [ir] * aux_d [ir%2]; + + if(ir==0){ + f_0 = aux_d[ir%2]*rab[ir]; + } else if(ir==mesh-2){ + f_2 = aux_d[ir%2]*rab[ir]; + } else if(ir==mesh-1) { + f_1 = aux_d[ir%2]*rab[ir]; + } else if(ir%2==0){ + const double f1 = aux_d[1]*rab[ir-1]; + rhocg1 += f1 + f1 + aux_d[0]*rab[ir]; + } + + }//ir + rhocg1 += f_2+f_2; + rhocg1 += rhocg1; + rhocg1 += f_0 + f_1; + rhocg1/=3.0; + + drhocg [idx] = FOUR_PI * rhocg1 / omega; +} + + + template void cal_vkb_op::operator()( const base_device::DEVICE_GPU* ctx, @@ -448,6 +530,29 @@ void cal_vq_deri_op::operator()( return ; } +template +void cal_stress_drhoc_aux_op::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 + ) +{ + const int block = (ngg + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; + + if(type == 0) { + cal_stress_drhoc_aux0<<>>( + r,rhoc,gx_arr,rab,drhocg,mesh,igl0,ngg,omega + ); + } else if(type == 1 ){ + cal_stress_drhoc_aux1<<>>( + r,rhoc,gx_arr,rab,drhocg,mesh,igl0,ngg,omega + ); + } + + return ; +} + // template // void prepare_vkb_deri_ptr_op::operator()( // const base_device::DEVICE_GPU* ctx, @@ -520,6 +625,9 @@ template struct cal_vkb_op; template struct cal_vkb_deri_op; template struct cal_vkb_deri_op; +template struct cal_stress_drhoc_aux_op; +template struct cal_stress_drhoc_aux_op; + // template struct prepare_vkb_deri_ptr_op; // template struct prepare_vkb_deri_ptr_op; } // namespace hamilt \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.cpp index c23b2965c0..f70f21dafa 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.cpp @@ -4,7 +4,7 @@ #include "module_base/memory.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/vnl_op.h" #include "vnl_tools.hpp" - +#include #include namespace hamilt @@ -312,6 +312,84 @@ struct cal_vq_deri_op } }; + +template +void Simpson_Integral +( + const int mesh, + FPTYPE * func, + const FPTYPE * rab, + FPTYPE &asum +) +{ + assert(mesh&1); + + asum = 0.00; + 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[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 + +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) { + const double FOUR_PI = 4.0 * 3.14159265358979323846; + FPTYPE rhocg1 = 0; + // printf("%d,%d,%lf\n",ngg,mesh,omega); + +#ifdef _OPENMP +#pragma omp parallel + { +#endif + +#ifdef _OPENMP +#pragma omp for +#endif + for(int igl = 0;igl< ngg;igl++) + { + //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 { + aux [ir] = r[ir] < 1.0e-8 ? rhoc [ir] : rhoc [ir] * sin(gx_arr[igl] * r[ir]) / (gx_arr[igl] * r[ir]); + } + }//ir + Simpson_Integral(mesh, aux.data(), rab, rhocg1); + if(type ==0 ) drhocg [igl] = FOUR_PI / omega * rhocg1; + else if(type == 1) drhocg [igl] = FOUR_PI * rhocg1 / omega; + else drhocg [igl] = rhocg1; + } +#ifdef _OPENMP + } +#endif + } +}; + + // // cpu version first, gpu version later // template // struct prepare_vkb_deri_ptr_op{ @@ -384,6 +462,9 @@ template struct cal_vq_op; template struct cal_vq_deri_op; template struct cal_vq_deri_op; +template struct cal_stress_drhoc_aux_op; +template struct cal_stress_drhoc_aux_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 19c28bf8b7..8c67369b31 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h @@ -179,20 +179,16 @@ struct cal_vq_deri_op FPTYPE* vq); }; -// // cpu version first, gpu version later -// template -// struct prepare_vkb_deri_ptr_op{ -// void operator()( -// const Device *ctx, -// int nbeta, double* nhtol, int nhtol_nc, int npw, int it, -// int ipol, int jpol, -// std::complex*vkb_out, std::complex** vkb_ptrs, -// FPTYPE* ylm_in, FPTYPE** ylm_ptrs, -// FPTYPE* ylm_deri_in, FPTYPE** ylm_deri_ptr1s, FPTYPE** ylm_deri_ptr2s, -// FPTYPE* vq_in, FPTYPE** vq_ptrs, -// FPTYPE* vq_deri_in, FPTYPE** vq_deri_ptrs -// ); -// }; + +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 + ); +}; #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM template @@ -309,20 +305,20 @@ struct cal_vq_deri_op FPTYPE* vq); }; -// // cpu version first, gpu version later -// template -// struct prepare_vkb_deri_ptr_op{ -// void operator()( -// const base_device::DEVICE_GPU* ctx, -// int nbeta, double* nhtol, int nhtol_nc, int npw, int it, -// int ipol, int jpol, -// std::complex*vkb_out, std::complex** vkb_ptrs, -// FPTYPE* ylm_in, FPTYPE** ylm_ptrs, -// FPTYPE* ylm_deri_in, FPTYPE** ylm_deri_ptr1s, FPTYPE** ylm_deri_ptr2s, -// FPTYPE* vq_in, FPTYPE** vq_ptrs, -// FPTYPE* vq_deri_in, FPTYPE** vq_deri_ptrs -// ); -// }; + + +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 + ); +}; + + + #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func.h b/source/module_hamilt_pw/hamilt_pwdft/stress_func.h index ee8e41de77..f455215f63 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func.h +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func.h @@ -117,8 +117,9 @@ class Stress_Func const FPTYPE* rab, const FPTYPE* rhoc, FPTYPE* drhocg, - ModulePW::PW_Basis* rho_basis); // used in nonlinear core correction stress - + 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(ModuleBase::matrix& sigma, ModulePW::PW_Basis* rho_basis, 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 c5052c6e32..3b0a0a34d0 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_cc.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_cc.cpp @@ -57,7 +57,8 @@ void Stress_Func::stress_cc(ModuleBase::matrix& sigma, } else { - if(GlobalV::NSPIN==4) GlobalC::ucell.cal_ux(); + if(GlobalV::NSPIN==4) { GlobalC::ucell.cal_ux(); +} const auto etxc_vtxc_v = XC_Functional::v_xc(rho_basis->nrxx, chr, &GlobalC::ucell); // etxc = std::get<0>(etxc_vtxc_v); // may delete? // vtxc = std::get<1>(etxc_vtxc_v); // may delete? @@ -100,13 +101,15 @@ void Stress_Func::stress_cc(ModuleBase::matrix& sigma, if(GlobalC::ucell.atoms[nt].ncpp.nlcc) { //drhoc(); - chr->non_linear_core_correction( + this->deriv_drhoc( GlobalC::ppcell.numeric, GlobalC::ucell.atoms[nt].ncpp.msh, GlobalC::ucell.atoms[nt].ncpp.r, GlobalC::ucell.atoms[nt].ncpp.rab, GlobalC::ucell.atoms[nt].ncpp.rho_atc, - rhocg); + rhocg, + rho_basis, + 1); //diagonal term @@ -116,10 +119,11 @@ void Stress_Func::stress_cc(ModuleBase::matrix& sigma, 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 ( @@ -129,7 +133,8 @@ void Stress_Func::stress_cc(ModuleBase::matrix& sigma, GlobalC::ucell.atoms[nt].ncpp.rab, GlobalC::ucell.atoms[nt].ncpp.rho_atc, rhocg, - rho_basis); + rho_basis, + 0); // non diagonal term (g=0 contribution missing) #ifdef _OPENMP #pragma omp parallel @@ -142,7 +147,8 @@ void Stress_Func::stress_cc(ModuleBase::matrix& sigma, for(int ig = 0;ig< rho_basis->npw;ig++) { const FPTYPE norm_g = sqrt(rho_basis->gg[ig]); - if(norm_g < 1e-4) continue; + if(norm_g < 1e-4) { continue; +} for (int l = 0; l < 3; l++) { for (int m = 0;m< 3;m++) @@ -201,10 +207,21 @@ void Stress_Func::deriv_drhoc const FPTYPE *rab, const FPTYPE *rhoc, FPTYPE *drhocg, - ModulePW::PW_Basis* rho_basis + ModulePW::PW_Basis* rho_basis, + int type ) { 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 @@ -212,46 +229,81 @@ void Stress_Func::deriv_drhoc // // G=0 term // - if (rho_basis->gg_uniq[0] < 1.0e-8) - { - drhocg [0] = 0.0; - igl0 = 1; - } - else - { - igl0 = 0; + 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 / GlobalC::ucell.omega; + igl0 = 1; + } + else + { + igl0 = 0; + } } -#ifdef _OPENMP -#pragma omp parallel -{ -#endif - double gx = 0, rhocg1 = 0; - // the modulus of g for a given shell - // the fourier transform - double *aux = new double[ mesh]; - // auxiliary memory for integration + // // G <> 0 term - // + //] + #ifdef _OPENMP -#pragma omp for +#pragma omp parallel for #endif for(int igl = igl0;igl< rho_basis->ngg;igl++) { - gx = sqrt(rho_basis->gg_uniq[igl] * GlobalC::ucell.tpiba2); - for( int ir = 0;ir< mesh; ir++) - { - aux [ir] = r [ir] * rhoc [ir] * (r [ir] * cos (gx * r [ir] ) / gx - sin (gx * r [ir] ) / pow(gx,2)); - }//ir - ModuleBase::Integral::Simpson_Integral(mesh, aux, rab, rhocg1); - drhocg [igl] = ModuleBase::FOUR_PI / GlobalC::ucell.omega * rhocg1; - }//igl - - delete [] aux; -#ifdef _OPENMP -} -#endif + gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl] * GlobalC::ucell.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()(this->ctx, r_d, mesh); + resmem_var_op()(this->ctx, rhoc_d, mesh); + resmem_var_op()(this->ctx, rab_d, mesh); + + resmem_var_op()(this->ctx, aux_d, mesh); + resmem_var_op()(this->ctx, gx_arr_d, rho_basis->ngg); + resmem_var_op()(this->ctx, drhocg_d, rho_basis->ngg); + + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, gx_arr_d, gx_arr.data(), rho_basis->ngg); + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, r_d, r, mesh); + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, rab_d, rab, mesh); + syncmem_var_h2d_op()(this->ctx, this->cpu_ctx, 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,GlobalC::ucell.omega,type); + syncmem_var_d2h_op()(this->cpu_ctx, this->ctx, 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,GlobalC::ucell.omega,type); + + } + delmem_var_op()(this->ctx, r_d); + delmem_var_op()(this->ctx, rhoc_d); + delmem_var_op()(this->ctx, rab_d); + delmem_var_op()(this->ctx, gx_arr_d); + delmem_var_op()(this->ctx, drhocg_d); return; } From f2d31f56cc8949cf5a78aedb1278e338345fb54d Mon Sep 17 00:00:00 2001 From: Peng Xingliang <91927439+pxlxingliang@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:06:46 +0800 Subject: [PATCH 5/7] test: correct the inputs in /examples (#4717) --- examples/bsse/water/run.sh | 4 ++-- examples/dft_plus_u/NiO/INPUT | 8 -------- examples/relax/pw_al/INPUT | 1 - 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/examples/bsse/water/run.sh b/examples/bsse/water/run.sh index c7a6ec2ca2..2a42bbcaf2 100755 --- a/examples/bsse/water/run.sh +++ b/examples/bsse/water/run.sh @@ -35,7 +35,7 @@ echo "E_H1: $E_H1" >> result.out echo "E_H2: $E_H2" >> result.out result_ref=$(cat result.ref | head -1) difference=$(echo "scale=12; $result - $result_ref" | bc -l) -difference=$(awk -v a=$difference 'BEGIN{if(a<0) print -1*a; else print a}') +abs_difference=$(echo "scale=12; if ($difference < 0) $difference * -1 else $difference" | bc) if [[ ! -f H2O_scf.output ]] || [[ ! -f O_scf.output ]] || @@ -49,7 +49,7 @@ if [[ ! -f H2O_scf.output ]] || [[ ! ( "$(tail -1 OUT.ABACUS/running_scf_O.log)" == " Total Time :"* ) ]] || [[ ! ( "$(tail -1 OUT.ABACUS/running_scf_H1.log)" == " Total Time :"* ) ]] || [[ ! ( "$(tail -1 OUT.ABACUS/running_scf_H2.log)" == " Total Time :"* ) ]] || - [[ $difference > 0.000001 ]] + [ $(echo "$abs_difference < 0.00001" | bc) -ne 1 ] then echo "job is failed!" exit 1 diff --git a/examples/dft_plus_u/NiO/INPUT b/examples/dft_plus_u/NiO/INPUT index 47bdc70395..eade71e796 100644 --- a/examples/dft_plus_u/NiO/INPUT +++ b/examples/dft_plus_u/NiO/INPUT @@ -10,17 +10,9 @@ calculation scf ecutwfc 100 scf_thr 1.0e-6 scf_nmax 200 -out_chg 1 - -#init_chg file -#out_dos 1 -#dos_sigma 0.07 -#out_band 1 smearing_method gaussian smearing_sigma 0.05 - - mixing_type broyden mixing_beta 0.4 #mixing_gg0 1.5 diff --git a/examples/relax/pw_al/INPUT b/examples/relax/pw_al/INPUT index 48785d3b09..d0431f9b86 100644 --- a/examples/relax/pw_al/INPUT +++ b/examples/relax/pw_al/INPUT @@ -19,7 +19,6 @@ mixing_beta 0.7 scf_thr 1e-08 cal_force 1 cal_stress 1 -out_stru 1 kspacing 0.12 chg_extrap second-order #atomic; first-order; second-order; dm:coefficients of SIA pseudo_dir ../../../tests/PP_ORB From 629ba64f30e319b2ff4d94a780a8d09b6d25bcdb Mon Sep 17 00:00:00 2001 From: Taoni Bao Date: Wed, 17 Jul 2024 17:26:48 +0800 Subject: [PATCH 6/7] Add normalization procedure for pchg multi-k calculation (#4724) --- source/module_io/istate_charge.cpp | 31 +++++++++++++++++++++++++----- source/module_io/istate_charge.h | 3 ++- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/source/module_io/istate_charge.cpp b/source/module_io/istate_charge.cpp index 87116b8fa7..e699c61f04 100644 --- a/source/module_io/istate_charge.cpp +++ b/source/module_io/istate_charge.cpp @@ -217,7 +217,7 @@ void IState_Charge::begin(Gint_k& gk, elecstate::DensityMatrix, double> DM(&kv, this->ParaV, nspin); #ifdef __MPI - this->idmatrix(ib, nspin, nelec, nlocal, wg, DM, kv); + this->idmatrix(ib, nspin, nelec, nlocal, wg, DM, kv, if_separate_k); #else ModuleBase::WARNING_QUIT("IState_Charge::begin", "The `pchg` calculation is only available for MPI now!"); #endif @@ -347,6 +347,8 @@ void IState_Charge::select_bands(const int nbands_istate, const int mode, const int fermi_band) { + ModuleBase::TITLE("IState_Charge", "select_bands"); + int bands_below = 0; int bands_above = 0; @@ -358,10 +360,10 @@ void IState_Charge::select_bands(const int nbands_istate, bands_below = nbands_istate; bands_above = nbands_istate; - std::cout << " Plot band-decomposed charge densities below Fermi surface with " << bands_below << " bands." + std::cout << " Plot band-decomposed charge densities below the Fermi surface with " << bands_below << " bands." << std::endl; - std::cout << " Plot band-decomposed charge densities above Fermi surface with " << bands_above << " bands." + std::cout << " Plot band-decomposed charge densities above the Fermi surface with " << bands_above << " bands." << std::endl; for (int ib = 0; ib < nbands; ++ib) @@ -505,13 +507,23 @@ void IState_Charge::idmatrix(const int& ib, const int nlocal, const ModuleBase::matrix& wg, elecstate::DensityMatrix, double>& DM, - const K_Vectors& kv) + const K_Vectors& kv, + const bool if_separate_k) { ModuleBase::TITLE("IState_Charge", "idmatrix"); assert(wg.nr == kv.get_nks()); const int fermi_band = static_cast((nelec + 1) / 2 + 1.0e-8); + // To ensure the normalization of charge density in multi-k calculation (if if_separate_k is true) + double wg_sum_k = 0; + double wg_sum_k_homo = 0; + for (int ik = 0; ik < kv.get_nks() / nspin; ++ik) + { + wg_sum_k += wg(ik, ib); + wg_sum_k_homo += wg(ik, fermi_band - 1); + } + for (int ik = 0; ik < kv.get_nks(); ++ik) { std::cout << " Calculating density matrix for band " << ib + 1 << ", k-point " @@ -522,7 +534,16 @@ void IState_Charge::idmatrix(const int& ib, if (ib_local >= 0) { - wg_local[ib_local] = (ib < fermi_band) ? wg(ik, ib) : wg(ik, fermi_band - 1); + double wg_value; + if (if_separate_k) + { + wg_value = (ib < fermi_band) ? wg_sum_k : wg_sum_k_homo; + } + else + { + wg_value = (ib < fermi_band) ? wg(ik, ib) : wg(ik, fermi_band - 1); + } + wg_local[ib_local] = wg_value; } this->psi_k->fix_k(ik); diff --git a/source/module_io/istate_charge.h b/source/module_io/istate_charge.h index 78c3529a4c..149b736e94 100644 --- a/source/module_io/istate_charge.h +++ b/source/module_io/istate_charge.h @@ -130,7 +130,8 @@ class IState_Charge const int nlocal, const ModuleBase::matrix& wg, elecstate::DensityMatrix, double>& DM, - const K_Vectors& kv); + const K_Vectors& kv, + const bool if_separate_k); #endif std::vector bands_picked_; From be8f40fc31a2e06d7c9d00bd19e6781d088d7e7e Mon Sep 17 00:00:00 2001 From: Cstandardlib <49788094+Cstandardlib@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:45:16 +0800 Subject: [PATCH 7/7] Refactor david: complete removal of Psi and Hamilt datatypes (#4722) * Refactor david: replace Psi parameter with pointer * remove Psi-typed variable basis in david * complete Psi removal in david: clear redundant and temporary code --- source/module_hsolver/diago_david.cpp | 52 +++++++------------ source/module_hsolver/diago_david.h | 41 +++++++-------- source/module_hsolver/hsolver_pw.cpp | 2 +- .../test/diago_david_float_test.cpp | 2 +- .../test/diago_david_real_test.cpp | 2 +- .../module_hsolver/test/diago_david_test.cpp | 2 +- source/module_hsolver/test/hsolver_pw_sup.h | 21 ++++---- source/module_lr/hsolver_lrtd.cpp | 2 +- 8 files changed, 54 insertions(+), 70 deletions(-) diff --git a/source/module_hsolver/diago_david.cpp b/source/module_hsolver/diago_david.cpp index e4ca86beca..32be4b1134 100644 --- a/source/module_hsolver/diago_david.cpp +++ b/source/module_hsolver/diago_david.cpp @@ -60,7 +60,7 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, const int dim, const int nband, const int ldPsi, - psi::Psi& psi, + T *psi_in, Real* eigenvalue_in, const Real david_diag_thr, const int david_maxiter) @@ -90,7 +90,7 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, const int nbase_x = this->david_ndim * nband; // maximum dimension of the reduced basis set - T *psi_in = psi.get_pointer(); + // T *psi_in = psi.get_pointer(); // the lowest N eigenvalues base_device::memory::resize_memory_op()( @@ -98,13 +98,9 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, base_device::memory::set_memory_op()( this->cpu_ctx, this->eigenvalue, 0, nbase_x); - psi::Psi basis(1, - nbase_x, - dim, - &(psi.get_ngk(0))); // the reduced basis set // basis(dim, nbase_x), leading dimension = dim - pbasis = basis.get_pointer(); - ModuleBase::Memory::record("DAV::basis", nbase_x * dim * sizeof(T)); + resmem_complex_op()(this->ctx, pbasis, nbase_x * dim, "DAV::basis"); + setmem_complex_op()(this->ctx, pbasis, 0, nbase_x * dim); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ModuleBase::ComplexMatrix hp(nbase_x, dim); // the product of H and psi in the reduced basis set @@ -177,7 +173,6 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, this->SchmitOrth(dim, nband, m, - basis, this->sphi, &this->lagrange_matrix[m * nband], pre_matrix_mm_m[m], @@ -201,7 +196,7 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, // phm_in->ops->hPsi(dav_hpsi_in); hpsi_func(this->hphi, pbasis, nbase_x, dim, 0, nband - 1); - this->cal_elem(dim, nbase, nbase_x, this->notconv, basis, this->hphi, this->sphi, this->hcc, this->scc); + this->cal_elem(dim, nbase, nbase_x, this->notconv, this->hphi, this->sphi, this->hcc, this->scc); this->diag_zhegvx(nbase, nband, this->hcc, this->scc, nbase_x, this->eigenvalue, this->vcc); @@ -223,14 +218,13 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, nbase, nbase_x, this->notconv, - basis, this->hphi, this->sphi, this->vcc, unconv.data(), this->eigenvalue); - this->cal_elem(dim, nbase, nbase_x, this->notconv, basis, this->hphi, this->sphi, this->hcc, this->scc); + this->cal_elem(dim, nbase, nbase_x, this->notconv, this->hphi, this->sphi, this->hcc, this->scc); this->diag_zhegvx(nbase, nband, this->hcc, this->scc, nbase_x, this->eigenvalue, this->vcc); @@ -265,16 +259,16 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, gemm_op()(this->ctx, 'N', 'N', - dim, // m: row of A,C + dim, // m: row of A,C nband, // n: col of B,C - nbase, // k: col of A, row of B + nbase, // k: col of A, row of B this->one, - pbasis, // basis.get_pointer(), // A dim * nbase + pbasis, // A dim * nbase dim, - this->vcc, // B nbase * n_band + this->vcc, // B nbase * n_band nbase_x, this->zero, - psi_in, // C dim * n_band + psi_in, // C dim * n_band ldPsi ); @@ -298,7 +292,6 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, eigenvalue_in, psi_in, //psi, ldPsi, - basis, this->hphi, this->sphi, this->hcc, @@ -317,13 +310,12 @@ int DiagoDavid::diag_mock(const HPsiFunc& hpsi_func, } template -void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamilt* phm_in, +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& nbase, // current dimension of the reduced basis + const int nbase_x, // maximum dimension of the reduced basis set const int& notconv, - psi::Psi& basis, T* hphi, T* sphi, const T* vcc, @@ -525,7 +517,6 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil this->SchmitOrth(dim, nbase + notconv, nbase + m, - basis, sphi, &lagrange[m * (nbase + notconv)], pre_matrix_mm_m[m], @@ -559,10 +550,9 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // hamilt::Hamil 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 psi::Psi& basis, + 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* hphi, const T* sphi, T* hcc, @@ -718,9 +708,8 @@ void DiagoDavid::refresh(const int& dim, int& nbase, const int nbase_x, // maximum dimension of the reduced basis set const Real* eigenvalue_in, - const T *psi_in, // const psi::Psi& psi, + const T *psi_in, const int ldPsi, - psi::Psi& basis, T* hp, T* sp, T* hc, @@ -861,7 +850,6 @@ template void DiagoDavid::SchmitOrth(const int& dim, const int nband, const int m, - psi::Psi& basis, const T* sphi, T* lagrange_m, const int mm_size, @@ -1079,7 +1067,7 @@ int DiagoDavid::diag(const HPsiFunc& hpsi_func, const int dim, const int nband, const int ldPsi, - psi::Psi& psi, + T *psi_in, Real* eigenvalue_in, const Real david_diag_thr, const int david_maxiter, @@ -1101,7 +1089,7 @@ int DiagoDavid::diag(const HPsiFunc& hpsi_func, int sum_dav_iter = 0; do { - sum_dav_iter += this->diag_mock(hpsi_func, spsi_func, dim, nband, ldPsi, psi, eigenvalue_in, david_diag_thr, david_maxiter); + sum_dav_iter += this->diag_mock(hpsi_func, spsi_func, dim, nband, ldPsi, psi_in, eigenvalue_in, david_diag_thr, david_maxiter); ++ntry; } while (!check_block_conv(ntry, this->notconv, ntry_max, notconv_max)); diff --git a/source/module_hsolver/diago_david.h b/source/module_hsolver/diago_david.h index da614ec821..bd0fcbc1e1 100644 --- a/source/module_hsolver/diago_david.h +++ b/source/module_hsolver/diago_david.h @@ -34,7 +34,7 @@ class DiagoDavid : public DiagH const int dim, // Dimension of the input matrix psi to be diagonalized const int nband, // Number of required eigenpairs const int ldPsi, // Leading dimension of the psi input - psi::Psi& psi, // Reference to the wavefunction object for eigenvectors + T *psi_in, // Pointer to eigenvectors Real* eigenvalue_in, // Pointer to store the resulting eigenvalues const Real david_diag_thr, // Convergence threshold for the Davidson iteration const int david_maxiter, // Maximum allowed iterations for the Davidson method @@ -56,25 +56,24 @@ class DiagoDavid : public DiagH /// number of unconverged eigenvalues int notconv = 0; - /// precondition for diag, diagonal approximation of - /// matrix A (i.e. Hamilt) + /// precondition for diag, diagonal approximation of matrix A(i.e. Hamilt) const Real* precondition = nullptr; Real* d_precondition = nullptr; /// eigenvalue results Real* eigenvalue = nullptr; - T *pbasis = nullptr; // basis set + T *pbasis = nullptr; /// pointer to basis set(dim, nbase_x), leading dimension = dim - T* hphi = nullptr; // the product of H and psi in the reduced basis set + T* hphi = nullptr; /// the product of H and psi in the reduced basis set - T* sphi = nullptr; // the Product of S and psi in the reduced basis set + T* sphi = 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; @@ -83,13 +82,22 @@ class DiagoDavid : public DiagH base_device::DEVICE_CPU* cpu_ctx = {}; base_device::AbacusDevice_t device = {}; + int diag_mock(const HPsiFunc& hpsi_func, + const SPsiFunc& spsi_func, + const int dim, + const int nband, + const int ldPsi, + T *psi_in, + Real* eigenvalue_in, + const Real david_diag_thr, + const int david_maxiter); + void cal_grad(const HPsiFunc& hpsi_func, const SPsiFunc& spsi_func, const int& dim, const int& nbase, const int nbase_x, const int& notconv, - psi::Psi& basis, T* hphi, T* sphi, const T* vcc, @@ -100,7 +108,6 @@ class DiagoDavid : public DiagH int& nbase, const int nbase_x, const int& notconv, - const psi::Psi& basis, const T* hphi, const T* sphi, T* hcc, @@ -113,7 +120,6 @@ class DiagoDavid : public DiagH const Real* eigenvalue, const T *psi_in, const int ldPsi, - psi::Psi& basis, T* hphi, T* sphi, T* hcc, @@ -123,7 +129,6 @@ class DiagoDavid : public DiagH void SchmitOrth(const int& dim, const int nband, const int m, - psi::Psi& basis, const T* sphi, T* lagrange_m, const int mm_size, @@ -139,16 +144,6 @@ class DiagoDavid : public DiagH Real* eigenvalue, T* vcc); - int diag_mock(const HPsiFunc& hpsi_func, - const SPsiFunc& spsi_func, - const int dim, - const int nband, - const int ldPsi, - psi::Psi& psi, - Real* eigenvalue_in, - const Real david_diag_thr, - const int david_maxiter); - bool check_block_conv(const int &ntry, const int ¬conv, const int &ntry_max, const int ¬conv_max); using resmem_complex_op = base_device::memory::resize_memory_op; diff --git a/source/module_hsolver/hsolver_pw.cpp b/source/module_hsolver/hsolver_pw.cpp index e9a00df925..3a965f7327 100644 --- a/source/module_hsolver/hsolver_pw.cpp +++ b/source/module_hsolver/hsolver_pw.cpp @@ -571,7 +571,7 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, DiagoDavid david(pre_condition.data(), GlobalV::PW_DIAG_NDIM, GlobalV::use_paw, comm_info); // do diag and add davidson iteration counts up to avg_iter DiagoIterAssist::avg_iter += static_cast( - david.diag(hpsi_func, spsi_func, dim, nband, ldPsi, psi, eigenvalue, david_diag_thr, david_maxiter, ntry_max, notconv_max)); + david.diag(hpsi_func, spsi_func, dim, nband, ldPsi, psi.get_pointer(), eigenvalue, david_diag_thr, david_maxiter, ntry_max, notconv_max)); } return; } diff --git a/source/module_hsolver/test/diago_david_float_test.cpp b/source/module_hsolver/test/diago_david_float_test.cpp index 3a34370b32..714995038b 100644 --- a/source/module_hsolver/test/diago_david_float_test.cpp +++ b/source/module_hsolver/test/diago_david_float_test.cpp @@ -119,7 +119,7 @@ class DiagoDavPrepare auto spsi_func = [phm](const std::complex* psi_in, std::complex* spsi_out,const int nrow, const int npw, const int nbands){ phm->sPsi(psi_in, spsi_out, nrow, npw, nbands); }; - dav.diag(hpsi_func,spsi_func, dim, nband, ldPsi, phi, en, eps, maxiter); + dav.diag(hpsi_func,spsi_func, dim, nband, ldPsi, phi.get_pointer(), en, eps, maxiter); #ifdef __MPI end = MPI_Wtime(); diff --git a/source/module_hsolver/test/diago_david_real_test.cpp b/source/module_hsolver/test/diago_david_real_test.cpp index 887f87b21f..94b61eaf07 100644 --- a/source/module_hsolver/test/diago_david_real_test.cpp +++ b/source/module_hsolver/test/diago_david_real_test.cpp @@ -118,7 +118,7 @@ class DiagoDavPrepare auto spsi_func = [phm](const double* psi_in, double* spsi_out,const int nrow, const int npw, const int nbands){ phm->sPsi(psi_in, spsi_out, nrow, npw, nbands); }; - dav.diag(hpsi_func,spsi_func, dim, nband, ldPsi, phi, en, eps, maxiter); + dav.diag(hpsi_func,spsi_func, dim, nband, ldPsi, phi.get_pointer(), en, eps, maxiter); #ifdef __MPI end = MPI_Wtime(); diff --git a/source/module_hsolver/test/diago_david_test.cpp b/source/module_hsolver/test/diago_david_test.cpp index 718006021f..cc6c645309 100644 --- a/source/module_hsolver/test/diago_david_test.cpp +++ b/source/module_hsolver/test/diago_david_test.cpp @@ -121,7 +121,7 @@ class DiagoDavPrepare auto spsi_func = [phm](const std::complex* psi_in, std::complex* spsi_out,const int nrow, const int npw, const int nbands){ phm->sPsi(psi_in, spsi_out, nrow, npw, nbands); }; - dav.diag(hpsi_func,spsi_func, dim, nband, ldPsi, phi, en, eps, maxiter); + dav.diag(hpsi_func,spsi_func, dim, nband, ldPsi, phi.get_pointer(), en, eps, maxiter); #ifdef __MPI end = MPI_Wtime(); diff --git a/source/module_hsolver/test/hsolver_pw_sup.h b/source/module_hsolver/test/hsolver_pw_sup.h index 6a3a80f414..744c5020b9 100644 --- a/source/module_hsolver/test/hsolver_pw_sup.h +++ b/source/module_hsolver/test/hsolver_pw_sup.h @@ -166,22 +166,23 @@ int DiagoDavid::diag(const std::function& psi, + T *psi_in, Real* eigenvalue_in, const Real david_diag_thr, const int david_maxiter, const int ntry_max, const int notconv_max) { + // do nothing, we dont need it // do something - for (int ib = 0; ib < psi.get_nbands(); ib++) { - eigenvalue_in[ib] = 0.0; - for (int ig = 0; ig < psi.get_nbasis(); ig++) { - psi(ib, ig) += T(1.0, 0.0); - eigenvalue_in[ib] += psi(ib, ig).real(); - } - eigenvalue_in[ib] /= psi.get_nbasis(); - } - DiagoIterAssist::avg_iter += 1.0; + // for (int ib = 0; ib < psi.get_nbands(); ib++) { + // eigenvalue_in[ib] = 0.0; + // for (int ig = 0; ig < psi.get_nbasis(); ig++) { + // psi(ib, ig) += T(1.0, 0.0); + // eigenvalue_in[ib] += psi(ib, ig).real(); + // } + // eigenvalue_in[ib] /= psi.get_nbasis(); + // } + // DiagoIterAssist::avg_iter += 1.0; return 1; } template class DiagoDavid, base_device::DEVICE_CPU>; diff --git a/source/module_lr/hsolver_lrtd.cpp b/source/module_lr/hsolver_lrtd.cpp index 01f5e84fe7..285ada9735 100644 --- a/source/module_lr/hsolver_lrtd.cpp +++ b/source/module_lr/hsolver_lrtd.cpp @@ -88,7 +88,7 @@ namespace LR const int& nband = psi_k1_dav.get_nbands(); hsolver::DiagoDavid david(precondition.data(), GlobalV::PW_DIAG_NDIM, GlobalV::use_paw, comm_info); hsolver::DiagoIterAssist::avg_iter += static_cast(david.diag(hpsi_func, spsi_func, - dim, nband, dim, psi_k1_dav, eigenvalue.data(), this->diag_ethr, david_maxiter, ntry_max, 0/*notconv_max*/)); + dim, nband, dim, psi_k1_dav.get_pointer(), eigenvalue.data(), this->diag_ethr, david_maxiter, ntry_max, 0/*notconv_max*/)); } else if (this->method == "dav_subspace") //need refactor {