From 7093ba8d202940c0321a2cb8e6b5e5255b22f51d Mon Sep 17 00:00:00 2001 From: leila-pujal Date: Wed, 12 Aug 2020 17:37:40 -0400 Subject: [PATCH 01/32] Add mwfn test files converted from fchk Test files include 0, 1 and 2 mwfn types. The original fchk were taken from iodata/test/data and converted with Multiwfn3.7 --- .../data/ch3_hf_sto3g_fchk_multiwfn3.7.mwfn | 216 ++ .../ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn | 144 ++ .../he_spdfgh_virtual_fchk_multiwfn3.7.mwfn | 1743 +++++++++++++++++ 3 files changed, 2103 insertions(+) create mode 100644 iodata/test/data/ch3_hf_sto3g_fchk_multiwfn3.7.mwfn create mode 100644 iodata/test/data/ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn create mode 100644 iodata/test/data/he_spdfgh_virtual_fchk_multiwfn3.7.mwfn diff --git a/iodata/test/data/ch3_hf_sto3g_fchk_multiwfn3.7.mwfn b/iodata/test/data/ch3_hf_sto3g_fchk_multiwfn3.7.mwfn new file mode 100644 index 000000000..866ce3b76 --- /dev/null +++ b/iodata/test/data/ch3_hf_sto3g_fchk_multiwfn3.7.mwfn @@ -0,0 +1,216 @@ +# Generated by Multiwfn +Wfntype= 1 +Charge= 0.000000 +Naelec= 5.000000 +Nbelec= 4.000000 +E_tot= -3.90770088E+01 +VT_ratio= 2.00168405 + +# Atom information +Ncenter= 4 +$Centers + 1 C 6 6.0 0.18972520 0.19096337 0.19096337 + 2 H 1 1.0 -0.16258273 -0.16376600 1.14781516 + 3 H 1 1.0 -0.16258273 1.14781516 -0.16376600 + 4 H 1 1.0 1.14344033 -0.16701245 -0.16701245 + +# Basis function information +Nbasis= 8 +Nindbasis= 8 +Nprims= 24 +Nshell= 6 +Nprimshell= 18 +$Shell types + 0 0 1 0 0 0 +$Shell centers + 1 1 1 2 3 4 +$Shell contraction degrees + 3 3 3 3 3 3 +$Primitive exponents + 7.16168373E+01 1.30450963E+01 3.53051216E+00 2.94124936E+00 6.83483096E-01 + 2.22289916E-01 2.94124936E+00 6.83483096E-01 2.22289916E-01 3.42525091E+00 + 6.23913730E-01 1.68855404E-01 3.42525091E+00 6.23913730E-01 1.68855404E-01 + 3.42525091E+00 6.23913730E-01 1.68855404E-01 +$Contraction coefficients + 1.54328967E-01 5.35328142E-01 4.44634542E-01 -9.99672292E-02 3.99512826E-01 + 7.00115469E-01 1.55916275E-01 6.07683719E-01 3.91957393E-01 1.54328967E-01 + 5.35328142E-01 4.44634542E-01 1.54328967E-01 5.35328142E-01 4.44634542E-01 + 1.54328967E-01 5.35328142E-01 4.44634542E-01 + +# Orbital information (2*nindbasis orbitals) + +Index= 1 +Type= 1 +Energy= -1.10094534E+01 +Occ= 1.000000 +Sym= ? +$Coeff + 9.91912304E-01 3.68365244E-02 9.23239012E-04 9.05953703E-04 9.05953703E-04 + -7.36810756E-03 -7.36810756E-03 -7.36919429E-03 + +Index= 2 +Type= 1 +Energy= -9.07622407E-01 +Occ= 1.000000 +Sym= ? +$Coeff + -2.34519567E-01 7.11645350E-01 4.43830319E-03 4.24951329E-03 4.24951329E-03 + 1.88304779E-01 1.88304779E-01 1.88248108E-01 + +Index= 3 +Type= 1 +Energy= -5.37709620E-01 +Occ= 1.000000 +Sym= ? +$Coeff + 4.90158807E-16 -2.27927410E-15 -1.70527350E-15 4.11433997E-01 -4.11433997E-01 + -4.05665990E-01 4.05665990E-01 -2.31301381E-15 + +Index= 4 +Type= 1 +Energy= -5.37273275E-01 +Occ= 1.000000 +Sym= ? +$Coeff + 7.55477748E-05 -2.72389062E-04 4.73783666E-01 -2.39037859E-01 -2.39037859E-01 + -2.34257831E-01 -2.34257831E-01 4.68659674E-01 + +Index= 5 +Type= 1 +Energy= -3.63936540E-01 +Occ= 1.000000 +Sym= ? +$Coeff + 3.08378554E-02 -1.65495543E-01 5.70715279E-01 5.65524565E-01 5.65524565E-01 + 6.48520245E-02 6.48520245E-02 6.47116365E-02 + +Index= 6 +Type= 1 +Energy= 6.48361367E-01 +Occ= 0.000000 +Sym= ? +$Coeff + -2.19876799E-01 1.41188511E+00 1.35304792E-01 1.37148382E-01 1.37148382E-01 + -7.62493395E-01 -7.62493395E-01 -7.58055709E-01 + +Index= 7 +Type= 1 +Energy= 7.58140704E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 6.02953489E-04 -3.88201282E-03 -9.23289818E-01 4.65383569E-01 4.65383569E-01 + -5.11599644E-01 -5.11599644E-01 1.02987681E+00 + +Index= 8 +Type= 1 +Energy= 7.59223157E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 2.48950777E-15 -1.62249873E-14 -4.97507654E-13 8.02477679E-01 -8.02477679E-01 + 8.90423839E-01 -8.90423839E-01 5.61173440E-13 + +Index= 9 +Type= 2 +Energy= -1.09780991E+01 +Occ= 1.000000 +Sym= ? +$Coeff + 9.92938150E-01 3.22871972E-02 9.60710420E-04 9.44075068E-04 9.44075068E-04 + -6.40788142E-03 -6.40788142E-03 -6.40896378E-03 + +Index= 10 +Type= 2 +Energy= -8.01569083E-01 +Occ= 1.000000 +Sym= ? +$Coeff + -2.09925479E-01 5.76154219E-01 3.37006253E-02 3.31937049E-02 3.31937049E-02 + 2.56084837E-01 2.56084837E-01 2.56063658E-01 + +Index= 11 +Type= 2 +Energy= -5.19454722E-01 +Occ= 1.000000 +Sym= ? +$Coeff + -2.62530260E-16 1.03890788E-15 -4.35499446E-13 -3.66798173E-01 3.66798173E-01 + 4.53895633E-01 -4.53895633E-01 -5.40989437E-13 + +Index= 12 +Type= 2 +Energy= -5.18988806E-01 +Occ= 1.000000 +Sym= ? +$Coeff + 8.97538664E-05 -2.80496409E-04 4.22311933E-01 -2.13125171E-01 -2.13125171E-01 + -2.62191252E-01 -2.62191252E-01 5.24368146E-01 + +Index= 13 +Type= 2 +Energy= 3.28562907E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 4.80634373E-02 -2.23451660E-01 5.68272322E-01 5.63036157E-01 5.63036157E-01 + 5.48082027E-02 5.48082027E-02 5.46934398E-02 + +Index= 14 +Type= 2 +Energy= 7.04456296E-01 +Occ= 0.000000 +Sym= ? +$Coeff + -2.36391387E-01 1.46480863E+00 1.40521557E-01 1.43705532E-01 1.43705532E-01 + -7.43655136E-01 -7.43655136E-01 -7.38011122E-01 + +Index= 15 +Type= 2 +Energy= 7.88139770E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 8.53322230E-04 -5.32303496E-03 -9.48058623E-01 4.77683483E-01 4.77683483E-01 + -4.97327067E-01 -4.97327067E-01 1.00319113E+00 + +Index= 16 +Type= 2 +Energy= 7.89228899E-01 +Occ= 0.000000 +Sym= ? +$Coeff + -9.39283646E-16 5.27342894E-15 -9.83649115E-13 8.23837035E-01 -8.23837035E-01 + 8.66832316E-01 -8.66832316E-01 1.03624547E-12 + +# Various matrices + +$Alpha density matrix, dim= 8 8 lower= 1 + 1.03984043E+00 -1.35459706E-01 5.35184883E-01 1.75103317E-02 -9.13873817E-02 + 5.50207443E-01 1.73235386E-02 -9.04691651E-02 2.09520974E-01 5.46253945E-01 + 1.73235386E-02 -9.04691651E-02 2.09520974E-01 2.07698077E-01 5.46253945E-01 + -4.94874721E-02 1.23065893E-01 -7.31465415E-02 -7.34393479E-02 2.60370212E-01 + 2.59160391E-01 -4.94874721E-02 1.23065893E-01 -7.31465415E-02 2.60370212E-01 + -7.34393479E-02 -6.99694002E-02 2.59160391E-01 -4.94264850E-02 1.22857290E-01 + 2.59803917E-01 -7.46380983E-02 -7.46380983E-02 -7.00882027E-02 -7.00882027E-02 + 2.59321141E-01 + +$Beta density matrix, dim= 8 8 lower= 1 + 1.02999488E+00 -8.88902857E-02 3.32996226E-01 -6.08278975E-03 1.93293191E-02 + 1.79484024E-01 -6.04992506E-03 1.92149555E-02 -8.88857473E-02 1.81065952E-01 + -6.04992506E-03 1.92149555E-02 -8.88857473E-02 -8.80158479E-02 1.81065952E-01 + -6.01448947E-02 1.47411010E-01 -1.02102431E-01 -1.02114179E-01 2.30861999E-01 + 3.40386003E-01 -6.01448947E-02 1.47411010E-01 -1.02102431E-01 2.30861999E-01 + -1.02114179E-01 -7.16564883E-02 3.40386003E-01 -6.00709266E-02 1.47178146E-01 + 2.30070274E-01 -1.03262400E-01 -1.03262400E-01 -7.18696527E-02 -7.18696527E-02 + 3.40571624E-01 + +$Overlap matrix, dim= 8 8 lower= 1 + 9.99999999E-01 2.48362397E-01 1.00000000E+00 4.33633585E-17 3.87910303E-18 + 1.00000000E+00 -4.17379669E-19 4.45713371E-17 4.45225902E-34 1.00000000E+00 + -4.17379669E-19 4.45713371E-17 4.45225902E-34 2.27266230E-33 1.00000000E+00 + 6.38074527E-02 4.96758415E-01 -1.53645735E-01 -1.54701754E-01 4.17294607E-01 + 9.99999999E-01 6.38074527E-02 4.96758415E-01 -1.53645735E-01 4.17294607E-01 + -1.54701754E-01 1.50583049E-01 9.99999999E-01 6.37835281E-02 4.96665531E-01 + 4.15816788E-01 -1.56076328E-01 -1.56076328E-01 1.50968647E-01 1.50968647E-01 + 9.99999999E-01 diff --git a/iodata/test/data/ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn b/iodata/test/data/ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn new file mode 100644 index 000000000..1940ea50e --- /dev/null +++ b/iodata/test/data/ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn @@ -0,0 +1,144 @@ +# Generated by Multiwfn +Wfntype= 2 +Charge= 0.000000 +Naelec= 5.000000 +Nbelec= 4.000000 +E_tot= -3.90732095E+01 +VT_ratio= 2.00174844 + +# Atom information +Ncenter= 4 +$Centers + 1 C 6 6.0 0.00000000 0.04730588 0.00000000 + 2 H 1 1.0 0.53481952 -0.09185109 0.92742792 + 3 H 1 1.0 0.53481952 -0.09185109 -0.92742792 + 4 H 1 1.0 -1.06963904 -0.10013313 -0.00000000 + +# Basis function information +Nbasis= 8 +Nindbasis= 8 +Nprims= 24 +Nshell= 6 +Nprimshell= 18 +$Shell types + 0 0 1 0 0 0 +$Shell centers + 1 1 1 2 3 4 +$Shell contraction degrees + 3 3 3 3 3 3 +$Primitive exponents + 7.16168373E+01 1.30450963E+01 3.53051216E+00 2.94124936E+00 6.83483096E-01 + 2.22289916E-01 2.94124936E+00 6.83483096E-01 2.22289916E-01 3.42525091E+00 + 6.23913730E-01 1.68855404E-01 3.42525091E+00 6.23913730E-01 1.68855404E-01 + 3.42525091E+00 6.23913730E-01 1.68855404E-01 +$Contraction coefficients + 1.54328967E-01 5.35328142E-01 4.44634542E-01 -9.99672292E-02 3.99512826E-01 + 7.00115469E-01 1.55916275E-01 6.07683719E-01 3.91957393E-01 1.54328967E-01 + 5.35328142E-01 4.44634542E-01 1.54328967E-01 5.35328142E-01 4.44634542E-01 + 1.54328967E-01 5.35328142E-01 4.44634542E-01 + +# Orbital information (2*nindbasis orbitals) + +Index= 1 +Type= 0 +Energy= -1.09902284E+01 +Occ= 2.000000 +Sym= ? +$Coeff + 9.92532359E-01 3.42148679E-02 3.30477771E-06 -1.97321450E-03 0.00000000E+00 + -6.94439001E-03 -6.94439001E-03 -6.94539905E-03 + +Index= 2 +Type= 0 +Energy= -8.36918686E-01 +Occ= 2.000000 +Sym= ? +$Coeff + -2.20701507E-01 6.38445012E-01 2.10503480E-04 -6.95977931E-02 0.00000000E+00 + 2.23955620E-01 2.23955620E-01 2.23918092E-01 + +Index= 3 +Type= 0 +Energy= -5.24254982E-01 +Occ= 2.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.50301824E-01 + 4.30094414E-01 -4.30094414E-01 0.00000000E+00 + +Index= 4 +Type= 0 +Energy= -5.23802785E-01 +Occ= 2.000000 +Sym= ? +$Coeff + -8.39606421E-05 2.79804688E-04 5.50431733E-01 2.81310023E-03 0.00000000E+00 + 2.48408152E-01 2.48408152E-01 -4.96874527E-01 + +Index= 5 +Type= 1 +Energy= -1.26686819E-02 +Occ= 1.000000 +Sym= ? +$Coeff + -4.89372179E-02 2.28241533E-01 -5.03068384E-03 9.77458574E-01 0.00000000E+00 + -5.66103739E-02 -5.66103739E-02 -5.65176908E-02 + +Index= 6 +Type= 0 +Energy= 6.64707810E-01 +Occ= 0.000000 +Sym= ? +$Coeff + -2.27950999E-01 1.43795857E+00 4.06601637E-03 -2.47029275E-01 0.00000000E+00 + -7.53512129E-01 -7.53512129E-01 -7.48863314E-01 + +Index= 7 +Type= 0 +Energy= 7.68278159E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 6.63227128E-04 -4.20689470E-03 1.14949950E+00 6.60112237E-03 0.00000000E+00 + -5.04806549E-01 -5.04806549E-01 1.01663833E+00 + +Index= 8 +Type= 0 +Energy= 7.69362712E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.15050625E+00 + -8.78884693E-01 8.78884693E-01 0.00000000E+00 + +# Various matrices + +$Alpha density matrix, dim= 8 8 lower= 1 + 1.03622450E+00 -1.18115942E-01 4.60876966E-01 1.56794733E-04 -8.59689643E-04 + 3.03000445E-01 -3.44324808E-02 1.78595553E-01 -3.38352252E-03 9.60280924E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.02832097E-01 + -5.35703769E-02 1.29894414E-01 1.37063639E-01 -7.02086124E-02 2.36681741E-01 + 3.00096894E-01 -5.35703769E-02 1.29894414E-01 1.37063639E-01 -7.02086124E-02 + -2.36681741E-01 -6.98655163E-02 3.00096894E-01 -5.35050572E-02 1.29683041E-01 + -2.73164072E-01 -7.22119596E-02 0.00000000E+00 -7.00322487E-02 -7.00322487E-02 + 3.00266095E-01 + +$Beta density matrix, dim= 8 8 lower= 1 + 1.03382965E+00 -1.06946436E-01 4.08782769E-01 -8.93929382E-05 2.88521349E-04 + 3.02975137E-01 1.34016224E-02 -4.45010900E-02 1.53376254E-03 4.85565991E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.02832097E-01 + -5.63407311E-02 1.42815253E-01 1.36778850E-01 -1.48743171E-02 2.36681741E-01 + 2.96892159E-01 -5.63407311E-02 1.42815253E-01 1.36778850E-01 -1.48743171E-02 + -2.36681741E-01 -7.30702507E-02 2.96892159E-01 -5.62708757E-02 1.42582725E-01 + -2.73448394E-01 -1.69682581E-02 0.00000000E+00 -7.32317363E-02 -7.32317363E-02 + 2.97071846E-01 + +$Overlap matrix, dim= 8 8 lower= 1 + 9.99999999E-01 2.48362397E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 1.03933160E-17 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 2.40186253E-34 5.38333688E-35 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 6.38074532E-02 4.96758417E-01 2.33241244E-01 -6.06880344E-02 4.04462507E-01 + 9.99999999E-01 6.38074532E-02 4.96758417E-01 2.33241244E-01 -6.06880344E-02 + -4.04462507E-01 1.50583051E-01 9.99999999E-01 6.37835278E-02 4.96665530E-01 + -4.66359243E-01 -6.42829454E-02 -4.24006280E-17 1.50968648E-01 1.50968648E-01 + 9.99999999E-01 diff --git a/iodata/test/data/he_spdfgh_virtual_fchk_multiwfn3.7.mwfn b/iodata/test/data/he_spdfgh_virtual_fchk_multiwfn3.7.mwfn new file mode 100644 index 000000000..1d7947052 --- /dev/null +++ b/iodata/test/data/he_spdfgh_virtual_fchk_multiwfn3.7.mwfn @@ -0,0 +1,1743 @@ +# Generated by Multiwfn +Wfntype= 0 +Charge= 0.000000 +Naelec= 1.000000 +Nbelec= 1.000000 +E_tot= -1.04867517E+00 +VT_ratio= 5.43666118 + +# Atom information +Ncenter= 1 +$Centers + 1 He 2 2.0 0.00000000 0.00000000 0.00000000 + +# Basis function information +Nbasis= 56 +Nindbasis= 56 +Nprims= 56 +Nshell= 6 +Nprimshell= 6 +$Shell types + 0 1 2 3 4 5 +$Shell centers + 1 1 1 1 1 1 +$Shell contraction degrees + 1 1 1 1 1 1 +$Primitive exponents + 4.47300000E-02 1.28000000E-01 2.41000000E-01 4.07000000E-01 6.86000000E-01 + 1.01600000E+00 +$Contraction coefficients + 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 + 1.00000000E+00 + +# Orbital information (nindbasis orbitals) + +Index= 1 +Type= 0 +Energy= -3.83109139E-01 +Occ= 2.000000 +Sym= ? +$Coeff + 8.17125208E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.58772965E-02 + 1.58772965E-02 1.58772965E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.73667846E-02 0.00000000E+00 4.53013505E-02 0.00000000E+00 7.73667846E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.53013505E-02 + 0.00000000E+00 4.53013505E-02 0.00000000E+00 0.00000000E+00 7.73667846E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 2 +Type= 0 +Energy= 6.72890652E-02 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 1.15214365E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.64495991E-01 0.00000000E+00 0.00000000E+00 -7.35648436E-02 0.00000000E+00 + 0.00000000E+00 -7.35648436E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.81429441E-02 0.00000000E+00 1.06234203E-02 0.00000000E+00 + 1.81429441E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.37546899E-02 0.00000000E+00 2.37546899E-02 0.00000000E+00 0.00000000E+00 + 5.44288323E-02 + +Index= 3 +Type= 0 +Energy= 6.72890652E-02 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.15214365E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.64495991E-01 0.00000000E+00 0.00000000E+00 + -7.35648436E-02 0.00000000E+00 0.00000000E+00 -7.35648436E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.44288323E-02 0.00000000E+00 2.37546899E-02 0.00000000E+00 1.81429441E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.37546899E-02 0.00000000E+00 1.06234203E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.81429441E-02 0.00000000E+00 + 0.00000000E+00 + +Index= 4 +Type= 0 +Energy= 6.72890652E-02 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 1.15214365E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.64495991E-01 0.00000000E+00 0.00000000E+00 -7.35648436E-02 + 0.00000000E+00 0.00000000E+00 -7.35648436E-02 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.81429441E-02 0.00000000E+00 2.37546899E-02 0.00000000E+00 + 5.44288323E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.06234203E-02 0.00000000E+00 2.37546899E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.81429441E-02 + 0.00000000E+00 + +Index= 5 +Type= 0 +Energy= 3.33282755E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 1.50327360E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.07569266E-01 + -7.07569266E-01 -7.07569266E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -2.97420090E-02 0.00000000E+00 -1.74151372E-02 0.00000000E+00 -2.97420090E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.74151372E-02 + 0.00000000E+00 -1.74151372E-02 0.00000000E+00 0.00000000E+00 -2.97420090E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 6 +Type= 0 +Energy= 5.51389775E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.25837529E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -7.30862908E-02 0.00000000E+00 -1.63425915E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.63425915E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 7 +Type= 0 +Energy= 5.51389775E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 2.23808426E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.21424451E+00 + -8.93197397E-01 -3.21047115E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.36895095E-02 0.00000000E+00 7.05231801E-02 0.00000000E+00 1.77193009E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.18768010E-02 + 0.00000000E+00 -1.86463791E-02 0.00000000E+00 0.00000000E+00 -2.40882518E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 8 +Type= 0 +Energy= 5.51389775E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25837529E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.63425915E-01 0.00000000E+00 -1.63425915E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -7.30862908E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 9 +Type= 0 +Energy= 5.51389775E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25837529E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.63425915E-01 0.00000000E+00 -7.30862908E-02 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.63425915E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 10 +Type= 0 +Energy= 5.51389775E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 2.50398048E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.30331119E-01 + -8.86401034E-01 1.21673215E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -2.41376018E-01 0.00000000E+00 -1.91855930E-02 0.00000000E+00 1.75844742E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.14820690E-02 + 0.00000000E+00 7.06676620E-02 0.00000000E+00 0.00000000E+00 6.55312757E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 11 +Type= 0 +Energy= 8.85311032E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 1.59968058E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.20021144E+00 0.00000000E+00 0.00000000E+00 -5.36750873E-01 0.00000000E+00 + 0.00000000E+00 -5.36750873E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.14826365E-02 0.00000000E+00 -1.25789439E-02 0.00000000E+00 + -2.14826365E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -2.81273736E-02 0.00000000E+00 -2.81273736E-02 0.00000000E+00 0.00000000E+00 + -6.44479094E-02 + +Index= 12 +Type= 0 +Energy= 8.85311032E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 1.59968058E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.20021144E+00 0.00000000E+00 0.00000000E+00 -5.36750873E-01 + 0.00000000E+00 0.00000000E+00 -5.36750873E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.14826365E-02 0.00000000E+00 -2.81273736E-02 0.00000000E+00 + -6.44479094E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.25789439E-02 0.00000000E+00 -2.81273736E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.14826365E-02 + 0.00000000E+00 + +Index= 13 +Type= 0 +Energy= 8.85311032E-01 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.59968058E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.20021144E+00 0.00000000E+00 0.00000000E+00 + -5.36750873E-01 0.00000000E+00 0.00000000E+00 -5.36750873E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -6.44479094E-02 0.00000000E+00 -2.81273736E-02 0.00000000E+00 -2.14826365E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.81273736E-02 0.00000000E+00 -1.25789439E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.14826365E-02 0.00000000E+00 + 0.00000000E+00 + +Index= 14 +Type= 0 +Energy= 1.19945800E+00 +Occ= 0.000000 +Sym= ? +$Coeff + -4.96308859E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.16929871E-01 + 9.16929871E-01 9.16929871E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -6.11814633E-01 0.00000000E+00 -3.58241967E-01 0.00000000E+00 -6.11814633E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.58241967E-01 + 0.00000000E+00 -3.58241967E-01 0.00000000E+00 0.00000000E+00 -6.11814633E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 15 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 1.33349015E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.10022862E+00 0.00000000E+00 0.00000000E+00 7.03437422E-02 + 0.00000000E+00 0.00000000E+00 1.40576785E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.88071821E-01 0.00000000E+00 -1.22579254E-01 0.00000000E+00 + 3.02486755E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -8.85590538E-02 0.00000000E+00 5.65712324E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.44149334E-02 + 0.00000000E+00 + +Index= 16 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.92310887E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.31494570E+00 0.00000000E+00 0.00000000E+00 + -1.12064010E+00 0.00000000E+00 0.00000000E+00 -6.43544689E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -3.61519097E-01 0.00000000E+00 7.44319584E-03 0.00000000E+00 1.31876035E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.14467387E-02 0.00000000E+00 1.05841954E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.29643062E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 17 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 -7.83497429E-16 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -7.71007471E-01 0.00000000E+00 0.00000000E+00 1.47003347E+00 + 0.00000000E+00 0.00000000E+00 -4.35618404E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 8.92675036E-02 0.00000000E+00 1.04695756E-01 0.00000000E+00 + 2.11973714E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -6.20595489E-02 0.00000000E+00 -1.50952212E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.01241218E-01 + 0.00000000E+00 + +Index= 18 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 9.68742469E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.30094532E+00 0.00000000E+00 0.00000000E+00 -1.16317029E+00 0.00000000E+00 + 0.00000000E+00 -5.82231017E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.19311556E-01 0.00000000E+00 1.04715042E-01 0.00000000E+00 + 2.38358405E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.77636540E-05 0.00000000E+00 7.79922206E-02 0.00000000E+00 0.00000000E+00 + -3.57669961E-01 + +Index= 19 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.68143012E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -2.75451163E-01 0.00000000E+00 0.00000000E+00 + -9.53998126E-01 0.00000000E+00 0.00000000E+00 1.32355464E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.57300132E-02 0.00000000E+00 -1.61032523E-01 0.00000000E+00 -2.71224580E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.44506880E-01 0.00000000E+00 -2.21714776E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.95494567E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 20 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -4.51695197E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -3.35405445E-01 0.00000000E+00 0.00000000E+00 -9.01654886E-01 0.00000000E+00 + 0.00000000E+00 1.35164851E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.76981613E-01 0.00000000E+00 -2.69972878E-02 0.00000000E+00 + 1.84768320E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.61204440E-01 0.00000000E+00 1.41081849E-01 0.00000000E+00 0.00000000E+00 + 9.22132930E-02 + +Index= 21 +Type= 0 +Energy= 1.37176438E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.34348634E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.80232054E-01 0.00000000E+00 -1.80232054E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.80232054E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 22 +Type= 0 +Energy= 1.89666973E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.24614481E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -8.48557817E-01 0.00000000E+00 -8.48557817E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -3.79486592E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 23 +Type= 0 +Energy= 1.89666973E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.24614481E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -3.79486592E-01 0.00000000E+00 -8.48557817E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -8.48557817E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 24 +Type= 0 +Energy= 1.89666973E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.24614481E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -8.48557817E-01 0.00000000E+00 -3.79486592E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -8.48557817E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 25 +Type= 0 +Energy= 1.89666973E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 9.33286278E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.03725176E-01 + 7.35230811E-01 -1.23895599E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.28871593E+00 0.00000000E+00 1.53398665E-01 0.00000000E+00 -7.64759739E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.23898726E-01 + 0.00000000E+00 -3.77297391E-01 0.00000000E+00 0.00000000E+00 -5.23956189E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 26 +Type= 0 +Energy= 1.89666973E+00 +Occ= 0.000000 +Sym= ? +$Coeff + -1.59387605E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.13979728E+00 + 1.00613744E+00 1.33659841E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.39027994E-01 0.00000000E+00 -3.47100740E-01 0.00000000E+00 -1.04654674E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.06397511E-01 + 0.00000000E+00 4.07032289E-02 0.00000000E+00 0.00000000E+00 1.18557473E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 27 +Type= 0 +Energy= 2.34917820E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -9.24939510E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.59621317E+00 0.00000000E+00 0.00000000E+00 7.13848233E-01 0.00000000E+00 + 0.00000000E+00 7.13848233E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -3.30821471E-01 0.00000000E+00 -1.93709219E-01 0.00000000E+00 + -3.30821471E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -4.33146981E-01 0.00000000E+00 -4.33146981E-01 0.00000000E+00 0.00000000E+00 + -9.92464413E-01 + +Index= 28 +Type= 0 +Energy= 2.34917820E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 -9.24939510E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.59621317E+00 0.00000000E+00 0.00000000E+00 7.13848233E-01 + 0.00000000E+00 0.00000000E+00 7.13848233E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -3.30821471E-01 0.00000000E+00 -4.33146981E-01 0.00000000E+00 + -9.92464413E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.93709219E-01 0.00000000E+00 -4.33146981E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.30821471E-01 + 0.00000000E+00 + +Index= 29 +Type= 0 +Energy= 2.34917820E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.24939510E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.59621317E+00 0.00000000E+00 0.00000000E+00 + 7.13848233E-01 0.00000000E+00 0.00000000E+00 7.13848233E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -9.92464413E-01 0.00000000E+00 -4.33146981E-01 0.00000000E+00 -3.30821471E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -4.33146981E-01 0.00000000E+00 -1.93709219E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.30821471E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 30 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.11808987E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -2.48140384E-01 0.00000000E+00 1.12077918E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -5.87239091E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 31 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.13530018E-14 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -3.79401400E-01 0.00000000E+00 -4.65131468E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.13305974E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 32 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -6.44137138E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.11314155E+00 0.00000000E+00 -2.01923457E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.27763270E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 33 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 3.99821645E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 -8.81924331E-16 + 7.68401904E-16 -1.48259435E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -5.46892785E-01 0.00000000E+00 -1.92247760E-01 0.00000000E+00 5.33827681E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.15293064E+00 + 0.00000000E+00 -7.45484691E-01 0.00000000E+00 0.00000000E+00 -2.31948808E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 34 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.35625380E-16 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.13341343E+00 0.00000000E+00 -1.10101051E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -4.34730786E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 35 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.91551234E-16 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.15940198E-01 0.00000000E+00 1.17804853E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.01709621E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 36 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.03246903E-17 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.16918680E+00 0.00000000E+00 -1.71954429E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.04101954E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 37 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 2.40323221E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.73851761E-15 + -3.63714418E-15 -4.30718190E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -8.34699750E-01 0.00000000E+00 1.21480461E+00 0.00000000E+00 -7.72346448E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.51445771E-01 + 0.00000000E+00 1.41914706E-01 0.00000000E+00 0.00000000E+00 -2.23930302E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 38 +Type= 0 +Energy= 3.38248909E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 2.01061367E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.31804161E-15 + -3.67075130E-15 -1.54775972E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -6.46885555E-02 0.00000000E+00 -4.72233881E-01 0.00000000E+00 -3.44251321E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.85867100E-01 + 0.00000000E+00 1.07695268E+00 0.00000000E+00 0.00000000E+00 -9.46601801E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 39 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 -1.13617749E-14 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.07960785E+00 0.00000000E+00 0.00000000E+00 4.92358557E-01 + 0.00000000E+00 0.00000000E+00 9.56087362E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -8.59433348E-01 0.00000000E+00 -2.78507627E-01 0.00000000E+00 + 1.30201776E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -3.81191768E-01 0.00000000E+00 -5.61594150E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.42584413E-01 + 0.00000000E+00 + +Index= 40 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.34009192E-14 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.10853836E+00 0.00000000E+00 0.00000000E+00 + 8.22895245E-01 0.00000000E+00 0.00000000E+00 6.64365030E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.33690825E+00 0.00000000E+00 -9.92233063E-02 0.00000000E+00 -5.97202186E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -1.92513991E-01 0.00000000E+00 -3.91406657E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.39706060E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 41 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -1.27040686E-14 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.11214499E+00 0.00000000E+00 0.00000000E+00 7.62664766E-01 0.00000000E+00 + 0.00000000E+00 7.29434315E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -6.55693403E-01 0.00000000E+00 -3.92680099E-01 0.00000000E+00 + -6.85564478E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.36565628E-01 0.00000000E+00 -1.56120837E-01 0.00000000E+00 0.00000000E+00 + 1.34125788E+00 + +Index= 42 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 -2.08104967E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -2.67733950E-01 0.00000000E+00 0.00000000E+00 1.11456921E+00 + 0.00000000E+00 0.00000000E+00 -7.55366427E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 6.79003952E-01 0.00000000E+00 5.14972760E-01 0.00000000E+00 + 3.22889797E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -9.45324530E-02 0.00000000E+00 -5.85433090E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.00189375E+00 + 0.00000000E+00 + +Index= 43 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -4.60079872E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.91856098E-02 0.00000000E+00 0.00000000E+00 -9.50275717E-01 0.00000000E+00 + 0.00000000E+00 9.76015913E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -8.77347257E-01 0.00000000E+00 -6.77412317E-03 0.00000000E+00 + 8.54209221E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -5.69309469E-01 0.00000000E+00 5.64260336E-01 0.00000000E+00 0.00000000E+00 + 2.31380355E-02 + +Index= 44 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.11231046E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -6.54564208E-01 0.00000000E+00 -6.54564208E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -6.54564208E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 45 +Type= 0 +Energy= 3.76464541E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.60741133E-16 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -9.15274621E-02 0.00000000E+00 0.00000000E+00 + -8.98623892E-01 0.00000000E+00 0.00000000E+00 1.02142087E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.10383026E-01 0.00000000E+00 -5.76990622E-01 0.00000000E+00 -9.18162075E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.52903071E-01 0.00000000E+00 -3.23168410E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.07779049E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 46 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -3.09289795E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -8.31627938E-16 0.00000000E+00 0.00000000E+00 1.53967914E-16 0.00000000E+00 + 0.00000000E+00 6.10761834E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.81572452E-01 0.00000000E+00 -1.09375847E+00 0.00000000E+00 + -2.17225563E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4.46574552E-01 0.00000000E+00 1.09965445E+00 0.00000000E+00 0.00000000E+00 + -7.08571147E-01 + +Index= 47 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 1.89473230E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -6.57705162E-15 0.00000000E+00 0.00000000E+00 1.35344947E-15 + 0.00000000E+00 0.00000000E+00 -4.89844358E-16 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.60558574E-01 0.00000000E+00 -2.79647139E-01 0.00000000E+00 + -5.41638777E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -6.09502469E-01 0.00000000E+00 1.46159985E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.69340781E-01 + 0.00000000E+00 + +Index= 48 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.16327231E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -7.32537022E-15 0.00000000E+00 0.00000000E+00 + 4.01457723E-16 0.00000000E+00 0.00000000E+00 -4.28885835E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -9.07038438E-01 0.00000000E+00 1.00940361E+00 0.00000000E+00 -2.70883308E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 9.69916537E-01 0.00000000E+00 -8.78417976E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.40724561E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 49 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 1.95023715E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -4.96861762E-15 0.00000000E+00 0.00000000E+00 2.60494054E-15 + 0.00000000E+00 0.00000000E+00 -2.55727553E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -6.39222404E-01 0.00000000E+00 1.41951659E+00 0.00000000E+00 + -6.58366113E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -7.81610413E-01 0.00000000E+00 1.71560499E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.31848151E-01 + 0.00000000E+00 + +Index= 50 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -6.45420033E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -1.05056506E-15 0.00000000E+00 0.00000000E+00 3.85465292E-15 0.00000000E+00 + 0.00000000E+00 -2.41492228E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -9.77514268E-01 0.00000000E+00 -1.90322690E-01 0.00000000E+00 + 6.25505083E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.42172476E+00 0.00000000E+00 -6.77120240E-01 0.00000000E+00 0.00000000E+00 + -3.41220660E-01 + +Index= 51 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.42041630E-16 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -8.51803814E-02 0.00000000E+00 -1.07300751E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.15818789E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 52 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 -8.18856565E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.08719642E-14 0.00000000E+00 0.00000000E+00 3.39316013E-16 0.00000000E+00 + 0.00000000E+00 7.50640880E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.94889600E-01 0.00000000E+00 -7.67397064E-01 0.00000000E+00 + 1.10825228E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -4.68770789E-01 0.00000000E+00 -8.79058844E-01 0.00000000E+00 0.00000000E+00 + 6.17653132E-01 + +Index= 53 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 -6.39394479E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.82156451E-15 0.00000000E+00 0.00000000E+00 4.50467113E-15 + 0.00000000E+00 0.00000000E+00 3.36420928E-15 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 9.71511950E-01 0.00000000E+00 -5.89276094E-01 0.00000000E+00 + 5.22667674E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -9.15980608E-01 0.00000000E+00 -5.51278276E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.42490638E-01 + 0.00000000E+00 + +Index= 54 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.52279284E-16 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.28818126E+00 0.00000000E+00 -7.17859006E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 -5.70322258E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +Index= 55 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.47410174E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -5.38478196E-15 0.00000000E+00 0.00000000E+00 + -5.36640932E-15 0.00000000E+00 0.00000000E+00 -7.54277312E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -4.19721131E-01 0.00000000E+00 5.04161389E-01 0.00000000E+00 -9.68140029E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.11745208E-01 0.00000000E+00 1.02425078E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -8.97556005E-01 0.00000000E+00 + 0.00000000E+00 + +Index= 56 +Type= 0 +Energy= 6.12473238E+00 +Occ= 0.000000 +Sym= ? +$Coeff + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.36967407E-16 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 -1.96231238E-15 0.00000000E+00 0.00000000E+00 + 3.58168439E-15 0.00000000E+00 0.00000000E+00 -2.44926988E-15 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + -3.33982595E-02 0.00000000E+00 -1.08046372E+00 0.00000000E+00 8.09934432E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.15334469E+00 0.00000000E+00 2.68470626E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 -8.96164924E-01 0.00000000E+00 + 0.00000000E+00 + +# Various matrices + +$Total density matrix, dim= 56 56 lower= 1 + 1.33538721E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.59474784E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.04177088E-04 + 2.59474784E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.04177088E-04 + 5.04177088E-04 2.59474784E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.04177088E-04 5.04177088E-04 5.04177088E-04 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.26436700E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.45675076E-03 + 2.45675076E-03 2.45675076E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.19712387E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.40337509E-02 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.43852595E-03 1.43852595E-03 1.43852595E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.00963965E-03 0.00000000E+00 + 4.10442471E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.26436700E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.45675076E-03 + 2.45675076E-03 2.45675076E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.19712387E-02 0.00000000E+00 7.00963965E-03 0.00000000E+00 1.19712387E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.40337509E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.43852595E-03 + 1.43852595E-03 1.43852595E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.00963965E-03 0.00000000E+00 4.10442471E-03 0.00000000E+00 7.00963965E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.10442471E-03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.40337509E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.43852595E-03 1.43852595E-03 1.43852595E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.00963965E-03 0.00000000E+00 4.10442471E-03 0.00000000E+00 + 7.00963965E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4.10442471E-03 0.00000000E+00 4.10442471E-03 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.26436700E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.45675076E-03 + 2.45675076E-03 2.45675076E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.19712387E-02 0.00000000E+00 7.00963965E-03 0.00000000E+00 1.19712387E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.00963965E-03 + 0.00000000E+00 7.00963965E-03 0.00000000E+00 0.00000000E+00 1.19712387E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 + +$Overlap matrix, dim= 56 56 lower= 1 + 1.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 6.03397848E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 6.03397848E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.33333333E-01 + 1.00000000E+00 6.03397848E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.33333333E-01 3.33333333E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 7.92578443E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 7.92578443E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.92578443E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 5.90753092E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.47213595E-01 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 5.90753092E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.47213595E-01 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.90753092E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 5.90753092E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.47213595E-01 0.00000000E+00 0.00000000E+00 3.33333333E-01 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.90753092E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.47213595E-01 + 0.00000000E+00 0.00000000E+00 3.33333333E-01 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.90753092E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 + 0.00000000E+00 3.33333333E-01 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 3.42627960E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.58184271E-01 + 1.58184271E-01 7.90921355E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.24891396E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 3.90099093E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.80100715E-01 5.40302146E-01 5.40302146E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.87950036E-01 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.24891396E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 6.00000000E-01 0.00000000E+00 1.00000000E+00 + 3.42627960E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.58184271E-01 + 7.90921355E-01 1.58184271E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 8.57142857E-02 0.00000000E+00 4.87950036E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.24891396E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.40302146E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.40302146E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.24891396E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 1.00000000E+00 + 3.90099093E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.40302146E-01 + 1.80100715E-01 5.40302146E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4.87950036E-01 0.00000000E+00 3.33333333E-01 0.00000000E+00 9.75900073E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.40302146E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.47213595E-01 0.00000000E+00 4.47213595E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 3.90099093E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.40302146E-01 5.40302146E-01 1.80100715E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 9.75900073E-02 0.00000000E+00 3.33333333E-01 0.00000000E+00 + 4.87950036E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.33333333E-01 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.24891396E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.00000000E-01 0.00000000E+00 + 4.47213595E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.24891396E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 6.00000000E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 3.42627960E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.90921355E-01 + 1.58184271E-01 1.58184271E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 8.57142857E-02 0.00000000E+00 9.75900073E-02 0.00000000E+00 8.57142857E-02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.87950036E-01 + 0.00000000E+00 4.87950036E-01 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.85858985E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 7.98836247E-01 0.00000000E+00 0.00000000E+00 + 2.55178879E-01 0.00000000E+00 0.00000000E+00 2.55178879E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 2.91515391E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 2.05415035E-01 0.00000000E+00 0.00000000E+00 + 1.53107327E-01 0.00000000E+00 0.00000000E+00 7.65536636E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 4.45297115E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.22961081E-01 0.00000000E+00 0.00000000E+00 2.33875305E-01 0.00000000E+00 + 0.00000000E+00 7.01625916E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.09175077E-01 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 4.45297115E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 5.22961081E-01 0.00000000E+00 0.00000000E+00 + 2.33875305E-01 0.00000000E+00 0.00000000E+00 7.01625916E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 6.54653671E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.91515391E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 2.05415035E-01 0.00000000E+00 0.00000000E+00 + 1.53107327E-01 0.00000000E+00 0.00000000E+00 7.65536636E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.42857143E-01 0.00000000E+00 6.54653671E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.85858985E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 7.98836247E-01 0.00000000E+00 0.00000000E+00 2.55178879E-01 + 0.00000000E+00 0.00000000E+00 2.55178879E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.42857143E-01 0.00000000E+00 5.09175077E-01 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 2.91515391E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.05415035E-01 0.00000000E+00 0.00000000E+00 1.53107327E-01 + 0.00000000E+00 0.00000000E+00 7.65536636E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 7.01625916E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 3.31904873E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.33875305E-01 0.00000000E+00 0.00000000E+00 5.22961081E-01 + 0.00000000E+00 0.00000000E+00 5.22961081E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.87950036E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.01625916E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 6.00000000E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 2.91515391E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.05415035E-01 0.00000000E+00 0.00000000E+00 7.65536636E-01 0.00000000E+00 + 0.00000000E+00 1.53107327E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 8.57142857E-02 0.00000000E+00 4.87950036E-01 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.45297115E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.22961081E-01 0.00000000E+00 + 0.00000000E+00 7.01625916E-01 0.00000000E+00 0.00000000E+00 2.33875305E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.09175077E-01 0.00000000E+00 3.33333333E-01 0.00000000E+00 + 1.30930734E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 + 3.31904873E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.33875305E-01 + 0.00000000E+00 0.00000000E+00 5.22961081E-01 0.00000000E+00 0.00000000E+00 + 5.22961081E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.87950036E-01 + 0.00000000E+00 4.47213595E-01 0.00000000E+00 1.62650012E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.31904873E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.33875305E-01 0.00000000E+00 + 0.00000000E+00 5.22961081E-01 0.00000000E+00 0.00000000E+00 5.22961081E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.62650012E-01 0.00000000E+00 4.47213595E-01 0.00000000E+00 + 4.87950036E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.45297115E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.22961081E-01 0.00000000E+00 0.00000000E+00 7.01625916E-01 + 0.00000000E+00 0.00000000E+00 2.33875305E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.30930734E-01 0.00000000E+00 3.33333333E-01 0.00000000E+00 + 5.09175077E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.47213595E-01 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 4.45297115E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.22961081E-01 0.00000000E+00 0.00000000E+00 2.33875305E-01 0.00000000E+00 + 0.00000000E+00 7.01625916E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 6.54653671E-01 0.00000000E+00 4.47213595E-01 0.00000000E+00 + 1.30930734E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.01625916E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.00000000E-01 0.00000000E+00 + 6.00000000E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 4.45297115E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.22961081E-01 0.00000000E+00 + 0.00000000E+00 7.01625916E-01 0.00000000E+00 0.00000000E+00 2.33875305E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.30930734E-01 + 0.00000000E+00 4.47213595E-01 0.00000000E+00 6.54653671E-01 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.33333333E-01 0.00000000E+00 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.91515391E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.05415035E-01 0.00000000E+00 + 0.00000000E+00 7.65536636E-01 0.00000000E+00 0.00000000E+00 1.53107327E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.42857143E-01 0.00000000E+00 1.30930734E-01 0.00000000E+00 + 8.57142857E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 6.54653671E-01 0.00000000E+00 4.87950036E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 0.00000000E+00 2.91515391E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 2.05415035E-01 0.00000000E+00 0.00000000E+00 7.65536636E-01 + 0.00000000E+00 0.00000000E+00 1.53107327E-01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 8.57142857E-02 0.00000000E+00 1.30930734E-01 0.00000000E+00 + 1.42857143E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 4.87950036E-01 0.00000000E+00 6.54653671E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 0.00000000E+00 4.85858985E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.98836247E-01 0.00000000E+00 0.00000000E+00 2.55178879E-01 0.00000000E+00 + 0.00000000E+00 2.55178879E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 1.42857143E-01 0.00000000E+00 1.62650012E-01 0.00000000E+00 + 1.42857143E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5.09175077E-01 0.00000000E+00 5.09175077E-01 0.00000000E+00 0.00000000E+00 + 1.00000000E+00 From 23a24b75cdc8e59dd715dd8a68eeae36d421bb09 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Mon, 24 Aug 2020 20:43:27 -0400 Subject: [PATCH 02/32] initial commit for mwfn.py contains load_one --- iodata/formats/mwfn.py | 365 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 365 insertions(+) create mode 100644 iodata/formats/mwfn.py diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py new file mode 100644 index 000000000..9a10fae48 --- /dev/null +++ b/iodata/formats/mwfn.py @@ -0,0 +1,365 @@ +# IODATA is an input and output module for quantum chemistry. +# Copyright (C) 2011-2020 The IODATA Development Team +# +# This file is part of IODATA. +# +# IODATA is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# IODATA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see +# -- + +from typing import Tuple, List + +import numpy as np +import scipy.constants as spc + +from ..basis import HORTON2_CONVENTIONS, MolecularBasis, Shell +from ..docstrings import document_load_one +from ..orbitals import MolecularOrbitals +from ..utils import LineIterator + +__all__ = [] + +PATTERNS = ['*.mwfn'] + +# From the MWFN chemrxiv paper +# https://chemrxiv.org/articles/Mwfn_A_Strict_Concise_and_Extensible_Format +# _for_Electronic_Wavefunction_Storage_and_Exchange/11872524 +# For cartesian shells +# S shell: S +# P shell: X, Y, Z +# D shell: XX, YY, ZZ, XY, XZ, YZ +# F shell: XXX, YYY, ZZZ, XYY, XXY, XXZ, XZZ, YZZ, YYZ, XYZ +# G shell: ZZZZ, YZZZ, YYZZ, YYYZ, YYYY, XZZZ, XYZZ, XYYZ, XYYY, XXZZ, XXYZ, XXYY, XXXZ, XXXY, XXXX +# H shell: ZZZZZ, YZZZZ, YYZZZ, YYYZZ, YYYYZ, YYYYY, XZZZZ, XYZZZ, XYYZZ, XYYYZ, XYYYY, XXZZZ, +# XXYZZ, XXYYZ, XXYYY, XXXZZ, XXXYZ, XXXYY, XXXXZ, XXXXY, XXXXX +# For pure shells, the order is +# D shell: D 0, D+1, D-1, D+2, D-2 +# F shell: F 0, F+1, F-1, F+2, F-2, F+3, F-3 +# G shell: G 0, G+1, G-1, G+2, G-2, G+3, G-3, G+4, G-4 + +CONVENTIONS = { + (9, 'p'): HORTON2_CONVENTIONS[(9, 'p')], + (8, 'p'): HORTON2_CONVENTIONS[(8, 'p')], + (7, 'p'): HORTON2_CONVENTIONS[(7, 'p')], + (6, 'p'): HORTON2_CONVENTIONS[(6, 'p')], + (5, 'p'): HORTON2_CONVENTIONS[(5, 'p')], + (4, 'p'): HORTON2_CONVENTIONS[(4, 'p')], + (3, 'p'): HORTON2_CONVENTIONS[(3, 'p')], + (2, 'p'): HORTON2_CONVENTIONS[(2, 'p')], + (0, 'c'): ['1'], + (1, 'c'): ['x', 'y', 'z'], + (2, 'c'): ['xx', 'yy', 'zz', 'xy', 'xz', 'yz'], + (3, 'c'): ['xxx', 'yyy', 'zzz', 'xyy', 'xxy', 'xxz', 'xzz', 'yzz', 'yyz', 'xyz'], + (4, 'c'): HORTON2_CONVENTIONS[(4, 'c')][::-1], + (5, 'c'): HORTON2_CONVENTIONS[(5, 'c')][::-1], + (6, 'c'): HORTON2_CONVENTIONS[(6, 'c')][::-1], + (7, 'c'): HORTON2_CONVENTIONS[(7, 'c')][::-1], + (8, 'c'): HORTON2_CONVENTIONS[(8, 'c')][::-1], + (9, 'c'): HORTON2_CONVENTIONS[(9, 'c')][::-1], +} + + +def _load_helper_opener(lit: LineIterator, keys: np.array) -> Tuple[float, int, float, float, + float, float, float, int]: + """Read initial variables.""" + max_count = len(keys) + count = 0 + d = {} + while count < max_count: + line = next(lit) + for name in keys: + if name in line: + d[name] = line.split('=')[1].strip() + count += 1 + return int(d['Wfntype']), float(d['Charge']), float(d['Naelec']), float(d['Nbelec']), \ + float(d['E_tot']), float(d['VT_ratio']), int(d['Ncenter']) + + +def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: + """Read initial variables.""" + # Nprims must be last or else it gets read in with Nprimshell + basis_keywords = ["Nbasis", "Nindbasis", "Nshell", "Nprimshell", "Nprims", ] + max_count = len(basis_keywords) + count = 0 + d = {} + line = next(lit) + while count < max_count: + line = next(lit) + for name in basis_keywords: + if name in line: + d[name] = int(line.split('=')[1].strip()) + count += 1 + break + return d['Nbasis'], d['Nindbasis'], d['Nprims'], d['Nshell'], d['Nprimshell'] + + +def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, np.ndarray]: + """Read the coordinates of the atoms.""" + atnums = np.empty(num_atoms, int) + atcorenums = np.empty(num_atoms, float) + atcoords = np.empty((num_atoms, 3), float) + line = next(lit) + while '$Centers' not in line and line is not None: + line = next(lit) + + for atom in range(num_atoms): + line = next(lit) + atnums[atom] = int(line.split()[2].strip()) + atcorenums[atom] = float(line.split()[3].strip()) + # extract atomic coordinates + coords = line.split() + atcoords[atom, :] = [coords[4], coords[5], coords[6]] + # return but convert angstroms to amu + return atnums, atcorenums, atcoords / spc.value(u'atomic unit of length') / 1E10 + + +def _load_helper_shells(lit: LineIterator, nshell: int, starts: str)\ + -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """Read one section of MO information.""" + line = next(lit) + while starts[0] not in line and line is not None: + line = next(lit) + assert line.startswith('$' + starts[0]) + shell_types = _load_helper_section(lit, nshell, ' ', 0, int) + line = next(lit) + assert line.startswith('$' + starts[1]) + centers = _load_helper_section(lit, nshell, ' ', 0, int) + line = next(lit) + assert line.startswith('$' + starts[2]) + degrees = _load_helper_section(lit, nshell, ' ', 0, int) + return shell_types, centers, degrees + + +def _load_helper_prims(lit: LineIterator, nprimshell: int) -> np.ndarray: + """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" + line = next(lit) + # concatenate list of arrays into a single array of length nshell + array = _load_helper_section(lit, nprimshell, '', 0, float) + assert len(array) == nprimshell + return array + + +def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, + dtype: np.dtype) -> np.ndarray: + """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" + section = [] + while len(section) < nprim: + line = next(lit) + assert line.startswith(start) + words = line.split() + section.extend(words[skip:]) + assert len(section) == nprim + return np.array([word for word in section]).astype(dtype) + + +def _load_helper_mo(lit: LineIterator, nbasis: int) -> Tuple[int, float, float, + np.ndarray, int, str]: + """Read one section of MO information.""" + line = next(lit) + while 'Index' not in line: + line = next(lit) + + assert line.startswith('Index') + number = int(line.split()[1]) + mo_type = int(next(lit).split()[1]) + energy = float(next(lit).split()[1]) + occ = float(next(lit).split()[1]) + sym = str(next(lit).split()[1]) + next_line = next(lit) + coeffs = _load_helper_section(lit, nbasis, '', 0, float) + return number, occ, energy, coeffs, mo_type, sym + + +def load_mwfn_low(lit: LineIterator) -> dict: + """Load data from a MWFN file into arrays. + + Parameters + ---------- + lit + The line iterator to read the data from. + + Note: + --------- + mwfn is a fortran program which loads *.mwfn by locating the line with the keyword, + `backspace`, then reading. Despite this flexibility, it is stated by the authors that + the order of section, and indeed, entries in general, must be fixed. With this in mind + the input utilized some hardcoding since order should be fixed. + + mwfn ignores lines beginning with `#`. + + """ + # read sections of mwfn file + # This assumes title is on first line which seems to be the standard + title = next(lit).strip() + opener_keywords = ["Wfntype", "Charge", "Naelec", "Nbelec", "E_tot", "VT_ratio", "Ncenter"] + wfntype, charge, nelec_a, nelec_b, energy, vt_ratio, num_atoms = _load_helper_opener(lit, + opener_keywords) + # coordinates are in Angstrom in MWFN + atnums, atcorenums, atcoords = _load_helper_atoms(lit, num_atoms) + nbasis, nindbasis, nprim, nshell, nprimshell = _load_helper_basis(lit) + keywords = ["Shell types", "Shell centers", "Shell contraction"] + shell_types, shell_centers, prim_per_shell = _load_helper_shells(lit, nshell, keywords) + # HORTON indices start at 0 because Pythons do. + shell_centers -= 1 + assert wfntype < 5 + assert num_atoms > 0 + assert min(atnums) >= 0 + assert len(shell_types) == nshell + assert len(shell_centers) == nshell + assert len(prim_per_shell) == nshell + exponent = _load_helper_prims(lit, nprimshell) + coeffs = _load_helper_prims(lit, nprimshell) + # number of MO's should equal number of independent basis functions. MWFN inc. virtual orbitals. + num_coeffs = nindbasis + if wfntype in [0, 2, 3]: + # restricted wave function + num_mo = nindbasis + elif wfntype in [1, 4]: + # unrestricted wavefunction + num_mo = 2 * nindbasis + + mo_numbers = np.empty(num_mo, int) + mo_type = np.empty(num_mo, int) + mo_occs = np.empty(num_mo, float) + mo_sym = np.empty(num_mo, str) + mo_energies = np.empty(num_mo, float) + mo_coeffs = np.empty([num_coeffs, num_mo], float) + + for mo in range(num_mo): + mo_numbers[mo], mo_occs[mo], mo_energies[mo], mo_coeffs[:, mo], \ + mo_type[mo], mo_sym[mo] = _load_helper_mo(lit, num_coeffs) + + # TODO add density matrix and overlap + + return {'title': title, 'energy': energy, 'wfntype': wfntype, + 'nelec_a': nelec_a, 'nelec_b': nelec_b, 'charge': charge, + 'atnums': atnums, 'atcoords': atcoords, 'atcorenums': atcorenums, + 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, 'nshells': nshell, + 'nprimshells': nprimshell, 'full_virial_ratio': vt_ratio, + 'shell_centers': shell_centers, 'shell_types': shell_types, 'prim_per_shell': prim_per_shell, + 'exponents': exponent, 'coeffs': coeffs, + 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, + 'mo_coeffs': mo_coeffs, 'mo_type': mo_type, 'mo_sym': mo_sym} + + +def build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, + exponents: np.ndarray, prim_per_shell: np.ndarray, + coeffs: np.ndarray, + ) -> Tuple[MolecularBasis]: + """Based on the fchk modules basis building. + + Parameters + ------------- + shell_map: np.ndarray (integer) + Index of what atom the shell is centered on. The mwfn file refers to this section + as `Shell centers`. Mwfn indices start at 1, this has been modified and starts + at 0 here. For water (O, H, H) with 6-31G, this would be an array like + [0, 0, 0, 0, 0, 1, 1, 2, 2]. , `O` in 6-31G has 5 shells and`H` has two shells. + shell_types: np.ndarray (integer) + Angular momentum of the shell. Indices start at 0 for 's' orbital, 1 for 'p' etc. + For 6-31G for a heavy atom this would be [0, 0, 1, 0, 1] corresponding + to [1s, 2s, 2p, 2s, 2p] + exponents: np.ndarray (float) + Gaussian function decay exponents for the primitives in the basis set. + prim_per_shell: np.ndarray (integer) + Array denoting the number of primitives per shell. If basis set is 6-31G this will be + [6, 3, 3, 1, 1] if the atom is a heavy atom. This corresponds to + [1s, 2s, 2p, 2s, 2p]. If additional atoms are present, the array is extended. + coeffs: np.ndarray (float) + Array of same length as `exponents` containing orbital expansion coefficients. + """ + shells = [] + counter = 0 + # First loop over all shells + for i, n in enumerate(prim_per_shell): + shells.append(Shell( + shell_map[i], + [abs(shell_types[i])], + ['p' if shell_types[i] < 0 else 'c'], + exponents[counter:counter + n], + coeffs[counter:counter + n][:, np.newaxis] + )) + counter += n + del shell_map + del shell_types + del prim_per_shell + del exponents + del coeffs + + obasis = MolecularBasis(shells, CONVENTIONS, 'L2') + return obasis + + +@document_load_one("MWFN", ['atcoords', 'atnums', 'atcorenums', 'energy', + 'mo', 'obasis', 'extra', 'title']) +def load_one(lit: LineIterator) -> dict: + """Do not edit this docstring. It will be overwritten.""" + inp = load_mwfn_low(lit) + + # MWFN contains more information than most formats, so the following dict stores some "extra" stuff. + mwfn_dict = {'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], 'mo_numbers': inp['mo_numbers'], + 'wfntype': inp['wfntype'], 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], + 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], 'nprims': inp['nprims'], + 'nshells': inp['nshells'], 'nprimshells': inp['nprimshells'], + 'shell_types': inp['shell_types'], 'shell_centers': inp['shell_centers'], + 'prim_per_shell': inp['prim_per_shell'], 'full_virial_ratio': inp['full_virial_ratio']} + + # Unlike WFN, MWFN does include orbital expansion coefficients. + obasis = build_obasis(inp['shell_centers'], + inp['shell_types'], + inp['exponents'], + inp['prim_per_shell'], + inp['coeffs'], + ) + # wfntype(integer, scalar): Wavefunction type. Possible values: + # 0: Restricted closed - shell single - determinant wavefunction(e.g.RHF, RKS) + # 1: Unrestricted open - shell single - determinant wavefunction(e.g.UHF, UKS) + # 2: Restricted open - shell single - determinant wavefunction(e.g.ROHF, ROKS) + # 3: Restricted multiconfiguration wavefunction(e.g.RMP2, RCCSD) + # 4: Unrestricted multiconfiguration wavefunction(e.g.UMP2, UCCSD) + wfntype = inp['wfntype'] + if wfntype in [0, 2, 3]: + restrictions = "restricted" + elif wfntype in [1, 4]: + restrictions = "unrestricted" + else: + raise IOError('No wfntype found, cannot determine if restricted or unrestricted wave function.') + # MFWN provides number of alpha and beta electrons, this is a double check + # mo_type (integer, scalar): Orbital type + # 0: Alpha + Beta (i.e. spatial orbital) + # 1: Alpha + # 2: Beta + # TODO calculate number of alpha and beta electrons manually. + + # Build the molecular orbitals + mo = MolecularOrbitals(restrictions, + inp['nelec_a'], + inp['nelec_b'], + inp['mo_occs'], + inp['mo_coeffs'], + inp['mo_energies'], + None, + ) + + return { + 'title': inp['title'], + 'atcoords': inp['atcoords'], + 'atnums': inp['atnums'], + 'atcorenums': inp['atcorenums'], + 'charge': inp['charge'], + 'obasis': obasis, + 'mo': mo, + 'nelec': inp['nelec_a'] + inp['nelec_b'], + 'energy': inp['energy'], + 'extra': mwfn_dict, + } From c5b522349cc788c5e35a2e0967c11d6e0562e3bf Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Mon, 24 Aug 2020 20:44:08 -0400 Subject: [PATCH 03/32] added test_mwfn.py --- iodata/test/test_mwfn.py | 216 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 iodata/test/test_mwfn.py diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py new file mode 100644 index 000000000..24547bc1a --- /dev/null +++ b/iodata/test/test_mwfn.py @@ -0,0 +1,216 @@ +# IODATA is an input and output module for quantum chemistry. +# Copyright (C) 2011-2020 The IODATA Development Team +# +# This file is part of IODATA. +# +# IODATA is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# IODATA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see +# -- +"""Test iodata.formats.mwfn module.""" + + +import numpy as np + +from numpy.testing import assert_equal, assert_allclose + +from ..api import load_one +from ..formats.mwfn import load_mwfn_low +from ..overlap import compute_overlap +import pytest +from ..utils import LineIterator + +try: + from importlib_resources import path +except ImportError: + from importlib.resources import path + + +def helper_load_mwfn_low(fn_mwfn): + """Load a testing Gaussian log file with iodata.formats.mwfn.load_mwfn_low.""" + with path('iodata.test.data', fn_mwfn) as fn: + lit = LineIterator(str(fn)) + return load_mwfn_low(lit) + + +def load_fchk_helper(fn_fchk): + """Load a testing fchk file with iodata.iodata.load_one.""" + with path('iodata.test.data', fn_fchk) as fn: + return load_one(fn) + + +def test_load_mwfn_nonexistent(): + with pytest.raises(IOError): + with path('iodata.test.data', 'fubar_crap.fchk') as fn: + load_one(str(fn)) + + +def load_mwfn_helper(fn_mwfn): + """Load a testing mwfn file with iodata.iodata.load_one.""" + with path('iodata.test.data', fn_mwfn) as fn: + return load_one(fn) + + +def test_load_mwfn_ch3_rohf_g03(): + mol = load_mwfn_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') + assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) + assert_equal(mol.mo.occs.sum(), 9.0) + assert_equal(mol.mo.occs.min(), 0.0) + assert_equal(mol.mo.occs.max(), 2.0) + assert_equal(mol.extra['full_virial_ratio'], 2.00174844) + assert_equal(mol.extra['nindbasis'], 8) + assert_equal(mol.extra['nbasis'], 8) + assert_equal(mol.extra['nprims'], 24) + assert_equal(mol.extra['nshells'], 6) + assert_equal(mol.extra['nprimshells'], 18) + assert_equal(mol.charge, 0.0) + assert_equal(mol.nelec, 9) + assert_equal(mol.natom, 4) + assert_equal(mol.extra['nelec_a'], 5.0) + assert_equal(mol.extra['nelec_b'], 4.0) + assert_equal(mol.energy, -3.90732095E+01) + assert_allclose(mol.extra['shell_types'], np.array([0, 0, 1, 0, 0, 0])) + assert_allclose(mol.extra['shell_centers'], np.array([1, 1, 1, 2, 3, 4]) - 1) + assert_allclose(mol.extra['prim_per_shell'], np.array([3, 3, 3, 3, 3, 3])) + exponents1 = np.array([7.16168373E+01, 1.30450963E+01, 3.53051216E+00]) + exponents2 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) + exponents3 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) + exponents4 = np.array([3.42525091E+00, 6.23913730E-01, 1.68855404E-01]) + assert_allclose(mol.obasis.shells[0].exponents, exponents1) + assert_allclose(mol.obasis.shells[1].exponents, exponents2) + assert_allclose(mol.obasis.shells[2].exponents, exponents3) + assert_allclose(mol.obasis.shells[3].exponents, exponents4) + assert_allclose(mol.obasis.shells[4].exponents, exponents4) + assert_allclose(mol.obasis.shells[5].exponents, exponents4) + coeffs1 = np.array([[1.54328967E-01], [5.35328142E-01], [4.44634542E-01]]) + coeffs2 = np.array([[-9.99672292E-02], [3.99512826E-01], [7.00115469E-01]]) + coeffs3 = np.array([[1.55916275E-01], [6.07683719E-01], [3.91957393E-01]]) + coeffs4 = np.array([[1.54328967E-01], [5.35328142E-01], [4.44634542E-01]]) + assert_allclose(mol.obasis.shells[0].coeffs, coeffs1) + assert_allclose(mol.obasis.shells[1].coeffs, coeffs2) + assert_allclose(mol.obasis.shells[2].coeffs, coeffs3) + assert_allclose(mol.obasis.shells[3].coeffs, coeffs4) + assert_allclose(mol.obasis.shells[4].coeffs, coeffs4) + assert_allclose(mol.obasis.shells[5].coeffs, coeffs4) + # test first molecular orbital information + coeff = np.array([9.92532359E-01, 3.42148679E-02, 3.30477771E-06, - 1.97321450E-03, + 0.00000000E+00, -6.94439001E-03, - 6.94439001E-03, - 6.94539905E-03]) + assert_equal(mol.mo.coeffs[:,0], coeff) + mo_energies = np.array([-1.09902284E+01, -8.36918686E-01, -5.24254982E-01, -5.23802785E-01, + -1.26686819E-02, 6.64707810E-01, 7.68278159E-01, 7.69362712E-01]) + assert_allclose(mol.mo.energies, mo_energies) + assert_equal(mol.mo.occs[0], 2.000000) + assert_equal(mol.extra['mo_type'][0], 0) + assert_equal(mol.extra['mo_sym'][0], '?') + # test that for the same molecule fchk and mwfn generate the same objects. + olp = compute_overlap(mol.obasis, mol.atcoords) + mol2 = load_fchk_helper('ch3_rohf_sto3g_g03.fchk') + olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) + # assert_allclose fails due to abs/rel tolerance settings + assert np.allclose(mol.atcoords, mol2.atcoords) + assert_allclose(mol2.obasis.shells[0].coeffs, coeffs1) + # fails due to special SP basis storage (leaving commented lines in for future reference) + # assert_allclose(mol2.obasis.shells[1].coeffs, coeffs2) + # assert_allclose(mol2.obasis.shells[2].coeffs, coeffs3) + assert_allclose(mol2.obasis.shells[3].coeffs, coeffs4) + assert_allclose(mol2.obasis.shells[4].coeffs, coeffs4) + # assert_allclose fails due to abs/rel tolerance settings + assert np.allclose(olp, olp_fchk) + + +def test_load_mwfn_ch3_hf_g03(): + mol = load_mwfn_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') + assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) + assert_equal(mol.extra['wfntype'], 1) + # test first molecular orbital information + coeff = np.array([9.91912304E-01, 3.68365244E-02, 9.23239012E-04, 9.05953703E-04, + 9.05953703E-04, -7.36810756E-03, - 7.36810756E-03, - 7.36919429E-03]) + assert_equal(mol.mo.coeffs[:,0], coeff) + mo_energies = np.array([-1.10094534E+01, -9.07622407E-01, -5.37709620E-01, -5.37273275E-01, + -3.63936540E-01, 6.48361367E-01, 7.58140704E-01, 7.59223157E-01, + -1.09780991E+01, -8.01569083E-01, -5.19454722E-01, -5.18988806E-01, + 3.28562907E-01, 7.04456296E-01, 7.88139770E-01, 7.89228899E-01]) + assert_allclose(mol.mo.energies, mo_energies) + assert_equal(mol.mo.occs[0], 1.000000) + assert_equal(mol.extra['mo_type'][0], 1) + assert_equal(mol.extra['mo_sym'][0], '?') + # test that for the same molecule fchk and mwfn generate the same objects. + olp = compute_overlap(mol.obasis, mol.atcoords) + mol2 = load_fchk_helper('ch3_hf_sto3g.fchk') + olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) + # assert_allclose fails due to abs/rel tolerance settings + assert np.allclose(mol.atcoords, mol2.atcoords) + # assert_allclose fails due to abs/rel tolerance settings + assert np.allclose(olp, olp_fchk) + + +def test_nelec_charge(): + mol1 = load_mwfn_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') + assert mol1.nelec == 9 + assert mol1.charge == 0 + mol2 = load_fchk_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') + assert mol2.nelec == 2 + assert mol2.charge == 0 + assert mol2.extra['nelec_a'] == 1 + assert mol2.extra['nelec_b'] == 1 + mol3 = load_fchk_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') + assert mol3.nelec == 9 + assert mol3.charge == 0 + assert mol3.extra['nelec_a'] == 5 + assert mol3.extra['nelec_b'] == 4 + + +def test_load_mwfn_he_spdfgh_g03(): + mol = load_mwfn_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') + assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) + assert_equal(mol.extra['wfntype'], 0) + # test first molecular orbital information + coeff = np.array([ + 8.17125208E-01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.58772965E-02, + 1.58772965E-02, 1.58772965E-02, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 7.73667846E-02, 0.00000000E+00, 4.53013505E-02, 0.00000000E+00, 7.73667846E-02, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 4.53013505E-02, + 0.00000000E+00, 4.53013505E-02, 0.00000000E+00, 0.00000000E+00, 7.73667846E-02, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00]) + + assert_equal(mol.mo.coeffs[:,0], coeff) + mo_energies = np.array([-3.83109139E-01, 6.72890652E-02, 6.72890652E-02, 6.72890652E-02, + 3.33282755E-01, 5.51389775E-01, 5.51389775E-01, 5.51389775E-01, + 5.51389775E-01, 5.51389775E-01, 8.85311032E-01, 8.85311032E-01, + 8.85311032E-01, 1.19945800E+00, 1.37176438E+00, 1.37176438E+00, + 1.37176438E+00, 1.37176438E+00, 1.37176438E+00, 1.37176438E+00, + 1.37176438E+00, 1.89666973E+00, 1.89666973E+00, 1.89666973E+00, + ]) + assert_allclose(mol.mo.energies[:24], mo_energies) + # energies were truncated at 24 entries, this checks the last energy entry + assert mol.mo.energies[55] == 6.12473238E+00 + assert_equal(mol.mo.occs[0], 2.000000) + assert_equal(mol.extra['mo_type'][0], 0) + assert_equal(mol.extra['mo_sym'][0], '?') + # this tests thhe last of the molecular orbital entries + assert_equal(mol.mo.occs[55], 0.000000) + assert_equal(mol.extra['mo_type'][55], 0) + assert_equal(mol.extra['mo_sym'][55], '?') + # test that for the same molecule fchk and mwfn generate the same objects. + olp = compute_overlap(mol.obasis, mol.atcoords) + mol2 = load_fchk_helper('he_spdfgh_virtual.fchk') + olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) + # assert_allclose fails due to abs/rel tolerance settings + assert np.allclose(mol.atcoords, mol2.atcoords) + # assert_allclose fails due to abs/rel tolerance settings + assert np.allclose(olp, olp_fchk) From ca6ed44a9d5580c214c091d0eabc30b14705b828 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Tue, 25 Aug 2020 16:51:29 -0400 Subject: [PATCH 04/32] cleanup in test_mwfn.py and mwfn.py for formatting --- iodata/formats/mwfn.py | 72 +++++++++++++++++++++------------------- iodata/test/test_mwfn.py | 6 ++-- 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 9a10fae48..32feb2f7f 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -17,7 +17,7 @@ # along with this program; if not, see # -- -from typing import Tuple, List +from typing import Tuple import numpy as np import scipy.constants as spc @@ -27,7 +27,7 @@ from ..orbitals import MolecularOrbitals from ..utils import LineIterator -__all__ = [] +__all__ = ['load_mwfn_low'] PATTERNS = ['*.mwfn'] @@ -69,8 +69,8 @@ } -def _load_helper_opener(lit: LineIterator, keys: np.array) -> Tuple[float, int, float, float, - float, float, float, int]: +def _load_helper_opener(lit: LineIterator, keys: list) -> Tuple[int, float, float, + float, float, float, int]: """Read initial variables.""" max_count = len(keys) count = 0 @@ -81,8 +81,8 @@ def _load_helper_opener(lit: LineIterator, keys: np.array) -> Tuple[float, int, if name in line: d[name] = line.split('=')[1].strip() count += 1 - return int(d['Wfntype']), float(d['Charge']), float(d['Naelec']), float(d['Nbelec']), \ - float(d['E_tot']), float(d['VT_ratio']), int(d['Ncenter']) + return int(d['Wfntype']), float(d['Charge']), float(d['Naelec']), float(d['Nbelec']),\ + float(d['E_tot']), float(d['VT_ratio']), int(d['Ncenter']) def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: @@ -92,7 +92,7 @@ def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: max_count = len(basis_keywords) count = 0 d = {} - line = next(lit) + next(lit) while count < max_count: line = next(lit) for name in basis_keywords: @@ -103,7 +103,8 @@ def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: return d['Nbasis'], d['Nindbasis'], d['Nprims'], d['Nshell'], d['Nprimshell'] -def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, np.ndarray]: +def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, np.ndarray, + np.ndarray]: """Read the coordinates of the atoms.""" atnums = np.empty(num_atoms, int) atcorenums = np.empty(num_atoms, float) @@ -123,7 +124,7 @@ def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, n return atnums, atcorenums, atcoords / spc.value(u'atomic unit of length') / 1E10 -def _load_helper_shells(lit: LineIterator, nshell: int, starts: str)\ +def _load_helper_shells(lit: LineIterator, nshell: int, starts: list) \ -> Tuple[np.ndarray, np.ndarray, np.ndarray]: """Read one section of MO information.""" line = next(lit) @@ -142,7 +143,7 @@ def _load_helper_shells(lit: LineIterator, nshell: int, starts: str)\ def _load_helper_prims(lit: LineIterator, nprimshell: int) -> np.ndarray: """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" - line = next(lit) + next(lit) # concatenate list of arrays into a single array of length nshell array = _load_helper_section(lit, nprimshell, '', 0, float) assert len(array) == nprimshell @@ -175,7 +176,7 @@ def _load_helper_mo(lit: LineIterator, nbasis: int) -> Tuple[int, float, float, energy = float(next(lit).split()[1]) occ = float(next(lit).split()[1]) sym = str(next(lit).split()[1]) - next_line = next(lit) + next(lit) coeffs = _load_helper_section(lit, nbasis, '', 0, float) return number, occ, energy, coeffs, mo_type, sym @@ -187,23 +188,21 @@ def load_mwfn_low(lit: LineIterator) -> dict: ---------- lit The line iterator to read the data from. - - Note: - --------- - mwfn is a fortran program which loads *.mwfn by locating the line with the keyword, - `backspace`, then reading. Despite this flexibility, it is stated by the authors that - the order of section, and indeed, entries in general, must be fixed. With this in mind - the input utilized some hardcoding since order should be fixed. - - mwfn ignores lines beginning with `#`. - """ + # Note: + # --------- + # mwfn is a fortran program which loads *.mwfn by locating the line with the keyword, + # then uses `backspace`, then begins reading. Despite this flexibility, it is stated by + # the authors that the order of section, and indeed, entries in general, must be fixed. + # With this in mind the input utilized some hardcoding since order should be fixed. + # + # mwfn ignores lines beginning with `#`. # read sections of mwfn file # This assumes title is on first line which seems to be the standard title = next(lit).strip() opener_keywords = ["Wfntype", "Charge", "Naelec", "Nbelec", "E_tot", "VT_ratio", "Ncenter"] - wfntype, charge, nelec_a, nelec_b, energy, vt_ratio, num_atoms = _load_helper_opener(lit, - opener_keywords) + wfntype, charge, nelec_a, nelec_b, \ + energy, vt_ratio, num_atoms = _load_helper_opener(lit, opener_keywords) # coordinates are in Angstrom in MWFN atnums, atcorenums, atcoords = _load_helper_atoms(lit, num_atoms) nbasis, nindbasis, nprim, nshell, nprimshell = _load_helper_basis(lit) @@ -237,7 +236,7 @@ def load_mwfn_low(lit: LineIterator) -> dict: for mo in range(num_mo): mo_numbers[mo], mo_occs[mo], mo_energies[mo], mo_coeffs[:, mo], \ - mo_type[mo], mo_sym[mo] = _load_helper_mo(lit, num_coeffs) + mo_type[mo], mo_sym[mo] = _load_helper_mo(lit, num_coeffs) # TODO add density matrix and overlap @@ -246,8 +245,8 @@ def load_mwfn_low(lit: LineIterator) -> dict: 'atnums': atnums, 'atcoords': atcoords, 'atcorenums': atcorenums, 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, 'nshells': nshell, 'nprimshells': nprimshell, 'full_virial_ratio': vt_ratio, - 'shell_centers': shell_centers, 'shell_types': shell_types, 'prim_per_shell': prim_per_shell, - 'exponents': exponent, 'coeffs': coeffs, + 'shell_centers': shell_centers, 'shell_types': shell_types, + 'prim_per_shell': prim_per_shell, 'exponents': exponent, 'coeffs': coeffs, 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, 'mo_coeffs': mo_coeffs, 'mo_type': mo_type, 'mo_sym': mo_sym} @@ -255,7 +254,7 @@ def load_mwfn_low(lit: LineIterator) -> dict: def build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, exponents: np.ndarray, prim_per_shell: np.ndarray, coeffs: np.ndarray, - ) -> Tuple[MolecularBasis]: + ) -> Tuple[MolecularBasis]: """Based on the fchk modules basis building. Parameters @@ -296,7 +295,7 @@ def build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, del exponents del coeffs - obasis = MolecularBasis(shells, CONVENTIONS, 'L2') + obasis = MolecularBasis(tuple(shells), CONVENTIONS, 'L2') return obasis @@ -306,13 +305,16 @@ def load_one(lit: LineIterator) -> dict: """Do not edit this docstring. It will be overwritten.""" inp = load_mwfn_low(lit) - # MWFN contains more information than most formats, so the following dict stores some "extra" stuff. - mwfn_dict = {'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], 'mo_numbers': inp['mo_numbers'], - 'wfntype': inp['wfntype'], 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], - 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], 'nprims': inp['nprims'], - 'nshells': inp['nshells'], 'nprimshells': inp['nprimshells'], - 'shell_types': inp['shell_types'], 'shell_centers': inp['shell_centers'], - 'prim_per_shell': inp['prim_per_shell'], 'full_virial_ratio': inp['full_virial_ratio']} + # MWFN contains more information than most formats, + # so the following dict stores some "extra" stuff. + mwfn_dict = {'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], + 'mo_numbers': inp['mo_numbers'], 'wfntype': inp['wfntype'], + 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], + 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], + 'nprims': inp['nprims'], 'nshells': inp['nshells'], + 'nprimshells': inp['nprimshells'], 'shell_types': inp['shell_types'], + 'shell_centers': inp['shell_centers'], 'prim_per_shell': inp['prim_per_shell'], + 'full_virial_ratio': inp['full_virial_ratio']} # Unlike WFN, MWFN does include orbital expansion coefficients. obasis = build_obasis(inp['shell_centers'], diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index 24547bc1a..3b4b7807b 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -104,7 +104,7 @@ def test_load_mwfn_ch3_rohf_g03(): # test first molecular orbital information coeff = np.array([9.92532359E-01, 3.42148679E-02, 3.30477771E-06, - 1.97321450E-03, 0.00000000E+00, -6.94439001E-03, - 6.94439001E-03, - 6.94539905E-03]) - assert_equal(mol.mo.coeffs[:,0], coeff) + assert_equal(mol.mo.coeffs[:, 0], coeff) mo_energies = np.array([-1.09902284E+01, -8.36918686E-01, -5.24254982E-01, -5.23802785E-01, -1.26686819E-02, 6.64707810E-01, 7.68278159E-01, 7.69362712E-01]) assert_allclose(mol.mo.energies, mo_energies) @@ -134,7 +134,7 @@ def test_load_mwfn_ch3_hf_g03(): # test first molecular orbital information coeff = np.array([9.91912304E-01, 3.68365244E-02, 9.23239012E-04, 9.05953703E-04, 9.05953703E-04, -7.36810756E-03, - 7.36810756E-03, - 7.36919429E-03]) - assert_equal(mol.mo.coeffs[:,0], coeff) + assert_equal(mol.mo.coeffs[:, 0], coeff) mo_energies = np.array([-1.10094534E+01, -9.07622407E-01, -5.37709620E-01, -5.37273275E-01, -3.63936540E-01, 6.48361367E-01, 7.58140704E-01, 7.59223157E-01, -1.09780991E+01, -8.01569083E-01, -5.19454722E-01, -5.18988806E-01, @@ -188,7 +188,7 @@ def test_load_mwfn_he_spdfgh_g03(): 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00]) - assert_equal(mol.mo.coeffs[:,0], coeff) + assert_equal(mol.mo.coeffs[:, 0], coeff) mo_energies = np.array([-3.83109139E-01, 6.72890652E-02, 6.72890652E-02, 6.72890652E-02, 3.33282755E-01, 5.51389775E-01, 5.51389775E-01, 5.51389775E-01, 5.51389775E-01, 5.51389775E-01, 8.85311032E-01, 8.85311032E-01, From 85d4bf6857883899d5ff82b9a718a286fbf8666b Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Tue, 25 Aug 2020 19:37:09 -0700 Subject: [PATCH 05/32] Fix header & pycodestyle E241 & E501 --- iodata/formats/mwfn.py | 4 ++-- iodata/test/test_mwfn.py | 40 ++++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 32feb2f7f..96e14f902 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -1,5 +1,5 @@ # IODATA is an input and output module for quantum chemistry. -# Copyright (C) 2011-2020 The IODATA Development Team +# Copyright (C) 2011-2019 The IODATA Development Team # # This file is part of IODATA. # @@ -335,7 +335,7 @@ def load_one(lit: LineIterator) -> dict: elif wfntype in [1, 4]: restrictions = "unrestricted" else: - raise IOError('No wfntype found, cannot determine if restricted or unrestricted wave function.') + raise IOError('Cannot determine if restricted or unrestricted wfntype wave function.') # MFWN provides number of alpha and beta electrons, this is a double check # mo_type (integer, scalar): Orbital type # 0: Alpha + Beta (i.e. spatial orbital) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index 3b4b7807b..ad65a9eda 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -1,5 +1,5 @@ # IODATA is an input and output module for quantum chemistry. -# Copyright (C) 2011-2020 The IODATA Development Team +# Copyright (C) 2011-2019 The IODATA Development Team # # This file is part of IODATA. # @@ -81,20 +81,20 @@ def test_load_mwfn_ch3_rohf_g03(): assert_allclose(mol.extra['shell_types'], np.array([0, 0, 1, 0, 0, 0])) assert_allclose(mol.extra['shell_centers'], np.array([1, 1, 1, 2, 3, 4]) - 1) assert_allclose(mol.extra['prim_per_shell'], np.array([3, 3, 3, 3, 3, 3])) - exponents1 = np.array([7.16168373E+01, 1.30450963E+01, 3.53051216E+00]) - exponents2 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) - exponents3 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) - exponents4 = np.array([3.42525091E+00, 6.23913730E-01, 1.68855404E-01]) + exponents1 = np.array([7.16168373E+01, 1.30450963E+01, 3.53051216E+00]) + exponents2 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) + exponents3 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) + exponents4 = np.array([3.42525091E+00, 6.23913730E-01, 1.68855404E-01]) assert_allclose(mol.obasis.shells[0].exponents, exponents1) assert_allclose(mol.obasis.shells[1].exponents, exponents2) assert_allclose(mol.obasis.shells[2].exponents, exponents3) assert_allclose(mol.obasis.shells[3].exponents, exponents4) assert_allclose(mol.obasis.shells[4].exponents, exponents4) assert_allclose(mol.obasis.shells[5].exponents, exponents4) - coeffs1 = np.array([[1.54328967E-01], [5.35328142E-01], [4.44634542E-01]]) - coeffs2 = np.array([[-9.99672292E-02], [3.99512826E-01], [7.00115469E-01]]) - coeffs3 = np.array([[1.55916275E-01], [6.07683719E-01], [3.91957393E-01]]) - coeffs4 = np.array([[1.54328967E-01], [5.35328142E-01], [4.44634542E-01]]) + coeffs1 = np.array([[1.54328967E-01], [5.35328142E-01], [4.44634542E-01]]) + coeffs2 = np.array([[-9.99672292E-02], [3.99512826E-01], [7.00115469E-01]]) + coeffs3 = np.array([[1.55916275E-01], [6.07683719E-01], [3.91957393E-01]]) + coeffs4 = np.array([[1.54328967E-01], [5.35328142E-01], [4.44634542E-01]]) assert_allclose(mol.obasis.shells[0].coeffs, coeffs1) assert_allclose(mol.obasis.shells[1].coeffs, coeffs2) assert_allclose(mol.obasis.shells[2].coeffs, coeffs3) @@ -175,17 +175,17 @@ def test_load_mwfn_he_spdfgh_g03(): assert_equal(mol.extra['wfntype'], 0) # test first molecular orbital information coeff = np.array([ - 8.17125208E-01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.58772965E-02, - 1.58772965E-02, 1.58772965E-02, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, - 7.73667846E-02, 0.00000000E+00, 4.53013505E-02, 0.00000000E+00, 7.73667846E-02, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 4.53013505E-02, - 0.00000000E+00, 4.53013505E-02, 0.00000000E+00, 0.00000000E+00, 7.73667846E-02, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, - 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 8.17125208E-01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.58772965E-02, + 1.58772965E-02, 1.58772965E-02, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 7.73667846E-02, 0.00000000E+00, 4.53013505E-02, 0.00000000E+00, 7.73667846E-02, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 4.53013505E-02, + 0.00000000E+00, 4.53013505E-02, 0.00000000E+00, 0.00000000E+00, 7.73667846E-02, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, + 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00]) assert_equal(mol.mo.coeffs[:, 0], coeff) From 8d06fc07c5d63b60db863dee77ec0664f70d2747 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Wed, 26 Aug 2020 06:39:08 -0700 Subject: [PATCH 06/32] Fix pylint issues --- iodata/formats/mwfn.py | 2 ++ iodata/test/test_mwfn.py | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 96e14f902..619d820e0 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, see # -- +"""Multiwfn MWFN file format.""" from typing import Tuple @@ -159,6 +160,7 @@ def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, assert line.startswith(start) words = line.split() section.extend(words[skip:]) + # pylint: disable=unnecessary-comprehension assert len(section) == nprim return np.array([word for word in section]).astype(dtype) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index ad65a9eda..53a843e90 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -16,17 +16,18 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, see # -- +# pylint: disable=too-many-statements """Test iodata.formats.mwfn module.""" import numpy as np - from numpy.testing import assert_equal, assert_allclose +import pytest + from ..api import load_one from ..formats.mwfn import load_mwfn_low from ..overlap import compute_overlap -import pytest from ..utils import LineIterator try: From cab2fde14bf04efc97a9e572cd8a1683fa5d5c47 Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Wed, 26 Aug 2020 15:47:44 +0200 Subject: [PATCH 07/32] Fix some more pylint issues. :) --- iodata/formats/mwfn.py | 30 ++++++++++++++---------------- iodata/test/test_mwfn.py | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 619d820e0..d77262948 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -144,7 +144,7 @@ def _load_helper_shells(lit: LineIterator, nshell: int, starts: list) \ def _load_helper_prims(lit: LineIterator, nprimshell: int) -> np.ndarray: """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" - next(lit) + next(lit) # skip line # concatenate list of arrays into a single array of length nshell array = _load_helper_section(lit, nprimshell, '', 0, float) assert len(array) == nprimshell @@ -160,9 +160,8 @@ def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, assert line.startswith(start) words = line.split() section.extend(words[skip:]) - # pylint: disable=unnecessary-comprehension assert len(section) == nprim - return np.array([word for word in section]).astype(dtype) + return np.array(section).astype(dtype) def _load_helper_mo(lit: LineIterator, nbasis: int) -> Tuple[int, float, float, @@ -178,7 +177,7 @@ def _load_helper_mo(lit: LineIterator, nbasis: int) -> Tuple[int, float, float, energy = float(next(lit).split()[1]) occ = float(next(lit).split()[1]) sym = str(next(lit).split()[1]) - next(lit) + next(lit) # skip line coeffs = _load_helper_section(lit, nbasis, '', 0, float) return number, occ, energy, coeffs, mo_type, sym @@ -245,8 +244,8 @@ def load_mwfn_low(lit: LineIterator) -> dict: return {'title': title, 'energy': energy, 'wfntype': wfntype, 'nelec_a': nelec_a, 'nelec_b': nelec_b, 'charge': charge, 'atnums': atnums, 'atcoords': atcoords, 'atcorenums': atcorenums, - 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, 'nshells': nshell, - 'nprimshells': nprimshell, 'full_virial_ratio': vt_ratio, + 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, + 'nshells': nshell, 'nprimshells': nprimshell, 'full_virial_ratio': vt_ratio, 'shell_centers': shell_centers, 'shell_types': shell_types, 'prim_per_shell': prim_per_shell, 'exponents': exponent, 'coeffs': coeffs, 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, @@ -307,16 +306,15 @@ def load_one(lit: LineIterator) -> dict: """Do not edit this docstring. It will be overwritten.""" inp = load_mwfn_low(lit) - # MWFN contains more information than most formats, - # so the following dict stores some "extra" stuff. - mwfn_dict = {'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], - 'mo_numbers': inp['mo_numbers'], 'wfntype': inp['wfntype'], - 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], - 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], - 'nprims': inp['nprims'], 'nshells': inp['nshells'], - 'nprimshells': inp['nprimshells'], 'shell_types': inp['shell_types'], - 'shell_centers': inp['shell_centers'], 'prim_per_shell': inp['prim_per_shell'], - 'full_virial_ratio': inp['full_virial_ratio']} + # MWFN contains more information than most formats, so the following dict + # stores some "extra" stuff. + mwfn_dict = { + 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], 'mo_numbers': inp['mo_numbers'], + 'wfntype': inp['wfntype'], 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], + 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], 'nprims': inp['nprims'], + 'nshells': inp['nshells'], 'nprimshells': inp['nprimshells'], + 'shell_types': inp['shell_types'], 'shell_centers': inp['shell_centers'], + 'prim_per_shell': inp['prim_per_shell'], 'full_virial_ratio': inp['full_virial_ratio']} # Unlike WFN, MWFN does include orbital expansion coefficients. obasis = build_obasis(inp['shell_centers'], diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index 53a843e90..e58ca49b2 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, see # -- -# pylint: disable=too-many-statements """Test iodata.formats.mwfn module.""" @@ -61,6 +60,7 @@ def load_mwfn_helper(fn_mwfn): return load_one(fn) +# pylint: disable=too-many-statements def test_load_mwfn_ch3_rohf_g03(): mol = load_mwfn_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) From e8855d6760e5e7e65a26a4ae81f73ae36f477c1a Mon Sep 17 00:00:00 2001 From: Toon Verstraelen Date: Wed, 26 Aug 2020 15:55:35 +0200 Subject: [PATCH 08/32] Remove unused code --- iodata/test/test_mwfn.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index e58ca49b2..3018c2c3e 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -35,13 +35,6 @@ from importlib.resources import path -def helper_load_mwfn_low(fn_mwfn): - """Load a testing Gaussian log file with iodata.formats.mwfn.load_mwfn_low.""" - with path('iodata.test.data', fn_mwfn) as fn: - lit = LineIterator(str(fn)) - return load_mwfn_low(lit) - - def load_fchk_helper(fn_fchk): """Load a testing fchk file with iodata.iodata.load_one.""" with path('iodata.test.data', fn_fchk) as fn: From 5434810c8ede344e51cad7d14cbe9b07fedaed81 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Thu, 27 Aug 2020 05:00:28 -0400 Subject: [PATCH 09/32] cleanup and formatting. --- iodata/formats/mwfn.py | 49 ++++++++++++++----------------- iodata/test/test_mwfn.py | 62 ++++++++++++++++------------------------ 2 files changed, 45 insertions(+), 66 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index d77262948..08b60e498 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -26,9 +26,9 @@ from ..basis import HORTON2_CONVENTIONS, MolecularBasis, Shell from ..docstrings import document_load_one from ..orbitals import MolecularOrbitals -from ..utils import LineIterator +from ..utils import LineIterator, angstrom -__all__ = ['load_mwfn_low'] +__all__ = [] PATTERNS = ['*.mwfn'] @@ -49,11 +49,6 @@ # G shell: G 0, G+1, G-1, G+2, G-2, G+3, G-3, G+4, G-4 CONVENTIONS = { - (9, 'p'): HORTON2_CONVENTIONS[(9, 'p')], - (8, 'p'): HORTON2_CONVENTIONS[(8, 'p')], - (7, 'p'): HORTON2_CONVENTIONS[(7, 'p')], - (6, 'p'): HORTON2_CONVENTIONS[(6, 'p')], - (5, 'p'): HORTON2_CONVENTIONS[(5, 'p')], (4, 'p'): HORTON2_CONVENTIONS[(4, 'p')], (3, 'p'): HORTON2_CONVENTIONS[(3, 'p')], (2, 'p'): HORTON2_CONVENTIONS[(2, 'p')], @@ -61,12 +56,11 @@ (1, 'c'): ['x', 'y', 'z'], (2, 'c'): ['xx', 'yy', 'zz', 'xy', 'xz', 'yz'], (3, 'c'): ['xxx', 'yyy', 'zzz', 'xyy', 'xxy', 'xxz', 'xzz', 'yzz', 'yyz', 'xyz'], - (4, 'c'): HORTON2_CONVENTIONS[(4, 'c')][::-1], - (5, 'c'): HORTON2_CONVENTIONS[(5, 'c')][::-1], - (6, 'c'): HORTON2_CONVENTIONS[(6, 'c')][::-1], - (7, 'c'): HORTON2_CONVENTIONS[(7, 'c')][::-1], - (8, 'c'): HORTON2_CONVENTIONS[(8, 'c')][::-1], - (9, 'c'): HORTON2_CONVENTIONS[(9, 'c')][::-1], + (4, 'c'): ['zzzz', 'yzzz', 'yyzz', 'yyyz', 'yyyy', 'xzzz', 'xyzz', 'xyyz', 'xyyy', + 'xxzz', 'xxyz', 'xxyy', 'xxxz', 'xxxy', 'xxxx'], + (5, 'c'): ['zzzzz', 'yzzzz', 'yyzzz', 'yyyzz', 'yyyyz', 'yyyyy', 'xzzzz', 'xyzzz', + 'xyyzz', 'xyyyz', 'xyyyy', 'xxzzz', 'xxyzz', 'xxyyz', 'xxyyy', 'xxxzz', + 'xxxyz', 'xxxyy', 'xxxxz', 'xxxxy', 'xxxxx'], } @@ -107,7 +101,7 @@ def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: """Read the coordinates of the atoms.""" - atnums = np.empty(num_atoms, int) + atomic_numbers = np.empty(num_atoms, int) atcorenums = np.empty(num_atoms, float) atcoords = np.empty((num_atoms, 3), float) line = next(lit) @@ -116,13 +110,14 @@ def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, n for atom in range(num_atoms): line = next(lit) - atnums[atom] = int(line.split()[2].strip()) - atcorenums[atom] = float(line.split()[3].strip()) + words = line.split() + atomic_numbers[atom] = int(words[2].strip()) + atcorenums[atom] = float(words[3].strip()) # extract atomic coordinates coords = line.split() - atcoords[atom, :] = [coords[4], coords[5], coords[6]] + atcoords[atom, :] = coords[4:7] # return but convert angstroms to amu - return atnums, atcorenums, atcoords / spc.value(u'atomic unit of length') / 1E10 + return atomic_numbers, atcorenums, atcoords * angstrom def _load_helper_shells(lit: LineIterator, nshell: int, starts: list) \ @@ -182,7 +177,7 @@ def _load_helper_mo(lit: LineIterator, nbasis: int) -> Tuple[int, float, float, return number, occ, energy, coeffs, mo_type, sym -def load_mwfn_low(lit: LineIterator) -> dict: +def _load_mwfn_low(lit: LineIterator) -> dict: """Load data from a MWFN file into arrays. Parameters @@ -252,11 +247,11 @@ def load_mwfn_low(lit: LineIterator) -> dict: 'mo_coeffs': mo_coeffs, 'mo_type': mo_type, 'mo_sym': mo_sym} -def build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, +def _build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, exponents: np.ndarray, prim_per_shell: np.ndarray, coeffs: np.ndarray, ) -> Tuple[MolecularBasis]: - """Based on the fchk modules basis building. + """Construct a basis set using the arrays read from a MWFN file. Parameters ------------- @@ -268,7 +263,7 @@ def build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, shell_types: np.ndarray (integer) Angular momentum of the shell. Indices start at 0 for 's' orbital, 1 for 'p' etc. For 6-31G for a heavy atom this would be [0, 0, 1, 0, 1] corresponding - to [1s, 2s, 2p, 2s, 2p] + to [1s, 2s, 2p, 2s, 2p] exponents: np.ndarray (float) Gaussian function decay exponents for the primitives in the basis set. prim_per_shell: np.ndarray (integer) @@ -304,11 +299,11 @@ def build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, 'mo', 'obasis', 'extra', 'title']) def load_one(lit: LineIterator) -> dict: """Do not edit this docstring. It will be overwritten.""" - inp = load_mwfn_low(lit) + inp = _load_mwfn_low(lit) # MWFN contains more information than most formats, so the following dict # stores some "extra" stuff. - mwfn_dict = { + extra = { 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], 'mo_numbers': inp['mo_numbers'], 'wfntype': inp['wfntype'], 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], 'nprims': inp['nprims'], @@ -317,7 +312,7 @@ def load_one(lit: LineIterator) -> dict: 'prim_per_shell': inp['prim_per_shell'], 'full_virial_ratio': inp['full_virial_ratio']} # Unlike WFN, MWFN does include orbital expansion coefficients. - obasis = build_obasis(inp['shell_centers'], + obasis = _build_obasis(inp['shell_centers'], inp['shell_types'], inp['exponents'], inp['prim_per_shell'], @@ -358,10 +353,8 @@ def load_one(lit: LineIterator) -> dict: 'atcoords': inp['atcoords'], 'atnums': inp['atnums'], 'atcorenums': inp['atcorenums'], - 'charge': inp['charge'], 'obasis': obasis, 'mo': mo, - 'nelec': inp['nelec_a'] + inp['nelec_b'], 'energy': inp['energy'], - 'extra': mwfn_dict, + 'extra': extra, } diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index 3018c2c3e..5958b45a8 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -21,11 +21,8 @@ import numpy as np from numpy.testing import assert_equal, assert_allclose - -import pytest - from ..api import load_one -from ..formats.mwfn import load_mwfn_low +from ..formats.mwfn import _load_mwfn_low from ..overlap import compute_overlap from ..utils import LineIterator @@ -35,27 +32,22 @@ from importlib.resources import path -def load_fchk_helper(fn_fchk): - """Load a testing fchk file with iodata.iodata.load_one.""" - with path('iodata.test.data', fn_fchk) as fn: - return load_one(fn) - - -def test_load_mwfn_nonexistent(): - with pytest.raises(IOError): - with path('iodata.test.data', 'fubar_crap.fchk') as fn: - load_one(str(fn)) +def helper_load_mwfn_low(fn_mwfn): + """Load a testing Gaussian log file with iodata.formats.mwfn.load_mwfn_low.""" + with path('iodata.test.data', fn_mwfn) as fn: + lit = LineIterator(str(fn)) + return _load_mwfn_low(lit) -def load_mwfn_helper(fn_mwfn): - """Load a testing mwfn file with iodata.iodata.load_one.""" - with path('iodata.test.data', fn_mwfn) as fn: +def load_format_helper(fn_format): + """Load a testing formatted file with iodata.iodata.load_one.""" + with path('iodata.test.data', fn_format) as fn: return load_one(fn) # pylint: disable=too-many-statements def test_load_mwfn_ch3_rohf_g03(): - mol = load_mwfn_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') + mol = load_format_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) assert_equal(mol.mo.occs.sum(), 9.0) assert_equal(mol.mo.occs.min(), 0.0) @@ -107,22 +99,20 @@ def test_load_mwfn_ch3_rohf_g03(): assert_equal(mol.extra['mo_sym'][0], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) - mol2 = load_fchk_helper('ch3_rohf_sto3g_g03.fchk') + mol2 = load_format_helper('ch3_rohf_sto3g_g03.fchk') olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) - # assert_allclose fails due to abs/rel tolerance settings - assert np.allclose(mol.atcoords, mol2.atcoords) + assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) assert_allclose(mol2.obasis.shells[0].coeffs, coeffs1) # fails due to special SP basis storage (leaving commented lines in for future reference) # assert_allclose(mol2.obasis.shells[1].coeffs, coeffs2) # assert_allclose(mol2.obasis.shells[2].coeffs, coeffs3) assert_allclose(mol2.obasis.shells[3].coeffs, coeffs4) assert_allclose(mol2.obasis.shells[4].coeffs, coeffs4) - # assert_allclose fails due to abs/rel tolerance settings - assert np.allclose(olp, olp_fchk) + assert_allclose(olp, olp_fchk, atol=1E-7, rtol=1E-7) def test_load_mwfn_ch3_hf_g03(): - mol = load_mwfn_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') + mol = load_format_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) assert_equal(mol.extra['wfntype'], 1) # test first molecular orbital information @@ -139,24 +129,22 @@ def test_load_mwfn_ch3_hf_g03(): assert_equal(mol.extra['mo_sym'][0], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) - mol2 = load_fchk_helper('ch3_hf_sto3g.fchk') + mol2 = load_format_helper('ch3_hf_sto3g.fchk') olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) - # assert_allclose fails due to abs/rel tolerance settings - assert np.allclose(mol.atcoords, mol2.atcoords) - # assert_allclose fails due to abs/rel tolerance settings - assert np.allclose(olp, olp_fchk) + assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) + assert_allclose(olp, olp_fchk, atol=1E-7, rtol=1E-7) def test_nelec_charge(): - mol1 = load_mwfn_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') + mol1 = load_format_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert mol1.nelec == 9 assert mol1.charge == 0 - mol2 = load_fchk_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') + mol2 = load_format_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert mol2.nelec == 2 assert mol2.charge == 0 assert mol2.extra['nelec_a'] == 1 assert mol2.extra['nelec_b'] == 1 - mol3 = load_fchk_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') + mol3 = load_format_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert mol3.nelec == 9 assert mol3.charge == 0 assert mol3.extra['nelec_a'] == 5 @@ -164,7 +152,7 @@ def test_nelec_charge(): def test_load_mwfn_he_spdfgh_g03(): - mol = load_mwfn_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') + mol = load_format_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) assert_equal(mol.extra['wfntype'], 0) # test first molecular orbital information @@ -202,9 +190,7 @@ def test_load_mwfn_he_spdfgh_g03(): assert_equal(mol.extra['mo_sym'][55], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) - mol2 = load_fchk_helper('he_spdfgh_virtual.fchk') + mol2 = load_format_helper('he_spdfgh_virtual.fchk') olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) - # assert_allclose fails due to abs/rel tolerance settings - assert np.allclose(mol.atcoords, mol2.atcoords) - # assert_allclose fails due to abs/rel tolerance settings - assert np.allclose(olp, olp_fchk) + assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) + assert_allclose(olp, olp_fchk, atol=1E-7, rtol=1E-7) From 02894dc921f2f8ad5e077740cb2ba6dcc1267070 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Thu, 27 Aug 2020 05:07:48 -0400 Subject: [PATCH 10/32] fix white spaces for travis --- iodata/formats/mwfn.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 08b60e498..41d849086 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -21,7 +21,6 @@ from typing import Tuple import numpy as np -import scipy.constants as spc from ..basis import HORTON2_CONVENTIONS, MolecularBasis, Shell from ..docstrings import document_load_one @@ -248,9 +247,9 @@ def _load_mwfn_low(lit: LineIterator) -> dict: def _build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, - exponents: np.ndarray, prim_per_shell: np.ndarray, - coeffs: np.ndarray, - ) -> Tuple[MolecularBasis]: + exponents: np.ndarray, prim_per_shell: np.ndarray, + coeffs: np.ndarray, + ) -> Tuple[MolecularBasis]: """Construct a basis set using the arrays read from a MWFN file. Parameters @@ -313,11 +312,11 @@ def load_one(lit: LineIterator) -> dict: # Unlike WFN, MWFN does include orbital expansion coefficients. obasis = _build_obasis(inp['shell_centers'], - inp['shell_types'], - inp['exponents'], - inp['prim_per_shell'], - inp['coeffs'], - ) + inp['shell_types'], + inp['exponents'], + inp['prim_per_shell'], + inp['coeffs'], + ) # wfntype(integer, scalar): Wavefunction type. Possible values: # 0: Restricted closed - shell single - determinant wavefunction(e.g.RHF, RKS) # 1: Unrestricted open - shell single - determinant wavefunction(e.g.UHF, UKS) From cf2eb6667e3880a52b29ae89275f090178e631a6 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 09:29:26 -0700 Subject: [PATCH 11/32] Move keys inside _load_helper_opener function --- iodata/formats/mwfn.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 41d849086..fb6b13427 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -63,9 +63,10 @@ } -def _load_helper_opener(lit: LineIterator, keys: list) -> Tuple[int, float, float, +def _load_helper_opener(lit: LineIterator) -> Tuple[int, float, float, float, float, float, int]: """Read initial variables.""" + keys = ["Wfntype", "Charge", "Naelec", "Nbelec", "E_tot", "VT_ratio", "Ncenter"] max_count = len(keys) count = 0 d = {} @@ -195,9 +196,8 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # read sections of mwfn file # This assumes title is on first line which seems to be the standard title = next(lit).strip() - opener_keywords = ["Wfntype", "Charge", "Naelec", "Nbelec", "E_tot", "VT_ratio", "Ncenter"] wfntype, charge, nelec_a, nelec_b, \ - energy, vt_ratio, num_atoms = _load_helper_opener(lit, opener_keywords) + energy, vt_ratio, num_atoms = _load_helper_opener(lit) # coordinates are in Angstrom in MWFN atnums, atcorenums, atcoords = _load_helper_atoms(lit, num_atoms) nbasis, nindbasis, nprim, nshell, nprimshell = _load_helper_basis(lit) From aa27305487db92735f4cf961a928c00745dd3c19 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 09:42:20 -0700 Subject: [PATCH 12/32] Have _load_helper_opener function return a dict --- iodata/formats/mwfn.py | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index fb6b13427..9cb9e3094 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -63,21 +63,20 @@ } -def _load_helper_opener(lit: LineIterator) -> Tuple[int, float, float, - float, float, float, int]: +def _load_helper_opener(lit: LineIterator) -> dict: """Read initial variables.""" - keys = ["Wfntype", "Charge", "Naelec", "Nbelec", "E_tot", "VT_ratio", "Ncenter"] + keys = {"Wfntype": int, "Charge": float, "Naelec": float, "Nbelec": float, "E_tot": float, + "VT_ratio": float, "Ncenter": int} max_count = len(keys) count = 0 - d = {} + data = {} while count < max_count: line = next(lit) - for name in keys: + for name, ftype in keys.items(): if name in line: - d[name] = line.split('=')[1].strip() + data[name] = ftype(line.split('=')[1].strip()) count += 1 - return int(d['Wfntype']), float(d['Charge']), float(d['Naelec']), float(d['Nbelec']),\ - float(d['E_tot']), float(d['VT_ratio']), int(d['Ncenter']) + return data def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: @@ -195,18 +194,22 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # mwfn ignores lines beginning with `#`. # read sections of mwfn file # This assumes title is on first line which seems to be the standard - title = next(lit).strip() - wfntype, charge, nelec_a, nelec_b, \ - energy, vt_ratio, num_atoms = _load_helper_opener(lit) + + # read title + data = {"title": next(lit).strip()} + + # load Wfntype, Charge, Naelec, Nbelec, E_tot, VT_ratio, & Ncenter + data.update(_load_helper_opener(lit)) + # coordinates are in Angstrom in MWFN - atnums, atcorenums, atcoords = _load_helper_atoms(lit, num_atoms) + atnums, atcorenums, atcoords = _load_helper_atoms(lit, data["Ncenter"]) nbasis, nindbasis, nprim, nshell, nprimshell = _load_helper_basis(lit) keywords = ["Shell types", "Shell centers", "Shell contraction"] shell_types, shell_centers, prim_per_shell = _load_helper_shells(lit, nshell, keywords) # HORTON indices start at 0 because Pythons do. shell_centers -= 1 - assert wfntype < 5 - assert num_atoms > 0 + assert data["Wfntype"] < 5 + assert data["Ncenter"] > 0 assert min(atnums) >= 0 assert len(shell_types) == nshell assert len(shell_centers) == nshell @@ -215,10 +218,10 @@ def _load_mwfn_low(lit: LineIterator) -> dict: coeffs = _load_helper_prims(lit, nprimshell) # number of MO's should equal number of independent basis functions. MWFN inc. virtual orbitals. num_coeffs = nindbasis - if wfntype in [0, 2, 3]: + if data["Wfntype"] in [0, 2, 3]: # restricted wave function num_mo = nindbasis - elif wfntype in [1, 4]: + elif data["Wfntype"] in [1, 4]: # unrestricted wavefunction num_mo = 2 * nindbasis @@ -235,11 +238,11 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # TODO add density matrix and overlap - return {'title': title, 'energy': energy, 'wfntype': wfntype, - 'nelec_a': nelec_a, 'nelec_b': nelec_b, 'charge': charge, + return {'title': data["title"], 'energy': data["E_tot"], 'wfntype': data["Wfntype"], + 'nelec_a': data["Naelec"], 'nelec_b': data["Nbelec"], 'charge': data["Charge"], 'atnums': atnums, 'atcoords': atcoords, 'atcorenums': atcorenums, 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, - 'nshells': nshell, 'nprimshells': nprimshell, 'full_virial_ratio': vt_ratio, + 'nshells': nshell, 'nprimshells': nprimshell, 'full_virial_ratio': data["VT_ratio"], 'shell_centers': shell_centers, 'shell_types': shell_types, 'prim_per_shell': prim_per_shell, 'exponents': exponent, 'coeffs': coeffs, 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, From 941635e974830f04ff96704f50c196991f671415 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 09:55:27 -0700 Subject: [PATCH 13/32] Have _load_helper_atoms function return a dict --- iodata/formats/mwfn.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 9cb9e3094..7885e3ad9 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -97,26 +97,25 @@ def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: return d['Nbasis'], d['Nindbasis'], d['Nprims'], d['Nshell'], d['Nprimshell'] -def _load_helper_atoms(lit: LineIterator, num_atoms: int) -> Tuple[np.ndarray, np.ndarray, - np.ndarray]: +def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: """Read the coordinates of the atoms.""" - atomic_numbers = np.empty(num_atoms, int) - atcorenums = np.empty(num_atoms, float) - atcoords = np.empty((num_atoms, 3), float) + data = {"atnums": np.empty(natom, int), "atcorenums": np.empty(natom, float), + "atcoords": np.empty((natom, 3), float)} + + # skip lines until "$Centers" section is reached line = next(lit) while '$Centers' not in line and line is not None: line = next(lit) - for atom in range(num_atoms): - line = next(lit) - words = line.split() - atomic_numbers[atom] = int(words[2].strip()) - atcorenums[atom] = float(words[3].strip()) - # extract atomic coordinates - coords = line.split() - atcoords[atom, :] = coords[4:7] - # return but convert angstroms to amu - return atomic_numbers, atcorenums, atcoords * angstrom + for atom in range(natom): + words = next(lit).split() + data["atnums"][atom] = int(words[2].strip()) + data["atcorenums"][atom] = float(words[3].strip()) + data["atcoords"][atom, :] = words[4:7] + # coordinates are in angstrom in MWFN, so they are converted to atomic units + data["atcoords"] *= angstrom + + return data def _load_helper_shells(lit: LineIterator, nshell: int, starts: list) \ @@ -201,8 +200,9 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # load Wfntype, Charge, Naelec, Nbelec, E_tot, VT_ratio, & Ncenter data.update(_load_helper_opener(lit)) - # coordinates are in Angstrom in MWFN - atnums, atcorenums, atcoords = _load_helper_atoms(lit, data["Ncenter"]) + # load atnums, atcorenums, & atcoords (in atomic units) + data.update(_load_helper_atoms(lit, data["Ncenter"])) + nbasis, nindbasis, nprim, nshell, nprimshell = _load_helper_basis(lit) keywords = ["Shell types", "Shell centers", "Shell contraction"] shell_types, shell_centers, prim_per_shell = _load_helper_shells(lit, nshell, keywords) @@ -210,7 +210,7 @@ def _load_mwfn_low(lit: LineIterator) -> dict: shell_centers -= 1 assert data["Wfntype"] < 5 assert data["Ncenter"] > 0 - assert min(atnums) >= 0 + assert min(data["atnums"]) >= 0 assert len(shell_types) == nshell assert len(shell_centers) == nshell assert len(prim_per_shell) == nshell @@ -240,7 +240,7 @@ def _load_mwfn_low(lit: LineIterator) -> dict: return {'title': data["title"], 'energy': data["E_tot"], 'wfntype': data["Wfntype"], 'nelec_a': data["Naelec"], 'nelec_b': data["Nbelec"], 'charge': data["Charge"], - 'atnums': atnums, 'atcoords': atcoords, 'atcorenums': atcorenums, + 'atnums': data["atnums"], 'atcoords': data["atcoords"], 'atcorenums': data["atcorenums"], 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, 'nshells': nshell, 'nprimshells': nprimshell, 'full_virial_ratio': data["VT_ratio"], 'shell_centers': shell_centers, 'shell_types': shell_types, From b6422695e47fc01378701b3f893f62724b9a3a57 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 10:52:28 -0700 Subject: [PATCH 14/32] Have _load_helper_basis/shells funcs return dict --- iodata/formats/mwfn.py | 73 ++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 7885e3ad9..e5b62b70a 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -79,22 +79,21 @@ def _load_helper_opener(lit: LineIterator) -> dict: return data -def _load_helper_basis(lit: LineIterator) -> Tuple[int, int, int, int, int]: +def _load_helper_basis(lit: LineIterator) -> dict: """Read initial variables.""" # Nprims must be last or else it gets read in with Nprimshell - basis_keywords = ["Nbasis", "Nindbasis", "Nshell", "Nprimshell", "Nprims", ] - max_count = len(basis_keywords) + keys = ["Nbasis", "Nindbasis", "Nshell", "Nprimshell", "Nprims"] count = 0 - d = {} + data = {} next(lit) - while count < max_count: + while count < len(keys): line = next(lit) - for name in basis_keywords: + for name in keys: if name in line: - d[name] = int(line.split('=')[1].strip()) + data[name] = int(line.split('=')[1].strip()) count += 1 break - return d['Nbasis'], d['Nindbasis'], d['Nprims'], d['Nshell'], d['Nprimshell'] + return data def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: @@ -118,21 +117,22 @@ def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: return data -def _load_helper_shells(lit: LineIterator, nshell: int, starts: list) \ - -> Tuple[np.ndarray, np.ndarray, np.ndarray]: +def _load_helper_shells(lit: LineIterator, nshell: int) -> dict: """Read one section of MO information.""" + keys = ["Shell types", "Shell centers", "Shell contraction"] + data = {} line = next(lit) - while starts[0] not in line and line is not None: + while keys[0] not in line and line is not None: line = next(lit) - assert line.startswith('$' + starts[0]) - shell_types = _load_helper_section(lit, nshell, ' ', 0, int) + assert line.startswith('$' + keys[0]) + data["shell_types"] = _load_helper_section(lit, nshell, ' ', 0, int) line = next(lit) - assert line.startswith('$' + starts[1]) - centers = _load_helper_section(lit, nshell, ' ', 0, int) + assert line.startswith('$' + keys[1]) + data["shell_centers"] = _load_helper_section(lit, nshell, ' ', 0, int) line = next(lit) - assert line.startswith('$' + starts[2]) - degrees = _load_helper_section(lit, nshell, ' ', 0, int) - return shell_types, centers, degrees + assert line.startswith('$' + keys[2]) + data["shell_contraction_degrees"] = _load_helper_section(lit, nshell, ' ', 0, int) + return data def _load_helper_prims(lit: LineIterator, nprimshell: int) -> np.ndarray: @@ -203,27 +203,30 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # load atnums, atcorenums, & atcoords (in atomic units) data.update(_load_helper_atoms(lit, data["Ncenter"])) - nbasis, nindbasis, nprim, nshell, nprimshell = _load_helper_basis(lit) - keywords = ["Shell types", "Shell centers", "Shell contraction"] - shell_types, shell_centers, prim_per_shell = _load_helper_shells(lit, nshell, keywords) - # HORTON indices start at 0 because Pythons do. - shell_centers -= 1 + # load Nbasis, Nindbasis, Nprims, Nshell, & Nprimshell + data.update(_load_helper_basis(lit)) + + # load shell_types, shell_centers, & shell_contraction_degrees + data.update(_load_helper_shells(lit, data["Nshell"])) + # IOData indices start at 0, so the centers are shifted + data["shell_centers"] -= 1 + assert data["Wfntype"] < 5 assert data["Ncenter"] > 0 assert min(data["atnums"]) >= 0 - assert len(shell_types) == nshell - assert len(shell_centers) == nshell - assert len(prim_per_shell) == nshell - exponent = _load_helper_prims(lit, nprimshell) - coeffs = _load_helper_prims(lit, nprimshell) + assert len(data["shell_types"]) == data["Nshell"] + assert len(data["shell_centers"]) == data["Nshell"] + assert len(data["shell_contraction_degrees"]) == data["Nshell"] + exponent = _load_helper_prims(lit, data["Nprimshell"]) + coeffs = _load_helper_prims(lit, data["Nprimshell"]) # number of MO's should equal number of independent basis functions. MWFN inc. virtual orbitals. - num_coeffs = nindbasis + num_coeffs = data["Nindbasis"] if data["Wfntype"] in [0, 2, 3]: # restricted wave function - num_mo = nindbasis + num_mo = data["Nindbasis"] elif data["Wfntype"] in [1, 4]: # unrestricted wavefunction - num_mo = 2 * nindbasis + num_mo = 2 * data["Nindbasis"] mo_numbers = np.empty(num_mo, int) mo_type = np.empty(num_mo, int) @@ -241,10 +244,10 @@ def _load_mwfn_low(lit: LineIterator) -> dict: return {'title': data["title"], 'energy': data["E_tot"], 'wfntype': data["Wfntype"], 'nelec_a': data["Naelec"], 'nelec_b': data["Nbelec"], 'charge': data["Charge"], 'atnums': data["atnums"], 'atcoords': data["atcoords"], 'atcorenums': data["atcorenums"], - 'nbasis': nbasis, 'nindbasis': nindbasis, 'nprims': nprim, - 'nshells': nshell, 'nprimshells': nprimshell, 'full_virial_ratio': data["VT_ratio"], - 'shell_centers': shell_centers, 'shell_types': shell_types, - 'prim_per_shell': prim_per_shell, 'exponents': exponent, 'coeffs': coeffs, + 'nbasis': data["Nbasis"], 'nindbasis': data["Nindbasis"], 'nprims': data["Nprims"], + 'nshells': data["Nshell"], 'nprimshells': data["Nprimshell"], 'full_virial_ratio': data["VT_ratio"], + 'shell_centers': data["shell_centers"], 'shell_types': data["shell_types"], + 'prim_per_shell': data["shell_contraction_degrees"], 'exponents': exponent, 'coeffs': coeffs, 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, 'mo_coeffs': mo_coeffs, 'mo_type': mo_type, 'mo_sym': mo_sym} From 4ea965f393a1577c9b3c0f473cd9ff043d6d294c Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 11:09:05 -0700 Subject: [PATCH 15/32] Assign primitives exponents & coeffs to data dict --- iodata/formats/mwfn.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index e5b62b70a..da0a7bd09 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -217,8 +217,11 @@ def _load_mwfn_low(lit: LineIterator) -> dict: assert len(data["shell_types"]) == data["Nshell"] assert len(data["shell_centers"]) == data["Nshell"] assert len(data["shell_contraction_degrees"]) == data["Nshell"] - exponent = _load_helper_prims(lit, data["Nprimshell"]) - coeffs = _load_helper_prims(lit, data["Nprimshell"]) + + # load primitive exponents & coefficients + data["exponents"] = _load_helper_prims(lit, data["Nprimshell"]) + data["coeffs"] = _load_helper_prims(lit, data["Nprimshell"]) + # number of MO's should equal number of independent basis functions. MWFN inc. virtual orbitals. num_coeffs = data["Nindbasis"] if data["Wfntype"] in [0, 2, 3]: @@ -247,7 +250,8 @@ def _load_mwfn_low(lit: LineIterator) -> dict: 'nbasis': data["Nbasis"], 'nindbasis': data["Nindbasis"], 'nprims': data["Nprims"], 'nshells': data["Nshell"], 'nprimshells': data["Nprimshell"], 'full_virial_ratio': data["VT_ratio"], 'shell_centers': data["shell_centers"], 'shell_types': data["shell_types"], - 'prim_per_shell': data["shell_contraction_degrees"], 'exponents': exponent, 'coeffs': coeffs, + 'prim_per_shell': data["shell_contraction_degrees"], 'exponents': data["exponents"], + 'coeffs': data["coeffs"], 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, 'mo_coeffs': mo_coeffs, 'mo_type': mo_type, 'mo_sym': mo_sym} From 26718d24944a6bb4db21ce3f46550ca59b972c09 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 11:29:46 -0700 Subject: [PATCH 16/32] Have _load_helper_mo return dict containing all MO --- iodata/formats/mwfn.py | 61 ++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index da0a7bd09..7dede2e65 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -157,22 +157,33 @@ def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, return np.array(section).astype(dtype) -def _load_helper_mo(lit: LineIterator, nbasis: int) -> Tuple[int, float, float, - np.ndarray, int, str]: +def _load_helper_mo(lit: LineIterator, n_basis: int, n_mo: int) -> dict: """Read one section of MO information.""" - line = next(lit) - while 'Index' not in line: + + data = { + "mo_numbers": np.empty(n_mo, int), + "mo_type": np.empty(n_mo, int), + "mo_energies": np.empty(n_mo, float), + "mo_occs": np.empty(n_mo, float), + "mo_sym": np.empty(n_mo, str), + "mo_coeffs": np.empty([n_basis, n_mo], float), + } + + for index in range(n_mo): line = next(lit) + while 'Index' not in line: + line = next(lit) + assert line.startswith('Index') + data["mo_numbers"][index] = int(line.split()[1]) + data["mo_type"][index] = int(next(lit).split()[1]) + data["mo_energies"][index] = float(next(lit).split()[1]) + data["mo_occs"][index] = float(next(lit).split()[1]) + data["mo_sym"][index] = str(next(lit).split()[1]) + # skip "$Coeff line + next(lit) + data["mo_coeffs"][:, index] = _load_helper_section(lit, n_basis, '', 0, float) - assert line.startswith('Index') - number = int(line.split()[1]) - mo_type = int(next(lit).split()[1]) - energy = float(next(lit).split()[1]) - occ = float(next(lit).split()[1]) - sym = str(next(lit).split()[1]) - next(lit) # skip line - coeffs = _load_helper_section(lit, nbasis, '', 0, float) - return number, occ, energy, coeffs, mo_type, sym + return data def _load_mwfn_low(lit: LineIterator) -> dict: @@ -222,27 +233,19 @@ def _load_mwfn_low(lit: LineIterator) -> dict: data["exponents"] = _load_helper_prims(lit, data["Nprimshell"]) data["coeffs"] = _load_helper_prims(lit, data["Nprimshell"]) - # number of MO's should equal number of independent basis functions. MWFN inc. virtual orbitals. - num_coeffs = data["Nindbasis"] + # get number of basis & molecular orbitals (MO) + # Note: MWFN includes virtual orbitals, so num_mo equals number independent basis functions + num_basis = data["Nindbasis"] if data["Wfntype"] in [0, 2, 3]: - # restricted wave function + # restricted wavefunction num_mo = data["Nindbasis"] elif data["Wfntype"] in [1, 4]: # unrestricted wavefunction num_mo = 2 * data["Nindbasis"] - mo_numbers = np.empty(num_mo, int) - mo_type = np.empty(num_mo, int) - mo_occs = np.empty(num_mo, float) - mo_sym = np.empty(num_mo, str) - mo_energies = np.empty(num_mo, float) - mo_coeffs = np.empty([num_coeffs, num_mo], float) - - for mo in range(num_mo): - mo_numbers[mo], mo_occs[mo], mo_energies[mo], mo_coeffs[:, mo], \ - mo_type[mo], mo_sym[mo] = _load_helper_mo(lit, num_coeffs) + data.update(_load_helper_mo(lit, num_basis, num_mo)) - # TODO add density matrix and overlap + # TODO: add density matrix and overlap return {'title': data["title"], 'energy': data["E_tot"], 'wfntype': data["Wfntype"], 'nelec_a': data["Naelec"], 'nelec_b': data["Nbelec"], 'charge': data["Charge"], @@ -252,8 +255,8 @@ def _load_mwfn_low(lit: LineIterator) -> dict: 'shell_centers': data["shell_centers"], 'shell_types': data["shell_types"], 'prim_per_shell': data["shell_contraction_degrees"], 'exponents': data["exponents"], 'coeffs': data["coeffs"], - 'mo_numbers': mo_numbers, 'mo_occs': mo_occs, 'mo_energies': mo_energies, - 'mo_coeffs': mo_coeffs, 'mo_type': mo_type, 'mo_sym': mo_sym} + 'mo_numbers': data["mo_numbers"], 'mo_occs': data["mo_occs"], 'mo_energies': data["mo_energies"], + 'mo_coeffs': data["mo_coeffs"], 'mo_type': data["mo_type"], 'mo_sym': data["mo_sym"]} def _build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, From f7426e0902d2f39c673c1d3f006662243336abc8 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 11:38:31 -0700 Subject: [PATCH 17/32] Have _load_mwfn_low function return dict --- iodata/formats/mwfn.py | 30 +++++++++++------------------- iodata/test/test_mwfn.py | 2 +- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 7dede2e65..1f8213f04 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -247,16 +247,7 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # TODO: add density matrix and overlap - return {'title': data["title"], 'energy': data["E_tot"], 'wfntype': data["Wfntype"], - 'nelec_a': data["Naelec"], 'nelec_b': data["Nbelec"], 'charge': data["Charge"], - 'atnums': data["atnums"], 'atcoords': data["atcoords"], 'atcorenums': data["atcorenums"], - 'nbasis': data["Nbasis"], 'nindbasis': data["Nindbasis"], 'nprims': data["Nprims"], - 'nshells': data["Nshell"], 'nprimshells': data["Nprimshell"], 'full_virial_ratio': data["VT_ratio"], - 'shell_centers': data["shell_centers"], 'shell_types': data["shell_types"], - 'prim_per_shell': data["shell_contraction_degrees"], 'exponents': data["exponents"], - 'coeffs': data["coeffs"], - 'mo_numbers': data["mo_numbers"], 'mo_occs': data["mo_occs"], 'mo_energies': data["mo_energies"], - 'mo_coeffs': data["mo_coeffs"], 'mo_type': data["mo_type"], 'mo_sym': data["mo_sym"]} + return data def _build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, @@ -317,17 +308,18 @@ def load_one(lit: LineIterator) -> dict: # stores some "extra" stuff. extra = { 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], 'mo_numbers': inp['mo_numbers'], - 'wfntype': inp['wfntype'], 'nelec_a': inp['nelec_a'], 'nelec_b': inp['nelec_b'], - 'nbasis': inp['nbasis'], 'nindbasis': inp['nindbasis'], 'nprims': inp['nprims'], - 'nshells': inp['nshells'], 'nprimshells': inp['nprimshells'], + 'wfntype': inp['Wfntype'], 'nelec_a': inp['Naelec'], 'nelec_b': inp['Nbelec'], + 'nbasis': inp['Nbasis'], 'nindbasis': inp['Nindbasis'], 'nprims': inp['Nprims'], + 'nshells': inp['Nshell'], 'nprimshells': inp['Nprimshell'], 'shell_types': inp['shell_types'], 'shell_centers': inp['shell_centers'], - 'prim_per_shell': inp['prim_per_shell'], 'full_virial_ratio': inp['full_virial_ratio']} + 'shell_contraction_degrees': inp['shell_contraction_degrees'], + 'full_virial_ratio': inp['VT_ratio']} # Unlike WFN, MWFN does include orbital expansion coefficients. obasis = _build_obasis(inp['shell_centers'], inp['shell_types'], inp['exponents'], - inp['prim_per_shell'], + inp['shell_contraction_degrees'], inp['coeffs'], ) # wfntype(integer, scalar): Wavefunction type. Possible values: @@ -336,7 +328,7 @@ def load_one(lit: LineIterator) -> dict: # 2: Restricted open - shell single - determinant wavefunction(e.g.ROHF, ROKS) # 3: Restricted multiconfiguration wavefunction(e.g.RMP2, RCCSD) # 4: Unrestricted multiconfiguration wavefunction(e.g.UMP2, UCCSD) - wfntype = inp['wfntype'] + wfntype = inp['Wfntype'] if wfntype in [0, 2, 3]: restrictions = "restricted" elif wfntype in [1, 4]: @@ -352,8 +344,8 @@ def load_one(lit: LineIterator) -> dict: # Build the molecular orbitals mo = MolecularOrbitals(restrictions, - inp['nelec_a'], - inp['nelec_b'], + inp['Naelec'], + inp['Nbelec'], inp['mo_occs'], inp['mo_coeffs'], inp['mo_energies'], @@ -367,6 +359,6 @@ def load_one(lit: LineIterator) -> dict: 'atcorenums': inp['atcorenums'], 'obasis': obasis, 'mo': mo, - 'energy': inp['energy'], + 'energy': inp['E_tot'], 'extra': extra, } diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index 5958b45a8..f793f53e4 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -66,7 +66,7 @@ def test_load_mwfn_ch3_rohf_g03(): assert_equal(mol.energy, -3.90732095E+01) assert_allclose(mol.extra['shell_types'], np.array([0, 0, 1, 0, 0, 0])) assert_allclose(mol.extra['shell_centers'], np.array([1, 1, 1, 2, 3, 4]) - 1) - assert_allclose(mol.extra['prim_per_shell'], np.array([3, 3, 3, 3, 3, 3])) + assert_allclose(mol.extra['shell_contraction_degrees'], np.array([3, 3, 3, 3, 3, 3])) exponents1 = np.array([7.16168373E+01, 1.30450963E+01, 3.53051216E+00]) exponents2 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) exponents3 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) From 8e08464f2e9c41bd7e1a79a264f77aa64d5b4e9a Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 12:04:18 -0700 Subject: [PATCH 18/32] Add mo_kind key to loaded MWFN data 1. The check for Wfntype, to make sure that wavefunction type is of legitimate type, is moved to _load_helper_opener function, because the error message raised (in case Wfntype is not known), also shows the line number where parsing failed, so it is more helpful to add the check right after Wfntype is parsed. 2. The 'mo_kind' value is added to the data dictionary, to avoid the need for checking Wfntype again. --- iodata/formats/mwfn.py | 43 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 1f8213f04..908d5bce4 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -76,6 +76,22 @@ def _load_helper_opener(lit: LineIterator) -> dict: if name in line: data[name] = ftype(line.split('=')[1].strip()) count += 1 + + # Possible values of Wfntype (wavefunction type): + # 0: Restricted closed - shell single - determinant wavefunction(e.g.RHF, RKS) + # 1: Unrestricted open - shell single - determinant wavefunction(e.g.UHF, UKS) + # 2: Restricted open - shell single - determinant wavefunction(e.g.ROHF, ROKS) + # 3: Restricted multiconfiguration wavefunction(e.g.RMP2, RCCSD) + # 4: Unrestricted multiconfiguration wavefunction(e.g.UMP2, UCCSD) + if data["Wfntype"] in [0, 2, 3]: + # restricted wavefunction + data["mo_kind"] = "restricted" + elif data["Wfntype"] in [1, 4]: + # unrestricted wavefunction + data["mo_kind"] = "unrestricted" + else: + lit.error(f"Wavefunction type cannot be determined. Read Wfntype= {data['Wfntype']}") + return data @@ -222,7 +238,6 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # IOData indices start at 0, so the centers are shifted data["shell_centers"] -= 1 - assert data["Wfntype"] < 5 assert data["Ncenter"] > 0 assert min(data["atnums"]) >= 0 assert len(data["shell_types"]) == data["Nshell"] @@ -236,13 +251,10 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # get number of basis & molecular orbitals (MO) # Note: MWFN includes virtual orbitals, so num_mo equals number independent basis functions num_basis = data["Nindbasis"] - if data["Wfntype"] in [0, 2, 3]: - # restricted wavefunction - num_mo = data["Nindbasis"] - elif data["Wfntype"] in [1, 4]: - # unrestricted wavefunction - num_mo = 2 * data["Nindbasis"] - + num_mo = data["Nindbasis"] + if data["mo_kind"] is "unrestricted": + num_mo *= 2 + # load MO information data.update(_load_helper_mo(lit, num_basis, num_mo)) # TODO: add density matrix and overlap @@ -322,19 +334,6 @@ def load_one(lit: LineIterator) -> dict: inp['shell_contraction_degrees'], inp['coeffs'], ) - # wfntype(integer, scalar): Wavefunction type. Possible values: - # 0: Restricted closed - shell single - determinant wavefunction(e.g.RHF, RKS) - # 1: Unrestricted open - shell single - determinant wavefunction(e.g.UHF, UKS) - # 2: Restricted open - shell single - determinant wavefunction(e.g.ROHF, ROKS) - # 3: Restricted multiconfiguration wavefunction(e.g.RMP2, RCCSD) - # 4: Unrestricted multiconfiguration wavefunction(e.g.UMP2, UCCSD) - wfntype = inp['Wfntype'] - if wfntype in [0, 2, 3]: - restrictions = "restricted" - elif wfntype in [1, 4]: - restrictions = "unrestricted" - else: - raise IOError('Cannot determine if restricted or unrestricted wfntype wave function.') # MFWN provides number of alpha and beta electrons, this is a double check # mo_type (integer, scalar): Orbital type # 0: Alpha + Beta (i.e. spatial orbital) @@ -343,7 +342,7 @@ def load_one(lit: LineIterator) -> dict: # TODO calculate number of alpha and beta electrons manually. # Build the molecular orbitals - mo = MolecularOrbitals(restrictions, + mo = MolecularOrbitals(inp["mo_kind"], inp['Naelec'], inp['Nbelec'], inp['mo_occs'], From 3149ff72f475a0a3d28655ffd754a0f535e9af78 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 12:17:43 -0700 Subject: [PATCH 19/32] Move or remove assert checks in mwfn load_one 1. Checking data['Ncenter'] & data['atnums'] are moved to the functions which load them, because it is more helpful to raise the error where the information is read, as the error message also shows the line number causing error. 2. Checking data['shell_types'], data['shell_contraction_degrees'], and data['shell_centers'] length are removed, because that would be true by construction. --- iodata/formats/mwfn.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 908d5bce4..d98b8659f 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -77,6 +77,9 @@ def _load_helper_opener(lit: LineIterator) -> dict: data[name] = ftype(line.split('=')[1].strip()) count += 1 + # check values parsed + if data["Ncenter"] <= 0: + lit.error(f"Ncenter should be a positive integer! Read Ncenter= {data['Ncenter']}") # Possible values of Wfntype (wavefunction type): # 0: Restricted closed - shell single - determinant wavefunction(e.g.RHF, RKS) # 1: Unrestricted open - shell single - determinant wavefunction(e.g.UHF, UKS) @@ -130,6 +133,10 @@ def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: # coordinates are in angstrom in MWFN, so they are converted to atomic units data["atcoords"] *= angstrom + # check atomic numbers + if min(data["atnums"]) <= 0: + lit.error(f"Atomic numbers should be positive integers! Read atnums= {data['atnums']}") + return data @@ -238,12 +245,6 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # IOData indices start at 0, so the centers are shifted data["shell_centers"] -= 1 - assert data["Ncenter"] > 0 - assert min(data["atnums"]) >= 0 - assert len(data["shell_types"]) == data["Nshell"] - assert len(data["shell_centers"]) == data["Nshell"] - assert len(data["shell_contraction_degrees"]) == data["Nshell"] - # load primitive exponents & coefficients data["exponents"] = _load_helper_prims(lit, data["Nprimshell"]) data["coeffs"] = _load_helper_prims(lit, data["Nprimshell"]) From 05494e5767ed0abd96b6bb4948ba213bd3178601 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 12:33:39 -0700 Subject: [PATCH 20/32] Remove _load_helper_prims function This allows for better checking the title of the section being parsed, and makign sure primitive exponents & coefficients are correctly assigned. --- iodata/formats/mwfn.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index d98b8659f..7b92d56fa 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -158,15 +158,6 @@ def _load_helper_shells(lit: LineIterator, nshell: int) -> dict: return data -def _load_helper_prims(lit: LineIterator, nprimshell: int) -> np.ndarray: - """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" - next(lit) # skip line - # concatenate list of arrays into a single array of length nshell - array = _load_helper_section(lit, nprimshell, '', 0, float) - assert len(array) == nprimshell - return array - - def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, dtype: np.dtype) -> np.ndarray: """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" @@ -246,8 +237,12 @@ def _load_mwfn_low(lit: LineIterator) -> dict: data["shell_centers"] -= 1 # load primitive exponents & coefficients - data["exponents"] = _load_helper_prims(lit, data["Nprimshell"]) - data["coeffs"] = _load_helper_prims(lit, data["Nprimshell"]) + if not next(lit).startswith("$Primitive exponents"): + lit.error("Expected '$Primitive exponents' section!") + data["exponents"] = _load_helper_section(lit, data["Nprimshell"], '', 0, float) + if not next(lit).startswith("$Contraction coefficients"): + lit.error("Expected '$Contraction coefficients' section!") + data["coeffs"] = _load_helper_section(lit, data["Nprimshell"], '', 0, float) # get number of basis & molecular orbitals (MO) # Note: MWFN includes virtual orbitals, so num_mo equals number independent basis functions From 4e2d6dac85caa1b42c21c313b3c448058a582828 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 12:59:45 -0700 Subject: [PATCH 21/32] Remove _build_obasis function Unlike other formats (like WFN), itt is pretty simple to build MolecularBasis from parsed MWFN data, so the _build_obasis func is removed. This makes the code more clear and easier to read. --- iodata/formats/mwfn.py | 72 +++++++++------------------------------- iodata/test/test_mwfn.py | 2 +- 2 files changed, 17 insertions(+), 57 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 7b92d56fa..ff7fd970a 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -154,7 +154,7 @@ def _load_helper_shells(lit: LineIterator, nshell: int) -> dict: data["shell_centers"] = _load_helper_section(lit, nshell, ' ', 0, int) line = next(lit) assert line.startswith('$' + keys[2]) - data["shell_contraction_degrees"] = _load_helper_section(lit, nshell, ' ', 0, int) + data["shell_ncons"] = _load_helper_section(lit, nshell, ' ', 0, int) return data @@ -258,54 +258,6 @@ def _load_mwfn_low(lit: LineIterator) -> dict: return data -def _build_obasis(shell_map: np.ndarray, shell_types: np.ndarray, - exponents: np.ndarray, prim_per_shell: np.ndarray, - coeffs: np.ndarray, - ) -> Tuple[MolecularBasis]: - """Construct a basis set using the arrays read from a MWFN file. - - Parameters - ------------- - shell_map: np.ndarray (integer) - Index of what atom the shell is centered on. The mwfn file refers to this section - as `Shell centers`. Mwfn indices start at 1, this has been modified and starts - at 0 here. For water (O, H, H) with 6-31G, this would be an array like - [0, 0, 0, 0, 0, 1, 1, 2, 2]. , `O` in 6-31G has 5 shells and`H` has two shells. - shell_types: np.ndarray (integer) - Angular momentum of the shell. Indices start at 0 for 's' orbital, 1 for 'p' etc. - For 6-31G for a heavy atom this would be [0, 0, 1, 0, 1] corresponding - to [1s, 2s, 2p, 2s, 2p] - exponents: np.ndarray (float) - Gaussian function decay exponents for the primitives in the basis set. - prim_per_shell: np.ndarray (integer) - Array denoting the number of primitives per shell. If basis set is 6-31G this will be - [6, 3, 3, 1, 1] if the atom is a heavy atom. This corresponds to - [1s, 2s, 2p, 2s, 2p]. If additional atoms are present, the array is extended. - coeffs: np.ndarray (float) - Array of same length as `exponents` containing orbital expansion coefficients. - """ - shells = [] - counter = 0 - # First loop over all shells - for i, n in enumerate(prim_per_shell): - shells.append(Shell( - shell_map[i], - [abs(shell_types[i])], - ['p' if shell_types[i] < 0 else 'c'], - exponents[counter:counter + n], - coeffs[counter:counter + n][:, np.newaxis] - )) - counter += n - del shell_map - del shell_types - del prim_per_shell - del exponents - del coeffs - - obasis = MolecularBasis(tuple(shells), CONVENTIONS, 'L2') - return obasis - - @document_load_one("MWFN", ['atcoords', 'atnums', 'atcorenums', 'energy', 'mo', 'obasis', 'extra', 'title']) def load_one(lit: LineIterator) -> dict: @@ -320,16 +272,24 @@ def load_one(lit: LineIterator) -> dict: 'nbasis': inp['Nbasis'], 'nindbasis': inp['Nindbasis'], 'nprims': inp['Nprims'], 'nshells': inp['Nshell'], 'nprimshells': inp['Nprimshell'], 'shell_types': inp['shell_types'], 'shell_centers': inp['shell_centers'], - 'shell_contraction_degrees': inp['shell_contraction_degrees'], + 'shell_ncons': inp['shell_ncons'], 'full_virial_ratio': inp['VT_ratio']} + # Build MolecularBasis instance # Unlike WFN, MWFN does include orbital expansion coefficients. - obasis = _build_obasis(inp['shell_centers'], - inp['shell_types'], - inp['exponents'], - inp['shell_contraction_degrees'], - inp['coeffs'], - ) + shells = [] + counter = 0 + for center, stype, ncon in zip(inp['shell_centers'], inp['shell_types'], inp['shell_ncons']): + shells.append(Shell( + center, + [abs(stype)], + ['p' if stype < 0 else 'c'], + inp['exponents'][counter:counter + ncon], + inp['coeffs'][counter:counter + ncon][:, np.newaxis] + )) + counter += ncon + obasis = MolecularBasis(shells, CONVENTIONS, 'L2') + # MFWN provides number of alpha and beta electrons, this is a double check # mo_type (integer, scalar): Orbital type # 0: Alpha + Beta (i.e. spatial orbital) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index f793f53e4..cd4cf4828 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -66,7 +66,7 @@ def test_load_mwfn_ch3_rohf_g03(): assert_equal(mol.energy, -3.90732095E+01) assert_allclose(mol.extra['shell_types'], np.array([0, 0, 1, 0, 0, 0])) assert_allclose(mol.extra['shell_centers'], np.array([1, 1, 1, 2, 3, 4]) - 1) - assert_allclose(mol.extra['shell_contraction_degrees'], np.array([3, 3, 3, 3, 3, 3])) + assert_allclose(mol.extra['shell_ncons'], np.array([3, 3, 3, 3, 3, 3])) exponents1 = np.array([7.16168373E+01, 1.30450963E+01, 3.53051216E+00]) exponents2 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) exponents3 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) From 43b22e02d3644960bdaacc3db72a18e5b34266ae Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 13:47:41 -0700 Subject: [PATCH 22/32] Turn asserts to raises in _load_helper_shells func --- iodata/formats/mwfn.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index ff7fd970a..3dc26297c 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -141,20 +141,22 @@ def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: def _load_helper_shells(lit: LineIterator, nshell: int) -> dict: - """Read one section of MO information.""" - keys = ["Shell types", "Shell centers", "Shell contraction"] - data = {} + """Read shell types, centers, and contraction degrees.""" + sections = ["$Shell types", "$Shell centers", "$Shell contraction"] + var_name = ["shell_types", "shell_centers", "shell_ncons"] + + # read lines until '$Shell types' is reached line = next(lit) - while keys[0] not in line and line is not None: + while sections[0] not in line and line is not None: line = next(lit) - assert line.startswith('$' + keys[0]) - data["shell_types"] = _load_helper_section(lit, nshell, ' ', 0, int) - line = next(lit) - assert line.startswith('$' + keys[1]) - data["shell_centers"] = _load_helper_section(lit, nshell, ' ', 0, int) - line = next(lit) - assert line.startswith('$' + keys[2]) - data["shell_ncons"] = _load_helper_section(lit, nshell, ' ', 0, int) + + data = {} + for section, name in zip(sections, var_name): + if not line.startswith(section): + lit.error(f"Expected line to start with {section}, but got line={line}.") + data[name] = _load_helper_section(lit, nshell, ' ', 0, int) + line = next(lit) + lit.back(line) return data From b2b053435b2a364b3d40e2ec4c044f4d05959091 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 13:49:56 -0700 Subject: [PATCH 23/32] Turn assert to raise in _load_helper_section func 1) The raised message would be more informative that the assert error 2) The `assert len(section) == nprim` is redundant, because the while loop gaurantees that it would have the same number of elements as nprim. --- iodata/formats/mwfn.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 3dc26297c..a9719400b 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -166,10 +166,9 @@ def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, section = [] while len(section) < nprim: line = next(lit) - assert line.startswith(start) - words = line.split() - section.extend(words[skip:]) - assert len(section) == nprim + if not line.startswith(start): + lit.error(f"Expected line to start with {start}! Got line={line}") + section.extend(line.split()[skip:]) return np.array(section).astype(dtype) From 7d3f67f61eee0e1fba1870a4662fd37840bb81dc Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 22:30:15 -0700 Subject: [PATCH 24/32] Remove redundant items from extra dictionary Most of the items in the extra dictionary were already existing amon IOData attributes, so they were removed. --- iodata/formats/mwfn.py | 20 +++++++------------- iodata/test/test_mwfn.py | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index a9719400b..e58cb1e48 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -265,16 +265,10 @@ def load_one(lit: LineIterator) -> dict: """Do not edit this docstring. It will be overwritten.""" inp = _load_mwfn_low(lit) - # MWFN contains more information than most formats, so the following dict - # stores some "extra" stuff. - extra = { - 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], 'mo_numbers': inp['mo_numbers'], - 'wfntype': inp['Wfntype'], 'nelec_a': inp['Naelec'], 'nelec_b': inp['Nbelec'], - 'nbasis': inp['Nbasis'], 'nindbasis': inp['Nindbasis'], 'nprims': inp['Nprims'], - 'nshells': inp['Nshell'], 'nprimshells': inp['Nprimshell'], - 'shell_types': inp['shell_types'], 'shell_centers': inp['shell_centers'], - 'shell_ncons': inp['shell_ncons'], - 'full_virial_ratio': inp['VT_ratio']} + # store certain information loaded from MWFN in extra dictionary + extra = {'wfntype': inp['Wfntype'], 'nbasis': inp['Nbasis'], 'nindbasis': inp['Nindbasis'], + 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], + 'full_virial_ratio': inp['VT_ratio']} # Build MolecularBasis instance # Unlike WFN, MWFN does include orbital expansion coefficients. @@ -298,10 +292,10 @@ def load_one(lit: LineIterator) -> dict: # 2: Beta # TODO calculate number of alpha and beta electrons manually. - # Build the molecular orbitals + # Build MolecularOrbitals instance mo = MolecularOrbitals(inp["mo_kind"], - inp['Naelec'], - inp['Nbelec'], + int(inp["Naelec"]), + int(inp["Nbelec"]), inp['mo_occs'], inp['mo_coeffs'], inp['mo_energies'], diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index cd4cf4828..b967bcdb7 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -55,18 +55,18 @@ def test_load_mwfn_ch3_rohf_g03(): assert_equal(mol.extra['full_virial_ratio'], 2.00174844) assert_equal(mol.extra['nindbasis'], 8) assert_equal(mol.extra['nbasis'], 8) - assert_equal(mol.extra['nprims'], 24) - assert_equal(mol.extra['nshells'], 6) - assert_equal(mol.extra['nprimshells'], 18) + assert_equal(np.sum([shell.nprim * shell.nbasis for shell in mol.obasis.shells]), 24) + assert_equal(len(mol.obasis.shells), 6) + assert_equal(np.sum([shell.nprim for shell in mol.obasis.shells]), 18) assert_equal(mol.charge, 0.0) assert_equal(mol.nelec, 9) assert_equal(mol.natom, 4) - assert_equal(mol.extra['nelec_a'], 5.0) - assert_equal(mol.extra['nelec_b'], 4.0) + assert_equal(np.sum(mol.mo.occsa), 5.0) + assert_equal(np.sum(mol.mo.occsb), 4.0) assert_equal(mol.energy, -3.90732095E+01) - assert_allclose(mol.extra['shell_types'], np.array([0, 0, 1, 0, 0, 0])) - assert_allclose(mol.extra['shell_centers'], np.array([1, 1, 1, 2, 3, 4]) - 1) - assert_allclose(mol.extra['shell_ncons'], np.array([3, 3, 3, 3, 3, 3])) + assert_allclose([shell.angmoms[0] for shell in mol.obasis.shells], [0, 0, 1, 0, 0, 0]) + assert_allclose([shell.icenter for shell in mol.obasis.shells], [0, 0, 0, 1, 2, 3]) + assert_allclose([shell.nprim for shell in mol.obasis.shells], [3, 3, 3, 3, 3, 3]) exponents1 = np.array([7.16168373E+01, 1.30450963E+01, 3.53051216E+00]) exponents2 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) exponents3 = np.array([2.94124936E+00, 6.83483096E-01, 2.22289916E-01]) @@ -142,13 +142,13 @@ def test_nelec_charge(): mol2 = load_format_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert mol2.nelec == 2 assert mol2.charge == 0 - assert mol2.extra['nelec_a'] == 1 - assert mol2.extra['nelec_b'] == 1 + assert np.sum(mol2.mo.occsa) == 1 + assert np.sum(mol2.mo.occsb) == 1 mol3 = load_format_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert mol3.nelec == 9 assert mol3.charge == 0 - assert mol3.extra['nelec_a'] == 5 - assert mol3.extra['nelec_b'] == 4 + assert np.sum(mol3.mo.occsa) == 5 + assert np.sum(mol3.mo.occsb) == 4 def test_load_mwfn_he_spdfgh_g03(): From ab3e94ba8c1454d3a269f1cc4e7e4eadf8c91a6a Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 22:33:53 -0700 Subject: [PATCH 25/32] Update docstrings & comments --- iodata/formats/mwfn.py | 43 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index e58cb1e48..ad4e36180 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -18,7 +18,6 @@ # -- """Multiwfn MWFN file format.""" -from typing import Tuple import numpy as np @@ -27,10 +26,13 @@ from ..orbitals import MolecularOrbitals from ..utils import LineIterator, angstrom + __all__ = [] + PATTERNS = ['*.mwfn'] + # From the MWFN chemrxiv paper # https://chemrxiv.org/articles/Mwfn_A_Strict_Concise_and_Extensible_Format # _for_Electronic_Wavefunction_Storage_and_Exchange/11872524 @@ -64,7 +66,7 @@ def _load_helper_opener(lit: LineIterator) -> dict: - """Read initial variables.""" + """Read initial variables at the beginning of a MWFN file.""" keys = {"Wfntype": int, "Charge": float, "Naelec": float, "Nbelec": float, "E_tot": float, "VT_ratio": float, "Ncenter": int} max_count = len(keys) @@ -99,7 +101,7 @@ def _load_helper_opener(lit: LineIterator) -> dict: def _load_helper_basis(lit: LineIterator) -> dict: - """Read initial variables.""" + """Read basis set information typically labelled '# Basis function information'.""" # Nprims must be last or else it gets read in with Nprimshell keys = ["Nbasis", "Nindbasis", "Nshell", "Nprimshell", "Nprims"] count = 0 @@ -116,9 +118,12 @@ def _load_helper_basis(lit: LineIterator) -> dict: def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: - """Read the coordinates of the atoms.""" - data = {"atnums": np.empty(natom, int), "atcorenums": np.empty(natom, float), - "atcoords": np.empty((natom, 3), float)} + """Read atoms section typically labelled '# Atom information'.""" + data = { + "atnums": np.empty(natom, int), + "atcorenums": np.empty(natom, float), + "atcoords": np.empty((natom, 3), float), + } # skip lines until "$Centers" section is reached line = next(lit) @@ -162,7 +167,7 @@ def _load_helper_shells(lit: LineIterator, nshell: int) -> dict: def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, dtype: np.dtype) -> np.ndarray: - """Read SHELL CENTER, SHELL TYPE, and SHELL CONTRACTION DEGREES sections.""" + """Read single or multiple line(s) section.""" section = [] while len(section) < nprim: line = next(lit) @@ -173,8 +178,7 @@ def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, def _load_helper_mo(lit: LineIterator, n_basis: int, n_mo: int) -> dict: - """Read one section of MO information.""" - + """Read molecular orbitals section typically labelled '# Orbital information'.""" data = { "mo_numbers": np.empty(n_mo, int), "mo_type": np.empty(n_mo, int), @@ -210,17 +214,14 @@ def _load_mwfn_low(lit: LineIterator) -> dict: The line iterator to read the data from. """ # Note: - # --------- - # mwfn is a fortran program which loads *.mwfn by locating the line with the keyword, - # then uses `backspace`, then begins reading. Despite this flexibility, it is stated by - # the authors that the order of section, and indeed, entries in general, must be fixed. - # With this in mind the input utilized some hardcoding since order should be fixed. - # - # mwfn ignores lines beginning with `#`. - # read sections of mwfn file - # This assumes title is on first line which seems to be the standard - - # read title + # ----- + # 1) mwfn is a fortran program which loads *.mwfn by locating the line with the keyword, + # then uses `backspace`, then begins reading. Despite this flexibility, it is stated by + # the authors that the order of section, and indeed, entries in general, must be fixed. + # With this in mind the input utilized some hard-coding since order should be fixed. + # 2) mwfn ignores lines beginning with `#`. + + # read title (assuming title is the 1st line, which seems to be the standard) data = {"title": next(lit).strip()} # load Wfntype, Charge, Naelec, Nbelec, E_tot, VT_ratio, & Ncenter @@ -254,7 +255,7 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # load MO information data.update(_load_helper_mo(lit, num_basis, num_mo)) - # TODO: add density matrix and overlap + # TODO: load data in '# Various matrices' section return data From df6df62b41f547ff65af739dceb1f4ddf9f33ad8 Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Fri, 28 Aug 2020 23:04:03 -0700 Subject: [PATCH 26/32] Fix pylint literal-comparison --- iodata/formats/mwfn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index ad4e36180..63940df82 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -250,7 +250,7 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # Note: MWFN includes virtual orbitals, so num_mo equals number independent basis functions num_basis = data["Nindbasis"] num_mo = data["Nindbasis"] - if data["mo_kind"] is "unrestricted": + if data["mo_kind"] == "unrestricted": num_mo *= 2 # load MO information data.update(_load_helper_mo(lit, num_basis, num_mo)) From b51453fea1261581f30f008c80834a788f2b3859 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Mon, 31 Aug 2020 00:32:10 -0400 Subject: [PATCH 27/32] formatting and conversion simplifications in mwfn.py --- iodata/formats/mwfn.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 63940df82..047c74bb5 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -132,8 +132,8 @@ def _load_helper_atoms(lit: LineIterator, natom: int) -> dict: for atom in range(natom): words = next(lit).split() - data["atnums"][atom] = int(words[2].strip()) - data["atcorenums"][atom] = float(words[3].strip()) + data["atnums"][atom] = words[2] + data["atcorenums"][atom] = words[3] data["atcoords"][atom, :] = words[4:7] # coordinates are in angstrom in MWFN, so they are converted to atomic units data["atcoords"] *= angstrom @@ -174,7 +174,7 @@ def _load_helper_section(lit: LineIterator, nprim: int, start: str, skip: int, if not line.startswith(start): lit.error(f"Expected line to start with {start}! Got line={line}") section.extend(line.split()[skip:]) - return np.array(section).astype(dtype) + return np.array(section, dtype) def _load_helper_mo(lit: LineIterator, n_basis: int, n_mo: int) -> dict: @@ -193,11 +193,11 @@ def _load_helper_mo(lit: LineIterator, n_basis: int, n_mo: int) -> dict: while 'Index' not in line: line = next(lit) assert line.startswith('Index') - data["mo_numbers"][index] = int(line.split()[1]) - data["mo_type"][index] = int(next(lit).split()[1]) - data["mo_energies"][index] = float(next(lit).split()[1]) - data["mo_occs"][index] = float(next(lit).split()[1]) - data["mo_sym"][index] = str(next(lit).split()[1]) + data["mo_numbers"][index] = line.split()[1] + data["mo_type"][index] = next(lit).split()[1] + data["mo_energies"][index] = next(lit).split()[1] + data["mo_occs"][index] = next(lit).split()[1] + data["mo_sym"][index] = next(lit).split()[1] # skip "$Coeff line next(lit) data["mo_coeffs"][:, index] = _load_helper_section(lit, n_basis, '', 0, float) From a006bfbb46919fbadded4c2c9e3203284a9e52b3 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Mon, 31 Aug 2020 00:36:44 -0400 Subject: [PATCH 28/32] docstring and assert_allclose for coeffs in test_mwfn.py --- iodata/test/test_mwfn.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index b967bcdb7..407df6ba1 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -33,7 +33,7 @@ def helper_load_mwfn_low(fn_mwfn): - """Load a testing Gaussian log file with iodata.formats.mwfn.load_mwfn_low.""" + """Load a testing Multiwfn file with iodata.formats.mwfn.load_mwfn_low.""" with path('iodata.test.data', fn_mwfn) as fn: lit = LineIterator(str(fn)) return _load_mwfn_low(lit) @@ -103,9 +103,9 @@ def test_load_mwfn_ch3_rohf_g03(): olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) assert_allclose(mol2.obasis.shells[0].coeffs, coeffs1) - # fails due to special SP basis storage (leaving commented lines in for future reference) - # assert_allclose(mol2.obasis.shells[1].coeffs, coeffs2) - # assert_allclose(mol2.obasis.shells[2].coeffs, coeffs3) + # Mind the gap, I mean... the SP contraction + assert_allclose(mol2.obasis.shells[1].coeffs[:, 0], np.squeeze(coeffs2.T)) + assert_allclose(mol2.obasis.shells[1].coeffs[:, 1], np.squeeze(coeffs3.T)) assert_allclose(mol2.obasis.shells[3].coeffs, coeffs4) assert_allclose(mol2.obasis.shells[4].coeffs, coeffs4) assert_allclose(olp, olp_fchk, atol=1E-7, rtol=1E-7) From fe1f842bec136219a5e5b0c275e53b42efa83294 Mon Sep 17 00:00:00 2001 From: BradenDKelly Date: Tue, 1 Sep 2020 13:21:31 -0400 Subject: [PATCH 29/32] remove helper_load_mwfn_low function --- iodata/test/test_mwfn.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index 407df6ba1..c8033d563 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -22,9 +22,7 @@ import numpy as np from numpy.testing import assert_equal, assert_allclose from ..api import load_one -from ..formats.mwfn import _load_mwfn_low from ..overlap import compute_overlap -from ..utils import LineIterator try: from importlib_resources import path @@ -32,13 +30,6 @@ from importlib.resources import path -def helper_load_mwfn_low(fn_mwfn): - """Load a testing Multiwfn file with iodata.formats.mwfn.load_mwfn_low.""" - with path('iodata.test.data', fn_mwfn) as fn: - lit = LineIterator(str(fn)) - return _load_mwfn_low(lit) - - def load_format_helper(fn_format): """Load a testing formatted file with iodata.iodata.load_one.""" with path('iodata.test.data', fn_format) as fn: From 8896d533274b5ba3512638856a1db342eedc448c Mon Sep 17 00:00:00 2001 From: tovrstra Date: Mon, 22 Mar 2021 11:49:39 +0100 Subject: [PATCH 30/32] Fix initialization of Orbitals and clarify docstring --- iodata/formats/mwfn.py | 36 ++++++++++++++++++------------------ iodata/orbitals.py | 6 ++++-- iodata/test/test_mwfn.py | 16 +++++++++------- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 047c74bb5..3bd8598b9 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -255,8 +255,6 @@ def _load_mwfn_low(lit: LineIterator) -> dict: # load MO information data.update(_load_helper_mo(lit, num_basis, num_mo)) - # TODO: load data in '# Various matrices' section - return data @@ -269,7 +267,8 @@ def load_one(lit: LineIterator) -> dict: # store certain information loaded from MWFN in extra dictionary extra = {'wfntype': inp['Wfntype'], 'nbasis': inp['Nbasis'], 'nindbasis': inp['Nindbasis'], 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], - 'full_virial_ratio': inp['VT_ratio']} + 'full_virial_ratio': inp['VT_ratio'], + "neleca": inp['Naelec'], "nelecb": inp['Nbelec']} # Build MolecularBasis instance # Unlike WFN, MWFN does include orbital expansion coefficients. @@ -286,22 +285,23 @@ def load_one(lit: LineIterator) -> dict: counter += ncon obasis = MolecularBasis(shells, CONVENTIONS, 'L2') - # MFWN provides number of alpha and beta electrons, this is a double check - # mo_type (integer, scalar): Orbital type - # 0: Alpha + Beta (i.e. spatial orbital) - # 1: Alpha - # 2: Beta - # TODO calculate number of alpha and beta electrons manually. - + # Determine number of orbitals of each kind. + if inp["mo_kind"] == "restricted": + norba = len(inp["mo_type"]) + norbb = norba + else: + # Legend + # 0: restricted doubly occupied + # 1: alpha + # 2: beta + norba = (inp["mo_type"] == 1).sum() + norbb = (inp["mo_type"] == 2).sum() + assert (inp["mo_type"] == 0).sum() == 0 # Build MolecularOrbitals instance - mo = MolecularOrbitals(inp["mo_kind"], - int(inp["Naelec"]), - int(inp["Nbelec"]), - inp['mo_occs'], - inp['mo_coeffs'], - inp['mo_energies'], - None, - ) + mo = MolecularOrbitals( + inp["mo_kind"], norba, norbb, inp['mo_occs'], inp['mo_coeffs'], + inp['mo_energies'], None + ) return { 'title': inp['title'], diff --git a/iodata/orbitals.py b/iodata/orbitals.py index 819bcff55..50a38a36d 100644 --- a/iodata/orbitals.py +++ b/iodata/orbitals.py @@ -38,9 +38,11 @@ class MolecularOrbitals: kind Type of molecular orbitals, which can be 'restricted', 'unrestricted', or 'generalized'. norba - Number of alpha molecular orbitals, set to `None` in case of type=='generalized'. + Number of (occupied and virtual) alpha molecular orbitals. + Set to `None` in case oftype=='generalized'. norbb - Number of beta molecular orbitals, set to `None` in case of type=='generalized'. + Number of (occupied and virtual) beta molecular orbitals. + Set to `None` in case of type=='generalized'. This is expected to be equal to `norba` for the `restricted` kind. occs Molecular orbital occupation numbers. The length equals the number of columns of coeffs. diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index c8033d563..abfcd7e5e 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -40,7 +40,7 @@ def load_format_helper(fn_format): def test_load_mwfn_ch3_rohf_g03(): mol = load_format_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) - assert_equal(mol.mo.occs.sum(), 9.0) + assert_equal(mol.mo.occs.sum(), mol.extra["neleca"] + mol.extra["nelecb"]) assert_equal(mol.mo.occs.min(), 0.0) assert_equal(mol.mo.occs.max(), 2.0) assert_equal(mol.extra['full_virial_ratio'], 2.00174844) @@ -52,8 +52,8 @@ def test_load_mwfn_ch3_rohf_g03(): assert_equal(mol.charge, 0.0) assert_equal(mol.nelec, 9) assert_equal(mol.natom, 4) - assert_equal(np.sum(mol.mo.occsa), 5.0) - assert_equal(np.sum(mol.mo.occsb), 4.0) + assert_equal(np.sum(mol.mo.occsa), mol.extra["neleca"]) + assert_equal(np.sum(mol.mo.occsb), mol.extra["nelecb"]) assert_equal(mol.energy, -3.90732095E+01) assert_allclose([shell.angmoms[0] for shell in mol.obasis.shells], [0, 0, 1, 0, 0, 0]) assert_allclose([shell.icenter for shell in mol.obasis.shells], [0, 0, 0, 1, 2, 3]) @@ -129,17 +129,19 @@ def test_load_mwfn_ch3_hf_g03(): def test_nelec_charge(): mol1 = load_format_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert mol1.nelec == 9 + assert mol1.mo.occsa.sum() == mol1.extra["neleca"] + assert mol1.mo.occsb.sum() == mol1.extra["nelecb"] assert mol1.charge == 0 mol2 = load_format_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert mol2.nelec == 2 assert mol2.charge == 0 - assert np.sum(mol2.mo.occsa) == 1 - assert np.sum(mol2.mo.occsb) == 1 + assert mol2.mo.occsa.sum() == mol2.extra["neleca"] + assert mol2.mo.occsb.sum() == mol2.extra["nelecb"] mol3 = load_format_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert mol3.nelec == 9 assert mol3.charge == 0 - assert np.sum(mol3.mo.occsa) == 5 - assert np.sum(mol3.mo.occsb) == 4 + assert mol3.mo.occsa.sum() == mol3.extra["neleca"] + assert mol3.mo.occsb.sum() == mol3.extra["nelecb"] def test_load_mwfn_he_spdfgh_g03(): From f876bfe41e028ec020bd79417c96deefc1110de7 Mon Sep 17 00:00:00 2001 From: tovrstra Date: Mon, 22 Mar 2021 12:09:59 +0100 Subject: [PATCH 31/32] Remove 'format' wording, very minor --- iodata/test/test_mwfn.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index abfcd7e5e..d59eabd78 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -30,15 +30,15 @@ from importlib.resources import path -def load_format_helper(fn_format): - """Load a testing formatted file with iodata.iodata.load_one.""" - with path('iodata.test.data', fn_format) as fn: - return load_one(fn) +def load_helper(fn): + """Load a test file with iodata.iodata.load_one.""" + with path('iodata.test.data', fn) as absfn: + return load_one(absfn) # pylint: disable=too-many-statements def test_load_mwfn_ch3_rohf_g03(): - mol = load_format_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') + mol = load_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) assert_equal(mol.mo.occs.sum(), mol.extra["neleca"] + mol.extra["nelecb"]) assert_equal(mol.mo.occs.min(), 0.0) @@ -90,7 +90,7 @@ def test_load_mwfn_ch3_rohf_g03(): assert_equal(mol.extra['mo_sym'][0], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) - mol2 = load_format_helper('ch3_rohf_sto3g_g03.fchk') + mol2 = load_helper('ch3_rohf_sto3g_g03.fchk') olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) assert_allclose(mol2.obasis.shells[0].coeffs, coeffs1) @@ -103,7 +103,7 @@ def test_load_mwfn_ch3_rohf_g03(): def test_load_mwfn_ch3_hf_g03(): - mol = load_format_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') + mol = load_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) assert_equal(mol.extra['wfntype'], 1) # test first molecular orbital information @@ -120,24 +120,24 @@ def test_load_mwfn_ch3_hf_g03(): assert_equal(mol.extra['mo_sym'][0], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) - mol2 = load_format_helper('ch3_hf_sto3g.fchk') + mol2 = load_helper('ch3_hf_sto3g.fchk') olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) assert_allclose(olp, olp_fchk, atol=1E-7, rtol=1E-7) def test_nelec_charge(): - mol1 = load_format_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') + mol1 = load_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert mol1.nelec == 9 assert mol1.mo.occsa.sum() == mol1.extra["neleca"] assert mol1.mo.occsb.sum() == mol1.extra["nelecb"] assert mol1.charge == 0 - mol2 = load_format_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') + mol2 = load_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert mol2.nelec == 2 assert mol2.charge == 0 assert mol2.mo.occsa.sum() == mol2.extra["neleca"] assert mol2.mo.occsb.sum() == mol2.extra["nelecb"] - mol3 = load_format_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') + mol3 = load_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert mol3.nelec == 9 assert mol3.charge == 0 assert mol3.mo.occsa.sum() == mol3.extra["neleca"] @@ -145,7 +145,7 @@ def test_nelec_charge(): def test_load_mwfn_he_spdfgh_g03(): - mol = load_format_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') + mol = load_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) assert_equal(mol.extra['wfntype'], 0) # test first molecular orbital information @@ -183,7 +183,7 @@ def test_load_mwfn_he_spdfgh_g03(): assert_equal(mol.extra['mo_sym'][55], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) - mol2 = load_format_helper('he_spdfgh_virtual.fchk') + mol2 = load_helper('he_spdfgh_virtual.fchk') olp_fchk = compute_overlap(mol2.obasis, mol2.atcoords) assert_allclose(mol.atcoords, mol2.atcoords, atol=1E-7, rtol=1E-7) assert_allclose(olp, olp_fchk, atol=1E-7, rtol=1E-7) From 7d081f9b8c9b4d259bac6bd1ce62b062d801d88a Mon Sep 17 00:00:00 2001 From: Farnaz Heidar-Zadeh Date: Mon, 29 Mar 2021 08:56:28 -0700 Subject: [PATCH 32/32] Reduce items stored in extra dictionary of MWFN --- iodata/formats/mwfn.py | 22 ++++++++++++++++++---- iodata/test/test_mwfn.py | 14 -------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/iodata/formats/mwfn.py b/iodata/formats/mwfn.py index 3bd8598b9..e72be2fb1 100644 --- a/iodata/formats/mwfn.py +++ b/iodata/formats/mwfn.py @@ -265,10 +265,10 @@ def load_one(lit: LineIterator) -> dict: inp = _load_mwfn_low(lit) # store certain information loaded from MWFN in extra dictionary - extra = {'wfntype': inp['Wfntype'], 'nbasis': inp['Nbasis'], 'nindbasis': inp['Nindbasis'], - 'mo_sym': inp['mo_sym'], 'mo_type': inp['mo_type'], - 'full_virial_ratio': inp['VT_ratio'], - "neleca": inp['Naelec'], "nelecb": inp['Nbelec']} + extra = {'wfntype': inp['Wfntype'], + 'nindbasis': inp['Nindbasis'], + 'mo_sym': inp['mo_sym'], + 'full_virial_ratio': inp['VT_ratio']} # Build MolecularBasis instance # Unlike WFN, MWFN does include orbital expansion coefficients. @@ -284,6 +284,10 @@ def load_one(lit: LineIterator) -> dict: )) counter += ncon obasis = MolecularBasis(shells, CONVENTIONS, 'L2') + # check number of basis functions + if obasis.nbasis != inp["Nbasis"]: + raise ValueError(f"Number of basis in MolecularBasis is not equal to the 'Nbasis'. " + f"{obasis.nbasis} != {inp['Nbasis']}") # Determine number of orbitals of each kind. if inp["mo_kind"] == "restricted": @@ -302,6 +306,16 @@ def load_one(lit: LineIterator) -> dict: inp["mo_kind"], norba, norbb, inp['mo_occs'], inp['mo_coeffs'], inp['mo_energies'], None ) + # check number of electrons + if mo.nelec != inp['Naelec'] + inp['Nbelec']: + raise ValueError(f"Number of electrons in MolecularOrbitals is not equal to the sum of " + f"'Naelec' and 'Nbelec'. {mo.nelec} != {inp['Naelec']} + {inp['Nbelec']}") + if mo.occsa.sum() != inp['Naelec']: + raise ValueError(f"Number of alpha electrons in MolecularOrbitals is not equal to the " + f"'Naelec'. {mo.occsa.sum()} != {inp['Naelec']}") + if mo.occsb.sum() != inp['Nbelec']: + raise ValueError(f"Number of beta electrons in MolecularOrbitals is not equal to the " + f"'Nbelec'. {mo.occsb.sum()} != {inp['Nbelec']}") return { 'title': inp['title'], diff --git a/iodata/test/test_mwfn.py b/iodata/test/test_mwfn.py index d59eabd78..c97226c09 100644 --- a/iodata/test/test_mwfn.py +++ b/iodata/test/test_mwfn.py @@ -40,20 +40,16 @@ def load_helper(fn): def test_load_mwfn_ch3_rohf_g03(): mol = load_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert_equal(mol.mo.occs.shape[0], mol.mo.coeffs.shape[1]) - assert_equal(mol.mo.occs.sum(), mol.extra["neleca"] + mol.extra["nelecb"]) assert_equal(mol.mo.occs.min(), 0.0) assert_equal(mol.mo.occs.max(), 2.0) assert_equal(mol.extra['full_virial_ratio'], 2.00174844) assert_equal(mol.extra['nindbasis'], 8) - assert_equal(mol.extra['nbasis'], 8) assert_equal(np.sum([shell.nprim * shell.nbasis for shell in mol.obasis.shells]), 24) assert_equal(len(mol.obasis.shells), 6) assert_equal(np.sum([shell.nprim for shell in mol.obasis.shells]), 18) assert_equal(mol.charge, 0.0) assert_equal(mol.nelec, 9) assert_equal(mol.natom, 4) - assert_equal(np.sum(mol.mo.occsa), mol.extra["neleca"]) - assert_equal(np.sum(mol.mo.occsb), mol.extra["nelecb"]) assert_equal(mol.energy, -3.90732095E+01) assert_allclose([shell.angmoms[0] for shell in mol.obasis.shells], [0, 0, 1, 0, 0, 0]) assert_allclose([shell.icenter for shell in mol.obasis.shells], [0, 0, 0, 1, 2, 3]) @@ -86,7 +82,6 @@ def test_load_mwfn_ch3_rohf_g03(): -1.26686819E-02, 6.64707810E-01, 7.68278159E-01, 7.69362712E-01]) assert_allclose(mol.mo.energies, mo_energies) assert_equal(mol.mo.occs[0], 2.000000) - assert_equal(mol.extra['mo_type'][0], 0) assert_equal(mol.extra['mo_sym'][0], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) @@ -116,7 +111,6 @@ def test_load_mwfn_ch3_hf_g03(): 3.28562907E-01, 7.04456296E-01, 7.88139770E-01, 7.89228899E-01]) assert_allclose(mol.mo.energies, mo_energies) assert_equal(mol.mo.occs[0], 1.000000) - assert_equal(mol.extra['mo_type'][0], 1) assert_equal(mol.extra['mo_sym'][0], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords) @@ -129,19 +123,13 @@ def test_load_mwfn_ch3_hf_g03(): def test_nelec_charge(): mol1 = load_helper('ch3_rohf_sto3g_g03_fchk_multiwfn3.7.mwfn') assert mol1.nelec == 9 - assert mol1.mo.occsa.sum() == mol1.extra["neleca"] - assert mol1.mo.occsb.sum() == mol1.extra["nelecb"] assert mol1.charge == 0 mol2 = load_helper('he_spdfgh_virtual_fchk_multiwfn3.7.mwfn') assert mol2.nelec == 2 assert mol2.charge == 0 - assert mol2.mo.occsa.sum() == mol2.extra["neleca"] - assert mol2.mo.occsb.sum() == mol2.extra["nelecb"] mol3 = load_helper('ch3_hf_sto3g_fchk_multiwfn3.7.mwfn') assert mol3.nelec == 9 assert mol3.charge == 0 - assert mol3.mo.occsa.sum() == mol3.extra["neleca"] - assert mol3.mo.occsb.sum() == mol3.extra["nelecb"] def test_load_mwfn_he_spdfgh_g03(): @@ -175,11 +163,9 @@ def test_load_mwfn_he_spdfgh_g03(): # energies were truncated at 24 entries, this checks the last energy entry assert mol.mo.energies[55] == 6.12473238E+00 assert_equal(mol.mo.occs[0], 2.000000) - assert_equal(mol.extra['mo_type'][0], 0) assert_equal(mol.extra['mo_sym'][0], '?') # this tests thhe last of the molecular orbital entries assert_equal(mol.mo.occs[55], 0.000000) - assert_equal(mol.extra['mo_type'][55], 0) assert_equal(mol.extra['mo_sym'][55], '?') # test that for the same molecule fchk and mwfn generate the same objects. olp = compute_overlap(mol.obasis, mol.atcoords)