From 4442f38bed112ccf8dabe31428021b8b998a363a Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Sat, 20 Feb 2021 23:04:13 +0100 Subject: [PATCH 01/46] Inclusion of n2p2 interface files - github.com/CompPhysVienna/n2p2 commit 2f05836 - example modified (less atoms) --- examples/USER/nnp/data.H2O-360mol | 1096 ++++++++++++++ examples/USER/nnp/in.nnp | 47 + examples/USER/nnp/nnp-data/input.nn | 120 ++ examples/USER/nnp/nnp-data/scaling.data | 72 + examples/USER/nnp/nnp-data/weights.001.data | 1392 ++++++++++++++++++ examples/USER/nnp/nnp-data/weights.008.data | 1467 +++++++++++++++++++ src/USER-NNP/Install.sh | 68 + src/USER-NNP/README | 0 src/USER-NNP/pair_nnp.cpp | 419 ++++++ src/USER-NNP/pair_nnp.h | 70 + 10 files changed, 4751 insertions(+) create mode 100644 examples/USER/nnp/data.H2O-360mol create mode 100644 examples/USER/nnp/in.nnp create mode 100644 examples/USER/nnp/nnp-data/input.nn create mode 100644 examples/USER/nnp/nnp-data/scaling.data create mode 100644 examples/USER/nnp/nnp-data/weights.001.data create mode 100644 examples/USER/nnp/nnp-data/weights.008.data create mode 100644 src/USER-NNP/Install.sh create mode 100644 src/USER-NNP/README create mode 100644 src/USER-NNP/pair_nnp.cpp create mode 100644 src/USER-NNP/pair_nnp.h diff --git a/examples/USER/nnp/data.H2O-360mol b/examples/USER/nnp/data.H2O-360mol new file mode 100644 index 0000000000..3791f07585 --- /dev/null +++ b/examples/USER/nnp/data.H2O-360mol @@ -0,0 +1,1096 @@ +LAMMPS data file, 360 water molecules + +1080 atoms +2 atom types + +0.0 2.2695686722465727E+01 xlo xhi +0.0 2.3586033624598713E+01 ylo yhi +0.0 2.2237130028217017E+01 zlo zhi + +Masses + +1 1.00794 +2 15.9994 + +Atoms # atomic + +1 2 1.7548118361224624E+01 7.3699168122955889E+00 5.5591101411055377E-01 +2 1 1.7052018361224619E+01 7.5604368122955892E+00 1.3882600141105546E+00 +3 1 1.8473918361224619E+01 7.4162968122955890E+00 8.4111101411055411E-01 +4 2 9.1706683612246138E+00 1.2915816812295594E+01 2.5107200141105555E+00 +5 1 9.7830883612246140E+00 1.2151816812295593E+01 2.3347500141105550E+00 +6 1 9.1892283612246164E+00 1.3443216812295594E+01 1.6591000141105545E+00 +7 2 1.8399218361224623E+01 1.7424016812295601E+01 6.5473300141105586E+00 +8 1 1.8345918361224623E+01 1.8268716812295594E+01 7.0339200141105591E+00 +9 1 1.9026818361224624E+01 1.6834816812295600E+01 7.0045500141105599E+00 +10 2 5.7216883612246123E+00 1.6305516812295600E+01 1.0104620014110562E+01 +11 1 6.2668083612246122E+00 1.5517116812295598E+01 9.8182400141105628E+00 +12 1 6.2385083612246124E+00 1.6937316812295599E+01 1.0608050014110562E+01 +13 2 1.1317118361224615E+01 1.1227616812295592E+01 1.5996300141105546E+00 +14 1 1.1296018361224618E+01 1.0203716812295591E+01 1.7394500141105549E+00 +15 1 1.1304118361224615E+01 1.1323916812295593E+01 6.1680301411055383E-01 +16 2 7.8280183612246139E+00 2.2671316812295601E+01 4.2759600141105567E+00 +17 1 7.1177183612246129E+00 2.2216116812295603E+01 3.7208400141105566E+00 +18 1 8.3989583612246133E+00 2.2791416812295601E+01 3.4672900141105565E+00 +19 2 4.3278983612246105E+00 8.5704868122955897E+00 1.9742050014110571E+01 +20 1 5.3082183612246112E+00 8.2615268122955889E+00 1.9662550014110568E+01 +21 1 4.0620583612246106E+00 8.0321368122955903E+00 2.0571250014110571E+01 +22 2 1.7732618361224624E+01 1.5933416812295597E+01 1.9881550014110569E+01 +23 1 1.8279418361224621E+01 1.5600716812295596E+01 2.0596350014110573E+01 +24 1 1.6762718361224621E+01 1.5919016812295597E+01 2.0129250014110571E+01 +25 2 8.8204883612246157E+00 2.0042116812295600E+01 1.5762450014110566E+01 +26 1 7.9101683612246143E+00 1.9947516812295600E+01 1.6194150014110569E+01 +27 1 9.2758283612246135E+00 1.9487716812295599E+01 1.6447350014110569E+01 +28 2 1.1361918361224616E+01 1.2958816812295595E+01 1.5721550014110568E+01 +29 1 1.0710518361224615E+01 1.3138916812295594E+01 1.6487150014110568E+01 +30 1 1.1182418361224618E+01 1.2046616812295593E+01 1.5544250014110565E+01 +31 2 9.0853583612246158E+00 1.8028316812295600E+01 1.3540150014110566E+01 +32 1 9.0982483612246146E+00 1.8864216812295595E+01 1.4036250014110564E+01 +33 1 9.8956783612246166E+00 1.8073516812295594E+01 1.3050750014110566E+01 +34 2 3.3490983612246099E+00 1.3145316812295595E+01 2.1514250014110569E+01 +35 1 3.9414483612246105E+00 1.3751716812295594E+01 2.2021150014110574E+01 +36 1 3.6130383612246102E+00 1.3223816812295594E+01 2.0535850014110569E+01 +37 2 6.4411883612246124E+00 7.5546068122955887E+00 1.2406250014110563E+01 +38 1 6.4110583612246135E+00 7.3084268122955889E+00 1.1455550014110564E+01 +39 1 5.9502783612246120E+00 6.8079868122955887E+00 1.2882150014110564E+01 +40 2 3.1816283612246097E+00 1.3743768122955837E+00 1.8410650014110569E+01 +41 1 2.7456683612246096E+00 1.9753168122955844E+00 1.7761550014110568E+01 +42 1 3.3321183612246101E+00 6.4900681229558332E-01 1.7765450014110570E+01 +43 2 1.1615018361224617E+01 8.3421868122955907E+00 9.3717400141105607E+00 +44 1 1.1505118361224616E+01 9.2703268122955897E+00 8.9617500141105602E+00 +45 1 1.1720018361224618E+01 8.5827868122955895E+00 1.0287050014110562E+01 +46 2 1.6212718361224624E+01 1.6780668122955840E+00 1.1987450014110564E+01 +47 1 1.6817418361224618E+01 9.2842081229558349E-01 1.2089350014110565E+01 +48 1 1.6302618361224624E+01 1.6888668122955843E+00 1.0949350014110564E+01 +49 2 5.7806183612246125E+00 2.3120416812295598E+01 5.7535201411055370E-01 +50 1 6.0597183612246122E+00 2.2879416812295602E+01 2.1923350014110571E+01 +51 1 6.1737883612246121E+00 3.7587181229558303E-01 7.5628401411055390E-01 +52 2 6.9870736122460764E-01 4.4018468122955863E+00 2.0745450014110574E+01 +53 1 1.0849233612246079E+00 5.0078768122955868E+00 2.1326650014110573E+01 +54 1 1.1343483612246081E+00 3.5552568122955859E+00 2.0739850014110569E+01 +55 2 1.2474018361224617E+01 1.8462716812295600E+01 4.2626300141105569E+00 +56 1 1.2631218361224617E+01 1.9451616812295601E+01 4.1598600141105573E+00 +57 1 1.1535518361224616E+01 1.8339216812295600E+01 3.8941600141105570E+00 +58 2 1.4727518361224622E+01 1.1649916812295594E+01 1.2720850014110564E+01 +59 1 1.4211718361224619E+01 1.2472216812295594E+01 1.2857350014110564E+01 +60 1 1.4256618361224620E+01 1.1143516812295591E+01 1.1963750014110564E+01 +61 2 1.8643018361224620E+01 3.1526568122955854E+00 3.3192500141105561E+00 +62 1 1.8497618361224625E+01 2.1786668122955843E+00 3.1363400141105560E+00 +63 1 1.8226818361224623E+01 3.7471968122955857E+00 2.7182100141105558E+00 +64 2 5.9526383612246123E+00 9.9064868122955918E+00 1.3675050014110566E+01 +65 1 5.8703483612246119E+00 9.1964268122955914E+00 1.2998350014110564E+01 +66 1 5.6200083612246123E+00 9.5717168122955893E+00 1.4553850014110566E+01 +67 2 2.0547618361224622E+01 1.4953616812295596E+01 7.4909000141105597E+00 +68 1 1.9810418361224624E+01 1.4276716812295595E+01 7.7369400141105604E+00 +69 1 2.0538518361224622E+01 1.4842716812295595E+01 6.5215100141105582E+00 +70 2 5.6182883612246117E+00 1.0935616812295592E+01 2.1309550014110577E+01 +71 1 5.1210983612246110E+00 1.0201616812295592E+01 2.0927650014110572E+01 +72 1 5.0231983612246101E+00 1.1682816812295593E+01 2.1195250014110574E+01 +73 2 7.3994883612246127E+00 1.6590716812295597E+01 1.6644200141105545E+00 +74 1 7.4832983612246133E+00 1.5764316812295597E+01 1.1037010141105541E+00 +75 1 6.4615483612246125E+00 1.6884716812295594E+01 1.5901700141105546E+00 +76 2 1.6481618361224619E+01 6.8669468122955886E+00 8.1942200141105612E+00 +77 1 1.6842218361224624E+01 6.6571868122955893E+00 7.3171500141105605E+00 +78 1 1.6662118361224621E+01 7.9103168122955898E+00 8.3926300141105603E+00 +79 2 3.8240283612246104E+00 7.4557268122955893E+00 2.2081450014110569E+01 +80 1 3.9996383612246107E+00 8.2127468122955900E+00 4.4258201411055370E-01 +81 1 4.3794783612246118E+00 6.7752768122955889E+00 3.0601401411055357E-01 +82 2 1.8206818361224624E+01 1.8675116812295599E+01 2.2143550014110573E+01 +83 1 1.9050418361224622E+01 1.8625316812295598E+01 3.1911901411055360E-01 +84 1 1.7785918361224624E+01 1.7838316812295595E+01 3.0735001411055357E-01 +85 2 4.7481983612246115E+00 2.2139016812295598E+01 1.2766950014110565E+01 +86 1 4.8718083612246117E+00 2.1795616812295602E+01 1.1856350014110564E+01 +87 1 3.9089883612246101E+00 2.2636316812295600E+01 1.2895850014110565E+01 +88 2 1.5071218361224622E+01 1.5644016812295597E+01 2.1116550014110569E+01 +89 1 1.5525518361224620E+01 1.5499516812295598E+01 2.1939550014110573E+01 +90 1 1.4560118361224619E+01 1.4829216812295597E+01 2.0911550014110574E+01 +91 2 3.5850483612246102E+00 2.0238968122955843E+00 1.4329950014110565E+01 +92 1 4.5822683612246102E+00 2.0182468122955846E+00 1.4489350014110565E+01 +93 1 3.3075483612246099E+00 1.7417468122955844E+00 1.3412850014110566E+01 +94 2 9.3287883612246159E+00 1.0948916812295593E+01 1.7445050014110571E+01 +95 1 9.1849283612246140E+00 1.0964816812295592E+01 1.6497450014110569E+01 +96 1 1.0208518361224616E+01 1.0560116812295592E+01 1.7467750014110571E+01 +97 2 1.6917518361224623E+01 1.6216116812295596E+01 1.2336000141105543E+00 +98 1 1.7640918361224621E+01 1.5569416812295596E+01 1.1444600141105543E+00 +99 1 1.6626918361224618E+01 1.6336716812295599E+01 2.2021100141105552E+00 +100 2 1.3679818361224619E+01 1.7129816812295594E+01 1.1430150014110563E+01 +101 1 1.3887318361224619E+01 1.7170416812295599E+01 1.0468250014110565E+01 +102 1 1.4096718361224619E+01 1.7968216812295598E+01 1.1805550014110564E+01 +103 2 1.3326318361224619E+01 2.0612716812295599E+01 1.9289650014110574E+01 +104 1 1.3880018361224620E+01 2.1380416812295604E+01 1.9637050014110574E+01 +105 1 1.3969718361224619E+01 2.0031816812295599E+01 1.8864850014110566E+01 +106 2 1.3102818361224617E+01 9.7449768122955920E+00 4.8646700141105574E+00 +107 1 1.3259018361224618E+01 8.7793068122955891E+00 4.8787300141105581E+00 +108 1 1.2297018361224618E+01 1.0037396812295592E+01 5.2867800141105574E+00 +109 2 1.3561218361224620E+01 1.0125528122955836E+00 1.7365550014110568E+01 +110 1 1.4132118361224620E+01 1.2935668122955839E+00 1.6589150014110565E+01 +111 1 1.3566118361224619E+01 1.3040812295582734E-02 1.7411450014110571E+01 +112 2 2.5471083612246090E+00 7.7398068122955896E+00 1.1637550014110564E+01 +113 1 2.9179683612246090E+00 8.1217068122955887E+00 1.2434250014110564E+01 +114 1 1.6739383612246084E+00 7.2966168122955892E+00 1.1887150014110563E+01 +115 2 1.1800218361224616E+01 4.8194781229558314E-01 2.1326750014110569E+01 +116 1 1.2170218361224618E+01 2.3460816812295601E+01 2.1940950014110573E+01 +117 1 1.0818818361224615E+01 3.7687481229558306E-01 2.1407550014110573E+01 +118 2 1.7245383612246086E+00 2.0642416812295608E+01 1.5474450014110568E+01 +119 1 7.5602036122460758E-01 2.0577716812295602E+01 1.5232950014110566E+01 +120 1 2.0120183612246088E+00 1.9757816812295598E+01 1.5778550014110568E+01 +121 2 2.1498018361224627E+01 2.3493416812295607E+01 1.3820250014110565E+01 +122 1 2.1494718361224624E+01 2.2471216812295598E+01 1.3868050014110564E+01 +123 1 2.1258518361224628E+01 8.0412312295582794E-02 1.2930450014110564E+01 +124 2 6.7655083612246134E+00 2.2767416812295608E+01 1.4699650014110565E+01 +125 1 6.0001183612246125E+00 2.2567816812295604E+01 1.4021650014110564E+01 +126 1 7.6516483612246144E+00 2.2636816812295606E+01 1.4157950014110565E+01 +127 2 3.3906536122460723E-01 1.0326888122955835E+00 1.6208950014110570E+01 +128 1 2.2390518361224629E+01 1.6853768122955841E+00 1.6668350014110565E+01 +129 1 2.2469018361224627E+01 7.4193681229558339E-01 1.5376250014110568E+01 +130 2 1.9926618361224623E+01 1.0603116812295591E+01 6.2471900141105587E+00 +131 1 1.9651418361224625E+01 1.0742616812295591E+01 7.1974200141105591E+00 +132 1 2.0326818361224621E+01 9.7091568122955891E+00 6.2972500141105590E+00 +133 2 1.4065418361224619E+01 9.6032968122955911E+00 1.0851650014110565E+01 +134 1 1.4888018361224619E+01 9.4829868122955894E+00 1.0347850014110563E+01 +135 1 1.3995918361224620E+01 8.8324168122955911E+00 1.1424350014110564E+01 +136 2 1.9120918361224621E+01 9.2330968122955923E+00 1.4397850014110565E+01 +137 1 1.9273018361224622E+01 9.3574668122955913E+00 1.5329650014110568E+01 +138 1 1.8336218361224628E+01 9.7577868122955902E+00 1.4209550014110565E+01 +139 2 9.2747583612246132E+00 3.3802168122955858E+00 2.1921150014110570E+01 +140 1 9.7027183612246155E+00 4.2624668122955862E+00 2.1965550014110573E+01 +141 1 9.9842883612246158E+00 2.9253568122955849E+00 2.1379850014110570E+01 +142 2 9.0611683612246132E+00 2.2742216812295599E+01 1.2904350014110564E+01 +143 1 8.4974083612246147E+00 2.2879016812295600E+01 1.2165450014110563E+01 +144 1 9.7257783612246165E+00 2.2033816812295601E+01 1.2587850014110565E+01 +145 2 1.5256683612246082E+00 2.1530416812295606E+01 7.1578800141105594E+00 +146 1 8.7799836122460773E-01 2.2234616812295606E+01 7.2577600141105592E+00 +147 1 2.3075883612246093E+00 2.2010816812295598E+01 6.8841200141105583E+00 +148 2 1.6081118361224622E+01 1.6021916812295597E+01 1.6166550014110570E+01 +149 1 1.6522018361224625E+01 1.5180316812295597E+01 1.6454250014110571E+01 +150 1 1.5401218361224620E+01 1.5769416812295598E+01 1.5483250014110567E+01 +151 2 1.7749018361224625E+01 1.3835416812295595E+01 1.7934850014110566E+01 +152 1 1.7619418361224618E+01 1.2996016812295593E+01 1.8357350014110569E+01 +153 1 1.7710318361224626E+01 1.4526716812295595E+01 1.8693350014110564E+01 +154 2 1.0784218361224616E+01 2.0789668122955844E+00 3.1584400141105560E+00 +155 1 1.0978818361224617E+01 1.9034768122955845E+00 4.0827400141105574E+00 +156 1 1.0457118361224616E+01 3.0216968122955854E+00 3.1455400141105558E+00 +157 2 9.4666183612246151E+00 1.3795016812295595E+01 1.8255150014110573E+01 +158 1 9.2739483612246154E+00 1.2816116812295595E+01 1.8237050014110565E+01 +159 1 1.0024898361224613E+01 1.3849816812295595E+01 1.9041350014110570E+01 +160 2 1.6607718361224620E+01 9.5926568122955906E+00 8.3610000141105605E+00 +161 1 1.7489618361224622E+01 1.0033886812295592E+01 8.5949700141105598E+00 +162 1 1.6081218361224622E+01 1.0086916812295589E+01 7.6766200141105605E+00 +163 2 2.4720583612246085E+00 9.5096768122955897E+00 7.5596600141105599E+00 +164 1 3.3352983612246097E+00 1.0003256812295591E+01 7.6921700141105598E+00 +165 1 1.8756683612246088E+00 9.8285368122955923E+00 8.2621300141105607E+00 +166 2 1.3606518361224618E+01 4.4837168122955875E+00 1.9624350014110568E+01 +167 1 1.4283518361224617E+01 3.7681568122955857E+00 1.9538550014110569E+01 +168 1 1.2702218361224618E+01 4.1496568122955866E+00 1.9708550014110568E+01 +169 2 1.1041018361224618E+01 1.7860416812295597E+01 1.1277550014110563E+01 +170 1 1.1982418361224617E+01 1.7497016812295602E+01 1.1127350014110561E+01 +171 1 1.0792418361224616E+01 1.8262616812295597E+01 1.0475950014110563E+01 +172 2 7.0982883612246130E+00 2.3566768122955843E+00 1.2506050014110563E+01 +173 1 6.3155683612246118E+00 2.7857868122955849E+00 1.2136750014110564E+01 +174 1 6.9544283612246129E+00 1.4878268122955838E+00 1.2027550014110563E+01 +175 2 2.2461118361224624E+01 1.7223816812295595E+01 3.7853700141105566E+00 +176 1 3.8035736122460728E-01 1.6541216812295595E+01 4.1282300141105566E+00 +177 1 2.2170218361224627E+01 1.7718916812295596E+01 4.5884800141105577E+00 +178 2 2.1524918361224625E+01 2.3278416812295603E+01 6.0502000141105574E+00 +179 1 2.2344918361224625E+01 1.9910411229558292E-01 5.7837700141105577E+00 +180 1 2.1146818361224621E+01 6.2103512295582780E-02 6.8814600141105586E+00 +181 2 1.1647418361224618E+01 6.9274068122955876E+00 1.9202350014110564E+01 +182 1 1.1682918361224617E+01 6.7232468122955886E+00 1.8281250014110572E+01 +183 1 1.2452418361224618E+01 6.5915368122955877E+00 1.9630250014110569E+01 +184 2 1.2980118361224617E+01 1.5656916812295595E+01 1.8521550014110570E+01 +185 1 1.2468118361224617E+01 1.6152716812295594E+01 1.7788550014110569E+01 +186 1 1.3643618361224618E+01 1.6261516812295596E+01 1.8848950014110571E+01 +187 2 9.4894083612246138E+00 4.1912368122955863E+00 1.7762350014110567E+01 +188 1 9.4709683612246156E+00 5.0998768122955873E+00 1.7391550014110571E+01 +189 1 9.2232883612246166E+00 3.6788768122955857E+00 1.6979950014110571E+01 +190 2 1.0881918361224615E+01 1.3244068122955841E+00 1.2479050014110564E+01 +191 1 1.0745218361224616E+01 2.0666368122955845E+00 1.3140050014110566E+01 +192 1 1.0165418361224615E+01 6.0247381229558317E-01 1.2629050014110565E+01 +193 2 7.4984083612246133E+00 3.3828168122955855E+00 3.9904000141105569E+00 +194 1 8.1749683612246145E+00 3.8193668122955864E+00 3.4147100141105557E+00 +195 1 6.8737483612246129E+00 4.0983668122955859E+00 4.1438600141105573E+00 +196 2 1.4126718361224619E+01 1.5892816812295598E+01 1.4166950014110565E+01 +197 1 1.3539718361224617E+01 1.5189216812295596E+01 1.3845850014110566E+01 +198 1 1.4026418361224620E+01 1.6423616812295599E+01 1.3361150014110565E+01 +199 2 1.4372418361224620E+01 7.0926268122955891E+00 2.0220450014110572E+01 +200 1 1.4315818361224620E+01 6.0986968122955885E+00 2.0182150014110572E+01 +201 1 1.5239118361224619E+01 7.2175968122955894E+00 1.9768250014110574E+01 +202 2 1.5588318361224621E+01 2.2037616812295600E+01 1.5235750014110568E+01 +203 1 1.5829418361224620E+01 2.2941816812295606E+01 1.5099350014110568E+01 +204 1 1.4999218361224621E+01 2.2049116812295598E+01 1.5987150014110565E+01 +205 2 1.4421618361224619E+01 2.1336416812295599E+01 3.5083700141105565E+00 +206 1 1.4400318361224619E+01 2.1871716812295599E+01 4.3014500141105581E+00 +207 1 1.3664518361224617E+01 2.1559716812295605E+01 2.9277000141105560E+00 +208 2 9.1273183612246136E+00 1.5723216812295597E+01 1.5417350014110566E+01 +209 1 8.8226183612246150E+00 1.6523616812295600E+01 1.4958650014110566E+01 +210 1 1.0089618361224616E+01 1.5748616812295596E+01 1.5115450014110568E+01 +211 2 9.6441083612246139E+00 1.7782116812295598E+01 1.7539750014110567E+01 +212 1 9.3256883612246160E+00 1.7082316812295598E+01 1.6893750014110566E+01 +213 1 1.0581918361224616E+01 1.7599016812295595E+01 1.7467150014110565E+01 +214 2 7.1293383612246135E+00 9.3145968122955924E+00 7.9714000141105608E+00 +215 1 7.4179783612246135E+00 9.2406068122955904E+00 7.0637200141105598E+00 +216 1 6.3589583612246123E+00 9.9272468122955910E+00 8.0110800141105614E+00 +217 2 1.7449618361224623E+01 3.8352581229558308E-01 2.6529300141105554E+00 +218 1 1.7216018361224620E+01 7.3571681229558328E-01 3.4988700141105564E+00 +219 1 1.6795318361224624E+01 7.8186081229558335E-01 2.0029300141105550E+00 +220 2 2.7238683612246093E+00 1.3575516812295593E+01 9.1347500141105620E+00 +221 1 3.0097983612246093E+00 1.4302416812295595E+01 9.7420200141105617E+00 +222 1 2.2133483612246088E+00 1.2933116812295594E+01 9.6944700141105624E+00 +223 2 4.9860783612246111E+00 1.2665616812295593E+01 1.5609150014110568E+01 +224 1 4.9965483612246109E+00 1.1861316812295593E+01 1.6114350014110567E+01 +225 1 5.9271583612246124E+00 1.2606916812295593E+01 1.5351750014110568E+01 +226 2 1.1435483612246080E+00 1.3539068122955837E+00 7.7349200141105596E+00 +227 1 1.5793183612246082E+00 1.6381468122955842E+00 6.9259100141105590E+00 +228 1 4.3584436122460729E-01 7.9355981229558337E-01 7.3642800141105598E+00 +229 2 2.0810918361224626E+01 1.1051988122955836E+00 8.5077500141105595E+00 +230 1 2.0203618361224624E+01 1.8570068122955843E+00 8.6209600141105600E+00 +231 1 2.0219618361224619E+01 3.4726481229558298E-01 8.7549200141105601E+00 +232 2 6.5894683612246130E+00 1.1921716812295593E+01 4.0921200141105567E+00 +233 1 6.3531783612246127E+00 1.1335416812295593E+01 3.4139200141105559E+00 +234 1 7.1131683612246128E+00 1.2611116812295593E+01 3.5863600141105563E+00 +235 2 9.0237636122460774E-01 1.0768116812295593E+01 1.6422550014110570E+01 +236 1 1.4161883612246080E+00 1.0641416812295592E+01 1.7232550014110565E+01 +237 1 2.2616918361224624E+01 1.0771016812295592E+01 1.6694350014110569E+01 +238 2 8.2755683612246145E+00 1.8576368122955842E+00 1.6580950014110570E+01 +239 1 7.6744983612246136E+00 1.9758868122955846E+00 1.5821950014110568E+01 +240 1 9.2312783612246143E+00 1.6032768122955843E+00 1.6367750014110570E+01 +241 2 1.1704118361224616E+01 9.4753668122955919E+00 1.7018450014110570E+01 +242 1 1.2234418361224618E+01 9.6674568122955904E+00 1.7812650014110567E+01 +243 1 1.2171818361224618E+01 9.7638768122955923E+00 1.6142250014110566E+01 +244 2 2.0875418361224622E+01 7.6334468122955901E+00 1.7202250014110568E+01 +245 1 2.1311318361224629E+01 7.7807768122955903E+00 1.6383650014110565E+01 +246 1 2.0672118361224623E+01 6.6749568122955889E+00 1.7034250014110569E+01 +247 2 2.0937583612246087E+00 2.3730568122955851E+00 1.1627350014110563E+01 +248 1 2.2551183612246088E+00 1.6816668122955840E+00 1.0954050014110564E+01 +249 1 1.1885983612246080E+00 2.7517268122955856E+00 1.1554250014110563E+01 +250 2 7.2603583612246139E+00 4.2773768122955875E+00 8.8049500141105597E+00 +251 1 7.4533183612246132E+00 4.0471168122955863E+00 7.8469900141105597E+00 +252 1 6.7938183612246119E+00 5.1467568122955871E+00 8.7676000141105614E+00 +253 2 1.3927383612246080E+00 1.9629816812295598E+01 4.1623901411055370E-01 +254 1 2.0677783612246090E+00 1.9987416812295599E+01 2.2001250014110575E+01 +255 1 7.1310236122460757E-01 2.0389716812295600E+01 4.3255901411055364E-01 +256 2 1.5805183612246083E+00 1.5056116812295596E+01 1.8649450014110570E+01 +257 1 1.3038183612246081E+00 1.4243616812295594E+01 1.8143150014110567E+01 +258 1 2.5451183612246093E+00 1.4987816812295595E+01 1.8770950014110568E+01 +259 2 1.9252918361224623E+01 2.1857416812295604E+01 4.9588600141105577E+00 +260 1 2.0035018361224626E+01 2.2392516812295604E+01 5.2176700141105581E+00 +261 1 1.8564818361224628E+01 2.2523016812295602E+01 4.9610500141105573E+00 +262 2 9.5099883612246163E+00 6.7496568122955889E+00 1.3032950014110567E+01 +263 1 8.5549183612246136E+00 6.9968568122955883E+00 1.3139650014110567E+01 +264 1 9.4325783612246141E+00 5.9435868122955871E+00 1.2409150014110564E+01 +265 2 1.8775718361224619E+01 1.8512116812295595E+01 1.1178550014110563E+01 +266 1 1.9375018361224623E+01 1.7842316812295600E+01 1.0824850014110563E+01 +267 1 1.8301818361224623E+01 1.8175016812295599E+01 1.1968450014110564E+01 +268 2 2.0758818361224623E+01 1.6814216812295598E+01 9.5641100141105628E+00 +269 1 2.1492818361224625E+01 1.6432216812295600E+01 1.0074140014110561E+01 +270 1 2.0737418361224623E+01 1.6298516812295595E+01 8.7849400141105605E+00 +271 2 9.0843183612246161E+00 1.4295916812295594E+01 2.2017750014110572E+01 +272 1 9.8806483612246154E+00 1.4254216812295596E+01 2.1449850014110570E+01 +273 1 8.2492183612246137E+00 1.4102616812295595E+01 2.1457750014110569E+01 +274 2 1.6252683612246084E+00 2.2325916812295599E+01 1.0071610014110561E+01 +275 1 1.8163983612246084E+00 2.1904516812295604E+01 9.2056800141105608E+00 +276 1 2.1963983612246087E+00 2.3161816812295601E+01 1.0022530014110561E+01 +277 2 1.9690018361224627E+01 1.5367316812295597E+01 2.2023250014110573E+01 +278 1 1.9792918361224626E+01 1.6162216812295597E+01 3.6804301411055362E-01 +279 1 2.0360218361224621E+01 1.4874616812295598E+01 1.7995231411055346E-01 +280 2 2.0582018361224623E+01 1.2211516812295594E+01 2.0851150014110569E+01 +281 1 2.0381118361224626E+01 1.1261816812295594E+01 2.0826950014110572E+01 +282 1 2.0674818361224627E+01 1.2419816812295593E+01 2.1734650014110574E+01 +283 2 1.5688818361224621E+01 1.1403716812295594E+01 1.9054550014110571E+01 +284 1 1.6024118361224623E+01 1.0872816812295591E+01 1.8344950014110569E+01 +285 1 1.4931218361224621E+01 1.1950816812295594E+01 1.8644050014110572E+01 +286 2 1.0725583612246079E+00 6.3569368122955883E+00 3.0266401411055360E-01 +287 1 4.6673736122460735E-01 7.0986268122955893E+00 2.2192650014110576E+01 +288 1 1.9070783612246087E+00 6.8754168122955877E+00 3.7071301411055363E-01 +289 2 4.7548083612246117E+00 2.1465716812295604E+01 7.0663800141105595E+00 +290 1 4.3146783612246118E+00 2.1161816812295601E+01 6.2923200141105582E+00 +291 1 5.6301983612246120E+00 2.1084816812295603E+01 7.0544500141105599E+00 +292 2 1.3509118361224619E+01 4.8757368122955871E+00 1.6648950014110568E+01 +293 1 1.4180418361224620E+01 4.1934568122955866E+00 1.6293850014110568E+01 +294 1 1.3492318361224619E+01 4.7198868122955870E+00 1.7573650014110569E+01 +295 2 1.9289718361224622E+01 1.0733116812295593E+01 9.1081600141105614E+00 +296 1 1.9808118361224626E+01 1.0005626812295592E+01 9.5612800141105616E+00 +297 1 1.9248918361224618E+01 1.1572916812295592E+01 9.6944600141105628E+00 +298 2 2.1876818361224625E+01 3.9526081229558307E-01 1.0871450014110563E+01 +299 1 2.1553418361224626E+01 6.8666181229558332E-01 9.9923100141105614E+00 +300 1 2.2626618361224629E+01 2.3447416812295607E+01 1.0608250014110563E+01 +301 2 9.8606183612246152E+00 6.6352668122955887E+00 1.6612050014110565E+01 +302 1 9.5310983612246165E+00 7.5706868122955902E+00 1.6474650014110566E+01 +303 1 1.0524818361224618E+01 6.5101368122955892E+00 1.5946350014110568E+01 +304 2 1.2186518361224618E+01 1.3789916812295596E+01 8.7496700141105599E+00 +305 1 1.1890718361224618E+01 1.2891816812295593E+01 8.4995700141105619E+00 +306 1 1.1614018361224618E+01 1.4372516812295595E+01 8.2094300141105609E+00 +307 2 1.9512018361224623E+01 9.5948968122955911E+00 2.1519650014110574E+01 +308 1 1.8609418361224620E+01 9.2378768122955890E+00 2.1589650014110575E+01 +309 1 1.9834518361224628E+01 9.3800568122955905E+00 1.5962161411055339E-01 +310 2 1.8450418361224624E+01 1.3554216812295595E+01 1.4053150014110566E+01 +311 1 1.7896118361224623E+01 1.4209516812295595E+01 1.4480050014110565E+01 +312 1 1.9045218361224620E+01 1.4116116812295594E+01 1.3480350014110565E+01 +313 2 5.9608036122460750E-01 3.0962568122955854E+00 4.0104500141105568E+00 +314 1 5.0918536122460734E-01 2.6044668122955850E+00 3.1592400141105559E+00 +315 1 3.2660836122460718E-01 3.9779868122955859E+00 3.6244600141105563E+00 +316 2 1.6709218361224622E+01 7.5030268122955892E+00 1.9032650014110569E+01 +317 1 1.7344118361224623E+01 6.8040368122955890E+00 1.9414250014110568E+01 +318 1 1.7245318361224619E+01 8.3102568122955898E+00 1.8926950014110570E+01 +319 2 4.0470283612246103E+00 7.2508468122955891E+00 8.1440200141105610E+00 +320 1 3.6216883612246100E+00 6.4829968122955890E+00 8.5846100141105612E+00 +321 1 3.3669983612246099E+00 7.9566968122955890E+00 8.0139600141105607E+00 +322 2 1.1552318361224618E+01 2.2031116812295608E+01 4.7262300141105573E+00 +323 1 1.1247918361224617E+01 2.2941516812295600E+01 4.8992000141105576E+00 +324 1 1.0996918361224616E+01 2.1524116812295599E+01 5.3949600141105583E+00 +325 2 1.1565818361224618E+01 3.0461968122955856E+00 6.5562400141105588E+00 +326 1 1.1633318361224617E+01 2.1371568122955846E+00 6.8306200141105595E+00 +327 1 1.2214518361224616E+01 3.2326968122955853E+00 5.8648800141105584E+00 +328 2 1.9688783612246086E+00 3.2526968122955853E+00 1.6120850014110566E+01 +329 1 2.5916283612246094E+00 3.0423368122955852E+00 1.5306050014110566E+01 +330 1 1.4524983612246081E+00 2.3877468122955845E+00 1.6220950014110571E+01 +331 2 7.6774983612246137E+00 7.9097668122955902E+00 2.4107900141105549E+00 +332 1 7.4992283612246133E+00 6.9473868122955889E+00 2.2584400141105556E+00 +333 1 6.7466083612246122E+00 8.2655268122955903E+00 2.3244700141105552E+00 +334 2 1.2130318361224617E+01 1.7223616812295596E+01 1.5700650014110568E+01 +335 1 1.2407018361224617E+01 1.8112016812295600E+01 1.5365250014110568E+01 +336 1 1.2742518361224617E+01 1.6577616812295595E+01 1.5263350014110568E+01 +337 2 1.7728718361224622E+01 2.2896216812295606E+01 1.2365950014110563E+01 +338 1 1.7984818361224619E+01 2.2452816812295598E+01 1.3213050014110564E+01 +339 1 1.8595118361224621E+01 2.2969216812295606E+01 1.1892750014110565E+01 +340 2 1.5281918361224621E+01 1.6689116812295595E+01 3.5126800141105563E+00 +341 1 1.4492318361224619E+01 1.6669216812295595E+01 2.9194400141105561E+00 +342 1 1.5646618361224620E+01 1.7600516812295599E+01 3.6025000141105563E+00 +343 2 4.2794683612246107E+00 1.4200416812295595E+01 1.8525450014110568E+01 +344 1 4.8127283612246110E+00 1.4764216812295595E+01 1.7954950014110565E+01 +345 1 4.1127983612246108E+00 1.3370716812295594E+01 1.8049050014110570E+01 +346 2 1.8236918361224628E+01 4.0448668122955862E+00 1.2482750014110565E+01 +347 1 1.7464118361224621E+01 3.4157768122955861E+00 1.2577050014110563E+01 +348 1 1.8888418361224623E+01 3.9472868122955864E+00 1.3187850014110564E+01 +349 2 1.5210083612246084E+00 2.0760116812295603E+01 1.8568050014110568E+01 +350 1 9.3233636122460772E-01 2.1579116812295599E+01 1.8623250014110567E+01 +351 1 1.8655283612246085E+00 2.0705116812295607E+01 1.7674350014110569E+01 +352 2 9.6988983612246145E+00 2.3227116812295606E+01 2.1607600141105552E+00 +353 1 1.0575218361224616E+01 2.2801816812295606E+01 2.1157200141105550E+00 +354 1 9.6457883612246160E+00 5.8366581229558323E-01 2.5761700141105557E+00 +355 2 1.2286583612246080E+00 1.2357416812295593E+01 1.1163150014110563E+01 +356 1 1.9847783612246088E+00 1.2235016812295594E+01 1.1737750014110564E+01 +357 1 4.3310836122460727E-01 1.2623516812295593E+01 1.1706550014110563E+01 +358 2 5.7105283612246112E+00 5.5146568122955868E+00 7.4986001411055381E-01 +359 1 5.1383683612246109E+00 5.0091168122955869E+00 1.2348700141105544E+00 +360 1 5.9350183612246123E+00 5.1514468122955872E+00 2.2081450014110569E+01 +361 2 1.6902636122460707E-01 8.6971668122955901E+00 2.1557650014110568E+01 +362 1 3.4063136122460719E-01 8.7598168122955897E+00 2.0593550014110573E+01 +363 1 2.1925618361224629E+01 8.9990868122955909E+00 2.1607650014110572E+01 +364 2 8.6913636122460769E-01 8.8201268122955891E+00 5.4724900141105577E+00 +365 1 1.5336683612246083E+00 9.1958268122955911E+00 6.0289400141105585E+00 +366 1 7.1340936122460763E-01 9.3141568122955896E+00 4.6938600141105580E+00 +367 2 1.3454018361224618E+01 7.4528968122955890E+00 7.3303201411055385E-01 +368 1 1.4008018361224620E+01 8.1713668122955898E+00 1.1380300141105542E+00 +369 1 1.3948018361224619E+01 7.1647468122955891E+00 2.2144050014110572E+01 +370 2 1.4760018361224619E+01 2.6916281229558298E-01 9.0334400141105622E+00 +371 1 1.4965818361224621E+01 2.3011416812295604E+01 8.5814700141105611E+00 +372 1 1.5281218361224621E+01 1.0313128122955835E+00 8.7280900141105597E+00 +373 2 1.5996618361224622E+01 6.7192268122955880E+00 1.3612250014110566E+01 +374 1 1.6689418361224618E+01 6.1040868122955878E+00 1.3229850014110566E+01 +375 1 1.6289118361224624E+01 6.8069768122955878E+00 1.4580350014110566E+01 +376 2 1.3938518361224620E+01 7.1240868122955883E+00 7.8282900141105607E+00 +377 1 1.3458318361224620E+01 7.7448768122955887E+00 8.4299200141105608E+00 +378 1 1.4907218361224620E+01 7.2224168122955890E+00 7.9304800141105600E+00 +379 2 6.3733783612246127E+00 1.3909616812295596E+01 2.0698150014110571E+01 +380 1 6.1473783612246127E+00 1.3695216812295595E+01 1.9772050014110572E+01 +381 1 5.9173383612246120E+00 1.4826916812295595E+01 2.0753850014110572E+01 +382 2 9.5430283612246161E+00 8.4577568122955906E+00 2.0184450014110567E+01 +383 1 9.4536783612246165E+00 9.3522568122955914E+00 2.0526350014110573E+01 +384 1 1.0501918361224616E+01 8.3154368122955891E+00 2.0022150014110569E+01 +385 2 1.2160218361224615E+01 1.0407516812295592E+01 1.4318750014110567E+01 +386 1 1.2949918361224618E+01 1.0903916812295593E+01 1.4035950014110565E+01 +387 1 1.1935518361224618E+01 9.8213668122955919E+00 1.3578750014110566E+01 +388 2 2.0025918361224623E+01 1.5810416812295596E+01 1.7455050014110569E+01 +389 1 1.9661218361224623E+01 1.6625316812295594E+01 1.7836250014110572E+01 +390 1 1.9333318361224624E+01 1.5188516812295598E+01 1.7664150014110568E+01 +391 2 1.8051118361224628E+01 2.2063016812295597E+01 1.9074050014110572E+01 +392 1 1.8655718361224626E+01 2.2102816812295604E+01 1.9868250014110568E+01 +393 1 1.7144018361224628E+01 2.1891216812295600E+01 1.9420850014110574E+01 +394 2 3.0120983612246097E+00 2.1345416812295600E+01 2.0773650014110572E+01 +395 1 3.9162983612246101E+00 2.1439816812295600E+01 2.0437450014110571E+01 +396 1 2.4240183612246091E+00 2.1265716812295597E+01 2.0021050014110568E+01 +397 2 2.0624318361224628E+01 9.7298468122955910E+00 2.0169200141105552E+00 +398 1 1.9778418361224627E+01 1.0107856812295591E+01 2.4375500141105553E+00 +399 1 2.1336218361224628E+01 1.0252916812295592E+01 2.5367800141105556E+00 +400 2 2.0006018361224623E+01 6.9037568122955886E+00 1.5526600141105547E+00 +401 1 1.9805618361224628E+01 6.6414668122955893E+00 2.4620700141105556E+00 +402 1 2.0325318361224628E+01 7.8380068122955899E+00 1.4922600141105546E+00 +403 2 5.4018383612246117E+00 1.9474316812295598E+01 2.2200250014110569E+01 +404 1 5.0341983612246111E+00 1.8621916812295595E+01 1.6070811411055344E-01 +405 1 5.2441583612246125E+00 1.9687916812295601E+01 2.1292150014110572E+01 +406 2 1.6808618361224624E+01 9.9598268122955922E+00 1.6578350014110569E+01 +407 1 1.6452218361224624E+01 9.0927968122955907E+00 1.6176550014110568E+01 +408 1 1.6535318361224618E+01 1.0551116812295591E+01 1.5827350014110566E+01 +409 2 1.8737418361224623E+01 3.3791968122955858E+00 8.0368800141105616E+00 +410 1 1.9240818361224623E+01 3.6184668122955856E+00 7.1997000141105598E+00 +411 1 1.8951318361224622E+01 4.1148768122955861E+00 8.6361100141105602E+00 +412 2 1.0984518361224618E+01 3.3476268122955859E+00 1.9834550014110572E+01 +413 1 1.1261418361224617E+01 2.4906068122955851E+00 1.9667750014110570E+01 +414 1 1.0335618361224617E+01 3.6599468122955860E+00 1.9138750014110574E+01 +415 2 1.3486718361224620E+01 7.1281268122955890E+00 1.2548450014110564E+01 +416 1 1.3375118361224617E+01 6.2400668122955887E+00 1.2168050014110564E+01 +417 1 1.4278818361224618E+01 6.9285468122955889E+00 1.3044050014110566E+01 +418 2 4.1399383612246101E+00 1.3400216812295595E+01 6.6748000141105592E+00 +419 1 4.2258583612246108E+00 1.4213816812295594E+01 6.0988400141105590E+00 +420 1 3.7224483612246102E+00 1.3636116812295594E+01 7.5017100141105599E+00 +421 2 6.1604783612246123E+00 1.7802516812295600E+01 1.5614150014110566E+01 +422 1 6.1112883612246121E+00 1.8550316812295602E+01 1.6198250014110570E+01 +423 1 5.7070283612246122E+00 1.8167816812295602E+01 1.4813150014110565E+01 +424 2 4.9667683612246103E+00 2.1178116812295603E+01 9.9783900141105626E+00 +425 1 5.8989783612246125E+00 2.1439716812295607E+01 1.0207850014110562E+01 +426 1 4.7733183612246117E+00 2.1828716812295600E+01 9.2650800141105609E+00 +427 2 2.1486818361224628E+01 1.2449816812295593E+01 1.2441450014110563E+01 +428 1 2.1382418361224630E+01 1.2868516812295594E+01 1.3319050014110564E+01 +429 1 2.1533218361224623E+01 1.1465716812295591E+01 1.2567350014110565E+01 +430 2 9.6968683612246149E+00 2.2429716812295599E+01 9.3939100141105616E+00 +431 1 1.0564418361224616E+01 2.2921816812295599E+01 9.7174900141105613E+00 +432 1 9.8708783612246158E+00 2.1471716812295600E+01 9.4367700141105626E+00 +433 2 7.0573683612246132E+00 7.8768068122955901E+00 1.8640050014110571E+01 +434 1 7.9716983612246137E+00 7.8784468122955902E+00 1.9068550014110571E+01 +435 1 6.8567983612246124E+00 6.8707368122955881E+00 1.8636950014110568E+01 +436 2 1.0804918361224617E+01 1.5849616812295597E+01 8.1474200141105602E+00 +437 1 9.9178083612246137E+00 1.6041716812295597E+01 7.7177700141105596E+00 +438 1 1.1229218361224616E+01 1.6721716812295597E+01 8.1598100141105601E+00 +439 2 1.5967118361224621E+01 1.9108816812295593E+01 6.2691000141105597E+00 +440 1 1.6267618361224621E+01 1.8937416812295595E+01 5.3670100141105586E+00 +441 1 1.5101318361224619E+01 1.8671116812295594E+01 6.4161100141105587E+00 +442 2 9.0110183612246146E+00 9.6738812295582802E-02 2.1602450014110570E+01 +443 1 8.7336983612246133E+00 2.2789216812295603E+01 2.1450250014110569E+01 +444 1 9.1353583612246148E+00 7.4132012295582778E-02 3.5428501411055363E-01 +445 2 1.1627418361224615E+01 1.4821516812295595E+01 4.6037900141105572E+00 +446 1 1.2437218361224618E+01 1.5201916812295595E+01 5.1070800141105579E+00 +447 1 1.1999518361224618E+01 1.4381616812295595E+01 3.8450600141105569E+00 +448 2 2.1504318361224623E+01 2.9446768122955853E+00 1.7629450014110571E+01 +449 1 2.1341518361224630E+01 2.5326668122955849E+00 1.8501950014110573E+01 +450 1 2.2183818361224631E+01 3.6079568122955856E+00 1.7822250014110566E+01 +451 2 5.9414783612246120E+00 7.2850781229558337E-01 6.4519900141105584E+00 +452 1 6.6209283612246121E+00 7.2068381229558331E-01 5.7444200141105588E+00 +453 1 5.6007183612246125E+00 2.3454516812295598E+01 6.5296500141105582E+00 +454 2 2.1185418361224624E+01 1.9734616812295599E+01 8.2853600141105606E+00 +455 1 2.1272318361224624E+01 1.8804616812295599E+01 8.4246300141105603E+00 +456 1 2.1763918361224626E+01 1.9804516812295596E+01 7.5059200141105595E+00 +457 2 2.0132718361224622E+01 1.9211216812295596E+01 1.5411950014110566E+01 +458 1 2.0127818361224623E+01 1.9434116812295603E+01 1.6377750014110568E+01 +459 1 2.0202918361224619E+01 1.8217216812295597E+01 1.5455650014110567E+01 +460 2 1.0566018361224616E+01 2.2302416812295601E+01 1.5841350014110565E+01 +461 1 1.0019628361224616E+01 2.2817316812295598E+01 1.6479950014110571E+01 +462 1 1.0078978361224616E+01 2.1478416812295603E+01 1.5676450014110568E+01 +463 2 1.7630518361224624E+01 5.3009781229558317E-01 5.8523400141105588E+00 +464 1 1.7373118361224620E+01 1.4591068122955841E+00 6.0723000141105583E+00 +465 1 1.6882118361224620E+01 2.3533916812295598E+01 6.1115000141105584E+00 +466 2 1.8487218361224620E+01 1.3215416812295594E+01 7.3134000141105595E+00 +467 1 1.8309318361224623E+01 1.3057816812295593E+01 8.2898500141105611E+00 +468 1 1.7704918361224621E+01 1.3598616812295596E+01 6.9310500141105598E+00 +469 2 1.4781718361224620E+01 1.3829716812295596E+01 7.6721300141105608E+00 +470 1 1.3884518361224620E+01 1.3814216812295593E+01 8.0509100141105598E+00 +471 1 1.5422718361224620E+01 1.3411216812295596E+01 8.2784100141105608E+00 +472 2 1.7536618361224619E+01 1.8757616812295595E+01 3.8240500141105565E+00 +473 1 1.7526218361224622E+01 1.9719116812295599E+01 3.6717500141105566E+00 +474 1 1.7939718361224621E+01 1.8506216812295602E+01 4.6869200141105569E+00 +475 2 1.6499283612246083E+00 1.5922616812295598E+01 1.2556450014110563E+01 +476 1 1.4605983612246083E+00 1.5892216812295597E+01 1.3488050014110566E+01 +477 1 1.7367083612246084E+00 1.6854216812295597E+01 1.2297050014110564E+01 +478 2 8.5479383612246149E+00 1.7069216812295593E+01 6.6048200141105582E+00 +479 1 9.1172583612246161E+00 1.7389716812295596E+01 5.8334600141105586E+00 +480 1 8.0002083612246153E+00 1.6273316812295597E+01 6.3223600141105596E+00 +481 2 1.8300218361224623E+01 5.4397168122955870E+00 1.9669150014110571E+01 +482 1 1.8588418361224619E+01 5.0788468122955868E+00 1.8796550014110569E+01 +483 1 1.9167418361224620E+01 5.5363368122955876E+00 2.0168550014110568E+01 +484 2 9.6411583612246154E+00 1.9548316812295599E+01 9.1323900141105607E+00 +485 1 8.7657383612246136E+00 1.9418716812295603E+01 8.6627500141105607E+00 +486 1 1.0212118361224617E+01 1.9305216812295598E+01 8.4322600141105610E+00 +487 2 1.7252718361224627E+01 2.9657868122955855E+00 2.1072250014110569E+01 +488 1 1.7114218361224623E+01 3.3986168122955855E+00 2.1924450014110572E+01 +489 1 1.7486918361224628E+01 3.8158168122955858E+00 2.0536350014110571E+01 +490 2 1.3509618361224620E+01 4.2382668122955867E+00 8.5228200141105610E+00 +491 1 1.2871018361224618E+01 3.7328468122955858E+00 8.0116300141105601E+00 +492 1 1.3551218361224617E+01 5.1304868122955876E+00 8.2299600141105600E+00 +493 2 3.7165083612246099E+00 1.1043216812295592E+01 1.8106350014110568E+01 +494 1 3.3814183612246098E+00 1.0634016812295592E+01 1.8946450014110567E+01 +495 1 4.3546383612246116E+00 1.0460016812295592E+01 1.7688950014110571E+01 +496 2 1.9337518361224625E+01 1.3009316812295593E+01 1.0465850014110563E+01 +497 1 1.8363918361224620E+01 1.3170216812295594E+01 1.0699650014110563E+01 +498 1 1.9930418361224621E+01 1.2794116812295593E+01 1.1218450014110564E+01 +499 2 1.6762418361224618E+01 2.0973416812295600E+01 3.5264301411055360E-01 +500 1 1.7173618361224619E+01 2.0111516812295601E+01 4.6120514110553332E-02 +501 1 1.6779018361224622E+01 2.0989816812295597E+01 1.3258900141105545E+00 +502 2 1.1931818361224618E+01 1.4381416812295596E+01 2.0707350014110570E+01 +503 1 1.2349318361224617E+01 1.4804916812295595E+01 1.9910850014110569E+01 +504 1 1.2073118361224617E+01 1.3449616812295593E+01 2.0569950014110571E+01 +505 2 1.9313818361224619E+01 2.1998916812295601E+01 2.1621950014110574E+01 +506 1 1.8558218361224618E+01 2.1692916812295604E+01 2.2158750014110570E+01 +507 1 2.0141018361224628E+01 2.2013716812295602E+01 2.2183250014110577E+01 +508 2 4.8118283612246113E+00 1.6027216812295599E+01 5.1367500141105573E+00 +509 1 4.7114183612246112E+00 1.6680516812295600E+01 5.8867900141105585E+00 +510 1 5.6999883612246123E+00 1.5655316812295595E+01 5.3399400141105575E+00 +511 2 3.0168783612246095E+00 4.2171668122955861E+00 1.7722100141105546E+00 +512 1 3.6195383612246101E+00 4.2962768122955861E+00 2.5523000141105556E+00 +513 1 2.3344183612246088E+00 4.8954268122955868E+00 1.8625700141105548E+00 +514 2 2.7633736122460723E-01 1.0676716812295593E+01 3.5942400141105564E+00 +515 1 1.0712683612246081E+00 1.0960316812295593E+01 3.1070800141105561E+00 +516 1 1.0373826122460703E-01 1.1435316812295593E+01 4.1642300141105570E+00 +517 2 9.1994883612246134E+00 4.0727868122955861E+00 1.1368050014110562E+01 +518 1 8.7127183612246135E+00 4.2128868122955865E+00 1.0525150014110562E+01 +519 1 8.6573983612246135E+00 3.3873568122955855E+00 1.1823150014110562E+01 +520 2 2.0263418361224623E+01 2.1143416812295602E+01 1.1035650014110564E+01 +521 1 1.9921318361224625E+01 2.0267016812295598E+01 1.0719350014110562E+01 +522 1 2.1204718361224629E+01 2.1089116812295604E+01 1.0955550014110562E+01 +523 2 1.1007218361224616E+01 1.3591268122955837E+00 1.5968850014110565E+01 +524 1 1.1211018361224616E+01 6.5994881229558333E-01 1.5295150014110568E+01 +525 1 1.1753218361224615E+01 1.3373368122955840E+00 1.6625250014110570E+01 +526 2 1.6449818361224622E+01 1.2905916812295594E+01 3.6495200141105570E+00 +527 1 1.6082418361224619E+01 1.2483716812295594E+01 4.4336400141105576E+00 +528 1 1.5806618361224618E+01 1.2963816812295594E+01 2.8968400141105559E+00 +529 2 2.2074518361224623E+01 2.0854516812295607E+01 1.4183150014110566E+01 +530 1 2.2370418361224626E+01 2.0606616812295602E+01 1.3236150014110565E+01 +531 1 2.1440218361224627E+01 2.0205616812295599E+01 1.4456050014110566E+01 +532 2 1.4895818361224620E+01 1.2429616812295594E+01 1.3207400141105543E+00 +533 1 1.4688418361224619E+01 1.1509816812295593E+01 1.6770700141105546E+00 +534 1 1.5765818361224619E+01 1.2279316812295594E+01 8.8910301411055404E-01 +535 2 1.9407218361224626E+01 1.3763168122955840E+00 2.2218750014110576E+01 +536 1 1.8759418361224622E+01 2.1012168122955845E+00 4.1577314110553328E-02 +537 1 1.9006318361224622E+01 4.6337681229558308E-01 2.2161650014110574E+01 +538 2 3.1159183612246095E+00 1.0503216812295593E+01 3.7342600141105562E+00 +539 1 3.5257783612246101E+00 1.0603616812295591E+01 4.5978500141105565E+00 +540 1 3.0560883612246097E+00 1.1428916812295594E+01 3.4365700141105564E+00 +541 2 1.9692018361224619E+01 5.1407868122955884E+00 1.6997250014110573E+01 +542 1 2.0186318361224625E+01 4.2853168122955863E+00 1.7210250014110574E+01 +543 1 1.8891118361224624E+01 4.7808468122955858E+00 1.6618950014110567E+01 +544 2 2.1602118361224623E+01 1.4555668122955838E+00 2.0066750014110571E+01 +545 1 2.2463518361224629E+01 1.6138468122955842E+00 2.0492150014110575E+01 +546 1 2.0840918361224627E+01 1.6176868122955841E+00 2.0669850014110569E+01 +547 2 7.3226583612246134E+00 1.9934716812295601E+01 7.4756100141105595E+00 +548 1 7.9283583612246131E+00 2.0344416812295602E+01 6.8527200141105586E+00 +549 1 7.2070483612246132E+00 1.9070116812295595E+01 7.2305400141105594E+00 +550 2 3.9547983612246100E+00 1.1847716812295593E+01 1.2663250014110565E+01 +551 1 4.4899783612246118E+00 1.1062416812295591E+01 1.3033650014110563E+01 +552 1 4.2127683612246107E+00 1.2490616812295594E+01 1.3347950014110566E+01 +553 2 8.1293783612246138E+00 9.4570168122955920E+00 5.2861500141105573E+00 +554 1 7.6605083612246139E+00 1.0236216812295591E+01 5.0121200141105575E+00 +555 1 7.9363683612246136E+00 8.7722168122955910E+00 4.5964500141105571E+00 +556 2 9.3475483612246162E+00 2.1280216812295603E+01 6.2993900141105597E+00 +557 1 9.5035083612246147E+00 2.1868316812295600E+01 7.0895100141105596E+00 +558 1 8.8697783612246148E+00 2.1923516812295603E+01 5.6055700141105582E+00 +559 2 1.7983818361224621E+01 1.4849916812295595E+01 4.9301300141105573E+00 +560 1 1.7204518361224622E+01 1.4659516812295594E+01 4.3545100141105575E+00 +561 1 1.7659818361224623E+01 1.5665516812295596E+01 5.4217000141105576E+00 +562 2 9.6836561224607015E-02 1.5075216812295597E+01 2.0962750014110576E+01 +563 1 6.8562536122460760E-01 1.4955116812295596E+01 2.0225550014110571E+01 +564 1 2.2019518361224623E+01 1.5532816812295597E+01 2.0594650014110574E+01 +565 2 1.6342518361224620E+01 1.5432016812295597E+01 1.0873150014110564E+01 +566 1 1.7127118361224618E+01 1.5478216812295596E+01 1.1505850014110564E+01 +567 1 1.5569918361224619E+01 1.5972316812295597E+01 1.1191450014110561E+01 +568 2 1.6951918361224624E+01 6.0532268122955877E+00 5.5473500141105578E+00 +569 1 1.6151518361224625E+01 6.1052968122955882E+00 4.9436200141105564E+00 +570 1 1.7749718361224623E+01 6.2910268122955877E+00 5.0466100141105574E+00 +571 2 2.1836118361224624E+01 1.3553116812295595E+01 1.0449310141105541E+00 +572 1 2.2123218361224630E+01 1.3254016812295594E+01 1.8775300141105549E+00 +573 1 2.2417418361224623E+01 1.4109316812295594E+01 5.5758201411055375E-01 +574 2 8.4074136122460763E-01 6.1482668122955877E+00 2.9828400141105558E+00 +575 1 5.1720036122460744E-01 6.3728168122955884E+00 2.0990600141105551E+00 +576 1 4.8378436122460733E-01 6.7351768122955882E+00 3.6881100141105563E+00 +577 2 1.2418218361224618E+01 1.3616416812295595E+01 2.4339600141105553E+00 +578 1 1.3224418361224620E+01 1.3621516812295594E+01 1.9017600141105551E+00 +579 1 1.1971418361224618E+01 1.2767616812295595E+01 2.2269100141105551E+00 +580 2 1.7797118361224623E+01 8.1219568122955899E+00 1.1360950014110564E+01 +581 1 1.8396118361224623E+01 7.3622368122955892E+00 1.1442350014110563E+01 +582 1 1.7152218361224620E+01 8.0405268122955889E+00 1.2006350014110565E+01 +583 2 8.8939083612246144E+00 2.3108716812295601E+01 1.8181650014110566E+01 +584 1 9.2305583612246167E+00 2.3316416812295607E+01 1.9080550014110568E+01 +585 1 8.4347783612246143E+00 2.3124881229558295E-01 1.7772650014110567E+01 +586 2 1.5396018361224620E+01 1.3244268122955838E+00 5.1743401411055379E-01 +587 1 1.4653018361224619E+01 1.9680468122955843E+00 6.9262601411055380E-01 +588 1 1.5532018361224621E+01 1.7464868122955843E+00 2.1842250014110572E+01 +589 2 1.3294418361224619E+01 1.9828716812295600E+01 1.4370950014110566E+01 +590 1 1.3322318361224617E+01 2.0573116812295599E+01 1.4994650014110565E+01 +591 1 1.4224718361224619E+01 1.9664216812295603E+01 1.3987250014110566E+01 +592 2 1.4256818361224619E+01 4.6850068122955859E+00 1.1203250014110564E+01 +593 1 1.4016218361224619E+01 4.5584368122955867E+00 1.0245650014110563E+01 +594 1 1.4053918361224619E+01 3.9259368122955864E+00 1.1760150014110565E+01 +595 2 1.3999318361224617E+01 1.6148616812295600E+01 6.1724300141105584E+00 +596 1 1.4407918361224619E+01 1.5335316812295597E+01 6.4938100141105588E+00 +597 1 1.4547818361224621E+01 1.6217216812295597E+01 5.3465500141105577E+00 +598 2 6.2701183612246121E+00 1.8580268122955843E+00 1.4993850014110567E+01 +599 1 6.7382683612246126E+00 2.1158368122955844E+00 1.4195450014110566E+01 +600 1 6.4212983612246122E+00 8.0371781229558348E-01 1.4948350014110568E+01 +601 2 5.0636283612246116E+00 6.9233968122955893E+00 5.4102500141105576E+00 +602 1 4.6672883612246112E+00 7.2741768122955888E+00 6.2332700141105590E+00 +603 1 4.4853583612246108E+00 7.2936368122955892E+00 4.6888200141105578E+00 +604 2 1.3806418361224619E+01 2.0406768122955845E+00 1.3072150014110566E+01 +605 1 1.2988118361224620E+01 1.7322068122955840E+00 1.2623650014110565E+01 +606 1 1.4615718361224621E+01 1.7489368122955842E+00 1.2542650014110563E+01 +607 2 1.3843018361224619E+01 3.9814368122955863E+00 4.6247200141105571E+00 +608 1 1.4526818361224619E+01 3.4392068122955854E+00 4.9166200141105580E+00 +609 1 1.3853818361224619E+01 3.9579668122955862E+00 3.6463900141105570E+00 +610 2 9.4309083612246134E+00 1.3427316812295595E+01 5.1648900141105578E+00 +611 1 1.0247318361224616E+01 1.4005616812295596E+01 5.1406700141105581E+00 +612 1 9.3575083612246157E+00 1.3384116812295595E+01 4.2070800141105567E+00 +613 2 1.0562718361224615E+01 6.7748668122955884E+00 4.3452500141105572E+00 +614 1 1.0946418361224618E+01 7.5677368122955890E+00 4.0347300141105569E+00 +615 1 1.0484318361224616E+01 6.8870868122955891E+00 5.2654700141105577E+00 +616 2 3.2897283612246095E+00 2.8341368122955855E+00 5.6201600141105583E+00 +617 1 3.9257683612246104E+00 2.1488168122955851E+00 5.6116300141105580E+00 +618 1 2.5742283612246091E+00 2.5372068122955849E+00 5.0057300141105578E+00 +619 2 1.2820218361224617E+01 2.1842316812295604E+01 9.5506601411055403E-01 +620 1 1.3808618361224617E+01 2.1739316812295602E+01 6.9112901411055383E-01 +621 1 1.2307218361224617E+01 2.0939316812295598E+01 8.0405301411055397E-01 +622 2 1.1302618361224617E+01 8.5081868122955893E+00 2.1612200141105551E+00 +623 1 1.0551618361224616E+01 7.9513068122955897E+00 1.8471100141105550E+00 +624 1 1.2086818361224617E+01 8.3030068122955907E+00 1.5894400141105547E+00 +625 2 1.3064318361224618E+01 9.7817168122955920E+00 1.9603050014110568E+01 +626 1 1.4016218361224619E+01 1.0101066812295592E+01 1.9784350014110565E+01 +627 1 1.3103218361224620E+01 8.7856768122955895E+00 1.9541550014110573E+01 +628 2 2.1159818361224630E+01 1.6396216812295599E+01 1.5054750014110565E+01 +629 1 2.0573718361224628E+01 1.6344316812295595E+01 1.5842950014110565E+01 +630 1 2.2067718361224628E+01 1.6574816812295595E+01 1.5292350014110566E+01 +631 2 1.3879318361224620E+01 4.8421968122955867E+00 1.8640600141105548E+00 +632 1 1.3469718361224617E+01 4.2868668122955862E+00 1.1226700141105541E+00 +633 1 1.3694518361224619E+01 5.7738868122955882E+00 1.5846200141105546E+00 +634 2 1.4947018361224620E+01 2.7098168122955855E+00 1.5532050014110565E+01 +635 1 1.5934218361224621E+01 2.8021868122955849E+00 1.5440750014110566E+01 +636 1 1.4677718361224619E+01 2.7345868122955848E+00 1.4610250014110566E+01 +637 2 2.0729818361224627E+01 5.7312368122955872E+00 2.1185650014110568E+01 +638 1 2.0630218361224625E+01 5.9060168122955874E+00 2.2128750014110572E+01 +639 1 2.1585318361224626E+01 5.3040468122955877E+00 2.0998350014110574E+01 +640 2 5.6033083612246122E+00 2.1860416812295600E+01 1.9937450014110571E+01 +641 1 5.7436183612246126E+00 2.2266616812295599E+01 1.9066350014110569E+01 +642 1 6.4010583612246119E+00 2.1500316812295601E+01 2.0373250014110571E+01 +643 2 2.0179418361224624E+01 2.0852916812295600E+01 1.7821650014110570E+01 +644 1 2.0858718361224621E+01 2.1513716812295606E+01 1.7852550014110570E+01 +645 1 1.9363318361224625E+01 2.1218016812295598E+01 1.8319950014110571E+01 +646 2 1.2740018361224617E+01 2.4392468122955848E+00 7.3348101411055400E-01 +647 1 1.2380118361224618E+01 1.9173868122955846E+00 2.2193350014110568E+01 +648 1 1.2131918361224617E+01 2.2979968122955845E+00 1.5109500141105545E+00 +649 2 1.8538983612246085E+00 2.3240416812295603E+01 1.3249450014110565E+01 +650 1 9.9075536122460772E-01 4.8385112295582761E-02 1.2954450014110565E+01 +651 1 1.5242983612246084E+00 2.2450416812295604E+01 1.3624150014110564E+01 +652 2 1.9402283612246085E+00 1.3091216812295594E+01 1.6099150014110567E+01 +653 1 1.7522183612246085E+00 1.2100916812295594E+01 1.5990650014110567E+01 +654 1 2.8148183612246092E+00 1.3257816812295593E+01 1.5762050014110565E+01 +655 2 1.8906418361224627E+01 5.6939868122955879E+00 1.0209650014110562E+01 +656 1 1.8658518361224623E+01 4.9537468122955870E+00 1.0828250014110564E+01 +657 1 1.8126218361224627E+01 5.9810968122955881E+00 9.6716600141105609E+00 +658 2 2.0730418361224629E+01 2.0111816812295594E+01 3.0276000141105559E+00 +659 1 2.0083418361224627E+01 2.0718416812295597E+01 3.5772300141105564E+00 +660 1 2.0308118361224626E+01 1.9248316812295602E+01 2.9605200141105561E+00 +661 2 6.7800283612246126E+00 1.9581868122955843E+00 1.2529200141105543E+00 +662 1 6.6681183612246135E+00 1.9993368122955846E+00 2.2166600141105555E+00 +663 1 7.4722083612246140E+00 2.5849268122955849E+00 8.9707101411055412E-01 +664 2 2.3540083612246088E+00 1.8082316812295598E+01 1.9283350014110571E+01 +665 1 2.4751683612246094E+00 1.8959016812295598E+01 1.9614250014110571E+01 +666 1 2.5936883612246091E+00 1.7471616812295593E+01 2.0038650014110569E+01 +667 2 3.1560583612246100E+00 1.9210816812295601E+01 8.7267100141105605E+00 +668 1 2.3874383612246088E+00 1.9584616812295604E+01 8.2639400141105597E+00 +669 1 3.8515983612246103E+00 1.9868216812295600E+01 8.7027900141105619E+00 +670 2 7.7807483612246138E+00 4.9313968122955876E+00 1.5174650014110567E+01 +671 1 8.4770983612246145E+00 4.3107868122955866E+00 1.4986250014110565E+01 +672 1 8.0583083612246149E+00 5.7556468122955877E+00 1.4779050014110565E+01 +673 2 1.9177718361224620E+01 2.2875416812295605E+01 9.3490100141105614E+00 +674 1 1.9592518361224624E+01 2.2209116812295601E+01 9.9987800141105616E+00 +675 1 1.8679418361224620E+01 2.2283216812295603E+01 8.7353900141105605E+00 +676 2 1.8012018361224619E+01 1.8154616812295600E+01 1.8383350014110569E+01 +677 1 1.7922118361224619E+01 1.7591716812295594E+01 1.9166150014110574E+01 +678 1 1.8400518361224620E+01 1.8974616812295597E+01 1.8716850014110573E+01 +679 2 2.7366683612246092E+00 7.3820868122955892E+00 1.4720150014110565E+01 +680 1 2.5492483612246093E+00 7.2696668122955890E+00 1.5722350014110566E+01 +681 1 1.8582683612246085E+00 7.2180568122955888E+00 1.4390450014110565E+01 +682 2 1.6942818361224624E+01 2.1371016812295597E+01 2.8358300141105555E+00 +683 1 1.7240118361224624E+01 2.2373816812295601E+01 2.8742300141105557E+00 +684 1 1.6027218361224620E+01 2.1363416812295604E+01 3.1069800141105559E+00 +685 2 9.1179583612246144E+00 6.2138168122955877E+00 2.2219750014110573E+01 +686 1 8.3846483612246132E+00 5.9380568122955877E+00 2.1536650014110574E+01 +687 1 9.5800483612246161E+00 6.8463868122955889E+00 2.1669550014110573E+01 +688 2 5.4860483612246123E+00 8.9824068122955900E+00 1.6397250014110568E+01 +689 1 4.8388683612246117E+00 8.3071768122955891E+00 1.6753150014110567E+01 +690 1 6.3129783612246122E+00 8.7215068122955923E+00 1.6837250014110566E+01 +691 2 1.9397518361224623E+01 6.4039668122955877E+00 4.1723200141105572E+00 +692 1 1.9833118361224624E+01 5.6290968122955869E+00 4.5721100141105575E+00 +693 1 1.9909118361224625E+01 7.1074668122955886E+00 4.6817100141105579E+00 +694 2 2.2149918361224625E+01 1.5137616812295596E+01 1.1073650014110564E+01 +695 1 2.1644718361224626E+01 1.4414316812295596E+01 1.1388550014110562E+01 +696 1 3.3839636122460720E-01 1.5094216812295596E+01 1.1602450014110564E+01 +697 2 6.7006983612246129E+00 1.7846516812295597E+01 1.9423350014110571E+01 +698 1 6.7740883612246128E+00 1.7086616812295595E+01 1.8821150014110565E+01 +699 1 7.5541583612246130E+00 1.7899016812295599E+01 1.9838150014110571E+01 +700 2 1.2971418361224620E+01 1.3561316812295594E+01 1.3508050014110564E+01 +701 1 1.2196618361224617E+01 1.3371616812295594E+01 1.4061450014110566E+01 +702 1 1.2505018361224618E+01 1.4103916812295596E+01 1.2745850014110564E+01 +703 2 4.7960083612246116E+00 5.7432768122955871E+00 1.3801750014110564E+01 +704 1 3.9892083612246103E+00 6.2086268122955879E+00 1.4170750014110565E+01 +705 1 5.3519383612246116E+00 5.4034268122955869E+00 1.4557650014110566E+01 +706 2 2.2336418361224631E+01 2.2801916812295602E+01 1.8451050014110571E+01 +707 1 2.2630218361224625E+01 2.3325116812295601E+01 1.7639550014110569E+01 +708 1 2.1978618361224623E+01 2.3427216812295605E+01 1.9110550014110565E+01 +709 2 2.0573218361224622E+01 1.4971016812295595E+01 4.3811100141105577E+00 +710 1 1.9643418361224622E+01 1.4730216812295595E+01 4.5453500141105572E+00 +711 1 2.0937618361224626E+01 1.4057916812295595E+01 4.2688900141105570E+00 +712 2 7.7804483612246145E+00 1.3035216812295593E+01 1.4300350014110565E+01 +713 1 8.1008183612246150E+00 1.3944516812295594E+01 1.4331350014110566E+01 +714 1 8.4620383612246144E+00 1.2628716812295593E+01 1.4867950014110567E+01 +715 2 1.0622918361224615E+01 1.0599816812295591E+01 5.5017600141105580E+00 +716 1 9.7272483612246159E+00 1.0126416812295592E+01 5.3859600141105579E+00 +717 1 1.0419418361224615E+01 1.1555016812295591E+01 5.4937200141105587E+00 +718 2 2.2674218361224622E+01 7.9755568122955900E+00 1.5187350014110566E+01 +719 1 4.0453536122460731E-01 8.8244968122955925E+00 1.5574650014110567E+01 +720 1 2.2362018361224624E+01 8.3706068122955894E+00 1.4341350014110564E+01 +721 2 1.8493518361224623E+01 2.1616416812295601E+01 1.4710250014110565E+01 +722 1 1.8843618361224621E+01 2.0710916812295597E+01 1.4603650014110565E+01 +723 1 1.7634018361224619E+01 2.1576616812295605E+01 1.5137250014110565E+01 +724 2 1.1378418361224618E+01 1.4445116812295595E+01 1.1403250014110563E+01 +725 1 1.0995318361224616E+01 1.5305216812295598E+01 1.1198250014110561E+01 +726 1 1.1720018361224618E+01 1.4047516812295596E+01 1.0555650014110562E+01 +727 2 6.3533183612246136E+00 6.9787868122955885E+00 9.8536300141105624E+00 +728 1 6.7505583612246118E+00 7.7080468122955885E+00 9.3304300141105596E+00 +729 1 5.4737783612246123E+00 6.9120368122955878E+00 9.4394800141105630E+00 +730 2 1.5737818361224621E+01 2.2047816812295601E+01 6.4073100141105588E+00 +731 1 1.4775218361224619E+01 2.1950116812295601E+01 6.8043800141105590E+00 +732 1 1.5981718361224621E+01 2.1102316812295602E+01 6.4195600141105595E+00 +733 2 2.1908218361224623E+01 3.1963968122955855E+00 1.1819950014110562E+01 +734 1 2.1958618361224627E+01 2.3112868122955850E+00 1.1382550014110564E+01 +735 1 2.2134518361224629E+01 3.8718968122955864E+00 1.1119850014110563E+01 +736 2 8.6119383612246132E+00 1.0139616812295591E+01 1.4826850014110565E+01 +737 1 7.7579283612246144E+00 1.0276216812295592E+01 1.4258250014110565E+01 +738 1 9.2724783612246160E+00 9.8187868122955919E+00 1.4195350014110566E+01 +739 2 1.1345118361224618E+01 1.1297916812295593E+01 8.1698500141105601E+00 +740 1 1.0600818361224615E+01 1.1038116812295593E+01 8.8206100141105601E+00 +741 1 1.0895318361224616E+01 1.1056516812295593E+01 7.3332000141105596E+00 +742 2 1.6404218361224622E+01 1.2816116812295595E+01 9.8149700141105622E+00 +743 1 1.6384718361224621E+01 1.3680716812295595E+01 1.0229050014110562E+01 +744 1 1.5882618361224621E+01 1.2241916812295594E+01 1.0424350014110562E+01 +745 2 7.0450583612246129E+00 4.5583868122955860E+00 2.0630050014110569E+01 +746 1 6.7311483612246121E+00 3.8493468122955856E+00 2.0041050014110571E+01 +747 1 7.8719283612246134E+00 4.1726668122955859E+00 2.0972550014110571E+01 +748 2 4.5216936122460732E-01 5.2293868122955871E+00 1.7943850014110570E+01 +749 1 1.3595683612246081E+00 5.1362568122955867E+00 1.7567550014110566E+01 +750 1 6.2522236122460750E-01 5.0603668122955874E+00 1.8910650014110566E+01 +751 2 5.8833983612246126E+00 2.2704616812295601E+01 1.7222950014110570E+01 +752 1 6.6531783612246134E+00 2.2887316812295598E+01 1.6598150014110566E+01 +753 1 5.1237883612246113E+00 2.2770416812295597E+01 1.6648350014110569E+01 +754 2 3.7333083612246099E+00 1.4932116812295597E+01 1.1034650014110563E+01 +755 1 4.5010083612246108E+00 1.5522216812295595E+01 1.0780950014110562E+01 +756 1 3.0122283612246097E+00 1.5275216812295595E+01 1.1539250014110564E+01 +757 2 4.8142083612246109E+00 1.7312616812295595E+01 7.6168500141105593E+00 +758 1 5.6746983612246114E+00 1.7043716812295600E+01 7.9740100141105605E+00 +759 1 4.2047983612246105E+00 1.7741816812295596E+01 8.2626200141105599E+00 +760 2 2.0873783612246086E+00 1.9135116812295603E+01 3.2233100141105564E+00 +761 1 1.9561483612246084E+00 1.9499116812295600E+01 2.2827400141105554E+00 +762 1 1.2347883612246080E+00 1.8596416812295598E+01 3.3088800141105561E+00 +763 2 1.4911918361224622E+01 1.9709868122955843E+00 1.9684550014110574E+01 +764 1 1.5687618361224621E+01 1.7298868122955844E+00 1.9127750014110571E+01 +765 1 1.4141418361224618E+01 1.5762868122955840E+00 1.9072150014110573E+01 +766 2 3.3485683612246100E+00 7.6905068122955891E+00 2.9143900141105559E+00 +767 1 3.1750683612246098E+00 8.6999368122955900E+00 3.1419300141105562E+00 +768 1 2.4588583612246087E+00 7.2293568122955891E+00 3.0353300141105559E+00 +769 2 1.5376218361224620E+01 7.2208068122955886E+00 1.6409350014110565E+01 +770 1 1.5698618361224622E+01 7.3093368122955891E+00 1.7329150014110567E+01 +771 1 1.4617018361224620E+01 6.5961168122955893E+00 1.6369550014110565E+01 +772 2 1.2057918361224617E+01 1.8745516812295602E+01 7.1432100141105588E+00 +773 1 1.2982318361224618E+01 1.8671616812295600E+01 7.4512500141105598E+00 +774 1 1.2137018361224618E+01 1.8506416812295601E+01 6.1578800141105585E+00 +775 2 8.4451783612246132E+00 1.1127316812295591E+01 2.0240650014110575E+01 +776 1 7.5919783612246130E+00 1.1108516812295592E+01 2.0757250014110571E+01 +777 1 8.3318483612246137E+00 1.0743616812295592E+01 1.9332450014110574E+01 +778 2 8.8588083612246145E+00 1.8392716812295600E+01 2.1852750014110576E+01 +779 1 9.6183883612246159E+00 1.8649216812295599E+01 1.6906151411055342E-01 +780 1 8.1750083612246147E+00 1.8151316812295601E+01 2.4326601411055351E-01 +781 2 1.6594918361224622E+01 1.9308516812295597E+01 9.3116700141105611E+00 +782 1 1.7289718361224622E+01 1.8896216812295602E+01 9.8447800141105617E+00 +783 1 1.7017118361224618E+01 1.9665516812295600E+01 8.5442900141105600E+00 +784 2 1.0836718361224618E+01 2.0667916812295598E+01 1.2465050014110563E+01 +785 1 1.1691118361224616E+01 2.0846216812295602E+01 1.2909050014110564E+01 +786 1 1.1023718361224617E+01 2.0026216812295598E+01 1.1730150014110562E+01 +787 2 2.7428583612246094E+00 5.1075968122955873E+00 9.6994600141105618E+00 +788 1 2.3306783612246091E+00 5.8412468122955872E+00 1.0267850014110563E+01 +789 1 3.4207383612246094E+00 4.6728268122955869E+00 1.0347450014110562E+01 +790 2 2.0893618361224622E+01 1.0995916812295594E+01 1.6591750014110566E+01 +791 1 2.0486618361224625E+01 1.0708116812295591E+01 1.7468950014110568E+01 +792 1 2.0950418361224624E+01 1.1981716812295593E+01 1.6662350014110565E+01 +793 2 1.4258318361224619E+01 9.6005868122955906E+00 2.2811000141105549E+00 +794 1 1.5159118361224621E+01 9.2223268122955897E+00 2.6394700141105556E+00 +795 1 1.3717518361224620E+01 9.8489868122955908E+00 3.0755800141105558E+00 +796 2 2.0014218361224625E+01 1.7280016812295599E+01 2.0502000141105547E+00 +797 1 2.0871818361224623E+01 1.7000216812295598E+01 2.4059500141105552E+00 +798 1 1.9335718361224622E+01 1.7285916812295596E+01 2.7446400141105554E+00 +799 2 3.3185983612246095E+00 6.9930268122955885E+00 1.7280050014110564E+01 +800 1 4.0416483612246106E+00 6.2816368122955879E+00 1.7475250014110564E+01 +801 1 3.4355683612246102E+00 7.5264568122955886E+00 1.8075450014110569E+01 +802 2 3.2416883612246097E+00 9.3445081229558347E-01 9.5519700141105606E+00 +803 1 4.1155383612246101E+00 1.3519068122955840E+00 9.2823000141105609E+00 +804 1 2.6383583612246091E+00 1.3109868122955839E+00 8.8572000141105605E+00 +805 2 1.7062018361224624E+01 1.2768716812295594E+01 2.1161550014110571E+01 +806 1 1.6768118361224623E+01 1.2250016812295593E+01 2.0390050014110574E+01 +807 1 1.7986718361224618E+01 1.2515116812295593E+01 2.1229250014110573E+01 +808 2 8.1055383612246139E+00 2.0825616812295603E+01 2.1111250014110571E+01 +809 1 8.7095783612246134E+00 2.0690216812295599E+01 2.0345150014110569E+01 +810 1 8.2010683612246140E+00 1.9998916812295597E+01 2.1634150014110570E+01 +811 2 5.4594583612246117E+00 9.8012368122955920E+00 2.0394200141105552E+00 +812 1 4.5290683612246108E+00 1.0011996812295592E+01 2.1289100141105552E+00 +813 1 5.7622383612246111E+00 1.0308316812295592E+01 1.3018200141105545E+00 +814 2 1.0634018361224618E+01 1.9739416812295598E+01 1.9840950014110572E+01 +815 1 1.1508518361224617E+01 2.0147716812295602E+01 1.9570750014110569E+01 +816 1 1.0410918361224615E+01 1.9014116812295601E+01 1.9205950014110574E+01 +817 2 5.9581483612246116E+00 5.1829968122955874E+00 1.7651250014110570E+01 +818 1 6.5261583612246126E+00 5.2274868122955871E+00 1.6879250014110568E+01 +819 1 6.1311683612246126E+00 4.2705768122955865E+00 1.8003650014110569E+01 +820 2 1.8679218361224624E+01 2.0555816812295600E+01 7.6304600141105592E+00 +821 1 1.9626918361224622E+01 2.0349516812295601E+01 7.9015300141105600E+00 +822 1 1.8765318361224622E+01 2.0778416812295600E+01 6.6803200141105590E+00 +823 2 1.1391818361224615E+01 3.4690981229558299E-01 7.0224500141105599E+00 +824 1 1.2156118361224618E+01 2.3323716812295601E+01 6.9679600141105587E+00 +825 1 1.1109918361224617E+01 2.4475681229558294E-01 7.9797400141105603E+00 +826 2 5.2214183612246110E+00 1.6468716812295597E+01 2.1430250014110573E+01 +827 1 4.2659983612246108E+00 1.6374416812295600E+01 2.1503150014110570E+01 +828 1 5.4061183612246122E+00 1.6980316812295598E+01 2.0611350014110574E+01 +829 2 4.5379483612246103E+00 1.7655416812295599E+01 2.7038000141105556E+00 +830 1 4.6046683612246113E+00 1.7219016812295600E+01 3.5716200141105565E+00 +831 1 3.6864483612246102E+00 1.8199016812295600E+01 2.7877000141105559E+00 +832 2 1.4194518361224619E+01 7.0039368122955876E+00 4.9995500141105564E+00 +833 1 1.4081718361224619E+01 6.9318468122955883E+00 6.0609900141105584E+00 +834 1 1.3818718361224619E+01 6.1472368122955885E+00 4.7269800141105573E+00 +835 2 3.9268336122460729E-01 8.4716068122955903E+00 1.8901850014110568E+01 +836 1 7.9955836122460755E-01 7.6585568122955898E+00 1.8617350014110571E+01 +837 1 2.2171118361224629E+01 8.3282968122955907E+00 1.8651850014110565E+01 +838 2 2.4838936122460717E-01 6.2890368122955884E+00 1.2532750014110563E+01 +839 1 2.2151718361224628E+01 6.7236468122955877E+00 1.2806450014110563E+01 +840 1 4.0596236122460727E-01 5.6141068122955877E+00 1.3214150014110563E+01 +841 2 5.8126883612246116E+00 2.1600616812295605E+01 2.6828700141105557E+00 +842 1 5.9221783612246126E+00 2.0682916812295598E+01 2.5334100141105553E+00 +843 1 5.7186483612246111E+00 2.2077116812295607E+01 1.8412100141105547E+00 +844 2 1.0414118361224617E+01 3.5165468122955859E+00 1.4313850014110566E+01 +845 1 1.0934518361224615E+01 4.3932668122955860E+00 1.4337450014110566E+01 +846 1 1.0698918361224615E+01 3.0229268122955850E+00 1.5084250014110568E+01 +847 2 2.0972718361224626E+01 6.3349768122955883E+00 8.7079400141105605E+00 +848 1 2.1638518361224627E+01 5.6279268122955877E+00 8.4843200141105601E+00 +849 1 2.0270218361224625E+01 5.8386568122955884E+00 9.1862800141105598E+00 +850 2 1.6020218361224622E+01 2.5943768122955850E+00 8.7423300141105607E+00 +851 1 1.6822218361224621E+01 2.8382068122955855E+00 8.2676800141105602E+00 +852 1 1.5245818361224622E+01 3.1831168122955855E+00 8.5670300141105624E+00 +853 2 6.7617983612246135E+00 2.0127216812295604E+01 1.7508650014110565E+01 +854 1 6.3031883612246133E+00 2.1039816812295602E+01 1.7498150014110564E+01 +855 1 6.6545083612246128E+00 1.9685916812295599E+01 1.8362950014110570E+01 +856 2 4.5251983612246116E+00 3.7882568122955860E+00 1.1749150014110564E+01 +857 1 4.4469683612246103E+00 4.4163968122955870E+00 1.2498250014110564E+01 +858 1 3.6901883612246102E+00 3.2009068122955853E+00 1.1796650014110565E+01 +859 2 2.0867218361224630E+01 7.8766668122955901E+00 6.1878300141105589E+00 +860 1 2.1797418361224626E+01 8.0918668122955886E+00 6.0222300141105585E+00 +861 1 2.0945318361224626E+01 7.4042768122955893E+00 7.0022600141105595E+00 +862 2 1.1136618361224617E+01 1.1528916812295591E+01 2.0915050014110573E+01 +863 1 1.0235718361224615E+01 1.1394216812295591E+01 2.0532750014110572E+01 +864 1 1.1765618361224618E+01 1.1157416812295592E+01 2.0298450014110568E+01 +865 2 7.2498883612246132E+00 1.8310716812295595E+01 1.1327950014110563E+01 +866 1 7.7925683612246130E+00 1.8105516812295598E+01 1.2080050014110563E+01 +867 1 7.6908583612246142E+00 1.8937216812295596E+01 1.0751850014110563E+01 +868 2 2.9142836122460719E-01 3.7014568122955862E+00 9.2391100141105600E+00 +869 1 2.2597536122460712E-01 2.8717168122955847E+00 8.6890000141105599E+00 +870 1 1.1700883612246078E+00 4.1064868122955858E+00 8.9782300141105615E+00 +871 2 2.0879183612246086E+00 1.7140468122955841E+00 1.9702900141105548E+00 +872 1 2.5113483612246092E+00 2.5985968122955851E+00 1.8586100141105550E+00 +873 1 2.4379983612246092E+00 1.0297258122955837E+00 1.3778200141105543E+00 +874 2 1.4482918361224620E+01 1.7600516812295599E+01 8.6490700141105616E+00 +875 1 1.4683818361224619E+01 1.6970416812295596E+01 7.9368000141105606E+00 +876 1 1.5304918361224621E+01 1.8067116812295595E+01 8.8419800141105611E+00 +877 2 2.6348883612246090E+00 1.8547616812295594E+01 1.1550250014110564E+01 +878 1 2.9299583612246094E+00 1.8607716812295603E+01 1.0612050014110562E+01 +879 1 3.4380483612246100E+00 1.8771216812295599E+01 1.2079050014110564E+01 +880 2 1.5320318361224619E+01 1.8967416812295600E+01 1.2844450014110565E+01 +881 1 1.6158718361224622E+01 1.8577516812295602E+01 1.3179350014110566E+01 +882 1 1.5572118361224621E+01 1.9693016812295600E+01 1.2248850014110564E+01 +883 2 2.0271918361224625E+01 3.1915068122955854E+00 1.4231950014110566E+01 +884 1 2.0649118361224627E+01 3.1652068122955854E+00 1.3329750014110566E+01 +885 1 2.0867518361224622E+01 3.8349268122955862E+00 1.4562350014110566E+01 +886 2 1.2196618361224617E+01 9.4481112295582800E-02 1.0284850014110562E+01 +887 1 1.1794418361224617E+01 7.9741781229558339E-01 1.0881250014110563E+01 +888 1 1.3049918361224620E+01 3.5661181229558303E-01 9.9193300141105620E+00 +889 2 4.9615883612246110E+00 1.1012516812295594E+01 8.1670700141105605E+00 +890 1 5.0973783612246102E+00 1.1781316812295591E+01 7.5455800141105591E+00 +891 1 5.1053583612246110E+00 1.1503716812295593E+01 9.0357500141105600E+00 +892 2 8.4216883612246143E+00 2.7787568122955855E+00 6.6549600141105589E+00 +893 1 9.3412583612246163E+00 3.1393168122955855E+00 6.4705300141105591E+00 +894 1 7.8937783612246140E+00 3.0404768122955854E+00 5.8494800141105587E+00 +895 2 2.1752918361224626E+01 2.1698716812295601E+01 7.1130301411055397E-01 +896 1 2.2118018361224628E+01 2.2438616812295606E+01 1.1928300141105543E+00 +897 1 2.1470218361224632E+01 2.1155416812295606E+01 1.4231800141105546E+00 +898 2 1.6239083612246086E+00 1.5205616812295595E+01 4.7850800141105569E+00 +899 1 2.6059283612246094E+00 1.5427116812295596E+01 4.8756100141105581E+00 +900 1 1.3540583612246082E+00 1.4957616812295596E+01 5.6927200141105585E+00 +901 2 2.9020883612246098E+00 2.3349916812295604E+01 2.8199801411055347E-01 +902 1 2.7000083612246093E+00 2.2586716812295606E+01 2.1869550014110573E+01 +903 1 3.8302083612246101E+00 2.3494616812295604E+01 2.2047101411055350E-01 +904 2 2.1908618361224622E+01 1.3276616812295593E+01 1.5070550014110568E+01 +905 1 2.1687018361224627E+01 1.4231216812295596E+01 1.5232850014110566E+01 +906 1 2.3290736122460712E-01 1.3430416812295595E+01 1.5234350014110566E+01 +907 2 2.9991036122460718E-01 2.0712916812295600E+01 1.1767850014110564E+01 +908 1 9.2104636122460770E-01 1.9969716812295594E+01 1.1682050014110562E+01 +909 1 8.5675136122460771E-01 2.1528316812295607E+01 1.1606050014110563E+01 +910 2 1.9430418361224621E+01 1.5744016812295596E+01 1.2590050014110563E+01 +911 1 1.9803518361224622E+01 1.6104616812295596E+01 1.3361550014110566E+01 +912 1 2.0117718361224622E+01 1.6001816812295598E+01 1.1951750014110564E+01 +913 2 1.7422018361224627E+01 1.3148868122955839E+00 1.8381250014110570E+01 +914 1 1.7611918361224625E+01 4.0549381229558307E-01 1.8601050014110573E+01 +915 1 1.7649018361224620E+01 1.8855468122955843E+00 1.9214150014110569E+01 +916 2 7.3219683612246129E+00 2.3359916812295602E+01 1.0478850014110563E+01 +917 1 6.7304383612246124E+00 4.9139581229558316E-01 1.0098420014110561E+01 +918 1 7.9852183612246144E+00 2.3135316812295606E+01 9.7958800141105620E+00 +919 2 1.4813283612246082E+00 1.6038116812295598E+01 1.5387150014110567E+01 +920 1 1.7866483612246085E+00 1.6755316812295597E+01 1.5949450014110568E+01 +921 1 1.5762983612246084E+00 1.5189516812295595E+01 1.5884550014110568E+01 +922 2 1.3328218361224620E+01 2.0481916812295598E+01 1.0434150014110562E+01 +923 1 1.2731218361224620E+01 2.1166316812295602E+01 1.0839550014110563E+01 +924 1 1.4196518361224619E+01 2.0779516812295601E+01 1.0846550014110564E+01 +925 2 3.4523583612246100E+00 2.3101116812295601E+01 1.6194450014110565E+01 +926 1 3.3625483612246101E+00 2.3549416812295604E+01 1.5315250014110566E+01 +927 1 2.8549383612246095E+00 2.2313916812295599E+01 1.6089950014110567E+01 +928 2 1.1771918361224618E+01 5.9822168122955883E+00 1.4925950014110567E+01 +929 1 1.2089418361224618E+01 6.2430868122955880E+00 1.4046750014110565E+01 +930 1 1.2451618361224618E+01 5.6287968122955876E+00 1.5519350014110568E+01 +931 2 2.1928918361224625E+01 8.3044881229558354E-01 1.8634200141105548E+00 +932 1 2.1160118361224622E+01 1.1193598122955837E+00 1.3423800141105544E+00 +933 1 2.2660418361224629E+01 1.1505168122955836E+00 1.3417800141105545E+00 +934 2 8.6684783612246150E+00 1.2891816812295593E+01 1.1429750014110562E+01 +935 1 8.3469783612246147E+00 1.2853116812295593E+01 1.2391850014110563E+01 +936 1 9.5748983612246157E+00 1.3288716812295593E+01 1.1538350014110563E+01 +937 2 1.1419418361224615E+01 1.9688216812295604E+01 4.8636701411055366E-01 +938 1 1.1843818361224617E+01 1.8896016812295603E+01 8.9452001411055404E-01 +939 1 1.1374518361224617E+01 1.9542916812295598E+01 2.1760250014110571E+01 +940 2 6.0835536122460743E-01 1.4294516812295596E+01 7.3090800141105596E+00 +941 1 2.2428518361224622E+01 1.4589816812295595E+01 7.6250200141105591E+00 +942 1 1.1659883612246078E+00 1.3973816812295595E+01 8.0434300141105606E+00 +943 2 1.4468483612246084E+00 2.6090181229558296E-01 4.8608900141105575E+00 +944 1 1.9632583612246084E+00 2.2972016812295603E+01 4.8895100141105576E+00 +945 1 1.4630183612246084E+00 6.5719081229558329E-01 3.9632200141105569E+00 +946 2 2.2165818361224630E+01 1.2494016812295593E+01 5.7048900141105578E+00 +947 1 2.1415918361224627E+01 1.2034716812295594E+01 6.0970400141105587E+00 +948 1 2.2572718361224627E+01 1.3010916812295592E+01 6.4368500141105587E+00 +949 2 2.2597183612246088E+00 1.6705116812295600E+01 2.2081850014110572E+01 +950 1 1.5018383612246082E+00 1.6125516812295594E+01 2.1771450014110577E+01 +951 1 1.8151983612246088E+00 1.7561816812295600E+01 5.3735914110553340E-02 +952 2 2.2233118361224623E+01 1.9711416812295599E+01 5.7401500141105579E+00 +953 1 2.1684618361224626E+01 1.9914416812295602E+01 4.9632100141105573E+00 +954 1 4.9607836122460736E-01 1.9939916812295603E+01 5.6048200141105573E+00 +955 2 1.0306618361224615E+01 7.4286868122955889E+00 6.9618600141105595E+00 +956 1 1.0826018361224616E+01 7.2084768122955891E+00 7.7325500141105596E+00 +957 1 9.4512483612246143E+00 6.9988468122955894E+00 7.0915000141105597E+00 +958 2 2.3321283612246093E+00 1.0272816812295591E+01 7.0962601411055382E-01 +959 1 1.6357183612246085E+00 9.7891268122955903E+00 2.6732801411055351E-01 +960 1 2.6030683612246093E+00 1.0971516812295592E+01 1.6145881411055343E-01 +961 2 1.8914418361224620E+01 9.7109968122955923E+00 1.8548150014110568E+01 +962 1 1.9185818361224623E+01 8.7546968122955899E+00 1.8445250014110574E+01 +963 1 1.8295618361224623E+01 9.8362168122955911E+00 1.7799550014110569E+01 +964 2 2.0591618361224622E+01 3.9875968122955863E+00 5.0523600141105574E+00 +965 1 2.0156918361224619E+01 3.5433668122955857E+00 4.2804100141105570E+00 +966 1 2.1495418361224626E+01 3.6523868122955858E+00 5.0718000141105577E+00 +967 2 1.8444118361224621E+01 1.0718816812295591E+01 3.6094800141105563E+00 +968 1 1.7778818361224623E+01 1.1435816812295593E+01 3.3615700141105558E+00 +969 1 1.8888418361224623E+01 1.1052616812295591E+01 4.4177400141105574E+00 +970 2 3.3331683612246099E+00 2.1413516812295605E+01 4.4091100141105581E+00 +971 1 4.0140083612246107E+00 2.1587916812295603E+01 3.7370700141105564E+00 +972 1 2.8152483612246098E+00 2.0647116812295604E+01 4.0949500141105570E+00 +973 2 2.1485418361224628E+01 1.3439616812295593E+01 1.8515050014110574E+01 +974 1 2.1232118361224625E+01 1.4409816812295595E+01 1.8622950014110568E+01 +975 1 2.1260918361224622E+01 1.2943316812295594E+01 1.9423250014110568E+01 +976 2 1.5327218361224622E+01 1.1235016812295594E+01 6.0592500141105585E+00 +977 1 1.5020018361224619E+01 1.1987616812295592E+01 6.6193700141105598E+00 +978 1 1.4456518361224619E+01 1.0828416812295591E+01 5.8021100141105579E+00 +979 2 5.3565983612246111E+00 1.2563016812295594E+01 1.0383550014110563E+01 +980 1 4.9874383612246111E+00 1.2201516812295594E+01 1.1265250014110562E+01 +981 1 4.7115983612246106E+00 1.3306916812295594E+01 1.0272250014110563E+01 +982 2 1.3327818361224619E+01 1.2646816812295594E+01 1.7977550014110570E+01 +983 1 1.2756818361224619E+01 1.2533216812295594E+01 1.7175350014110570E+01 +984 1 1.3294018361224618E+01 1.3648916812295596E+01 1.8078250014110566E+01 +985 2 1.5733518361224622E+01 2.1126216812295603E+01 1.1279650014110564E+01 +986 1 1.6342018361224618E+01 2.1831616812295604E+01 1.1643150014110564E+01 +987 1 1.6056418361224623E+01 2.0797916812295600E+01 1.0400750014110562E+01 +988 2 2.1141518361224623E+01 8.9665468122955918E+00 1.0216150014110562E+01 +989 1 2.2048618361224623E+01 9.3445468122955901E+00 1.0211250014110561E+01 +990 1 2.1131918361224624E+01 7.9982568122955895E+00 1.0070990014110562E+01 +991 2 1.6952918361224619E+01 4.4809168122955869E+00 1.3603400141105544E+00 +992 1 1.5977218361224621E+01 4.3960468122955865E+00 1.5795100141105547E+00 +993 1 1.7075618361224620E+01 5.3891468122955875E+00 9.8821101411055423E-01 +994 2 2.8147983612246090E+00 1.8335016812295603E+01 1.6687450014110567E+01 +995 1 3.7292383612246098E+00 1.8106316812295599E+01 1.6439150014110567E+01 +996 1 2.7120783612246098E+00 1.8060816812295599E+01 1.7634450014110573E+01 +997 2 1.3160118361224619E+01 2.1854116812295597E+01 1.6869250014110570E+01 +998 1 1.2921818361224620E+01 2.1262016812295606E+01 1.7604050014110570E+01 +999 1 1.2290218361224618E+01 2.2004216812295599E+01 1.6409850014110567E+01 +1000 2 1.6654118361224619E+01 3.4356068122955858E+00 5.3268000141105585E+00 +1001 1 1.6763518361224619E+01 4.2442668122955860E+00 5.8470000141105576E+00 +1002 1 1.7299318361224621E+01 3.4167768122955859E+00 4.6252900141105568E+00 +1003 2 1.5613183612246082E+00 1.2986316812295593E+01 2.9923100141105561E+00 +1004 1 2.1672183612246085E+00 1.3322516812295593E+01 2.3411500141105552E+00 +1005 1 1.5863483612246085E+00 1.3709516812295595E+01 3.6513500141105570E+00 +1006 2 6.4849083612246119E+00 2.5271168122955849E+00 1.8568450014110571E+01 +1007 1 7.2879383612246134E+00 2.2592968122955850E+00 1.8045950014110566E+01 +1008 1 5.7505583612246109E+00 1.9684868122955843E+00 1.8264250014110566E+01 +1009 2 9.5758483612246152E+00 4.7315968122955869E+00 2.9483000141105560E+00 +1010 1 9.8447783612246162E+00 5.4277568122955868E+00 3.6224300141105563E+00 +1011 1 9.3913583612246132E+00 5.2471068122955877E+00 2.0968400141105548E+00 +1012 2 1.7459518361224628E+01 1.7394616812295595E+01 1.4136050014110564E+01 +1013 1 1.6997518361224621E+01 1.7001616812295595E+01 1.4929850014110565E+01 +1014 1 1.8159518361224624E+01 1.7939816812295597E+01 1.4466550014110565E+01 +1015 2 1.6523918361224624E+01 8.6581968122955892E+00 3.4612500141105564E+00 +1016 1 1.7039518361224623E+01 9.3233368122955920E+00 3.9480000141105562E+00 +1017 1 1.6204518361224622E+01 8.0607768122955896E+00 4.1706000141105566E+00 +1018 2 1.4959218361224620E+01 1.7963316812295599E+01 1.8420150014110572E+01 +1019 1 1.5072318361224621E+01 1.7841916812295597E+01 1.7480050014110571E+01 +1020 1 1.5863718361224620E+01 1.8256416812295598E+01 1.8736850014110569E+01 +1021 2 5.9458283612246126E+00 1.7655468122955842E+00 8.9552400141105615E+00 +1022 1 5.9930583612246124E+00 1.3992668122955838E+00 8.0434000141105599E+00 +1023 1 6.3955783612246124E+00 2.6705268122955848E+00 8.9781900141105631E+00 +1024 2 7.9905683612246134E+00 6.3206668122955882E+00 5.7878000141105588E+00 +1025 1 7.0232783612246132E+00 6.5650168122955890E+00 5.6352000141105574E+00 +1026 1 8.2871683612246141E+00 6.2234468122955882E+00 4.8348300141105574E+00 +1027 2 2.2485118361224625E+01 4.6162468122955866E+00 1.4926050014110565E+01 +1028 1 3.6750636122460728E-01 4.0303968122955869E+00 1.5442850014110565E+01 +1029 1 2.2359918361224626E+01 5.3321768122955868E+00 1.5558650014110567E+01 +1030 2 1.6688383612246085E+00 1.4309368122955839E+00 2.0618750014110571E+01 +1031 1 2.2194783612246085E+00 1.2521468122955839E+00 1.9815950014110573E+01 +1032 1 2.0103483612246089E+00 9.2743081229558355E-01 2.1390350014110570E+01 +1033 2 1.0209818361224615E+01 1.7122116812295598E+01 3.8888100141105570E+00 +1034 1 9.3379483612246137E+00 1.7204816812295597E+01 3.4425700141105562E+00 +1035 1 1.0487818361224615E+01 1.6168916812295599E+01 4.0591700141105562E+00 +1036 2 1.7009718361224621E+01 1.1077816812295593E+01 1.3982750014110566E+01 +1037 1 1.7416618361224621E+01 1.1915716812295594E+01 1.4114250014110565E+01 +1038 1 1.6152518361224622E+01 1.1296216812295594E+01 1.3498650014110565E+01 +1039 2 1.5292118361224619E+01 2.2286916812295601E+01 2.0549250014110573E+01 +1040 1 1.5719918361224620E+01 2.1812016812295600E+01 2.1274150014110575E+01 +1041 1 1.5371618361224622E+01 2.3218716812295604E+01 2.0712450014110569E+01 +1042 2 7.0554283612246129E+00 1.6077516812295599E+01 1.7628950014110565E+01 +1043 1 6.9981783612246131E+00 1.6403416812295596E+01 1.6704450014110570E+01 +1044 1 7.7722083612246129E+00 1.5403516812295596E+01 1.7707550014110570E+01 +1045 2 9.1948983612246149E+00 1.0623516812295591E+01 9.8707000141105627E+00 +1046 1 8.5664583612246137E+00 1.0414716812295591E+01 9.1563400141105618E+00 +1047 1 8.9125783612246146E+00 1.1463416812295593E+01 1.0255350014110562E+01 +1048 2 3.4275083612246098E+00 1.4718216812295594E+01 1.7487000141105546E+00 +1049 1 2.7882983612246091E+00 1.5297516812295596E+01 1.3626300141105543E+00 +1050 1 3.7876783612246099E+00 1.5291116812295597E+01 2.4465400141105555E+00 +1051 2 1.3184418361224617E+01 1.6254416812295595E+01 1.6217400141105547E+00 +1052 1 1.2358318361224617E+01 1.5655016812295598E+01 1.4601300141105547E+00 +1053 1 1.3636118361224620E+01 1.6118716812295595E+01 7.4275201411055392E-01 +1054 2 2.1478318361224627E+01 9.3499668122955910E+00 1.3041450014110564E+01 +1055 1 2.0571518361224623E+01 9.4989368122955913E+00 1.3473650014110564E+01 +1056 1 2.1367718361224625E+01 9.0415068122955891E+00 1.2126950014110564E+01 +1057 2 1.3240818361224617E+01 2.1513516812295602E+01 7.6613400141105599E+00 +1058 1 1.3173218361224619E+01 2.0794016812295602E+01 8.3871300141105607E+00 +1059 1 1.2721018361224617E+01 2.1148516812295600E+01 6.8687800141105599E+00 +1060 2 1.0706218361224616E+01 9.0730668122955915E+00 1.2194050014110564E+01 +1061 1 1.0209918361224616E+01 9.5840168122955909E+00 1.1511850014110562E+01 +1062 1 1.0127718361224616E+01 8.2990868122955899E+00 1.2386250014110566E+01 +1063 2 9.8246936122460771E-01 9.5211468122955907E+00 1.0116250014110562E+01 +1064 1 1.2453883612246077E+00 1.0440616812295591E+01 1.0422250014110562E+01 +1065 1 1.6324283612246082E+00 8.8711068122955901E+00 1.0428050014110564E+01 +1066 2 2.1805418361224621E+01 1.8063116812295597E+01 1.9102050014110567E+01 +1067 1 2.1618318361224627E+01 1.8993216812295604E+01 1.8788850014110569E+01 +1068 1 8.4032061224607005E-02 1.8152616812295598E+01 1.9376750014110570E+01 +1069 2 4.9490783612246112E+00 4.5899568122955863E+00 4.0229100141105567E+00 +1070 1 4.9939883612246110E+00 5.4655868122955873E+00 4.4890400141105573E+00 +1071 1 4.2701383612246104E+00 4.0452668122955862E+00 4.5228100141105569E+00 +1072 2 1.8242218361224626E+01 2.9008968122955854E+00 1.5903950014110567E+01 +1073 1 1.8887118361224626E+01 2.5084568122955848E+00 1.5204150014110565E+01 +1074 1 1.8162418361224624E+01 2.1789868122955851E+00 1.6617050014110568E+01 +1075 2 3.9899383612246102E+00 1.9364416812295598E+01 1.3871050014110565E+01 +1076 1 4.3833283612246108E+00 2.0252516812295600E+01 1.3695350014110566E+01 +1077 1 3.1540783612246095E+00 1.9562116812295599E+01 1.4347050014110566E+01 +1078 2 7.0537683612246127E+00 1.4620616812295594E+01 6.4024900141105583E+00 +1079 1 7.6585583612246131E+00 1.3942216812295593E+01 6.0279100141105584E+00 +1080 1 6.2108683612246125E+00 1.4238816812295596E+01 6.6619400141105594E+00 diff --git a/examples/USER/nnp/in.nnp b/examples/USER/nnp/in.nnp new file mode 100644 index 0000000000..d4664d1c83 --- /dev/null +++ b/examples/USER/nnp/in.nnp @@ -0,0 +1,47 @@ +############################################################################### +# MD simulation for NN water +############################################################################### + +############################################################################### +# VARIABLES +############################################################################### +clear +# Configuration files +variable cfgFile string "data.H2O-360mol" +# Timesteps +variable numSteps equal 10 +variable dt equal 0.0005 +# NN +variable nnpCutoff equal 6.36 +variable nnpDir string "nnp-data" + +############################################################################### +# GENERAL SETUP +############################################################################### +units metal +boundary p p p +atom_style atomic +read_data ${cfgFile} +timestep ${dt} +thermo 1 + +############################################################################### +# NN +############################################################################### +pair_style nnp dir ${nnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" +pair_coeff * * ${nnpCutoff} + +############################################################################### +# INTEGRATOR +############################################################################### +fix INT all nve + +############################################################################### +# OUTPUT +############################################################################### +dump 1 all atom 1 dump.nnp + +############################################################################### +# SIMULATION +############################################################################### +run ${numSteps} diff --git a/examples/USER/nnp/nnp-data/input.nn b/examples/USER/nnp/nnp-data/input.nn new file mode 100644 index 0000000000..885ec0ec70 --- /dev/null +++ b/examples/USER/nnp/nnp-data/input.nn @@ -0,0 +1,120 @@ +############################################################################### +# HDNNP for water H2O +############################################################################### +# Length unit : Bohr +# Energy unit : Ha +# Reference method: RPBE-D3 +############################################################################### + +############################################################################### +# DATA SET NORMALIZATION +############################################################################### +# This section was automatically added by nnp-norm. +mean_energy -2.5521343547039809E+01 +conv_energy 2.4265748255366972E+02 +conv_length 5.8038448995319847E+00 +############################################################################### + +############################################################################### +# GENERAL NNP SETTINGS +############################################################################### +# These keywords are (almost) always required. +number_of_elements 2 # Number of elements. +elements H O # Specification of elements. +#atom_energy H -0.45890771 # Free atom reference energy (H). +#atom_energy O -74.94518524 # Free atom reference energy (O). +cutoff_type 2 # Cutoff type. +scale_symmetry_functions # Scale all symmetry functions with min/max values. +#scale_symmetry_functions_sigma # Scale all symmetry functions with sigma. +scale_min_short 0.0 # Minimum value for scaling. +scale_max_short 1.0 # Maximum value for scaling. +center_symmetry_functions # Center all symmetry functions, i.e. subtract mean value. +global_hidden_layers_short 2 # Number of hidden layers. +global_nodes_short 25 25 # Number of nodes in each hidden layer. +global_activation_short t t l # Activation function for each hidden layer and output layer. +#normalize_nodes # Normalize input of nodes. + +############################################################################### +# SYMMETRY FUNCTIONS +############################################################################### + +# Radial symmetry function (type 2): +#symfunction_short 2 + +# Narrow Angular symmetry function (type 3): +#symfunction_short 3 + +# Wide Angular symmetry function (type 9): +#symfunction_short 9 + +# radial H H +symfunction_short H 2 H 0.001 0.0 12.00 +symfunction_short H 2 H 0.01 0.0 12.00 +symfunction_short H 2 H 0.03 0.0 12.00 +symfunction_short H 2 H 0.06 0.0 12.00 +symfunction_short H 2 H 0.15 1.9 12.00 +symfunction_short H 2 H 0.30 1.9 12.00 +symfunction_short H 2 H 0.60 1.9 12.00 +symfunction_short H 2 H 1.50 1.9 12.00 + +# radial H O / O H +symfunction_short H 2 O 0.001 0.0 12.00 +symfunction_short H 2 O 0.01 0.0 12.00 +symfunction_short H 2 O 0.03 0.0 12.00 +symfunction_short H 2 O 0.06 0.0 12.00 +symfunction_short H 2 O 0.15 0.9 12.00 +symfunction_short H 2 O 0.30 0.9 12.00 +symfunction_short H 2 O 0.60 0.9 12.00 +symfunction_short H 2 O 1.50 0.9 12.00 + +symfunction_short O 2 H 0.001 0.0 12.00 +symfunction_short O 2 H 0.01 0.0 12.00 +symfunction_short O 2 H 0.03 0.0 12.00 +symfunction_short O 2 H 0.06 0.0 12.00 +symfunction_short O 2 H 0.15 0.9 12.00 +symfunction_short O 2 H 0.30 0.9 12.00 +symfunction_short O 2 H 0.60 0.9 12.00 +symfunction_short O 2 H 1.50 0.9 12.00 + +# radial O O +symfunction_short O 2 O 0.001 0.0 12.00 +symfunction_short O 2 O 0.01 0.0 12.00 +symfunction_short O 2 O 0.03 0.0 12.00 +symfunction_short O 2 O 0.06 0.0 12.00 +symfunction_short O 2 O 0.15 4.0 12.00 +symfunction_short O 2 O 0.30 4.0 12.00 +symfunction_short O 2 O 0.60 4.0 12.00 +symfunction_short O 2 O 1.50 4.0 12.00 + +# angular +symfunction_short H 3 O H 0.2 1.0 1.0 12.00000 + +symfunction_short O 3 H H 0.07 1.0 1.0 12.00000 +symfunction_short H 3 O H 0.07 1.0 1.0 12.00000 +symfunction_short O 3 H H 0.07 -1.0 1.0 12.00000 +symfunction_short H 3 O H 0.07 -1.0 1.0 12.00000 + +symfunction_short O 3 H H 0.03 1.0 1.0 12.00000 +symfunction_short H 3 O H 0.03 1.0 1.0 12.00000 +symfunction_short O 3 H H 0.03 -1.0 1.0 12.00000 +symfunction_short H 3 O H 0.03 -1.0 1.0 12.00000 + +symfunction_short O 3 H H 0.01 1.0 4.0 12.00000 +symfunction_short H 3 O H 0.01 1.0 4.0 12.00000 +symfunction_short O 3 H H 0.01 -1.0 4.0 12.00000 +symfunction_short H 3 O H 0.01 -1.0 4.0 12.00000 + +symfunction_short O 3 O H 0.03 1.0 1.0 12.00000 +symfunction_short O 3 O H 0.03 -1.0 1.0 12.00000 +symfunction_short O 3 O H 0.001 1.0 4.0 12.00000 +symfunction_short O 3 O H 0.001 -1.0 4.0 12.00000 + +symfunction_short H 3 O O 0.03 1.0 1.0 12.00000 +symfunction_short H 3 O O 0.03 -1.0 1.0 12.00000 +symfunction_short H 3 O O 0.001 1.0 4.0 12.00000 +symfunction_short H 3 O O 0.001 -1.0 4.0 12.00000 + +symfunction_short O 3 O O 0.03 1.0 1.0 12.00000 +symfunction_short O 3 O O 0.03 -1.0 1.0 12.00000 +symfunction_short O 3 O O 0.001 1.0 4.0 12.00000 +symfunction_short O 3 O O 0.001 -1.0 4.0 12.00000 diff --git a/examples/USER/nnp/nnp-data/scaling.data b/examples/USER/nnp/nnp-data/scaling.data new file mode 100644 index 0000000000..2a9e0ad7a6 --- /dev/null +++ b/examples/USER/nnp/nnp-data/scaling.data @@ -0,0 +1,72 @@ +################################################################################ +# Symmetry function scaling data. +################################################################################ +# Col Name Description +################################################################################ +# 1 e_index Element index. +# 2 sf_index Symmetry function index. +# 3 sf_min Symmetry function minimum. +# 4 sf_max Symmetry function maximum. +# 5 sf_mean Symmetry function mean. +# 6 sf_sigma Symmetry function sigma. +######################################################################################################################### +# 1 2 3 4 5 6 +# e_index sf_index sf_min sf_max sf_mean sf_sigma +######################################################################################################################### + 1 1 1.0882016636170764E+00 9.6166419119419064E+00 2.2691752247542194E+00 6.7883526611658462E-01 + 1 2 7.3274438904180561E-01 5.0028559321574191E+00 1.3272332317543580E+00 3.3936750181780473E-01 + 1 3 7.6010783783215696E-01 7.1427942966219815E+00 1.6470726712825305E+00 5.0771115927383836E-01 + 1 4 5.4842285884800812E-01 3.7661771168267726E+00 1.0163698211361718E+00 2.5362958053787776E-01 + 1 5 4.0080665126604625E-01 4.1469832401668629E+00 9.0925040981537897E-01 2.9758019277508319E-01 + 1 6 3.6209352253798227E-01 2.2678239402766054E+00 6.4931154122889623E-01 1.4835420345383032E-01 + 1 7 1.8919103878435897E-01 2.2292652677252804E+00 4.5693857051003817E-01 1.5976079618578123E-01 + 1 8 2.6704178695764313E-01 1.3208742362468955E+00 4.2395636902644862E-01 8.0492394978461931E-02 + 1 9 2.4513099752055156E-01 9.4751160662053002E-01 3.6244199023263673E-01 5.2993540556109331E-02 + 1 10 2.2248910067848982E-01 2.7596216013647377E+00 5.3891576898130766E-01 2.0137334230483950E-01 + 1 11 1.4743601726548086E-01 5.5599270746969276E-01 2.6773972195910817E-01 2.6188094566404998E-02 + 1 12 9.9110926426029380E-02 1.7265405335201480E+00 2.9553976311554875E-01 1.1619768775752932E-01 + 1 13 6.5093699123904267E-02 3.4521757733971170E-01 1.8521249136783141E-01 1.9741155185936318E-02 + 1 14 3.1653527247865069E-02 9.1293170125596168E-01 1.5025164684953513E-01 5.3480187368038674E-02 + 1 15 2.9202821602466694E-03 2.6453981776124141E-01 7.6525296616004684E-02 1.8780956137549487E-02 + 1 16 3.2145385719803329E-04 2.8696425565429240E-01 4.5792284631233672E-02 2.3263495133568998E-02 + 1 17 2.4693757528509622E-04 1.3848731138266304E-01 1.7693289653297604E-02 9.7460303038080908E-03 + 1 18 5.0992836797990751E-03 5.8319173651547385E-01 2.3851656540978389E-02 3.7790771891778152E-02 + 1 19 3.2282960174310170E-04 2.1613962298381925E-01 1.7072560754702336E-02 1.4026518665786077E-02 + 1 20 4.9647513277769700E-02 1.6851617426880194E+00 1.4541325969622534E-01 1.0954306125703028E-01 + 1 21 3.4073471604482227E-03 3.1637071808861689E-01 1.8422597685566724E-02 2.0125274191649719E-02 + 1 22 1.3121382132811807E-04 1.0258348935693713E-01 6.3684016949344113E-03 6.6071626858835051E-03 + 1 23 3.3813162813665906E-02 9.1618560879938926E-01 8.1266384503339575E-02 5.7918502576695730E-02 + 1 24 4.1708500446352870E-04 1.5785966980407021E-01 4.6646981268568697E-03 9.8630700614506465E-03 + 1 25 7.3528900917695290E-04 5.9225627251013026E-02 3.7042174075139758E-03 3.3118079036492621E-03 + 1 26 8.9828333062972592E-03 1.9426085555380754E-01 2.4093377110646338E-02 1.0980657457661532E-02 + 1 27 2.1228022180417653E-04 8.7777813240869640E-03 2.0550705761547970E-03 5.8802103858137246E-04 + 2 1 1.5142595331454245E+00 1.0005711988559998E+01 2.6544664635087183E+00 6.7806617585688911E-01 + 2 2 4.4366445360926199E-01 4.6195409357987076E+00 9.6587051599896101E-01 3.3688559575009042E-01 + 2 3 1.1907810568758714E+00 7.5323544094345003E+00 2.0327396422723472E+00 5.0607867531004169E-01 + 2 4 2.7576036468694687E-01 3.3862131032504492E+00 6.5929732667024776E-01 2.5004687333979903E-01 + 2 5 8.0580777590695674E-01 4.5356481255168557E+00 1.2986230824577940E+00 2.9449908325462404E-01 + 2 6 1.0517053799863604E-01 1.8909877539194515E+00 3.0673921331641835E-01 1.4198497108573313E-01 + 2 7 5.6949141690859706E-01 2.6154328621607852E+00 8.4791273805289546E-01 1.5714071578589769E-01 + 2 8 2.3251646720171416E-02 9.3641034200657891E-01 1.1140979781150941E-01 6.9796654369842781E-02 + 2 9 5.1354161698115419E-01 1.8545341781448565E+00 7.2488398046527269E-01 9.8011511620611044E-02 + 2 10 1.1057465545812291E-01 2.9121456897811342E+00 4.7474421797982730E-01 2.3441807910092233E-01 + 2 11 3.5269317308496489E-01 1.0714592032613128E+00 5.3547944391821678E-01 4.5179661104166338E-02 + 2 12 3.0424313539726355E-02 2.5277642768509305E+00 3.1652845366685045E-01 2.1026891409654727E-01 + 2 13 1.5980022688828247E-01 6.6348817066386512E-01 3.7042498273566293E-01 3.0753700953611234E-02 + 2 14 2.7781847150922931E-03 2.3030057819082539E+00 1.7737800292869690E-01 1.8600239464755819E-01 + 2 15 9.5641036809349829E-03 3.9085233064570807E-01 1.5305059323200970E-01 2.7862233984302390E-02 + 2 16 3.7500170432292374E-06 2.0367068825281995E+00 5.4144316535640342E-02 1.4305857218443538E-01 + 2 17 2.4726232100491033E-03 3.4335400617385042E-01 1.6684597803376652E-02 2.1902951351570905E-02 + 2 18 1.7405672406959600E-05 5.6319316766205302E-02 9.5478184601751693E-04 3.3588039002222358E-03 + 2 19 5.4785372164647961E-02 3.0182597583971442E+00 2.0392031625072374E-01 2.0088721011517138E-01 + 2 20 1.3795234987637416E-03 4.9878800454061323E-01 1.2788265359933434E-02 3.1829452602194934E-02 + 2 21 6.6852772684814245E-03 2.6739582842775905E-01 3.0851859894574358E-02 1.7089886758420030E-02 + 2 22 1.7021399438214336E-02 1.4167796508898451E+00 7.6274174813506748E-02 9.2852504206357669E-02 + 2 23 1.9759831791959857E-02 4.0756378297923890E-01 4.8843503112397949E-02 2.5474332458885439E-02 + 2 24 5.2768632746659245E-04 2.3324050667069166E-01 7.2057238727819412E-03 1.4495435261027742E-02 + 2 25 1.1144879740881719E-05 3.5285772934088612E-02 4.2545240948261025E-04 2.0471375111485984E-03 + 2 26 1.6013752685265073E-02 8.2245409953473059E-01 5.0845479076508403E-02 5.2802834522172923E-02 + 2 27 3.9898424495541764E-03 7.8557031440100300E-01 3.6926675414383096E-02 5.0474458307624794E-02 + 2 28 4.0523818189746699E-05 9.8448068666705968E-02 1.2119235889230262E-03 5.7945700128174639E-03 + 2 29 6.0374649986214514E-03 9.9251766407842473E-02 1.6156539248049700E-02 5.5245068674135743E-03 + 2 30 2.9595491075765732E-03 1.5478537567691833E-01 1.1641055270110553E-02 8.9415193910804703E-03 diff --git a/examples/USER/nnp/nnp-data/weights.001.data b/examples/USER/nnp/nnp-data/weights.001.data new file mode 100644 index 0000000000..deb5012acb --- /dev/null +++ b/examples/USER/nnp/nnp-data/weights.001.data @@ -0,0 +1,1392 @@ +################################################################################ +# Neural network connection values (weights and biases). +################################################################################ +# Col Name Description +################################################################################ +# 1 connection Neural network connection value. +# 2 t Connection type (a = weight, b = bias). +# 3 index Index enumerating weights. +# 4 l_s Starting point layer (end point layer for biases). +# 5 n_s Starting point neuron in starting layer (end point neuron for biases). +# 6 l_e End point layer. +# 7 n_e End point neuron in end layer. +################################################################################ +# 1 2 3 4 5 6 7 +# connection t index l_s n_s l_e n_e +############################################################ + 1.2539155865352127E+00 a 1 0 1 1 1 + 2.2490365890661286E+00 a 2 0 1 1 2 + 4.9361851928374572E+00 a 3 0 1 1 3 + -2.3971991574908125E+00 a 4 0 1 1 4 + -1.8596992303156465E+00 a 5 0 1 1 5 + 3.8287764168815897E+00 a 6 0 1 1 6 + 7.4523181738636106E+00 a 7 0 1 1 7 + 6.0971861116881998E+00 a 8 0 1 1 8 + -8.7239359226117639E+00 a 9 0 1 1 9 + -1.8255232070184267E+01 a 10 0 1 1 10 + -7.8065643887610179E+00 a 11 0 1 1 11 + 1.4247237398130265E+01 a 12 0 1 1 12 + -3.2217879518334338E+00 a 13 0 1 1 13 + -5.7395252086520712E+00 a 14 0 1 1 14 + 2.0353040522911576E+00 a 15 0 1 1 15 + 7.7520578160630560E+00 a 16 0 1 1 16 + 2.9357257867412252E+00 a 17 0 1 1 17 + -2.9719860930100790E+00 a 18 0 1 1 18 + 8.9245382590288980E+00 a 19 0 1 1 19 + 6.6848134049442169E+00 a 20 0 1 1 20 + -2.2992719903495891E+00 a 21 0 1 1 21 + -1.4401533482181721E+01 a 22 0 1 1 22 + -2.0574070545285186E+00 a 23 0 1 1 23 + -6.3544667277888678E+00 a 24 0 1 1 24 + 3.9668360525851707E+00 a 25 0 1 1 25 + 1.0930597297534963E+01 a 26 0 2 1 1 + 3.0058866618169424E+00 a 27 0 2 1 2 + -4.9950943102999927E+00 a 28 0 2 1 3 + -1.9930957240687266E+00 a 29 0 2 1 4 + 1.6790893133342006E+00 a 30 0 2 1 5 + -4.5254006136507128E+00 a 31 0 2 1 6 + -9.6165021729265252E+00 a 32 0 2 1 7 + -8.7465722730176285E+00 a 33 0 2 1 8 + 1.5506950040431201E+01 a 34 0 2 1 9 + 2.1903342918227118E+01 a 35 0 2 1 10 + -1.0685216745153280E+01 a 36 0 2 1 11 + -2.5859690636594280E+01 a 37 0 2 1 12 + -3.2423603491405122E+00 a 38 0 2 1 13 + 5.3753900550878555E+00 a 39 0 2 1 14 + -3.0291935617567991E+00 a 40 0 2 1 15 + -1.3534893178408465E+01 a 41 0 2 1 16 + -5.7625138055631471E+00 a 42 0 2 1 17 + 1.0216765318459601E+01 a 43 0 2 1 18 + -1.4416012930050949E+01 a 44 0 2 1 19 + -4.7226757471872144E-01 a 45 0 2 1 20 + 7.8981385188798026E+00 a 46 0 2 1 21 + 1.2202710023744410E+00 a 47 0 2 1 22 + 8.0560891210932120E+00 a 48 0 2 1 23 + 4.5972445013263297E-01 a 49 0 2 1 24 + 1.3374237019728858E+01 a 50 0 2 1 25 + -1.0644910441621166E+01 a 51 0 3 1 1 + -5.6098794516515920E+00 a 52 0 3 1 2 + -1.0236653403367724E+01 a 53 0 3 1 3 + 1.3552139405799508E+00 a 54 0 3 1 4 + 1.3201025058567883E+00 a 55 0 3 1 5 + 1.6531266759009673E+00 a 56 0 3 1 6 + -1.0303768926395865E+01 a 57 0 3 1 7 + 1.9927521303470008E-01 a 58 0 3 1 8 + 8.1216226663758366E+00 a 59 0 3 1 9 + 2.1349555016157687E+01 a 60 0 3 1 10 + 1.0105416692705148E+01 a 61 0 3 1 11 + -1.1444993918278378E+01 a 62 0 3 1 12 + 2.9861675555209538E-01 a 63 0 3 1 13 + 9.3552992513120543E+00 a 64 0 3 1 14 + -2.2844869025933630E+00 a 65 0 3 1 15 + -3.8047300595857316E+00 a 66 0 3 1 16 + -3.0512161452147448E+00 a 67 0 3 1 17 + 2.7887340590896472E+00 a 68 0 3 1 18 + -1.5988439945122812E+01 a 69 0 3 1 19 + -1.6917164763280326E+01 a 70 0 3 1 20 + 3.2170907488709326E+00 a 71 0 3 1 21 + 2.1641888770160929E+01 a 72 0 3 1 22 + 3.2604671723420497E+00 a 73 0 3 1 23 + 1.5230689068493776E+01 a 74 0 3 1 24 + -1.4713830039823366E+01 a 75 0 3 1 25 + -2.3544214523969775E+00 a 76 0 4 1 1 + -5.8299691629399382E+00 a 77 0 4 1 2 + 1.7168784391956539E+01 a 78 0 4 1 3 + 1.0050003860864617E+01 a 79 0 4 1 4 + 3.5168903759752812E+00 a 80 0 4 1 5 + -4.4828111046589010E+00 a 81 0 4 1 6 + 1.8299193380051442E+01 a 82 0 4 1 7 + 6.9717289110204188E+00 a 83 0 4 1 8 + -2.0364082994445859E+01 a 84 0 4 1 9 + -3.5062338388300589E+01 a 85 0 4 1 10 + 1.8010375764887119E+01 a 86 0 4 1 11 + 4.2133659287179640E+01 a 87 0 4 1 12 + 1.1988736553417061E+01 a 88 0 4 1 13 + -1.2351529706885179E+01 a 89 0 4 1 14 + 5.4139212296285057E+00 a 90 0 4 1 15 + 1.6705967069968899E+01 a 91 0 4 1 16 + 8.3219076874511639E+00 a 92 0 4 1 17 + -1.8555777504879448E+01 a 93 0 4 1 18 + 3.1433889377775369E+01 a 94 0 4 1 19 + 6.7043459658252780E-01 a 95 0 4 1 20 + -1.3837570456349678E+01 a 96 0 4 1 21 + 5.0298368971353791E-01 a 97 0 4 1 22 + -2.2656240789613065E+01 a 98 0 4 1 23 + -2.4243684644962626E+00 a 99 0 4 1 24 + -2.8280330035212309E+01 a 100 0 4 1 25 + 4.2306100814115322E+00 a 101 0 5 1 1 + 9.9770374716830084E+00 a 102 0 5 1 2 + 2.0487048112933808E+00 a 103 0 5 1 3 + -1.3702212470739978E+00 a 104 0 5 1 4 + 2.8131124422603837E+00 a 105 0 5 1 5 + 3.2845640151619522E-03 a 106 0 5 1 6 + 2.4065616021196026E+00 a 107 0 5 1 7 + -1.0461000723401572E+01 a 108 0 5 1 8 + -1.0180720750329515E+01 a 109 0 5 1 9 + -8.8668996772076660E+00 a 110 0 5 1 10 + 6.5256092481271502E+00 a 111 0 5 1 11 + -6.9831054240027211E+00 a 112 0 5 1 12 + 4.0892074148312876E+00 a 113 0 5 1 13 + -5.1951354450201128E+00 a 114 0 5 1 14 + 1.6657989141753051E+00 a 115 0 5 1 15 + -7.3542511663155619E+00 a 116 0 5 1 16 + 5.1573102842565115E+00 a 117 0 5 1 17 + 3.4929930175122172E+00 a 118 0 5 1 18 + 2.5382184218789963E+00 a 119 0 5 1 19 + 2.0045179007481050E+01 a 120 0 5 1 20 + -1.6165269676512768E+00 a 121 0 5 1 21 + 2.4869117790922393E+00 a 122 0 5 1 22 + 6.0131560843540068E+00 a 123 0 5 1 23 + -1.2231651850388728E+01 a 124 0 5 1 24 + 3.5372450187997345E+01 a 125 0 5 1 25 + -1.0433252604911765E+01 a 126 0 6 1 1 + -2.3715834640656657E+00 a 127 0 6 1 2 + -1.8239608965373137E+01 a 128 0 6 1 3 + -3.6510816169583777E+00 a 129 0 6 1 4 + -1.7632327653119535E+01 a 130 0 6 1 5 + 1.0040509177650593E+01 a 131 0 6 1 6 + -1.5407385349225459E+01 a 132 0 6 1 7 + -7.0553605774310779E-01 a 133 0 6 1 8 + 1.3204892207903583E+01 a 134 0 6 1 9 + 2.9596389655595953E+01 a 135 0 6 1 10 + -2.0620173259628203E+01 a 136 0 6 1 11 + -3.0803380363815094E+01 a 137 0 6 1 12 + -1.4917676387082279E+01 a 138 0 6 1 13 + 9.6935054799166185E+00 a 139 0 6 1 14 + 4.6937319413252743E+00 a 140 0 6 1 15 + -5.0263591258131060E+00 a 141 0 6 1 16 + -9.7243575590712439E+00 a 142 0 6 1 17 + 1.5625340951727363E+01 a 143 0 6 1 18 + -2.8266776356585389E+01 a 144 0 6 1 19 + 2.5386057418612946E+00 a 145 0 6 1 20 + 1.6302330128073283E+01 a 146 0 6 1 21 + -8.5166226512297030E+00 a 147 0 6 1 22 + 2.5040570504752605E+01 a 148 0 6 1 23 + -8.5008658358878897E-01 a 149 0 6 1 24 + 2.0458930574550632E+01 a 150 0 6 1 25 + 7.8529627796707677E+00 a 151 0 7 1 1 + -4.5279242985866821E+00 a 152 0 7 1 2 + 4.7942839133231594E+00 a 153 0 7 1 3 + -6.2431002330064649E+00 a 154 0 7 1 4 + 4.3358077462982054E+00 a 155 0 7 1 5 + -6.8037589596444281E+00 a 156 0 7 1 6 + 1.8980667946224101E+00 a 157 0 7 1 7 + 1.9802532239433695E+01 a 158 0 7 1 8 + 8.4826746941006572E+00 a 159 0 7 1 9 + 4.3614399548619884E+00 a 160 0 7 1 10 + -1.6073795583709572E+01 a 161 0 7 1 11 + 1.6345358363876109E+01 a 162 0 7 1 12 + -8.4662611499242502E+00 a 163 0 7 1 13 + 8.0952183951712298E-01 a 164 0 7 1 14 + -1.1658877435292819E+01 a 165 0 7 1 15 + 1.3236001648494756E+01 a 166 0 7 1 16 + -1.2875720369407999E+01 a 167 0 7 1 17 + -2.0324369268053388E+00 a 168 0 7 1 18 + 1.0874203669721311E+01 a 169 0 7 1 19 + -1.7284078771261807E+01 a 170 0 7 1 20 + -2.9714643625232693E+00 a 171 0 7 1 21 + -1.9329510057793893E+01 a 172 0 7 1 22 + -1.0307360045133033E+01 a 173 0 7 1 23 + 4.2080100442235366E+00 a 174 0 7 1 24 + -3.8428801618815640E+01 a 175 0 7 1 25 + -5.7115809702208011E+00 a 176 0 8 1 1 + 3.7056719936859976E+00 a 177 0 8 1 2 + 1.3966886453850773E+01 a 178 0 8 1 3 + 1.4914576601367306E+00 a 179 0 8 1 4 + 2.3064842131482180E+01 a 180 0 8 1 5 + -7.9541458640647837E+00 a 181 0 8 1 6 + 1.1404558568383607E+01 a 182 0 8 1 7 + -3.6573585449246653E+00 a 183 0 8 1 8 + -4.9561031023561952E+00 a 184 0 8 1 9 + -1.2066502127308031E+01 a 185 0 8 1 10 + 1.1843534640137769E+01 a 186 0 8 1 11 + 1.9616511468009570E+01 a 187 0 8 1 12 + 1.3417323502712899E+01 a 188 0 8 1 13 + -4.0678344152400447E-01 a 189 0 8 1 14 + -1.9507569881192218E+01 a 190 0 8 1 15 + -6.5169441798944456E+00 a 191 0 8 1 16 + 5.2178654198561141E+00 a 192 0 8 1 17 + -1.4240290695317738E+01 a 193 0 8 1 18 + 2.1343226894748700E+01 a 194 0 8 1 19 + -2.7623196634808984E+00 a 195 0 8 1 20 + -9.2884558848667620E+00 a 196 0 8 1 21 + 6.0789935054152480E+00 a 197 0 8 1 22 + -1.6374423786268370E+01 a 198 0 8 1 23 + 2.1963692862828306E+00 a 199 0 8 1 24 + -1.6477619048440658E+01 a 200 0 8 1 25 + -5.4652541826246170E-01 a 201 0 9 1 1 + 2.9686567892883864E+00 a 202 0 9 1 2 + -6.5132434460788122E+00 a 203 0 9 1 3 + -4.8064981499516870E+00 a 204 0 9 1 4 + -6.9010601385214585E+00 a 205 0 9 1 5 + 6.0243408819244291E+00 a 206 0 9 1 6 + -4.7253212010125401E+00 a 207 0 9 1 7 + 4.4892697548578031E+00 a 208 0 9 1 8 + 2.8691390395969503E+00 a 209 0 9 1 9 + 4.8905119819707235E+00 a 210 0 9 1 10 + 8.0125760629983089E-01 a 211 0 9 1 11 + -7.1577963461867160E+00 a 212 0 9 1 12 + -7.1141706979801747E+00 a 213 0 9 1 13 + -9.2736585757849166E-01 a 214 0 9 1 14 + 1.4028916807873271E+01 a 215 0 9 1 15 + -3.6974926166345901E-01 a 216 0 9 1 16 + 1.1388278367792175E+00 a 217 0 9 1 17 + -6.0994976654902651E+00 a 218 0 9 1 18 + -8.0444468725663523E+00 a 219 0 9 1 19 + 1.0211480086068931E+00 a 220 0 9 1 20 + 8.7528435866785532E+00 a 221 0 9 1 21 + -5.2843722120300427E+00 a 222 0 9 1 22 + 8.0008339624272278E+00 a 223 0 9 1 23 + -1.5207898046701156E+00 a 224 0 9 1 24 + 2.7661111317119200E+00 a 225 0 9 1 25 + -7.8044247731064234E+00 a 226 0 10 1 1 + 1.3132447209010347E+00 a 227 0 10 1 2 + -4.7278121268044551E+00 a 228 0 10 1 3 + 3.6601689040473118E+00 a 229 0 10 1 4 + -9.6267150529386480E+00 a 230 0 10 1 5 + 2.6091275381190444E+00 a 231 0 10 1 6 + -3.1848404329162414E+00 a 232 0 10 1 7 + -9.5389607349646521E+00 a 233 0 10 1 8 + -2.6987985247358575E+00 a 234 0 10 1 9 + -6.2833399930784530E+00 a 235 0 10 1 10 + 1.6489253885816758E+01 a 236 0 10 1 11 + -1.7107772306689530E+01 a 237 0 10 1 12 + 3.4088466354687279E+00 a 238 0 10 1 13 + -1.2348801832413381E+00 a 239 0 10 1 14 + 1.0154267479292665E+01 a 240 0 10 1 15 + -6.0502934471257728E+00 a 241 0 10 1 16 + 1.0160696494987546E+01 a 242 0 10 1 17 + 2.4492206768318772E+00 a 243 0 10 1 18 + -7.3188978315096689E+00 a 244 0 10 1 19 + 8.8753153140216963E+00 a 245 0 10 1 20 + -3.1414578717572117E+00 a 246 0 10 1 21 + 1.1781935452921802E+01 a 247 0 10 1 22 + 4.2162781958159847E+00 a 248 0 10 1 23 + 6.3461905733038693E+00 a 249 0 10 1 24 + 1.8925601045188980E+01 a 250 0 10 1 25 + 4.6477877749677310E+00 a 251 0 11 1 1 + -1.6344868480777182E+00 a 252 0 11 1 2 + 3.2048890105307217E+00 a 253 0 11 1 3 + 3.0235679638931630E+00 a 254 0 11 1 4 + 4.2225303889491732E+00 a 255 0 11 1 5 + -3.7068606308347563E+00 a 256 0 11 1 6 + 1.9942469773127267E+00 a 257 0 11 1 7 + -7.5618287055529032E-02 a 258 0 11 1 8 + -4.3483903145704721E+00 a 259 0 11 1 9 + -6.4188170693407043E-01 a 260 0 11 1 10 + -1.7151247607053004E+00 a 261 0 11 1 11 + 1.1831911154836730E+00 a 262 0 11 1 12 + 8.5390777529689998E+00 a 263 0 11 1 13 + -1.2567544621838858E+00 a 264 0 11 1 14 + -6.5836237830818582E+00 a 265 0 11 1 15 + 1.0147377375097664E+00 a 266 0 11 1 16 + -4.1323735892759546E+00 a 267 0 11 1 17 + -2.6316384615004618E-01 a 268 0 11 1 18 + 2.4143335868624547E+00 a 269 0 11 1 19 + 2.6061142983025900E+00 a 270 0 11 1 20 + -4.4998702636369865E+00 a 271 0 11 1 21 + 1.3890302621242303E-02 a 272 0 11 1 22 + -7.8084731995076311E+00 a 273 0 11 1 23 + -1.2474549203322676E+00 a 274 0 11 1 24 + 4.4163797527377591E-02 a 275 0 11 1 25 + 2.8407201242614737E+00 a 276 0 12 1 1 + 1.3632905709235899E-01 a 277 0 12 1 2 + 1.2685237989280235E-01 a 278 0 12 1 3 + 2.2654235227594675E+00 a 279 0 12 1 4 + 2.5395548140674755E+00 a 280 0 12 1 5 + -9.3520481583438890E+00 a 281 0 12 1 6 + -1.9669962665207585E-01 a 282 0 12 1 7 + 5.7045527454931977E-01 a 283 0 12 1 8 + -2.9864201174461678E+00 a 284 0 12 1 9 + 3.9052149431886622E+00 a 285 0 12 1 10 + -9.0833042649786648E+00 a 286 0 12 1 11 + 5.0812751299215018E+00 a 287 0 12 1 12 + -1.6164442006858799E+00 a 288 0 12 1 13 + -5.6075225833495623E-01 a 289 0 12 1 14 + -2.3615673680840406E+00 a 290 0 12 1 15 + 3.0947011553478285E+00 a 291 0 12 1 16 + -8.3551823427496270E+00 a 292 0 12 1 17 + 5.9941345197218849E+00 a 293 0 12 1 18 + -1.8953925485822552E-02 a 294 0 12 1 19 + -2.7547195481515581E+00 a 295 0 12 1 20 + -1.9804726751840331E+00 a 296 0 12 1 21 + -3.8317244940395995E-01 a 297 0 12 1 22 + 4.8745188041841092E-01 a 298 0 12 1 23 + -8.4590760980141351E+00 a 299 0 12 1 24 + 1.0766033918315021E+00 a 300 0 12 1 25 + -2.2091804164374422E+00 a 301 0 13 1 1 + -5.5101800091867448E-01 a 302 0 13 1 2 + -1.0329728270730296E+00 a 303 0 13 1 3 + 3.9513433270607795E-01 a 304 0 13 1 4 + 8.1753415524151574E-01 a 305 0 13 1 5 + 1.0617142014915946E+00 a 306 0 13 1 6 + 7.6430260193959443E-01 a 307 0 13 1 7 + -1.1879548313844361E+00 a 308 0 13 1 8 + 3.8965303928245874E+00 a 309 0 13 1 9 + -1.9243989741788450E-01 a 310 0 13 1 10 + 6.6899630526626697E-01 a 311 0 13 1 11 + -3.0409636682424569E-02 a 312 0 13 1 12 + -3.6696456050264934E+00 a 313 0 13 1 13 + 6.4476959289475333E-01 a 314 0 13 1 14 + 1.0941826410717908E+00 a 315 0 13 1 15 + 9.1233922902211828E-01 a 316 0 13 1 16 + 2.3380607653989314E+00 a 317 0 13 1 17 + 1.4900790223732949E+00 a 318 0 13 1 18 + 1.0175935823188792E-01 a 319 0 13 1 19 + -3.2833166264125635E-01 a 320 0 13 1 20 + 2.2404532929727599E+00 a 321 0 13 1 21 + 2.3015461275183751E+00 a 322 0 13 1 22 + 2.9701302578874191E+00 a 323 0 13 1 23 + 1.4884592608001286E+00 a 324 0 13 1 24 + 6.5739654827696281E-01 a 325 0 13 1 25 + -4.0844724724706225E-02 a 326 0 14 1 1 + 2.1132913535189823E+00 a 327 0 14 1 2 + 1.6984674033189348E-01 a 328 0 14 1 3 + 2.3602668915812313E+00 a 329 0 14 1 4 + -5.4150131953500802E-01 a 330 0 14 1 5 + 7.1929135468647432E-01 a 331 0 14 1 6 + -8.6276394520437083E-01 a 332 0 14 1 7 + -3.0269268442401148E-01 a 333 0 14 1 8 + 7.2004767041031992E-01 a 334 0 14 1 9 + -8.3403359555685590E+00 a 335 0 14 1 10 + 2.5733568297832323E+00 a 336 0 14 1 11 + -6.6315509197147655E+00 a 337 0 14 1 12 + -5.5978389284457852E-01 a 338 0 14 1 13 + -1.6614855167111382E+00 a 339 0 14 1 14 + 2.4806900600279209E+00 a 340 0 14 1 15 + -2.7654255445642080E+00 a 341 0 14 1 16 + 5.9807541004471867E+00 a 342 0 14 1 17 + -1.4129213744863609E+00 a 343 0 14 1 18 + -1.2144347425099116E+00 a 344 0 14 1 19 + 1.2585251121614049E+00 a 345 0 14 1 20 + -2.7494266150484548E-02 a 346 0 14 1 21 + 1.6454999809576432E+00 a 347 0 14 1 22 + -2.8137449649914903E-01 a 348 0 14 1 23 + 9.9245394839698200E+00 a 349 0 14 1 24 + 2.5577330219319609E+00 a 350 0 14 1 25 + 1.2522691243854331E+00 a 351 0 15 1 1 + 7.8313784660978394E-02 a 352 0 15 1 2 + 3.1763922073800611E-02 a 353 0 15 1 3 + 3.4188945294744338E-02 a 354 0 15 1 4 + -8.6622970928039988E-01 a 355 0 15 1 5 + 3.6860164239730122E+00 a 356 0 15 1 6 + -3.3949083435068763E+00 a 357 0 15 1 7 + 6.0646320100112794E-01 a 358 0 15 1 8 + -1.7673251834962784E+00 a 359 0 15 1 9 + -5.3925118752606260E-01 a 360 0 15 1 10 + -1.0331348489132786E+00 a 361 0 15 1 11 + -2.0698850918329875E-01 a 362 0 15 1 12 + -1.2621725468122078E+00 a 363 0 15 1 13 + -2.0464390969411825E+00 a 364 0 15 1 14 + 3.5254308731162348E-01 a 365 0 15 1 15 + 3.9124440442557923E-01 a 366 0 15 1 16 + -7.7012371240908117E-01 a 367 0 15 1 17 + 1.3359296738897253E-01 a 368 0 15 1 18 + -5.3020609669352542E-02 a 369 0 15 1 19 + 1.7815933485647952E+00 a 370 0 15 1 20 + -1.8140219360009939E+00 a 371 0 15 1 21 + -2.4031367892025959E-01 a 372 0 15 1 22 + -1.0331886247762312E+00 a 373 0 15 1 23 + -4.0371034107321985E-01 a 374 0 15 1 24 + 4.6695095033369494E-01 a 375 0 15 1 25 + -4.0996434431182510E-01 a 376 0 16 1 1 + -6.3274791882318870E-01 a 377 0 16 1 2 + -5.2519480263023562E-02 a 378 0 16 1 3 + 2.7887880136245935E-01 a 379 0 16 1 4 + 4.9317366216865666E-01 a 380 0 16 1 5 + 5.9424828755867471E+00 a 381 0 16 1 6 + -2.2488215509134257E-01 a 382 0 16 1 7 + 7.0605801275715885E-01 a 383 0 16 1 8 + -8.2163540811135860E-02 a 384 0 16 1 9 + 2.0787775446114583E+00 a 385 0 16 1 10 + -2.1721897437058210E-01 a 386 0 16 1 11 + 7.4402228127749348E-01 a 387 0 16 1 12 + -1.9304485045119268E-01 a 388 0 16 1 13 + -1.2399500754393407E-01 a 389 0 16 1 14 + -4.3737873376184684E-02 a 390 0 16 1 15 + 4.6291172363105998E-01 a 391 0 16 1 16 + -4.2151918315290882E-01 a 392 0 16 1 17 + 8.8573061946292186E-01 a 393 0 16 1 18 + -4.9018291809706446E-03 a 394 0 16 1 19 + 2.1600118766284740E-01 a 395 0 16 1 20 + -6.0921360921956091E-01 a 396 0 16 1 21 + 3.7680398153138250E-01 a 397 0 16 1 22 + 3.9538220416849512E-01 a 398 0 16 1 23 + 7.1514131111918777E+00 a 399 0 16 1 24 + 1.8273026350401467E+00 a 400 0 16 1 25 + 3.7215329658563528E-01 a 401 0 17 1 1 + -4.6179059447012316E-01 a 402 0 17 1 2 + 1.5899087171699287E+00 a 403 0 17 1 3 + 1.7518250015346359E+00 a 404 0 17 1 4 + -3.3536813319312186E-01 a 405 0 17 1 5 + -4.2278010405207027E+00 a 406 0 17 1 6 + -8.5243820518804692E-01 a 407 0 17 1 7 + 9.0881598247646100E-01 a 408 0 17 1 8 + 3.8965208905715447E+00 a 409 0 17 1 9 + 5.6011288360587919E-01 a 410 0 17 1 10 + -5.2836813948608186E-01 a 411 0 17 1 11 + -3.0140016204698079E+00 a 412 0 17 1 12 + -1.9797293270131460E+00 a 413 0 17 1 13 + 6.0697489937941917E-01 a 414 0 17 1 14 + -2.1005255233620201E+00 a 415 0 17 1 15 + 2.9763262730586608E+00 a 416 0 17 1 16 + 4.9371027939296888E-02 a 417 0 17 1 17 + 7.7947575427479343E-01 a 418 0 17 1 18 + -1.6149233512425079E+00 a 419 0 17 1 19 + -7.3629998317838286E-01 a 420 0 17 1 20 + 5.8782288151755957E-01 a 421 0 17 1 21 + 2.9962120057051194E+00 a 422 0 17 1 22 + -6.0090267757936966E-01 a 423 0 17 1 23 + 1.7409609229829246E+00 a 424 0 17 1 24 + 3.3020654831076395E+00 a 425 0 17 1 25 + -1.2816721217899969E+01 a 426 0 18 1 1 + 1.0436514261209778E+01 a 427 0 18 1 2 + -1.0151319671000456E+01 a 428 0 18 1 3 + -3.6976525545097716E+00 a 429 0 18 1 4 + 2.7730233584286434E+00 a 430 0 18 1 5 + 1.2077948655368917E+01 a 431 0 18 1 6 + 2.9310682735219878E-01 a 432 0 18 1 7 + 9.1301886461102555E+00 a 433 0 18 1 8 + -6.9113821449959776E+00 a 434 0 18 1 9 + 5.1395229852384059E+00 a 435 0 18 1 10 + 1.9015703072700905E+01 a 436 0 18 1 11 + 6.2782884794967897E-01 a 437 0 18 1 12 + -1.1199030114408972E+00 a 438 0 18 1 13 + 8.4078245944942065E+00 a 439 0 18 1 14 + -2.1970214523819944E+01 a 440 0 18 1 15 + -2.9639951656713857E+00 a 441 0 18 1 16 + -2.1307855911438480E+00 a 442 0 18 1 17 + -3.4033873099977683E+00 a 443 0 18 1 18 + 7.7473570074768299E+00 a 444 0 18 1 19 + 4.2436938561983428E+00 a 445 0 18 1 20 + -2.2299485919721440E+00 a 446 0 18 1 21 + -5.4685838991617004E+00 a 447 0 18 1 22 + 4.1596479567520044E+00 a 448 0 18 1 23 + 5.7827395639070400E-01 a 449 0 18 1 24 + -1.3238378482288077E+01 a 450 0 18 1 25 + -1.5376889656330761E+00 a 451 0 19 1 1 + -5.1783057661781051E-01 a 452 0 19 1 2 + -9.6241029842402326E-01 a 453 0 19 1 3 + -3.0836536522411823E-01 a 454 0 19 1 4 + 4.4745903320325719E-01 a 455 0 19 1 5 + 5.3498170837630878E+00 a 456 0 19 1 6 + 1.8463477451296126E+00 a 457 0 19 1 7 + -3.0028303108002357E+00 a 458 0 19 1 8 + -7.6522954243804211E+00 a 459 0 19 1 9 + 4.3455658713814698E+00 a 460 0 19 1 10 + -3.2051687848902133E+00 a 461 0 19 1 11 + 5.9031887582745117E+00 a 462 0 19 1 12 + 1.7182826335134822E+00 a 463 0 19 1 13 + -1.1087850989792540E+00 a 464 0 19 1 14 + 6.5459467139243510E-01 a 465 0 19 1 15 + -8.6846968032549032E-01 a 466 0 19 1 16 + 7.7880149625881245E-01 a 467 0 19 1 17 + 3.7923435729638755E-01 a 468 0 19 1 18 + -4.1156418175788360E-03 a 469 0 19 1 19 + 1.5121918856212993E-01 a 470 0 19 1 20 + 5.3975394808394794E-01 a 471 0 19 1 21 + -1.0682250482164672E+00 a 472 0 19 1 22 + -1.3751142356632712E-02 a 473 0 19 1 23 + -4.4286268574519063E+00 a 474 0 19 1 24 + -3.8680702159397593E+00 a 475 0 19 1 25 + 1.2333171905058354E+01 a 476 0 20 1 1 + -1.2248288905309629E+01 a 477 0 20 1 2 + 1.1695817130234104E+01 a 478 0 20 1 3 + -7.8785015084941037E+00 a 479 0 20 1 4 + -1.4385700790662661E+01 a 480 0 20 1 5 + -6.3617417012959558E+00 a 481 0 20 1 6 + -1.1937360895545199E+00 a 482 0 20 1 7 + -9.1684602521855272E+00 a 483 0 20 1 8 + 1.9669228421457884E+01 a 484 0 20 1 9 + -1.5792577099561850E+01 a 485 0 20 1 10 + -7.6432398066341323E+00 a 486 0 20 1 11 + -1.0108096567461985E+01 a 487 0 20 1 12 + 8.8060728526554204E+00 a 488 0 20 1 13 + -1.0427209148169657E+01 a 489 0 20 1 14 + 3.1308828557374330E+01 a 490 0 20 1 15 + 6.1661737865740118E-01 a 491 0 20 1 16 + 1.2939893767446456E+01 a 492 0 20 1 17 + -1.5461694126933636E+00 a 493 0 20 1 18 + -1.2038322196001923E+01 a 494 0 20 1 19 + -1.1053447086628237E+01 a 495 0 20 1 20 + -3.6646931967187752E+00 a 496 0 20 1 21 + 4.3536703302367634E+00 a 497 0 20 1 22 + -9.5740042206319895E+00 a 498 0 20 1 23 + 6.5506713146493221E+00 a 499 0 20 1 24 + 1.7996563040005302E+01 a 500 0 20 1 25 + -6.2233520157604687E+00 a 501 0 21 1 1 + 1.2582110687675435E+01 a 502 0 21 1 2 + 9.2384881293313938E+00 a 503 0 21 1 3 + 1.7728059851918401E+00 a 504 0 21 1 4 + 3.6362985878777967E+00 a 505 0 21 1 5 + 3.2556969315744624E+01 a 506 0 21 1 6 + -3.1199993872880469E+00 a 507 0 21 1 7 + -9.8648099790168031E-01 a 508 0 21 1 8 + 3.0415184443561860E+00 a 509 0 21 1 9 + 9.0132436362301132E+00 a 510 0 21 1 10 + 1.2467154046410556E+01 a 511 0 21 1 11 + -1.0022834816628277E+01 a 512 0 21 1 12 + 1.2841138513527113E+01 a 513 0 21 1 13 + -1.7792021756823460E+00 a 514 0 21 1 14 + 7.3091411430574293E-01 a 515 0 21 1 15 + -1.0724499121880873E+01 a 516 0 21 1 16 + 1.6112171497612238E+01 a 517 0 21 1 17 + -1.7406158632935846E+01 a 518 0 21 1 18 + 5.3916736388765214E+00 a 519 0 21 1 19 + -7.7225460422381653E+00 a 520 0 21 1 20 + 2.3021534467146760E+00 a 521 0 21 1 21 + 1.3406099145213464E+01 a 522 0 21 1 22 + -1.2054205801151265E+00 a 523 0 21 1 23 + 9.7306420210947220E+00 a 524 0 21 1 24 + -4.6445749018946547E-01 a 525 0 21 1 25 + 8.7918872659331615E-01 a 526 0 22 1 1 + -7.6117540134922406E+00 a 527 0 22 1 2 + -4.8478661221876749E+00 a 528 0 22 1 3 + 1.4617626439797988E+00 a 529 0 22 1 4 + -1.5455882316982803E+01 a 530 0 22 1 5 + -4.6137715289223786E+00 a 531 0 22 1 6 + 2.3546419033386115E-01 a 532 0 22 1 7 + 2.1761110510614574E+00 a 533 0 22 1 8 + -5.1677977620532154E+00 a 534 0 22 1 9 + -1.4882285697135211E+01 a 535 0 22 1 10 + 1.0301372492313179E-01 a 536 0 22 1 11 + 4.7250270523796614E+00 a 537 0 22 1 12 + -3.9540977630973981E+00 a 538 0 22 1 13 + 3.7572869870669962E-02 a 539 0 22 1 14 + 5.7824523539218378E+00 a 540 0 22 1 15 + 1.5920937063840029E+01 a 541 0 22 1 16 + -6.4457401331127953E+00 a 542 0 22 1 17 + 1.4760098673939730E+01 a 543 0 22 1 18 + -3.1851966722140621E+00 a 544 0 22 1 19 + -6.5612349589638175E-01 a 545 0 22 1 20 + -6.0605595342603724E+00 a 546 0 22 1 21 + 2.4885037228656932E+00 a 547 0 22 1 22 + 7.1329940025026239E+00 a 548 0 22 1 23 + 4.1374739319645739E+00 a 549 0 22 1 24 + 3.6029016264835967E+00 a 550 0 22 1 25 + 1.2363607231182684E+01 a 551 0 23 1 1 + -7.3434070317286881E+00 a 552 0 23 1 2 + -2.5771398444943060E+01 a 553 0 23 1 3 + 7.9447100884094723E+00 a 554 0 23 1 4 + 1.1236370652932257E+01 a 555 0 23 1 5 + -3.2693616781814541E+00 a 556 0 23 1 6 + 5.1726287293391264E+00 a 557 0 23 1 7 + -4.3839166070810434E+00 a 558 0 23 1 8 + -1.2567878212324985E+01 a 559 0 23 1 9 + 7.6963978006043920E-01 a 560 0 23 1 10 + -9.6823335725588286E+00 a 561 0 23 1 11 + 2.6373675368069843E+01 a 562 0 23 1 12 + -1.9268994406736752E+01 a 563 0 23 1 13 + 9.9570415954549052E+00 a 564 0 23 1 14 + -8.3061207224239642E-01 a 565 0 23 1 15 + 2.2416229924934652E+00 a 566 0 23 1 16 + -1.8618841390677670E+01 a 567 0 23 1 17 + 1.1285982635789344E+01 a 568 0 23 1 18 + -9.1025674570559403E+00 a 569 0 23 1 19 + 1.0247105434841757E+01 a 570 0 23 1 20 + 1.1883653296768234E+01 a 571 0 23 1 21 + -9.7582716153093809E+00 a 572 0 23 1 22 + 1.5602371016441694E+00 a 573 0 23 1 23 + -2.9851501138691745E+01 a 574 0 23 1 24 + -1.8903447907877968E+01 a 575 0 23 1 25 + 4.7794864082498059E+00 a 576 0 24 1 1 + 7.9854265208273789E+00 a 577 0 24 1 2 + 9.9574318123278225E+00 a 578 0 24 1 3 + 5.6224088183628771E+00 a 579 0 24 1 4 + 6.8665727047098404E+00 a 580 0 24 1 5 + -1.8965069809691805E+01 a 581 0 24 1 6 + -2.6421877330866237E+00 a 582 0 24 1 7 + 2.4625070145486490E-02 a 583 0 24 1 8 + -2.6693235701328684E+00 a 584 0 24 1 9 + 5.4728246982445574E+00 a 585 0 24 1 10 + -1.2171367932487710E+01 a 586 0 24 1 11 + -6.8682042213632037E+00 a 587 0 24 1 12 + 2.6512863194146683E+00 a 588 0 24 1 13 + -3.9973556043849836E+00 a 589 0 24 1 14 + -9.3205728660463871E-01 a 590 0 24 1 15 + 3.2324916643329225E+00 a 591 0 24 1 16 + -6.8039737193603345E-01 a 592 0 24 1 17 + -4.6642556009879454E+00 a 593 0 24 1 18 + 5.4630234415035872E+00 a 594 0 24 1 19 + -7.7295749341472297E-01 a 595 0 24 1 20 + -1.8620645226195232E+00 a 596 0 24 1 21 + 3.0871020003395331E+00 a 597 0 24 1 22 + -2.9531926287649015E+00 a 598 0 24 1 23 + 3.3257855485405221E+00 a 599 0 24 1 24 + 1.2804435513171249E+01 a 600 0 24 1 25 + 2.3360099536244165E+00 a 601 0 25 1 1 + -6.9215341802863772E+00 a 602 0 25 1 2 + -5.9116329105078513E+00 a 603 0 25 1 3 + -9.3715628057287557E+00 a 604 0 25 1 4 + 7.8009930032983343E-02 a 605 0 25 1 5 + -1.3948874121311254E+01 a 606 0 25 1 6 + 3.6551397861519712E+00 a 607 0 25 1 7 + -2.7007034003519794E+00 a 608 0 25 1 8 + 7.1402704530469387E+00 a 609 0 25 1 9 + 5.4591337137198448E-01 a 610 0 25 1 10 + 2.5018603182300429E-02 a 611 0 25 1 11 + 1.1202938490196342E+01 a 612 0 25 1 12 + -1.2762286571383612E+00 a 613 0 25 1 13 + 5.4150263035162389E+00 a 614 0 25 1 14 + -2.3878760919535877E+00 a 615 0 25 1 15 + -2.3641671060547437E-01 a 616 0 25 1 16 + -3.5238751019043510E+00 a 617 0 25 1 17 + -2.5320654329006342E+00 a 618 0 25 1 18 + -3.6122736073834485E+00 a 619 0 25 1 19 + 2.0131984362076700E+00 a 620 0 25 1 20 + 3.4236490202245986E+00 a 621 0 25 1 21 + -7.6747580583977593E+00 a 622 0 25 1 22 + -1.0435428931415499E+01 a 623 0 25 1 23 + -1.0695841064866968E+01 a 624 0 25 1 24 + 3.3551318979354909E+00 a 625 0 25 1 25 + -1.0344973684340230E+01 a 626 0 26 1 1 + -7.4350553321899893E-01 a 627 0 26 1 2 + 1.7667157429228766E+01 a 628 0 26 1 3 + -4.6108734048138764E+00 a 629 0 26 1 4 + 6.3937736609746221E-02 a 630 0 26 1 5 + 1.5342947379458792E+01 a 631 0 26 1 6 + -6.4528006594361675E-01 a 632 0 26 1 7 + 6.9773139084411318E+00 a 633 0 26 1 8 + -7.3289379808937494E-01 a 634 0 26 1 9 + 5.7548454383600136E+00 a 635 0 26 1 10 + 5.9179774109252632E+00 a 636 0 26 1 11 + -1.3770375900939747E+01 a 637 0 26 1 12 + 2.0873585599320990E+00 a 638 0 26 1 13 + -6.0076166857094950E+00 a 639 0 26 1 14 + -8.2130419178172858E+00 a 640 0 26 1 15 + -4.0870535570606474E+00 a 641 0 26 1 16 + 1.1579926878779212E+01 a 642 0 26 1 17 + -4.0595881715985254E+00 a 643 0 26 1 18 + 5.8540332988673871E+00 a 644 0 26 1 19 + 1.0918878759932484E+00 a 645 0 26 1 20 + -3.3956586079707054E+00 a 646 0 26 1 21 + -1.1479956194037473E+00 a 647 0 26 1 22 + 7.6447151060018284E+00 a 648 0 26 1 23 + 2.0459888519812747E+01 a 649 0 26 1 24 + -2.9646390066955242E+00 a 650 0 26 1 25 + 1.0557201353673278E+00 a 651 0 27 1 1 + -2.2274450808972343E-01 a 652 0 27 1 2 + -9.3455755804614160E+00 a 653 0 27 1 3 + -1.6792256036928275E+00 a 654 0 27 1 4 + -4.1816350915661706E+00 a 655 0 27 1 5 + -5.2575727529046663E+00 a 656 0 27 1 6 + -5.2935609414405560E-02 a 657 0 27 1 7 + 1.8810690832899990E-02 a 658 0 27 1 8 + 4.9348443482277904E-01 a 659 0 27 1 9 + -5.5944159034279317E-01 a 660 0 27 1 10 + -1.7015569047901284E+00 a 661 0 27 1 11 + 1.6778904609860019E+00 a 662 0 27 1 12 + 1.4268720505875450E+00 a 663 0 27 1 13 + 2.1077918072718194E+00 a 664 0 27 1 14 + 7.5801210894464177E-01 a 665 0 27 1 15 + 5.2788372995446597E-01 a 666 0 27 1 16 + -1.3410214813750436E+00 a 667 0 27 1 17 + 2.6525490052949818E-01 a 668 0 27 1 18 + -2.8085051830257679E-01 a 669 0 27 1 19 + -1.4748033138608601E+00 a 670 0 27 1 20 + 3.0529767339710134E-01 a 671 0 27 1 21 + 3.6363122015631755E-01 a 672 0 27 1 22 + -7.7594432932094759E-01 a 673 0 27 1 23 + -6.6321818395459555E+00 a 674 0 27 1 24 + -1.5617564927377026E+00 a 675 0 27 1 25 + 1.2543603121613276E+00 b 676 1 1 + -2.2927495150883226E-01 b 677 1 2 + -2.3252649348551384E+00 b 678 1 3 + -2.6486346266611743E-01 b 679 1 4 + -1.6538110208437689E+00 b 680 1 5 + 2.9346000949301749E+00 b 681 1 6 + 1.7805506387833985E+00 b 682 1 7 + -5.6690103732543140E-01 b 683 1 8 + -6.2486173701798398E-01 b 684 1 9 + -3.7240900824290957E-01 b 685 1 10 + -6.3073178569822352E-01 b 686 1 11 + -8.0598419230069648E-02 b 687 1 12 + -1.1892095206974624E+00 b 688 1 13 + 1.3725453632853692E+00 b 689 1 14 + 4.4831989249466692E-01 b 690 1 15 + 1.1778820954688429E+00 b 691 1 16 + 1.2073919524857220E+00 b 692 1 17 + 5.6253191592422314E-01 b 693 1 18 + 6.4941608158776098E-01 b 694 1 19 + 1.2347905502178109E+00 b 695 1 20 + 5.9346048557423536E-01 b 696 1 21 + 6.4646182813960484E-01 b 697 1 22 + -7.6370495763210078E-01 b 698 1 23 + 1.9686378017108441E+00 b 699 1 24 + 1.0680673044425653E+00 b 700 1 25 + 1.4594180881055727E+00 a 701 1 1 2 1 + 1.5365534415590593E-01 a 702 1 1 2 2 + 1.2716222275391131E+00 a 703 1 1 2 3 + 7.7880702831611026E-02 a 704 1 1 2 4 + -1.3595126555752171E+00 a 705 1 1 2 5 + 1.8577989345148338E+00 a 706 1 1 2 6 + -2.4288315949473169E+00 a 707 1 1 2 7 + 8.9220943694387922E-01 a 708 1 1 2 8 + -1.2790242633099080E+00 a 709 1 1 2 9 + 8.9816215033932290E-01 a 710 1 1 2 10 + 1.0437682789133405E+00 a 711 1 1 2 11 + -2.1841360825100695E-01 a 712 1 1 2 12 + -1.0322042495993708E+00 a 713 1 1 2 13 + -5.5696429548906812E-01 a 714 1 1 2 14 + -1.5593064259737546E+00 a 715 1 1 2 15 + -3.1077239299477250E-01 a 716 1 1 2 16 + -5.1662487915245203E-01 a 717 1 1 2 17 + -4.4080355765868079E-01 a 718 1 1 2 18 + 2.8554382665336435E+00 a 719 1 1 2 19 + 1.2965885840799994E-02 a 720 1 1 2 20 + -8.2522237906046214E-01 a 721 1 1 2 21 + 3.5901971403443272E-01 a 722 1 1 2 22 + 2.6936242508953034E+00 a 723 1 1 2 23 + -1.2849019754079158E+00 a 724 1 1 2 24 + 8.2861779580995576E-01 a 725 1 1 2 25 + 1.0719197982105746E+00 a 726 1 2 2 1 + 6.4368553162443476E-01 a 727 1 2 2 2 + -1.0015886909820451E+00 a 728 1 2 2 3 + -6.8191613195651618E-02 a 729 1 2 2 4 + 7.2674228322735146E-01 a 730 1 2 2 5 + -1.7573496877427459E+00 a 731 1 2 2 6 + 2.6450957568279948E-01 a 732 1 2 2 7 + -6.0959728011597525E-01 a 733 1 2 2 8 + -3.1772594457996151E-01 a 734 1 2 2 9 + -1.2773013338753241E+00 a 735 1 2 2 10 + 6.8736118082422348E-01 a 736 1 2 2 11 + 4.4110197874618340E-01 a 737 1 2 2 12 + 1.0323670003842877E+00 a 738 1 2 2 13 + -1.0286975902661349E-01 a 739 1 2 2 14 + -2.6792225965340805E-01 a 740 1 2 2 15 + -7.3839775332694924E-01 a 741 1 2 2 16 + 1.6185767840077056E-01 a 742 1 2 2 17 + -5.0013229655885350E-01 a 743 1 2 2 18 + -5.6099349730305503E-01 a 744 1 2 2 19 + 1.9552145303074811E-01 a 745 1 2 2 20 + 1.7846161993800158E+00 a 746 1 2 2 21 + -4.8130848458800529E-01 a 747 1 2 2 22 + -1.8375371441275692E+00 a 748 1 2 2 23 + 2.2280937013746720E+00 a 749 1 2 2 24 + -6.4075230693965046E-01 a 750 1 2 2 25 + 1.0241851444185640E+01 a 751 1 3 2 1 + 1.7030840528329511E-01 a 752 1 3 2 2 + 8.7386754821063384E-01 a 753 1 3 2 3 + 1.2474534163745070E+00 a 754 1 3 2 4 + 8.8318954368994584E-01 a 755 1 3 2 5 + -1.4672120275811322E+00 a 756 1 3 2 6 + 1.3096477208958901E+00 a 757 1 3 2 7 + 3.0312337023215772E+00 a 758 1 3 2 8 + 1.3470610254760440E+00 a 759 1 3 2 9 + -3.3809547115308263E+00 a 760 1 3 2 10 + -3.6964777922845643E-01 a 761 1 3 2 11 + -5.1137005263470792E-01 a 762 1 3 2 12 + -8.6703927818536952E-01 a 763 1 3 2 13 + -1.4428190046837878E-03 a 764 1 3 2 14 + -1.9661789504315588E+00 a 765 1 3 2 15 + 1.0507109233530159E+00 a 766 1 3 2 16 + -1.3276179729772277E+00 a 767 1 3 2 17 + 4.4516146444556357E+00 a 768 1 3 2 18 + 1.1536944375048062E+00 a 769 1 3 2 19 + -2.2217977618823750E+00 a 770 1 3 2 20 + 9.4271790445219139E-01 a 771 1 3 2 21 + 2.5744616980454099E-01 a 772 1 3 2 22 + -9.9691709890058755E-01 a 773 1 3 2 23 + -1.3771566894481431E+00 a 774 1 3 2 24 + -2.2445703137500894E+00 a 775 1 3 2 25 + 1.5699777139804288E-01 a 776 1 4 2 1 + -2.4739909713406422E-01 a 777 1 4 2 2 + 6.0945334029172793E-01 a 778 1 4 2 3 + 1.1991732305097107E+00 a 779 1 4 2 4 + 7.6752737798279991E-01 a 780 1 4 2 5 + -1.2176036327912749E+00 a 781 1 4 2 6 + 9.0286393495899153E-01 a 782 1 4 2 7 + -5.6395546613738842E-02 a 783 1 4 2 8 + 5.0557753137815109E-01 a 784 1 4 2 9 + -4.4495088550260570E-01 a 785 1 4 2 10 + 6.2104957984648756E-01 a 786 1 4 2 11 + 3.3501389647440200E-01 a 787 1 4 2 12 + -2.7325439440571269E+00 a 788 1 4 2 13 + 5.2584673556777350E-01 a 789 1 4 2 14 + 1.3429005280378536E+00 a 790 1 4 2 15 + -4.5937498220629874E-01 a 791 1 4 2 16 + 1.7266119501505457E+00 a 792 1 4 2 17 + 1.4851537385892768E+00 a 793 1 4 2 18 + 4.9230003793123539E-01 a 794 1 4 2 19 + 8.1632865980176739E-01 a 795 1 4 2 20 + -1.9154967284098789E-01 a 796 1 4 2 21 + -3.6956160611354422E-01 a 797 1 4 2 22 + -3.6482742790056100E-01 a 798 1 4 2 23 + 1.0484022012860530E+00 a 799 1 4 2 24 + -1.7235438271765644E+00 a 800 1 4 2 25 + -3.2907844786243623E+00 a 801 1 5 2 1 + 4.4558341037111998E-01 a 802 1 5 2 2 + -8.8865795206574982E-01 a 803 1 5 2 3 + -3.4703449096997305E+00 a 804 1 5 2 4 + 1.9569540374092412E-01 a 805 1 5 2 5 + 2.2160747636990812E+00 a 806 1 5 2 6 + 3.4472185629168250E-01 a 807 1 5 2 7 + -1.1074312927207139E+00 a 808 1 5 2 8 + 5.1827475014688007E-01 a 809 1 5 2 9 + -3.1128520969656615E-01 a 810 1 5 2 10 + 6.5563850101225896E-01 a 811 1 5 2 11 + 3.3247399064015698E-01 a 812 1 5 2 12 + -4.8120090829752646E+00 a 813 1 5 2 13 + 9.1367243408463188E-03 a 814 1 5 2 14 + -1.8390860323325349E+00 a 815 1 5 2 15 + -9.6722898424964884E-02 a 816 1 5 2 16 + 2.1623044756649634E-01 a 817 1 5 2 17 + 1.8139812909720721E+00 a 818 1 5 2 18 + 1.0079084840050438E+00 a 819 1 5 2 19 + -1.3705717763671377E+00 a 820 1 5 2 20 + 1.1484147924904438E+00 a 821 1 5 2 21 + -1.9124900049764464E+00 a 822 1 5 2 22 + 1.7189138910264795E-01 a 823 1 5 2 23 + -7.9392910771154301E-01 a 824 1 5 2 24 + -2.6489999419262034E-01 a 825 1 5 2 25 + 2.5624626562468347E+00 a 826 1 6 2 1 + 5.9614548067315298E-01 a 827 1 6 2 2 + -3.8659659575111305E+00 a 828 1 6 2 3 + 3.8531737061864785E-01 a 829 1 6 2 4 + -8.9178684714629375E-01 a 830 1 6 2 5 + -1.6785558855996455E-01 a 831 1 6 2 6 + 6.6144468012911251E+00 a 832 1 6 2 7 + 4.4105923912480209E+00 a 833 1 6 2 8 + 2.8949831912596469E-01 a 834 1 6 2 9 + -3.4638367622465811E+00 a 835 1 6 2 10 + 6.6971866926592594E-01 a 836 1 6 2 11 + -7.2609240976252198E-01 a 837 1 6 2 12 + -1.2843323189569352E+01 a 838 1 6 2 13 + 6.5115740114962435E+00 a 839 1 6 2 14 + -3.2365006495624264E+00 a 840 1 6 2 15 + 2.8998337472602964E+00 a 841 1 6 2 16 + -9.5426565968503108E-01 a 842 1 6 2 17 + 1.0389933132676583E+00 a 843 1 6 2 18 + -2.1163523577693755E+00 a 844 1 6 2 19 + -5.8155364801805209E+00 a 845 1 6 2 20 + -5.3697305253077579E+00 a 846 1 6 2 21 + -5.1144158102132380E+00 a 847 1 6 2 22 + 1.2829874426509228E+01 a 848 1 6 2 23 + -4.0867590632246316E+00 a 849 1 6 2 24 + 1.0933434381899787E+00 a 850 1 6 2 25 + 2.3849997033672132E-01 a 851 1 7 2 1 + -1.8082506184158031E+00 a 852 1 7 2 2 + 2.4732602405911406E+00 a 853 1 7 2 3 + -6.0103114538066793E-01 a 854 1 7 2 4 + -5.9954681389645592E-01 a 855 1 7 2 5 + 9.9404987635228947E-01 a 856 1 7 2 6 + -6.2460704842682724E-01 a 857 1 7 2 7 + 1.6778574135726465E-01 a 858 1 7 2 8 + -1.4512109685582537E+00 a 859 1 7 2 9 + 7.7781274745649254E-01 a 860 1 7 2 10 + -2.5497093273765997E-01 a 861 1 7 2 11 + -1.2727575841297214E+00 a 862 1 7 2 12 + 1.3737145640255147E+01 a 863 1 7 2 13 + -1.5987658112798067E+00 a 864 1 7 2 14 + 2.2042361569677089E+00 a 865 1 7 2 15 + 1.6482308479126571E+00 a 866 1 7 2 16 + 8.7348319506398864E-01 a 867 1 7 2 17 + 1.9155767755628972E+00 a 868 1 7 2 18 + -3.0984705789198412E+00 a 869 1 7 2 19 + -3.6288105134109871E+00 a 870 1 7 2 20 + 5.4544741067093439E-01 a 871 1 7 2 21 + 1.2017875224188410E+00 a 872 1 7 2 22 + -3.6732061900246443E-02 a 873 1 7 2 23 + -2.2864417011641551E+00 a 874 1 7 2 24 + 2.0751547378295272E+00 a 875 1 7 2 25 + -3.6897542583690122E+00 a 876 1 8 2 1 + 1.6464794875188755E+00 a 877 1 8 2 2 + -1.6903294317427878E-02 a 878 1 8 2 3 + 8.5805116085044186E-01 a 879 1 8 2 4 + -8.9161757768590463E-02 a 880 1 8 2 5 + -9.9903928778618412E-01 a 881 1 8 2 6 + -9.2064685980338812E-01 a 882 1 8 2 7 + -1.4158341774041960E+00 a 883 1 8 2 8 + 3.2248026254955575E-01 a 884 1 8 2 9 + -4.1800568471559668E-01 a 885 1 8 2 10 + -4.8805338095729628E-01 a 886 1 8 2 11 + 1.1345294762503340E+00 a 887 1 8 2 12 + -1.1250934435189197E+00 a 888 1 8 2 13 + 3.8511063123301570E-01 a 889 1 8 2 14 + -1.7044641353433568E-01 a 890 1 8 2 15 + -4.2752195209991600E-01 a 891 1 8 2 16 + 1.3488187511243652E+00 a 892 1 8 2 17 + 2.4403269163386748E-01 a 893 1 8 2 18 + 2.0216642016194366E+00 a 894 1 8 2 19 + 1.7161607920915306E-01 a 895 1 8 2 20 + 3.6198240781392976E-01 a 896 1 8 2 21 + 1.4857296400216574E-01 a 897 1 8 2 22 + 1.3968573132893052E+00 a 898 1 8 2 23 + -1.9910303315289435E-01 a 899 1 8 2 24 + -9.7784609888672214E-01 a 900 1 8 2 25 + -1.2223242756379911E+00 a 901 1 9 2 1 + -4.3744831594928774E-01 a 902 1 9 2 2 + 1.2923487913089118E-01 a 903 1 9 2 3 + 2.9999366538684252E-01 a 904 1 9 2 4 + -4.9043153145672658E-01 a 905 1 9 2 5 + 5.1991585092732140E-01 a 906 1 9 2 6 + -1.1717880708144914E+00 a 907 1 9 2 7 + -2.2108376178152582E+00 a 908 1 9 2 8 + 5.4803528300841009E-01 a 909 1 9 2 9 + 1.0290876298048343E-01 a 910 1 9 2 10 + -1.0050755109926608E-01 a 911 1 9 2 11 + -3.9677228369118622E-01 a 912 1 9 2 12 + 9.1792155137618836E-01 a 913 1 9 2 13 + 5.5399142138025503E-01 a 914 1 9 2 14 + 9.3235909340364431E-01 a 915 1 9 2 15 + -1.6998626249329271E-01 a 916 1 9 2 16 + 4.9047739617055502E-01 a 917 1 9 2 17 + 1.5834153544337162E+00 a 918 1 9 2 18 + -1.4504208512124137E+00 a 919 1 9 2 19 + -1.1259681872097431E+00 a 920 1 9 2 20 + 5.4971916278346833E-01 a 921 1 9 2 21 + -1.1681625755494254E+00 a 922 1 9 2 22 + -1.1666857377466462E+00 a 923 1 9 2 23 + 9.4391324801943433E-01 a 924 1 9 2 24 + 1.6460412821505890E+00 a 925 1 9 2 25 + -4.8241268097711805E+00 a 926 1 10 2 1 + 7.7608088169675027E-01 a 927 1 10 2 2 + 3.0725533373558985E-02 a 928 1 10 2 3 + 1.7273040602998582E-01 a 929 1 10 2 4 + -8.3453052201133593E-01 a 930 1 10 2 5 + 5.1887336147197549E-01 a 931 1 10 2 6 + -2.5442355116425284E+00 a 932 1 10 2 7 + 1.6465683049142426E+00 a 933 1 10 2 8 + 4.9557149622005192E-01 a 934 1 10 2 9 + -3.7235188885947218E-01 a 935 1 10 2 10 + 5.4373948650342019E-01 a 936 1 10 2 11 + -7.0523807658120752E-01 a 937 1 10 2 12 + 3.0421859521740662E+00 a 938 1 10 2 13 + 3.1072482452082176E-02 a 939 1 10 2 14 + -1.7388083760523441E+00 a 940 1 10 2 15 + -5.0488919326784720E-01 a 941 1 10 2 16 + -4.1556771389004238E-01 a 942 1 10 2 17 + 1.9599004921872892E-01 a 943 1 10 2 18 + 4.0621964972672647E-01 a 944 1 10 2 19 + 5.9422166296562096E-01 a 945 1 10 2 20 + -7.3709462934982051E-01 a 946 1 10 2 21 + 6.7060322689935292E-01 a 947 1 10 2 22 + -1.2368437174276945E+00 a 948 1 10 2 23 + 4.1715534262026482E-01 a 949 1 10 2 24 + 7.6425832217227860E-02 a 950 1 10 2 25 + 7.6204316569401270E-02 a 951 1 11 2 1 + 5.1923891653008980E-01 a 952 1 11 2 2 + -2.3323035736153178E-01 a 953 1 11 2 3 + 8.0786247674397216E-01 a 954 1 11 2 4 + 5.4915827837479130E-03 a 955 1 11 2 5 + 1.8949430899753919E-01 a 956 1 11 2 6 + 9.8280844566622061E-01 a 957 1 11 2 7 + -6.4980124973270256E-02 a 958 1 11 2 8 + 5.5829152803291393E-01 a 959 1 11 2 9 + -1.1213619664096590E+00 a 960 1 11 2 10 + 7.0457921824782610E-01 a 961 1 11 2 11 + 1.0235201243188761E+00 a 962 1 11 2 12 + -4.9329358100127163E-01 a 963 1 11 2 13 + -4.0014319272414542E-02 a 964 1 11 2 14 + 3.7179242325207895E-01 a 965 1 11 2 15 + 7.8373685085132305E-01 a 966 1 11 2 16 + 9.2903895087770283E-01 a 967 1 11 2 17 + 7.8090953411929565E-01 a 968 1 11 2 18 + 1.2145534685538030E-01 a 969 1 11 2 19 + 7.4100895285851753E-01 a 970 1 11 2 20 + -7.9996191597108024E-01 a 971 1 11 2 21 + -1.0336034984202382E+00 a 972 1 11 2 22 + 3.7785839967778578E-01 a 973 1 11 2 23 + -1.5501982605341513E+00 a 974 1 11 2 24 + -1.5638876377168576E-01 a 975 1 11 2 25 + -4.0862357357947632E+00 a 976 1 12 2 1 + -4.5447860937015583E-01 a 977 1 12 2 2 + 6.0978896114190961E-01 a 978 1 12 2 3 + -3.1234430855068102E-01 a 979 1 12 2 4 + 7.1238475556186009E-01 a 980 1 12 2 5 + -5.0806809158602861E-01 a 981 1 12 2 6 + 1.6975884201542528E+00 a 982 1 12 2 7 + 5.9503629303958183E-01 a 983 1 12 2 8 + -1.1318629144078489E+00 a 984 1 12 2 9 + -9.5319931360502086E-01 a 985 1 12 2 10 + -4.1720127614679248E-01 a 986 1 12 2 11 + -1.9870221259422775E-02 a 987 1 12 2 12 + -1.1554153636616458E+00 a 988 1 12 2 13 + 2.9172179472727477E-01 a 989 1 12 2 14 + 1.2962080417528923E+00 a 990 1 12 2 15 + 6.3120710248883072E-01 a 991 1 12 2 16 + 4.6124525587351189E-01 a 992 1 12 2 17 + -3.2638990170430632E-01 a 993 1 12 2 18 + -8.5578386009581864E-01 a 994 1 12 2 19 + 4.5034494849101464E-01 a 995 1 12 2 20 + -5.7009794317633844E-01 a 996 1 12 2 21 + -3.6296376055770369E-01 a 997 1 12 2 22 + -7.7180235088913951E-01 a 998 1 12 2 23 + 2.9906825459554837E-01 a 999 1 12 2 24 + 5.1547081854237442E-01 a 1000 1 12 2 25 + -7.1147171866038650E-01 a 1001 1 13 2 1 + 2.5533616472015780E-01 a 1002 1 13 2 2 + -1.6805084143769664E+00 a 1003 1 13 2 3 + -1.4360279577151556E+00 a 1004 1 13 2 4 + 1.6236981624756913E-01 a 1005 1 13 2 5 + -2.9986730480763552E-01 a 1006 1 13 2 6 + 8.9644368547201847E-01 a 1007 1 13 2 7 + -3.1600174326085384E-01 a 1008 1 13 2 8 + 6.6229418070725221E-01 a 1009 1 13 2 9 + 8.8828349481781288E-01 a 1010 1 13 2 10 + 1.4958089634861331E+00 a 1011 1 13 2 11 + 4.2909779495412720E-01 a 1012 1 13 2 12 + 3.2104451593420507E+00 a 1013 1 13 2 13 + -3.6430395248485636E-01 a 1014 1 13 2 14 + -1.5397347367606027E+00 a 1015 1 13 2 15 + -2.8540653890450796E-01 a 1016 1 13 2 16 + -9.4744403066936911E-01 a 1017 1 13 2 17 + -9.3063775358513945E-01 a 1018 1 13 2 18 + -1.1740757703838556E+00 a 1019 1 13 2 19 + 3.0877516607240953E+00 a 1020 1 13 2 20 + 4.1925229503721850E-01 a 1021 1 13 2 21 + 8.6435718774619341E-01 a 1022 1 13 2 22 + 6.1556706608264777E+00 a 1023 1 13 2 23 + 9.3836879003947971E-01 a 1024 1 13 2 24 + -9.8383407514817875E-02 a 1025 1 13 2 25 + -1.6301594805577007E+00 a 1026 1 14 2 1 + -1.5668841832682863E+00 a 1027 1 14 2 2 + 1.0864774409649187E+00 a 1028 1 14 2 3 + 5.4679221520765209E-01 a 1029 1 14 2 4 + -2.5595346119405066E-01 a 1030 1 14 2 5 + 2.5753638271899253E+00 a 1031 1 14 2 6 + -1.2060987925979026E-01 a 1032 1 14 2 7 + 2.1872813485361081E-01 a 1033 1 14 2 8 + 3.2146195516530540E-01 a 1034 1 14 2 9 + 1.1328609031214638E+00 a 1035 1 14 2 10 + 6.1533394331348246E-01 a 1036 1 14 2 11 + -5.4737671046525105E-01 a 1037 1 14 2 12 + 1.1053993063535703E+00 a 1038 1 14 2 13 + -8.5533217578150822E-01 a 1039 1 14 2 14 + 1.0442995577946410E+00 a 1040 1 14 2 15 + 3.4775232765691383E-01 a 1041 1 14 2 16 + 1.4598545739773818E+00 a 1042 1 14 2 17 + -6.1993931948399261E-01 a 1043 1 14 2 18 + 7.3852685191309575E-01 a 1044 1 14 2 19 + 4.5902009626552193E-01 a 1045 1 14 2 20 + 1.2464402173099479E-01 a 1046 1 14 2 21 + -6.7358191994639882E-01 a 1047 1 14 2 22 + 2.1039506751744477E+00 a 1048 1 14 2 23 + 5.4851288860040280E-02 a 1049 1 14 2 24 + 9.7489591141143539E-01 a 1050 1 14 2 25 + -2.1631968448494212E+00 a 1051 1 15 2 1 + -1.2727129430492068E-01 a 1052 1 15 2 2 + 5.1091627066580747E-01 a 1053 1 15 2 3 + 5.7534648199758043E-01 a 1054 1 15 2 4 + -1.2037493386091171E-01 a 1055 1 15 2 5 + 7.5399155374626403E-01 a 1056 1 15 2 6 + -7.7261380985978678E-02 a 1057 1 15 2 7 + -6.7025079504583596E-01 a 1058 1 15 2 8 + -7.8883860754795421E-01 a 1059 1 15 2 9 + 3.3888713523272701E-01 a 1060 1 15 2 10 + 2.6385317181624623E-01 a 1061 1 15 2 11 + -1.2070172511181789E+00 a 1062 1 15 2 12 + -2.4873336888385603E-01 a 1063 1 15 2 13 + -3.8721462941389916E-02 a 1064 1 15 2 14 + 3.0335144276674625E-01 a 1065 1 15 2 15 + -7.7679943247249666E-02 a 1066 1 15 2 16 + 1.9243207289568867E+00 a 1067 1 15 2 17 + 8.5144075649928463E-01 a 1068 1 15 2 18 + 1.1835117649913056E+00 a 1069 1 15 2 19 + 1.0314075791319242E+00 a 1070 1 15 2 20 + 4.7979249547225589E-01 a 1071 1 15 2 21 + -5.4753258863123311E-01 a 1072 1 15 2 22 + 4.2043672983497160E-01 a 1073 1 15 2 23 + -2.2100361146596743E+00 a 1074 1 15 2 24 + 4.8022559923156283E-01 a 1075 1 15 2 25 + 6.1043577181395725E-01 a 1076 1 16 2 1 + -2.2995879551535903E+00 a 1077 1 16 2 2 + -2.4125695056542629E+00 a 1078 1 16 2 3 + 1.6401971344031188E+00 a 1079 1 16 2 4 + 2.7596304155826910E+00 a 1080 1 16 2 5 + -1.7012960702445470E+00 a 1081 1 16 2 6 + 5.8020616848999120E+00 a 1082 1 16 2 7 + -1.5987839635103624E+00 a 1083 1 16 2 8 + 1.9202596834934125E+00 a 1084 1 16 2 9 + 1.3609406382198073E+00 a 1085 1 16 2 10 + 3.4521770240453185E+00 a 1086 1 16 2 11 + 9.7625903603901429E-02 a 1087 1 16 2 12 + -3.0007838094883166E+00 a 1088 1 16 2 13 + 5.8195191348921516E-01 a 1089 1 16 2 14 + 1.8956029574690589E+00 a 1090 1 16 2 15 + 2.3234817041452124E-01 a 1091 1 16 2 16 + 1.1632750419735625E+00 a 1092 1 16 2 17 + 3.4156738519131671E+00 a 1093 1 16 2 18 + -3.2336496919934206E+00 a 1094 1 16 2 19 + -7.3798227198293331E-01 a 1095 1 16 2 20 + 3.3624363552486471E+00 a 1096 1 16 2 21 + -1.0132468162040502E+00 a 1097 1 16 2 22 + 3.7056369669165354E-02 a 1098 1 16 2 23 + -1.8312393074518960E+00 a 1099 1 16 2 24 + 4.5500578248263041E-01 a 1100 1 16 2 25 + 2.2302269048313073E+00 a 1101 1 17 2 1 + 1.6214906410771059E+00 a 1102 1 17 2 2 + 1.6349509659918811E+00 a 1103 1 17 2 3 + 5.4145408574619934E-02 a 1104 1 17 2 4 + 4.3252906684142584E-01 a 1105 1 17 2 5 + -1.3736969218541635E+00 a 1106 1 17 2 6 + 2.8184234047867172E+00 a 1107 1 17 2 7 + 2.8896867628176515E+00 a 1108 1 17 2 8 + 1.4299248969157874E-01 a 1109 1 17 2 9 + 1.9927781151509179E+00 a 1110 1 17 2 10 + 2.3711262701763500E+00 a 1111 1 17 2 11 + 1.3223116695652687E-01 a 1112 1 17 2 12 + -3.4794814095323376E+00 a 1113 1 17 2 13 + 1.1510988640273812E+00 a 1114 1 17 2 14 + -3.3985921784982023E+00 a 1115 1 17 2 15 + 1.0076465563953010E+00 a 1116 1 17 2 16 + -8.3104650289513449E-01 a 1117 1 17 2 17 + 1.3398030994767187E+00 a 1118 1 17 2 18 + 3.8575481988101741E+00 a 1119 1 17 2 19 + -8.6313597613197934E-01 a 1120 1 17 2 20 + 1.0420089629653122E+00 a 1121 1 17 2 21 + -8.3635927268506283E-01 a 1122 1 17 2 22 + 2.9149953695805464E+00 a 1123 1 17 2 23 + 2.4188178674036467E-01 a 1124 1 17 2 24 + -1.0422371721462642E+00 a 1125 1 17 2 25 + -9.8074696676452633E-01 a 1126 1 18 2 1 + -7.0261356217276538E-01 a 1127 1 18 2 2 + -1.5539162592863331E+00 a 1128 1 18 2 3 + 2.5663709887311525E-01 a 1129 1 18 2 4 + 1.1790597159349452E+00 a 1130 1 18 2 5 + -5.1283413704919667E-01 a 1131 1 18 2 6 + 2.8209081194780357E+00 a 1132 1 18 2 7 + -2.9530441812628777E-01 a 1133 1 18 2 8 + 1.1911675111813969E+00 a 1134 1 18 2 9 + -7.1781562917361630E-01 a 1135 1 18 2 10 + 7.5615420324814075E-01 a 1136 1 18 2 11 + 1.0383917710970614E+00 a 1137 1 18 2 12 + -7.4096563311439467E-01 a 1138 1 18 2 13 + -2.7861243720701795E-01 a 1139 1 18 2 14 + 6.9344913926308305E-01 a 1140 1 18 2 15 + 7.2770779951192111E-01 a 1141 1 18 2 16 + 1.7348650121938709E+00 a 1142 1 18 2 17 + 7.2380729647406006E-01 a 1143 1 18 2 18 + -2.1671682060080908E+00 a 1144 1 18 2 19 + -1.8448084445689281E-01 a 1145 1 18 2 20 + 1.3024719111160912E+00 a 1146 1 18 2 21 + -1.2909789979215052E+00 a 1147 1 18 2 22 + -2.0330008356136617E+00 a 1148 1 18 2 23 + -3.5287322032224533E-01 a 1149 1 18 2 24 + -4.4414575257293076E-01 a 1150 1 18 2 25 + -2.7258373164925753E-02 a 1151 1 19 2 1 + 1.7786409180863971E+00 a 1152 1 19 2 2 + -6.2433485311638581E-01 a 1153 1 19 2 3 + -7.0729056795105427E-01 a 1154 1 19 2 4 + 5.1264534381277294E-01 a 1155 1 19 2 5 + -8.6616294143739847E-01 a 1156 1 19 2 6 + 8.0698814912956451E-01 a 1157 1 19 2 7 + -1.8175081356783283E+00 a 1158 1 19 2 8 + -3.2026939775244762E-01 a 1159 1 19 2 9 + -6.7288331966478787E-01 a 1160 1 19 2 10 + 1.7148578091095124E-01 a 1161 1 19 2 11 + 3.2140265958315151E-01 a 1162 1 19 2 12 + -8.1210044120660096E-01 a 1163 1 19 2 13 + -7.6231158138043847E-02 a 1164 1 19 2 14 + -1.5851767882039058E+00 a 1165 1 19 2 15 + 1.2557130027742122E-01 a 1166 1 19 2 16 + 4.8654065981248962E-01 a 1167 1 19 2 17 + 9.1550158332637088E-01 a 1168 1 19 2 18 + 1.7945138007319117E+00 a 1169 1 19 2 19 + -6.2793744117252037E-01 a 1170 1 19 2 20 + 4.9770901971481168E-01 a 1171 1 19 2 21 + 7.9199978603495880E-01 a 1172 1 19 2 22 + 1.3566279316779111E+00 a 1173 1 19 2 23 + -6.4989908124401896E-01 a 1174 1 19 2 24 + -1.2130061691278531E+00 a 1175 1 19 2 25 + 2.1718589739533791E+00 a 1176 1 20 2 1 + 2.9938291414473661E-01 a 1177 1 20 2 2 + 9.2914772861453521E-01 a 1178 1 20 2 3 + 1.7565171250248528E+00 a 1179 1 20 2 4 + -1.7171376009305626E+00 a 1180 1 20 2 5 + 2.8704512164424800E+00 a 1181 1 20 2 6 + -4.0609063853165461E-01 a 1182 1 20 2 7 + -8.8956304852711987E-01 a 1183 1 20 2 8 + 1.5588822278177381E+00 a 1184 1 20 2 9 + -5.3859945323628011E-01 a 1185 1 20 2 10 + -8.9087250387841876E-01 a 1186 1 20 2 11 + -8.9835382331213787E-01 a 1187 1 20 2 12 + -1.1369908152037626E-01 a 1188 1 20 2 13 + -5.7966570046060373E-01 a 1189 1 20 2 14 + 1.1066980646243854E+00 a 1190 1 20 2 15 + 3.1244375834572546E-01 a 1191 1 20 2 16 + 2.1974097139332476E+00 a 1192 1 20 2 17 + -7.6349397720541767E-01 a 1193 1 20 2 18 + -3.6503418073743810E-01 a 1194 1 20 2 19 + -6.0642338824938813E-01 a 1195 1 20 2 20 + 2.2802643907348267E-02 a 1196 1 20 2 21 + 8.3743733952396715E-01 a 1197 1 20 2 22 + -3.9872923910188316E+00 a 1198 1 20 2 23 + -3.3066587159099775E-01 a 1199 1 20 2 24 + -3.3827603813335005E-01 a 1200 1 20 2 25 + 2.0707890624068246E+00 a 1201 1 21 2 1 + 8.1792094222389677E-01 a 1202 1 21 2 2 + 1.0420587694448914E-01 a 1203 1 21 2 3 + 3.8654442605274053E-01 a 1204 1 21 2 4 + -1.0273245523110555E+00 a 1205 1 21 2 5 + 4.8026156110006928E-02 a 1206 1 21 2 6 + -1.2317220364565722E+00 a 1207 1 21 2 7 + -9.2171220979112878E-01 a 1208 1 21 2 8 + -8.3293051813215280E-01 a 1209 1 21 2 9 + 3.7826002267822101E-01 a 1210 1 21 2 10 + -1.2566916573054130E+00 a 1211 1 21 2 11 + -1.4542331491456711E-01 a 1212 1 21 2 12 + -1.0890378021893508E+00 a 1213 1 21 2 13 + -5.8298836953764355E-01 a 1214 1 21 2 14 + -1.9020824106971643E+00 a 1215 1 21 2 15 + 4.4353810152599149E-01 a 1216 1 21 2 16 + -2.9928311527046703E-01 a 1217 1 21 2 17 + -7.7527928990984052E-01 a 1218 1 21 2 18 + 2.6159175407438195E-01 a 1219 1 21 2 19 + -2.6604337400489050E-02 a 1220 1 21 2 20 + -4.6552795168897604E-01 a 1221 1 21 2 21 + 1.1611386377657384E+00 a 1222 1 21 2 22 + -1.2972265245341139E+00 a 1223 1 21 2 23 + 1.8117173751313085E+00 a 1224 1 21 2 24 + 1.0433495561237927E+00 a 1225 1 21 2 25 + 1.5410314634266913E+00 a 1226 1 22 2 1 + 6.6201420998527072E-01 a 1227 1 22 2 2 + 1.1189293597068475E+00 a 1228 1 22 2 3 + -1.1536147566508355E+00 a 1229 1 22 2 4 + -8.4859080711662893E-01 a 1230 1 22 2 5 + 3.7903158089014494E-01 a 1231 1 22 2 6 + -2.6461659405296234E+00 a 1232 1 22 2 7 + 2.2472472042954434E+00 a 1233 1 22 2 8 + -9.2281733258289744E-01 a 1234 1 22 2 9 + 8.7312141982063785E-01 a 1235 1 22 2 10 + -4.3593190134289528E-01 a 1236 1 22 2 11 + 5.1912574126564559E-01 a 1237 1 22 2 12 + -5.9029854481930821E-01 a 1238 1 22 2 13 + -7.2255183403800793E-01 a 1239 1 22 2 14 + 4.1024670935059383E-02 a 1240 1 22 2 15 + 2.0425371936604741E-01 a 1241 1 22 2 16 + -1.0394832812330597E+00 a 1242 1 22 2 17 + 4.7202219372950349E-01 a 1243 1 22 2 18 + -1.9958648332222221E-03 a 1244 1 22 2 19 + -1.4664186611455649E-02 a 1245 1 22 2 20 + 1.0689476163444707E+00 a 1246 1 22 2 21 + 8.4484833020425232E-01 a 1247 1 22 2 22 + -1.4147373614558330E+00 a 1248 1 22 2 23 + 1.9187324467269602E+00 a 1249 1 22 2 24 + 1.5330124676330812E+00 a 1250 1 22 2 25 + 2.3019050197742894E+00 a 1251 1 23 2 1 + -1.3828322911066271E-01 a 1252 1 23 2 2 + -2.3555430378419923E-01 a 1253 1 23 2 3 + -1.3434989779696097E-01 a 1254 1 23 2 4 + 3.7852663531566189E-01 a 1255 1 23 2 5 + 9.8266847359694973E-02 a 1256 1 23 2 6 + 3.2721968443206462E-01 a 1257 1 23 2 7 + -3.7061171550241617E-01 a 1258 1 23 2 8 + 2.2862436245090851E+00 a 1259 1 23 2 9 + 1.7674065728047832E+00 a 1260 1 23 2 10 + -5.2627257197444939E-02 a 1261 1 23 2 11 + 9.4094481148145870E-01 a 1262 1 23 2 12 + 1.0616552648143298E+00 a 1263 1 23 2 13 + -1.6065739188681796E-01 a 1264 1 23 2 14 + 1.6833160475834315E+00 a 1265 1 23 2 15 + -5.5679530352182072E-01 a 1266 1 23 2 16 + 4.2170082515325280E-01 a 1267 1 23 2 17 + 1.8142946234467967E+00 a 1268 1 23 2 18 + -6.0004075552166369E-01 a 1269 1 23 2 19 + 8.6767695096505049E-01 a 1270 1 23 2 20 + 1.7471709925670367E-01 a 1271 1 23 2 21 + 6.3494817986861019E-01 a 1272 1 23 2 22 + 7.9839233743975266E-02 a 1273 1 23 2 23 + -8.7497499907984810E-01 a 1274 1 23 2 24 + -2.1279336414401262E-01 a 1275 1 23 2 25 + -1.0628518357816100E+01 a 1276 1 24 2 1 + -3.4149879843865938E-01 a 1277 1 24 2 2 + -4.0534872173827868E-01 a 1278 1 24 2 3 + 1.0980204380257913E-01 a 1279 1 24 2 4 + 1.8376924276804879E-01 a 1280 1 24 2 5 + 8.5047887536146360E-01 a 1281 1 24 2 6 + 4.3913590571042438E-01 a 1282 1 24 2 7 + 2.7167430357232609E+00 a 1283 1 24 2 8 + 2.9682659556600960E-01 a 1284 1 24 2 9 + -1.6032245851281013E+00 a 1285 1 24 2 10 + -6.7567048640865046E-01 a 1286 1 24 2 11 + -1.5253382251900995E+00 a 1287 1 24 2 12 + -6.7540631566041298E-01 a 1288 1 24 2 13 + -1.4565321192168545E+00 a 1289 1 24 2 14 + -1.3315414628143039E+00 a 1290 1 24 2 15 + 1.2552098425264056E+00 a 1291 1 24 2 16 + -1.1701558601459501E+00 a 1292 1 24 2 17 + 2.1967564647703792E+00 a 1293 1 24 2 18 + 3.6767594091430167E-01 a 1294 1 24 2 19 + 1.4791781996464841E+00 a 1295 1 24 2 20 + -2.4597335939693896E+00 a 1296 1 24 2 21 + 1.8222789722776007E+00 a 1297 1 24 2 22 + -2.4818384588216302E+00 a 1298 1 24 2 23 + -1.3359962912345340E+00 a 1299 1 24 2 24 + -1.6060924344568878E-02 a 1300 1 24 2 25 + -1.1558703878945702E+00 a 1301 1 25 2 1 + 5.5859771317693908E-02 a 1302 1 25 2 2 + -1.9275021348316721E+00 a 1303 1 25 2 3 + 4.2881321046205173E-01 a 1304 1 25 2 4 + 6.6308764508018558E-01 a 1305 1 25 2 5 + -2.5357661809360188E-01 a 1306 1 25 2 6 + 7.7965409617466697E-01 a 1307 1 25 2 7 + -1.9470416731652336E+00 a 1308 1 25 2 8 + 2.0923659915641873E-01 a 1309 1 25 2 9 + 8.9211452410465542E-01 a 1310 1 25 2 10 + -1.9807939822570442E-01 a 1311 1 25 2 11 + -5.0922943173038127E-01 a 1312 1 25 2 12 + 1.3378430979044107E+00 a 1313 1 25 2 13 + -6.8964614083753073E-01 a 1314 1 25 2 14 + 7.6939619343191556E-01 a 1315 1 25 2 15 + -1.5783243312480257E+00 a 1316 1 25 2 16 + 2.3586020281744577E+00 a 1317 1 25 2 17 + -5.1641666185758928E-01 a 1318 1 25 2 18 + 1.0291540870545792E+00 a 1319 1 25 2 19 + 1.5269830348487650E+00 a 1320 1 25 2 20 + -2.8987700591417855E+00 a 1321 1 25 2 21 + 9.0207337792476916E-01 a 1322 1 25 2 22 + 1.9890049402284911E+00 a 1323 1 25 2 23 + 3.9387622927433424E-01 a 1324 1 25 2 24 + 9.9397126232482103E-01 a 1325 1 25 2 25 + 2.5306467041996967E+00 b 1326 2 1 + 3.1633393474977245E+00 b 1327 2 2 + -1.1644295509710691E+00 b 1328 2 3 + -5.7686722641223600E+00 b 1329 2 4 + 2.0065022303893989E+00 b 1330 2 5 + -5.9106057000795840E+00 b 1331 2 6 + -1.1326093285804056E+01 b 1332 2 7 + -3.9025063397327071E+00 b 1333 2 8 + 4.4520505166676267E+00 b 1334 2 9 + -1.7352681951318241E+00 b 1335 2 10 + -2.1518912430432668E+00 b 1336 2 11 + 5.0463376560082969E+00 b 1337 2 12 + -2.2614514173852837E-01 b 1338 2 13 + -4.1454590614747211E+00 b 1339 2 14 + 1.6688417293495756E+00 b 1340 2 15 + -5.8649976938793378E+00 b 1341 2 16 + -3.8350084459541849E+00 b 1342 2 17 + 1.3730477223722950E+00 b 1343 2 18 + 1.8506935712854127E+00 b 1344 2 19 + 5.7362757779153428E+00 b 1345 2 20 + 7.2901484895568780E+00 b 1346 2 21 + 3.9773783666446022E-01 b 1347 2 22 + -6.1298011242151409E+00 b 1348 2 23 + 9.9698755072742991E+00 b 1349 2 24 + 1.1801564149295556E+00 b 1350 2 25 + 1.2704098997067026E+01 a 1351 2 1 3 1 + 1.5947733940307620E+00 a 1352 2 2 3 1 + -1.6022927057878529E+00 a 1353 2 3 3 1 + -1.5507258540777733E+00 a 1354 2 4 3 1 + 1.8696884022727636E+00 a 1355 2 5 3 1 + -8.2051908880071633E-01 a 1356 2 6 3 1 + 9.4325719092522542E-01 a 1357 2 7 3 1 + 2.4098435369626174E+00 a 1358 2 8 3 1 + 1.4100759633042474E+00 a 1359 2 9 3 1 + -1.4613034838529613E+00 a 1360 2 10 3 1 + 1.0296574685193380E+00 a 1361 2 11 3 1 + 1.2413851904356363E+00 a 1362 2 12 3 1 + -6.3168181712211169E-01 a 1363 2 13 3 1 + 7.6424175125347729E+00 a 1364 2 14 3 1 + -1.3477038299214714E+00 a 1365 2 15 3 1 + -1.6064659765754943E+00 a 1366 2 16 3 1 + -8.9624380518145874E-01 a 1367 2 17 3 1 + -1.0509865792522375E+00 a 1368 2 18 3 1 + 8.1847872933853638E-01 a 1369 2 19 3 1 + 1.2845504810303034E+00 a 1370 2 20 3 1 + -5.1879822944368881E-01 a 1371 2 21 3 1 + -7.2018714033119180E-01 a 1372 2 22 3 1 + 5.9870832883780798E+00 a 1373 2 23 3 1 + -6.0589155387470683E-01 a 1374 2 24 3 1 + 5.0177609140285355E+00 a 1375 2 25 3 1 + 9.7386086372975722E+00 b 1376 3 1 diff --git a/examples/USER/nnp/nnp-data/weights.008.data b/examples/USER/nnp/nnp-data/weights.008.data new file mode 100644 index 0000000000..fbdbaa1411 --- /dev/null +++ b/examples/USER/nnp/nnp-data/weights.008.data @@ -0,0 +1,1467 @@ +################################################################################ +# Neural network connection values (weights and biases). +################################################################################ +# Col Name Description +################################################################################ +# 1 connection Neural network connection value. +# 2 t Connection type (a = weight, b = bias). +# 3 index Index enumerating weights. +# 4 l_s Starting point layer (end point layer for biases). +# 5 n_s Starting point neuron in starting layer (end point neuron for biases). +# 6 l_e End point layer. +# 7 n_e End point neuron in end layer. +################################################################################ +# 1 2 3 4 5 6 7 +# connection t index l_s n_s l_e n_e +############################################################ + -4.2252995889643252E-01 a 1 0 1 1 1 + -6.0555645962054347E+00 a 2 0 1 1 2 + 1.4040722027928377E+01 a 3 0 1 1 3 + -2.7041370011942618E+00 a 4 0 1 1 4 + -3.8202743208058858E+00 a 5 0 1 1 5 + -3.3612643261393358E+00 a 6 0 1 1 6 + -2.0418101025905258E+00 a 7 0 1 1 7 + 7.5707237340996727E+00 a 8 0 1 1 8 + -5.8098755815926548E+00 a 9 0 1 1 9 + -6.0966886893925210E-01 a 10 0 1 1 10 + 5.8061564015115206E+00 a 11 0 1 1 11 + -1.5509339733099867E+00 a 12 0 1 1 12 + 1.9747395485200818E+00 a 13 0 1 1 13 + 4.5260782279680539E-01 a 14 0 1 1 14 + 9.9210415760283279E+00 a 15 0 1 1 15 + -6.5078831481547121E+00 a 16 0 1 1 16 + -3.4768832871318085E+00 a 17 0 1 1 17 + -1.9463994340943838E+00 a 18 0 1 1 18 + -3.4186058699290269E+00 a 19 0 1 1 19 + 1.2263643166698479E+00 a 20 0 1 1 20 + -5.9171161834436594E+00 a 21 0 1 1 21 + 1.8436267358458363E+00 a 22 0 1 1 22 + -2.3139530616378448E+00 a 23 0 1 1 23 + -1.7228542411478951E+01 a 24 0 1 1 24 + 2.2888610253215895E+00 a 25 0 1 1 25 + 8.0819405565169262E+00 a 26 0 2 1 1 + 8.0066409422078735E+00 a 27 0 2 1 2 + -2.8439251469462398E+01 a 28 0 2 1 3 + -1.1146087290797917E+01 a 29 0 2 1 4 + -7.5292172093563314E+00 a 30 0 2 1 5 + -4.0783685663337641E+00 a 31 0 2 1 6 + -4.4130406528599337E+00 a 32 0 2 1 7 + 1.0563249167508673E+01 a 33 0 2 1 8 + 1.0933105521974941E+01 a 34 0 2 1 9 + -1.1646509907117448E+01 a 35 0 2 1 10 + -7.5007478428041727E+00 a 36 0 2 1 11 + 7.7790182254249176E+00 a 37 0 2 1 12 + 1.1567034492555623E+01 a 38 0 2 1 13 + -4.2051741520233508E+00 a 39 0 2 1 14 + 3.1165306119132130E+00 a 40 0 2 1 15 + 1.6385645103485370E+01 a 41 0 2 1 16 + 2.6440539124381655E+00 a 42 0 2 1 17 + -3.9524518111687827E+00 a 43 0 2 1 18 + -8.7912410635652076E+00 a 44 0 2 1 19 + 4.3903318583813933E+00 a 45 0 2 1 20 + 3.3748047065442632E-01 a 46 0 2 1 21 + -6.6858946327311741E-01 a 47 0 2 1 22 + 5.4447187026310928E+00 a 48 0 2 1 23 + 1.9966018946508100E+01 a 49 0 2 1 24 + -1.7414420670154115E+01 a 50 0 2 1 25 + -3.9418657694849879E-01 a 51 0 3 1 1 + 9.1804829174186846E+00 a 52 0 3 1 2 + -1.0485089041850278E+01 a 53 0 3 1 3 + 8.9380499555048889E+00 a 54 0 3 1 4 + 1.0758607876097068E+01 a 55 0 3 1 5 + 7.2881492125393788E+00 a 56 0 3 1 6 + 8.2627077997774609E+00 a 57 0 3 1 7 + -1.2523613158520124E+01 a 58 0 3 1 8 + 4.5963999046141870E+00 a 59 0 3 1 9 + 8.2776469521184293E+00 a 60 0 3 1 10 + -2.1354371687617113E+00 a 61 0 3 1 11 + -9.0381751821938234E+00 a 62 0 3 1 12 + -1.2209592338152297E+00 a 63 0 3 1 13 + 4.7653671372245672E+00 a 64 0 3 1 14 + -1.7909124818088952E+01 a 65 0 3 1 15 + 3.2182917515973237E+00 a 66 0 3 1 16 + -2.3712750109800793E+00 a 67 0 3 1 17 + 4.6394007836500366E+00 a 68 0 3 1 18 + 2.3761984937954490E+00 a 69 0 3 1 19 + -1.0484832585147684E+01 a 70 0 3 1 20 + 1.2317970755621140E+01 a 71 0 3 1 21 + -1.5014054499447769E+00 a 72 0 3 1 22 + -1.1215435083480425E+00 a 73 0 3 1 23 + 8.9428653321614355E+00 a 74 0 3 1 24 + 1.2636165742848842E+00 a 75 0 3 1 25 + -1.3406492086741725E+01 a 76 0 4 1 1 + -1.0241053204283523E+01 a 77 0 4 1 2 + 4.3016369326050899E+01 a 78 0 4 1 3 + 2.0170433813810671E+01 a 79 0 4 1 4 + 1.3209328101408278E+01 a 80 0 4 1 5 + 1.2456789467161695E+01 a 81 0 4 1 6 + 4.3498515722861573E+00 a 82 0 4 1 7 + -2.1948185511490657E+01 a 83 0 4 1 8 + -1.5329558038416376E+01 a 84 0 4 1 9 + 1.4173337432869845E+01 a 85 0 4 1 10 + 5.6040631650516088E+00 a 86 0 4 1 11 + -9.7646834958548663E+00 a 87 0 4 1 12 + -1.3810669587629080E+01 a 88 0 4 1 13 + -1.5274915717855073E+00 a 89 0 4 1 14 + -1.3662043326477198E+01 a 90 0 4 1 15 + -2.5095635769057225E+01 a 91 0 4 1 16 + 5.4033548590960638E+00 a 92 0 4 1 17 + 1.1047593171711565E+01 a 93 0 4 1 18 + 1.9404912122904062E+01 a 94 0 4 1 19 + 2.4043652449872512E+00 a 95 0 4 1 20 + -3.3818087825635010E+00 a 96 0 4 1 21 + -4.9505657938825802E+00 a 97 0 4 1 22 + 6.2159614529590854E+00 a 98 0 4 1 23 + -1.9315299866781363E+01 a 99 0 4 1 24 + 2.4149549923763363E+01 a 100 0 4 1 25 + 2.2633190213689671E+00 a 101 0 5 1 1 + -1.1275056403465689E+01 a 102 0 5 1 2 + 1.2588751117785917E+00 a 103 0 5 1 3 + -1.7399288116611554E+01 a 104 0 5 1 4 + -1.8915392010979964E+01 a 105 0 5 1 5 + -6.5088880348621911E+00 a 106 0 5 1 6 + -8.7022768117985532E+00 a 107 0 5 1 7 + 9.5716939158219958E+00 a 108 0 5 1 8 + 6.7173652175539926E+00 a 109 0 5 1 9 + -1.0675975211687946E+01 a 110 0 5 1 10 + -9.8676303718126039E+00 a 111 0 5 1 11 + 2.2213929552875065E+01 a 112 0 5 1 12 + -3.9036053816020080E+00 a 113 0 5 1 13 + -1.0319098765495239E+01 a 114 0 5 1 14 + 2.0443220229254024E+01 a 115 0 5 1 15 + -1.4108663925115768E+00 a 116 0 5 1 16 + 8.2741724462704607E+00 a 117 0 5 1 17 + -5.3497533478370061E+00 a 118 0 5 1 18 + 1.0188467515179238E+00 a 119 0 5 1 19 + 3.3447636806848529E+00 a 120 0 5 1 20 + -6.3209134939668381E+00 a 121 0 5 1 21 + 7.0841649292282804E+00 a 122 0 5 1 22 + -1.3545092924552248E+01 a 123 0 5 1 23 + -1.0559922896741500E+00 a 124 0 5 1 24 + -1.6720809451360648E+00 a 125 0 5 1 25 + 2.8772403595811382E+00 a 126 0 6 1 1 + 6.6056181351338488E+00 a 127 0 6 1 2 + -2.1395393088585266E+01 a 128 0 6 1 3 + -1.6735909985964671E+01 a 129 0 6 1 4 + -4.4466039540570526E+00 a 130 0 6 1 5 + -1.9134274750411421E+01 a 131 0 6 1 6 + 7.4840405517853625E+00 a 132 0 6 1 7 + 1.5375004378912831E+01 a 133 0 6 1 8 + -3.2781218210557539E-01 a 134 0 6 1 9 + 5.1424696656729978E+00 a 135 0 6 1 10 + 2.4028588442306344E+00 a 136 0 6 1 11 + 1.6576032835324068E+00 a 137 0 6 1 12 + -1.8331489599850683E+00 a 138 0 6 1 13 + 1.5714883034771246E+01 a 139 0 6 1 14 + 1.3932522318533026E+01 a 140 0 6 1 15 + 3.0252340531342401E+01 a 141 0 6 1 16 + -2.0172838001093005E+01 a 142 0 6 1 17 + -1.3208548828817202E+01 a 143 0 6 1 18 + -1.1333313633908213E+01 a 144 0 6 1 19 + -2.2075367220543007E-01 a 145 0 6 1 20 + 5.4183716265511874E+00 a 146 0 6 1 21 + 4.4469214579975294E+00 a 147 0 6 1 22 + -1.7974421141420628E+01 a 148 0 6 1 23 + 1.3331466657294333E+01 a 149 0 6 1 24 + -1.0273470133062483E+01 a 150 0 6 1 25 + -1.3893961251032516E+00 a 151 0 7 1 1 + 4.8442398001659086E+00 a 152 0 7 1 2 + -1.4036072623897150E+01 a 153 0 7 1 3 + 1.9115742411572878E+01 a 154 0 7 1 4 + 1.7609386484170951E+01 a 155 0 7 1 5 + 7.6541742060341660E+00 a 156 0 7 1 6 + 2.6652782695389745E+00 a 157 0 7 1 7 + -4.1794554937287582E+00 a 158 0 7 1 8 + -1.1905203283691870E+01 a 159 0 7 1 9 + 9.5475237719776391E+00 a 160 0 7 1 10 + 7.7121176720610016E+00 a 161 0 7 1 11 + -1.6773486202682584E+01 a 162 0 7 1 12 + 8.6676731368122528E+00 a 163 0 7 1 13 + -1.2293039810028539E+00 a 164 0 7 1 14 + -2.2811823974655120E+01 a 165 0 7 1 15 + -7.1906975038556888E+00 a 166 0 7 1 16 + -1.1100936660627136E+01 a 167 0 7 1 17 + 2.5096456515549410E+00 a 168 0 7 1 18 + -8.2830054125661903E+00 a 169 0 7 1 19 + 1.4308990630020320E+01 a 170 0 7 1 20 + -1.4211125648871650E+00 a 171 0 7 1 21 + -7.1030788471181472E-01 a 172 0 7 1 22 + 1.9855633135275369E+01 a 173 0 7 1 23 + -5.0222825995011018E+00 a 174 0 7 1 24 + 2.8336876309217565E+00 a 175 0 7 1 25 + 1.2989870863882689E+00 a 176 0 8 1 1 + 1.6317155326554985E+01 a 177 0 8 1 2 + 1.1299807220875589E+01 a 178 0 8 1 3 + 1.6662446968000719E+01 a 179 0 8 1 4 + -2.1148958055015852E+00 a 180 0 8 1 5 + 8.0807820713485157E+00 a 181 0 8 1 6 + 1.4756928529491644E+00 a 182 0 8 1 7 + -1.8576498548437503E+00 a 183 0 8 1 8 + -6.5803763266761752E+00 a 184 0 8 1 9 + -1.4617321665219620E+01 a 185 0 8 1 10 + 2.5420127922121498E+00 a 186 0 8 1 11 + -1.1459546725077542E+01 a 187 0 8 1 12 + -5.7279252792377344E-01 a 188 0 8 1 13 + 6.6995479956870465E+00 a 189 0 8 1 14 + 6.5026121098595775E+00 a 190 0 8 1 15 + -2.4146992911321604E+01 a 191 0 8 1 16 + 1.7592777430005096E+01 a 192 0 8 1 17 + -4.4088079834404530E+00 a 193 0 8 1 18 + 2.6619475322128787E+00 a 194 0 8 1 19 + -2.7620162813322896E+01 a 195 0 8 1 20 + 1.1312775745303194E+01 a 196 0 8 1 21 + 7.8960900397005016E+00 a 197 0 8 1 22 + -9.2584890220611644E+00 a 198 0 8 1 23 + -7.5829075251590856E+00 a 199 0 8 1 24 + -1.5702889381396949E+01 a 200 0 8 1 25 + -6.0639703911359019E-02 a 201 0 9 1 1 + -4.9247565651287832E+00 a 202 0 9 1 2 + 1.2106355466042226E+01 a 203 0 9 1 3 + -8.5040672154593562E+00 a 204 0 9 1 4 + -1.9730634072023652E+00 a 205 0 9 1 5 + 1.3338172438762994E+00 a 206 0 9 1 6 + 1.0403848598882854E+00 a 207 0 9 1 7 + 3.1716127040577504E+00 a 208 0 9 1 8 + 4.8548323846115409E+00 a 209 0 9 1 9 + 2.8285159512886676E-01 a 210 0 9 1 10 + -7.2538963241095287E+00 a 211 0 9 1 11 + 5.6605292741969135E+00 a 212 0 9 1 12 + -7.3281447205805028E+00 a 213 0 9 1 13 + -7.2323271523996810E+00 a 214 0 9 1 14 + 2.7162165549305191E+00 a 215 0 9 1 15 + 4.7371512123906303E+00 a 216 0 9 1 16 + -1.2795462595586067E+00 a 217 0 9 1 17 + -1.2479842668197239E+00 a 218 0 9 1 18 + 8.2517482868477465E+00 a 219 0 9 1 19 + 1.5771106219004059E+00 a 220 0 9 1 20 + 1.1199186705905022E+00 a 221 0 9 1 21 + -2.3206003597031788E-01 a 222 0 9 1 22 + -1.8081347949376255E+01 a 223 0 9 1 23 + 6.4100804204621458E+00 a 224 0 9 1 24 + 2.0638413110708587E-01 a 225 0 9 1 25 + 5.4946010011519562E+00 a 226 0 10 1 1 + -1.0007883449351111E+01 a 227 0 10 1 2 + -4.2092466490417992E+00 a 228 0 10 1 3 + -5.1484334386740827E+00 a 229 0 10 1 4 + 3.8492140234244099E+00 a 230 0 10 1 5 + 3.7806988156875683E+00 a 231 0 10 1 6 + -3.3355303672289521E-01 a 232 0 10 1 7 + 8.5957281207011293E-01 a 233 0 10 1 8 + 2.6318043159412694E+00 a 234 0 10 1 9 + -2.0370256057905092E+00 a 235 0 10 1 10 + -6.0705410865883813E+00 a 236 0 10 1 11 + 7.7663948435164212E+00 a 237 0 10 1 12 + 5.2575997574986886E+00 a 238 0 10 1 13 + -1.0970226410597640E+01 a 239 0 10 1 14 + -8.2022944757991745E+00 a 240 0 10 1 15 + 1.4611135167439018E+00 a 241 0 10 1 16 + -9.6067700839357795E-01 a 242 0 10 1 17 + 2.8969685517227264E+00 a 243 0 10 1 18 + 5.1871728208292078E-01 a 244 0 10 1 19 + 5.9723981759776086E+00 a 245 0 10 1 20 + -5.6526426853755227E+00 a 246 0 10 1 21 + -5.7012415503934060E+00 a 247 0 10 1 22 + 1.3226673860538469E+01 a 248 0 10 1 23 + -1.1596542017869393E+00 a 249 0 10 1 24 + 4.5181717464756330E+00 a 250 0 10 1 25 + 2.9081108390343352E-01 a 251 0 11 1 1 + 7.0173519357555021E+00 a 252 0 11 1 2 + -2.7343225639603612E+00 a 253 0 11 1 3 + 6.7125648985634467E-01 a 254 0 11 1 4 + -1.4389607300831309E+00 a 255 0 11 1 5 + 2.0863810552553317E+00 a 256 0 11 1 6 + -2.8278441217480297E+00 a 257 0 11 1 7 + -1.8684390261232542E+00 a 258 0 11 1 8 + 1.5173228455949850E+00 a 259 0 11 1 9 + -1.7720802500487582E+00 a 260 0 11 1 10 + 2.9615007040584400E+00 a 261 0 11 1 11 + 5.5888676956090788E-01 a 262 0 11 1 12 + -4.1893717343842518E-01 a 263 0 11 1 13 + -4.5555017384864960E-01 a 264 0 11 1 14 + -1.2004787116771394E+00 a 265 0 11 1 15 + -4.3671713173561306E+00 a 266 0 11 1 16 + 2.6268170207311425E+00 a 267 0 11 1 17 + 2.0861374981960101E+00 a 268 0 11 1 18 + -3.9467976641769651E+00 a 269 0 11 1 19 + -2.8568852978075676E+00 a 270 0 11 1 20 + -3.6298673422613743E+00 a 271 0 11 1 21 + -2.3751659557584084E+00 a 272 0 11 1 22 + 9.6961030126275300E+00 a 273 0 11 1 23 + -3.8360345397984514E+00 a 274 0 11 1 24 + 7.4917832681719021E-01 a 275 0 11 1 25 + -3.8601565331430994E+00 a 276 0 12 1 1 + 1.2334085724542578E+00 a 277 0 12 1 2 + 1.3883137264471166E+00 a 278 0 12 1 3 + 3.5605774607307024E+00 a 279 0 12 1 4 + -5.7819414222489574E+00 a 280 0 12 1 5 + -1.2501210997170223E-01 a 281 0 12 1 6 + -4.2808961405835779E+00 a 282 0 12 1 7 + -7.3252216114344915E+00 a 283 0 12 1 8 + 6.0219945070033543E-01 a 284 0 12 1 9 + 3.1395849109967169E+00 a 285 0 12 1 10 + 3.0305896266861554E+00 a 286 0 12 1 11 + -1.4143455695905820E+00 a 287 0 12 1 12 + -5.4638828890258671E+00 a 288 0 12 1 13 + 6.4792557797350705E+00 a 289 0 12 1 14 + 4.5371436871747193E+00 a 290 0 12 1 15 + -1.1533461552353546E+00 a 291 0 12 1 16 + -2.3558298927391648E+00 a 292 0 12 1 17 + 1.7399171589274749E+00 a 293 0 12 1 18 + -4.8487063398429440E+00 a 294 0 12 1 19 + -5.7033421532043960E-01 a 295 0 12 1 20 + -1.4257707367342978E+00 a 296 0 12 1 21 + -2.6397293314995309E+00 a 297 0 12 1 22 + -2.2627535308920042E+00 a 298 0 12 1 23 + -2.7717009651755204E+00 a 299 0 12 1 24 + 2.7387478336632087E+00 a 300 0 12 1 25 + 2.4186741478605520E+00 a 301 0 13 1 1 + -3.4944840306430418E+00 a 302 0 13 1 2 + 2.1030004854108602E+00 a 303 0 13 1 3 + 1.4374186253345995E+00 a 304 0 13 1 4 + 1.1617439780972767E+00 a 305 0 13 1 5 + -2.6439447388124258E+00 a 306 0 13 1 6 + 2.4329755420814574E+00 a 307 0 13 1 7 + -8.5717844737500770E-01 a 308 0 13 1 8 + -2.3888368245484140E+00 a 309 0 13 1 9 + 7.8077425868699946E-01 a 310 0 13 1 10 + -1.6080862934589075E+00 a 311 0 13 1 11 + 1.2697401381575075E+00 a 312 0 13 1 12 + 1.3337003897559968E-01 a 313 0 13 1 13 + -1.0390225034430518E+00 a 314 0 13 1 14 + 1.1220960772378719E+00 a 315 0 13 1 15 + 2.1672672073943278E+00 a 316 0 13 1 16 + -7.6556432522471796E-02 a 317 0 13 1 17 + -1.4492561882008852E+00 a 318 0 13 1 18 + 3.3180900339831249E-01 a 319 0 13 1 19 + 3.1763960484138609E+00 a 320 0 13 1 20 + 5.8361392577657190E-01 a 321 0 13 1 21 + 9.6511368793992280E-01 a 322 0 13 1 22 + -4.3642051047376942E+00 a 323 0 13 1 23 + 2.4130612852273967E+00 a 324 0 13 1 24 + 1.0958958229814106E+00 a 325 0 13 1 25 + 2.1192597160887914E+00 a 326 0 14 1 1 + -5.0692375773713882E+00 a 327 0 14 1 2 + -2.4507817466810016E+00 a 328 0 14 1 3 + 5.8024848653758093E-02 a 329 0 14 1 4 + 4.8594499142475156E+00 a 330 0 14 1 5 + 3.4489650784571051E+00 a 331 0 14 1 6 + 8.5777967991056789E-02 a 332 0 14 1 7 + 1.1531915319250103E+00 a 333 0 14 1 8 + -7.9405775334483342E-01 a 334 0 14 1 9 + 1.8147497054993594E-01 a 335 0 14 1 10 + 2.3750920638956341E-01 a 336 0 14 1 11 + 2.6614731814111616E+00 a 337 0 14 1 12 + 4.0677517220565420E+00 a 338 0 14 1 13 + -3.9421246902004270E-01 a 339 0 14 1 14 + -2.6358211134625926E+00 a 340 0 14 1 15 + 1.1720175187126387E+00 a 341 0 14 1 16 + 5.0750718124526617E-01 a 342 0 14 1 17 + -1.3756710203592946E+00 a 343 0 14 1 18 + 4.9977012202457938E-01 a 344 0 14 1 19 + 1.2218668685289211E+00 a 345 0 14 1 20 + 3.1076725758015700E-01 a 346 0 14 1 21 + -1.0132494852704739E+00 a 347 0 14 1 22 + 2.4214858213320172E+00 a 348 0 14 1 23 + 2.9887204648229995E+00 a 349 0 14 1 24 + 3.7431348583028434E-01 a 350 0 14 1 25 + -1.0977916798947627E+00 a 351 0 15 1 1 + 1.0701397562333292E+00 a 352 0 15 1 2 + -5.9035817224644660E-01 a 353 0 15 1 3 + -9.0748114915258671E-01 a 354 0 15 1 4 + -1.3253508128910669E+00 a 355 0 15 1 5 + 7.8765245831574060E-01 a 356 0 15 1 6 + 2.7327135863692200E-02 a 357 0 15 1 7 + 4.6463720795787411E-01 a 358 0 15 1 8 + 4.9974432422740439E-01 a 359 0 15 1 9 + 4.2798717717048357E-01 a 360 0 15 1 10 + 6.8710860008055796E-01 a 361 0 15 1 11 + 1.7139879331687053E+00 a 362 0 15 1 12 + 5.6268488724491939E-01 a 363 0 15 1 13 + 6.6750989111862047E-01 a 364 0 15 1 14 + 1.4397221680585286E+00 a 365 0 15 1 15 + 4.5279750008423403E-01 a 366 0 15 1 16 + 5.0866419627153892E-01 a 367 0 15 1 17 + 7.3963180657667227E-01 a 368 0 15 1 18 + 1.1521887951551322E+00 a 369 0 15 1 19 + -1.4866183272524940E+00 a 370 0 15 1 20 + -1.3616398521253987E+00 a 371 0 15 1 21 + 2.6202790834594486E-01 a 372 0 15 1 22 + 1.5074957279738481E+00 a 373 0 15 1 23 + -1.6205035893428665E+00 a 374 0 15 1 24 + -1.2998391238039100E+00 a 375 0 15 1 25 + -9.3641853880742010E-01 a 376 0 16 1 1 + -2.7376928409123931E+00 a 377 0 16 1 2 + 7.9332155487453226E-01 a 378 0 16 1 3 + -2.8525664756125607E-01 a 379 0 16 1 4 + 7.4751196527836983E-01 a 380 0 16 1 5 + 1.0249289098173713E+00 a 381 0 16 1 6 + -1.8546442663400537E+00 a 382 0 16 1 7 + -1.0549897952608451E+00 a 383 0 16 1 8 + -6.3630120361611320E-01 a 384 0 16 1 9 + 6.6237612981615623E-01 a 385 0 16 1 10 + -5.5448950463878743E-01 a 386 0 16 1 11 + 1.2050106911060470E+00 a 387 0 16 1 12 + 3.9737497458180110E-01 a 388 0 16 1 13 + 5.0109748335825777E-01 a 389 0 16 1 14 + 4.0327652547372667E-01 a 390 0 16 1 15 + 8.8643064796620796E-01 a 391 0 16 1 16 + 4.6304323223345301E-01 a 392 0 16 1 17 + -2.4505895284404668E+00 a 393 0 16 1 18 + -8.4133364692195267E-01 a 394 0 16 1 19 + -1.5110010117067827E+00 a 395 0 16 1 20 + 3.4085891522501455E-01 a 396 0 16 1 21 + 3.1268038879440385E-01 a 397 0 16 1 22 + 7.4003041706355299E-01 a 398 0 16 1 23 + 1.2178938914740584E-01 a 399 0 16 1 24 + 4.7293074933049455E-02 a 400 0 16 1 25 + 3.1553509583631771E+00 a 401 0 17 1 1 + -5.5802418178018307E+00 a 402 0 17 1 2 + -2.6820887513703795E+00 a 403 0 17 1 3 + 1.3611233633822425E-02 a 404 0 17 1 4 + 4.4816951705937047E+00 a 405 0 17 1 5 + -5.3273421864243655E+00 a 406 0 17 1 6 + -2.8604686865391171E+00 a 407 0 17 1 7 + -6.2409056428356209E+00 a 408 0 17 1 8 + -2.7294113313893482E+00 a 409 0 17 1 9 + 8.0447889701632587E+00 a 410 0 17 1 10 + 3.7968250901451115E+00 a 411 0 17 1 11 + 6.1053141270653644E+00 a 412 0 17 1 12 + 7.9575953043010985E+00 a 413 0 17 1 13 + -8.3646321867855189E-01 a 414 0 17 1 14 + -9.8343457754445236E+00 a 415 0 17 1 15 + 4.9972748246782395E+00 a 416 0 17 1 16 + -1.4965816328493091E+00 a 417 0 17 1 17 + -1.0029228324415648E+01 a 418 0 17 1 18 + 5.2568130437764782E-01 a 419 0 17 1 19 + 3.2629819296919251E+00 a 420 0 17 1 20 + -9.4864262172354721E+00 a 421 0 17 1 21 + 2.0133320481661512E+00 a 422 0 17 1 22 + -2.5824165220386761E+00 a 423 0 17 1 23 + -3.0623541276912514E+00 a 424 0 17 1 24 + 3.6881204417292737E+00 a 425 0 17 1 25 + -3.3612109899887197E+00 a 426 0 18 1 1 + 5.3333455077526706E+00 a 427 0 18 1 2 + 7.0017063538187496E-01 a 428 0 18 1 3 + -4.6596829239008164E+00 a 429 0 18 1 4 + 6.8209756898225093E-01 a 430 0 18 1 5 + -6.5260543610279917E+00 a 431 0 18 1 6 + 1.3123829389003430E+00 a 432 0 18 1 7 + 2.7715931711063098E+00 a 433 0 18 1 8 + 3.5186591355105641E+00 a 434 0 18 1 9 + -4.2634531039835357E+00 a 435 0 18 1 10 + -9.5854201044583798E-01 a 436 0 18 1 11 + -2.0978686052914943E+00 a 437 0 18 1 12 + -8.9772662763029789E+00 a 438 0 18 1 13 + 1.9768645811850407E+00 a 439 0 18 1 14 + 7.3670408489508361E+00 a 440 0 18 1 15 + -4.5370304619720505E+00 a 441 0 18 1 16 + 1.0315059285612109E+00 a 442 0 18 1 17 + 3.1023107845720395E+00 a 443 0 18 1 18 + 2.7011350909821794E+00 a 444 0 18 1 19 + 2.0894755387847144E+00 a 445 0 18 1 20 + 6.4298219839784458E+00 a 446 0 18 1 21 + -3.6389216657484109E+00 a 447 0 18 1 22 + -1.9585064481704217E+00 a 448 0 18 1 23 + 4.3796564928038269E+00 a 449 0 18 1 24 + -1.5242269046632566E+00 a 450 0 18 1 25 + -1.1444499511491067E+01 a 451 0 19 1 1 + -1.2789689392745718E+01 a 452 0 19 1 2 + 3.4789124800619677E+00 a 453 0 19 1 3 + 2.2398697525721655E+01 a 454 0 19 1 4 + -2.9517807553388176E+00 a 455 0 19 1 5 + 1.0456899770851461E+01 a 456 0 19 1 6 + -2.1774384553060873E+01 a 457 0 19 1 7 + -1.4740422142098448E+00 a 458 0 19 1 8 + 2.6104661970128717E+01 a 459 0 19 1 9 + -2.4081133455512077E+01 a 460 0 19 1 10 + 1.3007894745410247E+00 a 461 0 19 1 11 + -5.1546596841336223E+00 a 462 0 19 1 12 + -7.0571054726823768E+00 a 463 0 19 1 13 + 1.3042438116729291E+00 a 464 0 19 1 14 + 1.6928559591291155E+01 a 465 0 19 1 15 + -6.7364772527228753E+00 a 466 0 19 1 16 + 2.9369764139126438E+01 a 467 0 19 1 17 + -5.6164540957105666E+00 a 468 0 19 1 18 + 2.6381479720783041E-01 a 469 0 19 1 19 + 1.1648801072168056E+00 a 470 0 19 1 20 + -9.7621028440308972E+00 a 471 0 19 1 21 + -2.4495819053323867E+01 a 472 0 19 1 22 + 2.0487735845785913E+01 a 473 0 19 1 23 + 1.5613183880507096E+01 a 474 0 19 1 24 + 2.2952898686623944E+00 a 475 0 19 1 25 + 6.7784245511731287E+00 a 476 0 20 1 1 + 3.7512926040238188E+00 a 477 0 20 1 2 + -1.4090584942884933E+01 a 478 0 20 1 3 + -1.7276730895098403E+01 a 479 0 20 1 4 + -1.2210325416588912E+00 a 480 0 20 1 5 + -1.0767095565801567E+01 a 481 0 20 1 6 + 6.5252375427728433E+00 a 482 0 20 1 7 + 2.8116557648596285E+00 a 483 0 20 1 8 + -1.0983036930646623E+01 a 484 0 20 1 9 + 1.0172907238701352E+01 a 485 0 20 1 10 + 8.0436693936395942E-01 a 486 0 20 1 11 + 2.6160210876528285E+00 a 487 0 20 1 12 + 8.0905039578636317E-01 a 488 0 20 1 13 + 3.5280353020086892E+00 a 489 0 20 1 14 + -4.3134519502596707E+00 a 490 0 20 1 15 + -2.7849447275673991E+00 a 491 0 20 1 16 + -7.6081258895571393E+00 a 492 0 20 1 17 + 6.8533490599734781E-01 a 493 0 20 1 18 + -8.6739359281855699E-01 a 494 0 20 1 19 + -1.1561786164848851E+01 a 495 0 20 1 20 + 4.0807329692500307E+00 a 496 0 20 1 21 + 1.5887197851126649E+01 a 497 0 20 1 22 + -1.5862637598212434E+01 a 498 0 20 1 23 + -1.3227492727080636E+01 a 499 0 20 1 24 + -9.6316212012535274E-01 a 500 0 20 1 25 + -2.3311076886477737E+00 a 501 0 21 1 1 + 1.6187410207560906E+00 a 502 0 21 1 2 + 1.5355275536101967E+00 a 503 0 21 1 3 + -3.2576721366136963E+00 a 504 0 21 1 4 + -3.4761287579904248E+00 a 505 0 21 1 5 + 1.1110427672521253E+00 a 506 0 21 1 6 + 1.0503832339541006E+00 a 507 0 21 1 7 + 2.0002973548997698E+00 a 508 0 21 1 8 + 3.2182923729080808E+00 a 509 0 21 1 9 + -2.2459858393943724E+00 a 510 0 21 1 10 + 1.2810707973140767E-02 a 511 0 21 1 11 + -8.1563534776190103E+00 a 512 0 21 1 12 + -2.6664870484279217E+00 a 513 0 21 1 13 + -5.2008558789696768E-01 a 514 0 21 1 14 + 5.9263359598324783E+00 a 515 0 21 1 15 + -1.4747654590104164E+00 a 516 0 21 1 16 + 2.3730444562368276E+00 a 517 0 21 1 17 + 5.4231657477361450E+00 a 518 0 21 1 18 + -1.0028220015349436E+00 a 519 0 21 1 19 + 3.0119511489549000E-01 a 520 0 21 1 20 + 3.2360403670895908E+00 a 521 0 21 1 21 + -3.2353491692288996E+00 a 522 0 21 1 22 + -8.0879941504115449E-01 a 523 0 21 1 23 + 9.9370207571285840E-01 a 524 0 21 1 24 + -7.2681059092628819E-01 a 525 0 21 1 25 + 8.3413635618117183E+00 a 526 0 22 1 1 + 7.3895796140513355E+00 a 527 0 22 1 2 + 2.1756697250124180E-01 a 528 0 22 1 3 + 2.6543860348781723E-01 a 529 0 22 1 4 + -1.8498516872975808E+00 a 530 0 22 1 5 + 1.0502428199989866E+00 a 531 0 22 1 6 + 3.7175285159663547E+00 a 532 0 22 1 7 + 2.1251281160031460E-01 a 533 0 22 1 8 + -1.2749425329558013E+01 a 534 0 22 1 9 + 6.9618741113140565E+00 a 535 0 22 1 10 + -2.9375551290531909E+00 a 536 0 22 1 11 + 9.8578039422085730E+00 a 537 0 22 1 12 + 6.8815773902668811E+00 a 538 0 22 1 13 + 9.2998663834751194E-01 a 539 0 22 1 14 + -1.0389879627527502E+01 a 540 0 22 1 15 + 4.6364264921059863E+00 a 541 0 22 1 16 + -7.6740409341129512E+00 a 542 0 22 1 17 + -4.6479447064519261E+00 a 543 0 22 1 18 + -2.5620100958898320E+00 a 544 0 22 1 19 + 1.5457991948477597E+01 a 545 0 22 1 20 + 7.9493145992034386E-01 a 546 0 22 1 21 + 4.7958967347059449E+00 a 547 0 22 1 22 + 2.1504739859079320E+00 a 548 0 22 1 23 + -5.9214542019936145E+00 a 549 0 22 1 24 + -9.1462629199010259E-01 a 550 0 22 1 25 + 3.0540319266805307E+00 a 551 0 23 1 1 + 4.3754634467797500E+00 a 552 0 23 1 2 + 4.5096649173446322E+00 a 553 0 23 1 3 + -2.2503614840266177E+00 a 554 0 23 1 4 + -1.1334803434549245E+01 a 555 0 23 1 5 + -8.8364348468747647E+00 a 556 0 23 1 6 + 2.9144444511093819E+00 a 557 0 23 1 7 + -1.0877090021950451E+01 a 558 0 23 1 8 + -1.4517389759591161E+01 a 559 0 23 1 9 + -7.2829358977248519E+00 a 560 0 23 1 10 + 2.4988119761586502E+00 a 561 0 23 1 11 + 8.7981693718640113E+00 a 562 0 23 1 12 + 2.4786452563791270E+00 a 563 0 23 1 13 + 1.8364237892475522E+01 a 564 0 23 1 14 + 7.4574092693097054E+00 a 565 0 23 1 15 + -9.7034978508326741E-01 a 566 0 23 1 16 + 7.1658789330581296E+00 a 567 0 23 1 17 + -4.4872661883061777E+00 a 568 0 23 1 18 + 2.8476771569427584E-01 a 569 0 23 1 19 + -9.1645272571282668E+00 a 570 0 23 1 20 + 3.8750578448497071E+00 a 571 0 23 1 21 + 4.1609715214369847E-01 a 572 0 23 1 22 + 1.2357730756189335E+01 a 573 0 23 1 23 + -5.0519285605730913E+00 a 574 0 23 1 24 + -2.7632893038424542E+00 a 575 0 23 1 25 + 9.4738463213928661E+00 a 576 0 24 1 1 + -2.5362311432334366E+00 a 577 0 24 1 2 + -1.2268242324939161E+01 a 578 0 24 1 3 + 7.9061421619290835E+00 a 579 0 24 1 4 + 1.0539726569903403E+01 a 580 0 24 1 5 + -6.3797783653087219E+00 a 581 0 24 1 6 + -1.4177696835725733E+01 a 582 0 24 1 7 + -4.6156928580692194E+00 a 583 0 24 1 8 + 6.3132537211598283E+00 a 584 0 24 1 9 + 1.8887507892262903E+01 a 585 0 24 1 10 + -1.2069885050832546E+01 a 586 0 24 1 11 + 1.1183530607261476E+01 a 587 0 24 1 12 + 7.2056821334149852E+00 a 588 0 24 1 13 + -2.3159371120509263E+01 a 589 0 24 1 14 + -1.1985643844839746E+01 a 590 0 24 1 15 + 1.4710265220567070E+01 a 591 0 24 1 16 + 1.8562745129096871E+01 a 592 0 24 1 17 + 1.4826330637921812E+01 a 593 0 24 1 18 + -9.1706291234673415E-02 a 594 0 24 1 19 + 9.5599325376791793E+00 a 595 0 24 1 20 + -1.5500522506766247E+01 a 596 0 24 1 21 + -4.0279973687131365E+00 a 597 0 24 1 22 + -1.2843351980761906E+01 a 598 0 24 1 23 + 5.2577722042990276E+00 a 599 0 24 1 24 + 2.8387805562348317E-01 a 600 0 24 1 25 + -6.9653745866283661E+00 a 601 0 25 1 1 + 3.7596708302846271E+00 a 602 0 25 1 2 + -7.1099755958673025E+00 a 603 0 25 1 3 + -9.8020092564683203E+00 a 604 0 25 1 4 + -3.6625395621794459E+00 a 605 0 25 1 5 + -5.6976255658621309E+00 a 606 0 25 1 6 + 5.1232693844759114E-01 a 607 0 25 1 7 + -5.3562910792605818E+00 a 608 0 25 1 8 + 2.9928736892583383E+00 a 609 0 25 1 9 + -1.1986788486974794E+01 a 610 0 25 1 10 + 1.2541751950335534E+01 a 611 0 25 1 11 + -4.8904744399762130E+00 a 612 0 25 1 12 + -1.2517871717311579E+01 a 613 0 25 1 13 + 1.7601311789244992E-01 a 614 0 25 1 14 + 1.5019784962869869E+00 a 615 0 25 1 15 + -1.5883570419800751E+01 a 616 0 25 1 16 + -1.7079612401530986E+00 a 617 0 25 1 17 + -2.2295323617615281E+01 a 618 0 25 1 18 + -3.4012905404893741E+00 a 619 0 25 1 19 + 2.3478187378832476E+00 a 620 0 25 1 20 + 2.2370096735428082E+00 a 621 0 25 1 21 + 4.0230075176576188E+00 a 622 0 25 1 22 + -1.1800482820069632E+01 a 623 0 25 1 23 + -2.3371127007862893E+00 a 624 0 25 1 24 + -9.9302820949974571E+00 a 625 0 25 1 25 + -6.8423838128641412E-01 a 626 0 26 1 1 + 6.6007117238438306E-01 a 627 0 26 1 2 + 1.2241360846408888E+01 a 628 0 26 1 3 + -2.6072490206067482E+00 a 629 0 26 1 4 + 9.0133570382689001E+00 a 630 0 26 1 5 + -2.3816390555211381E-01 a 631 0 26 1 6 + -2.5608849082596756E+00 a 632 0 26 1 7 + -6.9567191275983573E+00 a 633 0 26 1 8 + 1.6298741229214230E+01 a 634 0 26 1 9 + 1.1995489889077917E+00 a 635 0 26 1 10 + 5.6011858028801900E+00 a 636 0 26 1 11 + -1.5325613074264185E+01 a 637 0 26 1 12 + -6.9730599534962456E+00 a 638 0 26 1 13 + 2.5515519038766659E+00 a 639 0 26 1 14 + 1.1055188524595701E+01 a 640 0 26 1 15 + -6.1595005277379027E+00 a 641 0 26 1 16 + 6.0445381734594816E+00 a 642 0 26 1 17 + 3.2669248960650630E+00 a 643 0 26 1 18 + -3.9830019591555021E-01 a 644 0 26 1 19 + -2.1318606744100656E+01 a 645 0 26 1 20 + 4.3346628815838901E+00 a 646 0 26 1 21 + 6.0196973388144448E-01 a 647 0 26 1 22 + -8.7412565128199127E+00 a 648 0 26 1 23 + 1.0633295223681274E+00 a 649 0 26 1 24 + -9.1807249233618418E+00 a 650 0 26 1 25 + -1.0451420579109527E+00 a 651 0 27 1 1 + -4.4007271651498421E+00 a 652 0 27 1 2 + -8.5170686557145081E-01 a 653 0 27 1 3 + -2.9322607483930767E+01 a 654 0 27 1 4 + -1.4846515678259935E+01 a 655 0 27 1 5 + -1.2996972006209198E+01 a 656 0 27 1 6 + 2.4054788307415940E+01 a 657 0 27 1 7 + 2.2100434386347196E+01 a 658 0 27 1 8 + -1.5431680098175649E+01 a 659 0 27 1 9 + -1.4795094690014339E+00 a 660 0 27 1 10 + 4.0590355375820080E+00 a 661 0 27 1 11 + 1.4611551096642559E+00 a 662 0 27 1 12 + 1.3447290665751375E+01 a 663 0 27 1 13 + -1.5113355237296055E+01 a 664 0 27 1 14 + -8.8923926466996335E+00 a 665 0 27 1 15 + 2.8423571082912019E+01 a 666 0 27 1 16 + -3.3655638889384839E+01 a 667 0 27 1 17 + 2.0981315151387143E+01 a 668 0 27 1 18 + 1.2141485242989217E+01 a 669 0 27 1 19 + 3.5623729786245297E+00 a 670 0 27 1 20 + 5.1477354131777986E+00 a 671 0 27 1 21 + 1.4270823659451633E+01 a 672 0 27 1 22 + 1.2787104919911693E+01 a 673 0 27 1 23 + -4.8134459786202699E+00 a 674 0 27 1 24 + 1.4748193881878693E+01 a 675 0 27 1 25 + -3.9942795143561942E+00 a 676 0 28 1 1 + -1.4300128651749875E+00 a 677 0 28 1 2 + 2.0184937203419938E+01 a 678 0 28 1 3 + 3.0638004021493149E+01 a 679 0 28 1 4 + 1.0508032441016294E+01 a 680 0 28 1 5 + 1.1991074001401975E+01 a 681 0 28 1 6 + -5.9255249272426413E-01 a 682 0 28 1 7 + -3.2121074351766699E-01 a 683 0 28 1 8 + 2.7631342550566136E+00 a 684 0 28 1 9 + 7.6030801584642091E+00 a 685 0 28 1 10 + -8.4700934597413511E+00 a 686 0 28 1 11 + -1.1517050029424707E+00 a 687 0 28 1 12 + 3.1245547505835773E+00 a 688 0 28 1 13 + 5.4101925016776331E+00 a 689 0 28 1 14 + 3.6300196404522261E-01 a 690 0 28 1 15 + -2.6794776609732893E+00 a 691 0 28 1 16 + -1.9862428783577193E+00 a 692 0 28 1 17 + 6.4565675235263340E+00 a 693 0 28 1 18 + -2.6392662819652473E+00 a 694 0 28 1 19 + 5.8059745610477496E+00 a 695 0 28 1 20 + -5.7983237104606407E-02 a 696 0 28 1 21 + -9.0319282861973207E+00 a 697 0 28 1 22 + 8.0435409634585380E+00 a 698 0 28 1 23 + 7.3441688856650078E+00 a 699 0 28 1 24 + 3.5511710166611383E+00 a 700 0 28 1 25 + -2.6047061214427081E+00 a 701 0 29 1 1 + -2.4405103638746337E+00 a 702 0 29 1 2 + -3.3878614805280107E+00 a 703 0 29 1 3 + 1.0549212555681551E+00 a 704 0 29 1 4 + -1.2161742369441815E-01 a 705 0 29 1 5 + 3.4173092472933281E-01 a 706 0 29 1 6 + -1.3463191076558927E+00 a 707 0 29 1 7 + 4.4190813185882583E+00 a 708 0 29 1 8 + 6.7290373717602980E+00 a 709 0 29 1 9 + 4.4708500446680262E+00 a 710 0 29 1 10 + -1.0313889394571119E+00 a 711 0 29 1 11 + -9.9475035905133371E+00 a 712 0 29 1 12 + -6.6192834107379972E-01 a 713 0 29 1 13 + -2.0556548078687700E-01 a 714 0 29 1 14 + -3.9637318313418941E+00 a 715 0 29 1 15 + -1.2289869131131610E+00 a 716 0 29 1 16 + -5.4511723021114493E+00 a 717 0 29 1 17 + -8.0689509567176265E-01 a 718 0 29 1 18 + -3.1158306238821110E-01 a 719 0 29 1 19 + 7.2639618766221525E-01 a 720 0 29 1 20 + 5.1989489465562333E-01 a 721 0 29 1 21 + 6.9303936820388694E+00 a 722 0 29 1 22 + -6.6201324352418949E+00 a 723 0 29 1 23 + 4.0689424396497271E+00 a 724 0 29 1 24 + -1.1850066807578159E+00 a 725 0 29 1 25 + 8.7614445974677557E-01 a 726 0 30 1 1 + -1.8048466064097568E+00 a 727 0 30 1 2 + -6.2221362133518614E+00 a 728 0 30 1 3 + 5.7783559624093062E-01 a 729 0 30 1 4 + -3.4207102956426043E+00 a 730 0 30 1 5 + 1.2680110199797543E+00 a 731 0 30 1 6 + -8.3685669057456086E-02 a 732 0 30 1 7 + 3.2237039030594392E+00 a 733 0 30 1 8 + -3.7780540307154324E+00 a 734 0 30 1 9 + -7.0185057779406739E+00 a 735 0 30 1 10 + 1.4317327703855180E+00 a 736 0 30 1 11 + 5.8177953018665303E+00 a 737 0 30 1 12 + 2.1837521288246124E+00 a 738 0 30 1 13 + 3.5986915962468458E+00 a 739 0 30 1 14 + 3.4754000595955024E+00 a 740 0 30 1 15 + -3.0663829893214753E+00 a 741 0 30 1 16 + -1.3822434976633107E+00 a 742 0 30 1 17 + 1.5349468899146498E-01 a 743 0 30 1 18 + 1.1569157833000427E+00 a 744 0 30 1 19 + 1.2017528497041774E+00 a 745 0 30 1 20 + -1.2414711274636983E+00 a 746 0 30 1 21 + -4.5639218383633091E+00 a 747 0 30 1 22 + 5.6494694171092759E+00 a 748 0 30 1 23 + -8.3048125390498895E-01 a 749 0 30 1 24 + 4.3788743933084788E+00 a 750 0 30 1 25 + 3.2976996036876777E-01 b 751 1 1 + -7.6753162149878262E-02 b 752 1 2 + 5.2957291514779481E-01 b 753 1 3 + 8.9967694000543574E-01 b 754 1 4 + -1.4669108620710516E+00 b 755 1 5 + -6.1441883725006319E-01 b 756 1 6 + 5.3729477719502683E-01 b 757 1 7 + -2.2852808313159043E-01 b 758 1 8 + 7.5683246092701884E-01 b 759 1 9 + 9.2951180705933067E-01 b 760 1 10 + -1.6607837000359041E-01 b 761 1 11 + 1.2855421885955671E+00 b 762 1 12 + -6.6351549790167119E-01 b 763 1 13 + -2.4554153398558296E-02 b 764 1 14 + -3.4339980484561178E-01 b 765 1 15 + -9.2553047933610888E-01 b 766 1 16 + 9.7450171250037332E-01 b 767 1 17 + 1.4835452165946514E-01 b 768 1 18 + 9.7192598438043926E-02 b 769 1 19 + 1.4752059506491437E+00 b 770 1 20 + -8.7661106403226696E-01 b 771 1 21 + 1.0990160690790944E+00 b 772 1 22 + 3.3964360560284529E-01 b 773 1 23 + -4.9161612149966977E-01 b 774 1 24 + -2.2839286644766421E-01 b 775 1 25 + -5.8908517584542821E+00 a 776 1 1 2 1 + -2.0913621285206658E+00 a 777 1 1 2 2 + 4.5287721099327355E-01 a 778 1 1 2 3 + -9.8235822185197019E-01 a 779 1 1 2 4 + 1.8679455781046309E-01 a 780 1 1 2 5 + 7.2236409862688788E-01 a 781 1 1 2 6 + -1.0952128305447486E+00 a 782 1 1 2 7 + -1.2715812546640866E+00 a 783 1 1 2 8 + 9.0926661808726572E-01 a 784 1 1 2 9 + -1.5287299627512634E+00 a 785 1 1 2 10 + 7.9162623494062245E-01 a 786 1 1 2 11 + 5.7949940694732494E-01 a 787 1 1 2 12 + 1.6580990153167480E-01 a 788 1 1 2 13 + 2.8397342861358628E-03 a 789 1 1 2 14 + 1.8858318363343674E+00 a 790 1 1 2 15 + -3.7573668924575816E-03 a 791 1 1 2 16 + 3.5872324603467060E-01 a 792 1 1 2 17 + -5.8854175207138615E-01 a 793 1 1 2 18 + -8.2185472978130292E-01 a 794 1 1 2 19 + -9.3392308437142760E-02 a 795 1 1 2 20 + -1.7781556156150089E+00 a 796 1 1 2 21 + 2.4333445248996122E+00 a 797 1 1 2 22 + 2.6159528101662080E+00 a 798 1 1 2 23 + 7.7034620197358794E-01 a 799 1 1 2 24 + 1.3112817938798338E-01 a 800 1 1 2 25 + -3.0547902668053291E+00 a 801 1 2 2 1 + 7.1640054602300507E-01 a 802 1 2 2 2 + -6.8418235379502890E-01 a 803 1 2 2 3 + 1.1963916155337171E+00 a 804 1 2 2 4 + 8.3175164904418164E-01 a 805 1 2 2 5 + -1.2910667768601369E+00 a 806 1 2 2 6 + 1.3940397843320076E-01 a 807 1 2 2 7 + 8.9802293884228140E-02 a 808 1 2 2 8 + -5.3283620455482994E-01 a 809 1 2 2 9 + -4.5886266868700822E+00 a 810 1 2 2 10 + 3.2591366420787798E-01 a 811 1 2 2 11 + -4.8808011861401129E-01 a 812 1 2 2 12 + 6.6408389981572347E-01 a 813 1 2 2 13 + -1.3564016278739624E-01 a 814 1 2 2 14 + 2.0093325565763637E-01 a 815 1 2 2 15 + -3.9414016160087695E-01 a 816 1 2 2 16 + -5.3456526125245230E-01 a 817 1 2 2 17 + -5.8961622120501145E-01 a 818 1 2 2 18 + 4.2905576802589285E-01 a 819 1 2 2 19 + -7.4948646256489643E-02 a 820 1 2 2 20 + 1.0795855120984683E+00 a 821 1 2 2 21 + 5.1660712066031622E-01 a 822 1 2 2 22 + -2.1777845392686599E+00 a 823 1 2 2 23 + 9.0219112100596155E-01 a 824 1 2 2 24 + 1.4498455224726376E+00 a 825 1 2 2 25 + 2.3760457370500982E+00 a 826 1 3 2 1 + 2.4470575747650514E-01 a 827 1 3 2 2 + -2.3864404106650594E-01 a 828 1 3 2 3 + 1.1607228558257655E-01 a 829 1 3 2 4 + 9.2638823972992057E-02 a 830 1 3 2 5 + -1.2387124056627918E+00 a 831 1 3 2 6 + -1.1166384060830491E-02 a 832 1 3 2 7 + 6.1419808757107369E-02 a 833 1 3 2 8 + -4.3598488389972007E-01 a 834 1 3 2 9 + 6.9151515632030325E-01 a 835 1 3 2 10 + -4.1343329719297200E-01 a 836 1 3 2 11 + -6.7619125900519594E-01 a 837 1 3 2 12 + 1.5110867240178822E+00 a 838 1 3 2 13 + -2.7782516058360712E-01 a 839 1 3 2 14 + -1.2798402235047135E+00 a 840 1 3 2 15 + 5.9712559458208447E-01 a 841 1 3 2 16 + 7.5894819511398548E-01 a 842 1 3 2 17 + -1.8361922269708919E+00 a 843 1 3 2 18 + 6.4980046402745906E-01 a 844 1 3 2 19 + 1.1060205746807641E+00 a 845 1 3 2 20 + -1.5634514153069341E+00 a 846 1 3 2 21 + -1.2680044537576531E+00 a 847 1 3 2 22 + 4.1126675848448695E+00 a 848 1 3 2 23 + -8.0565419159902618E-02 a 849 1 3 2 24 + 1.0713632203888714E+00 a 850 1 3 2 25 + -1.2782989695001217E+00 a 851 1 4 2 1 + -5.1972465317304858E-02 a 852 1 4 2 2 + -1.0867649641411736E+00 a 853 1 4 2 3 + -1.3135398025848977E+00 a 854 1 4 2 4 + -5.1982871921816276E-02 a 855 1 4 2 5 + -3.5935593906530818E+00 a 856 1 4 2 6 + 1.3144262819841284E+00 a 857 1 4 2 7 + 7.0754388470252050E-01 a 858 1 4 2 8 + 7.2880068937171250E-01 a 859 1 4 2 9 + -3.4140141545172598E+00 a 860 1 4 2 10 + -2.0331589823022944E+00 a 861 1 4 2 11 + -2.1154137563026238E+00 a 862 1 4 2 12 + 5.0853142281523345E-01 a 863 1 4 2 13 + -1.3920134415494716E+00 a 864 1 4 2 14 + -3.5999944432031787E+00 a 865 1 4 2 15 + -4.9781147829027450E-01 a 866 1 4 2 16 + 8.7792449496928038E-01 a 867 1 4 2 17 + -2.0639856068607902E+00 a 868 1 4 2 18 + 1.1797226213420740E+00 a 869 1 4 2 19 + 1.0792638675226118E+00 a 870 1 4 2 20 + 5.2451968596647465E+00 a 871 1 4 2 21 + -2.8460338700873771E+00 a 872 1 4 2 22 + -1.5909179246912686E+00 a 873 1 4 2 23 + 3.0889771958836948E-01 a 874 1 4 2 24 + 4.7602587778402219E+00 a 875 1 4 2 25 + 7.2668111958270765E-01 a 876 1 5 2 1 + 1.1911879823978331E+00 a 877 1 5 2 2 + -1.0408627662174885E+00 a 878 1 5 2 3 + 8.5476990321248669E-02 a 879 1 5 2 4 + -3.1987869639473487E-01 a 880 1 5 2 5 + -5.7487550396295206E-01 a 881 1 5 2 6 + -4.4902054021672533E-01 a 882 1 5 2 7 + 2.4758588717099797E-01 a 883 1 5 2 8 + 5.0875967706178988E+00 a 884 1 5 2 9 + -2.9337180039564692E+00 a 885 1 5 2 10 + 4.5817918171118122E-01 a 886 1 5 2 11 + 1.6927135293597100E+00 a 887 1 5 2 12 + 2.3370693642361644E+00 a 888 1 5 2 13 + -2.0461663341165151E-01 a 889 1 5 2 14 + 5.4776988163510315E-02 a 890 1 5 2 15 + 6.1130290019012101E-01 a 891 1 5 2 16 + 4.7031353324201630E-01 a 892 1 5 2 17 + 5.5245719372345892E-01 a 893 1 5 2 18 + 8.0378467679470091E+00 a 894 1 5 2 19 + 1.9855400588647576E+00 a 895 1 5 2 20 + -8.1174159093989473E-01 a 896 1 5 2 21 + -2.8573856916569711E+00 a 897 1 5 2 22 + 5.2670966553870233E+00 a 898 1 5 2 23 + 1.5132999882210110E+00 a 899 1 5 2 24 + 6.0542148570792911E+00 a 900 1 5 2 25 + -1.4078538701918921E+00 a 901 1 6 2 1 + -5.4799218584955611E-01 a 902 1 6 2 2 + 1.5587272154176429E-01 a 903 1 6 2 3 + 1.0839285667757406E+00 a 904 1 6 2 4 + 2.1666525286428695E-01 a 905 1 6 2 5 + 9.3263653513548525E-02 a 906 1 6 2 6 + -3.0612026016294772E-02 a 907 1 6 2 7 + -8.7154566460998506E-01 a 908 1 6 2 8 + 1.3934441214317003E-01 a 909 1 6 2 9 + 1.2878210442412805E+00 a 910 1 6 2 10 + -2.7822735486696848E-01 a 911 1 6 2 11 + -7.5794386701777761E-01 a 912 1 6 2 12 + 4.0882378268145902E-01 a 913 1 6 2 13 + -4.6927306197597152E-01 a 914 1 6 2 14 + -1.2104091784344238E-01 a 915 1 6 2 15 + 6.2503336594907910E-01 a 916 1 6 2 16 + -1.0721041807888161E+00 a 917 1 6 2 17 + 7.8054931552807061E-01 a 918 1 6 2 18 + 1.3613210727055469E+00 a 919 1 6 2 19 + -3.8704580176559972E-01 a 920 1 6 2 20 + 4.9902818068767845E+00 a 921 1 6 2 21 + -2.3891867347766267E+00 a 922 1 6 2 22 + -1.8975665325495361E+00 a 923 1 6 2 23 + 3.2082333815764796E-01 a 924 1 6 2 24 + 1.6689374070079854E+00 a 925 1 6 2 25 + 2.5996153141520773E+00 a 926 1 7 2 1 + 8.7456136199693657E-01 a 927 1 7 2 2 + 1.0858574435313284E+00 a 928 1 7 2 3 + 2.3238142594746511E+00 a 929 1 7 2 4 + 4.6614993198518140E-02 a 930 1 7 2 5 + 4.3578502615682385E-01 a 931 1 7 2 6 + -1.1934807282410993E+00 a 932 1 7 2 7 + 1.9347162211198241E+00 a 933 1 7 2 8 + -3.2308052341130344E-01 a 934 1 7 2 9 + -6.8693735717626436E-01 a 935 1 7 2 10 + -7.9325244471182077E-01 a 936 1 7 2 11 + -2.4755980474403381E+00 a 937 1 7 2 12 + 1.0374435667251840E+00 a 938 1 7 2 13 + -6.6933035812808361E-01 a 939 1 7 2 14 + 7.6783735630117733E-01 a 940 1 7 2 15 + -5.6926278400607662E-02 a 941 1 7 2 16 + -6.0353094278885144E-01 a 942 1 7 2 17 + -2.8544930280127563E+00 a 943 1 7 2 18 + -1.6087185839159248E+00 a 944 1 7 2 19 + -7.2381157085884262E-01 a 945 1 7 2 20 + 2.9692034321769820E+00 a 946 1 7 2 21 + 5.3839692138927281E-02 a 947 1 7 2 22 + 4.8009468375976933E-01 a 948 1 7 2 23 + 9.3810228749111518E-02 a 949 1 7 2 24 + -2.0955410160597516E+00 a 950 1 7 2 25 + 2.3233186848891507E+00 a 951 1 8 2 1 + -8.2584989282428289E-01 a 952 1 8 2 2 + -8.1754672367345493E-01 a 953 1 8 2 3 + -2.1133392997602232E-01 a 954 1 8 2 4 + 1.9541221474908031E-02 a 955 1 8 2 5 + 1.1594444917573479E+00 a 956 1 8 2 6 + 1.4601096001802396E+00 a 957 1 8 2 7 + 9.1372803255810364E-01 a 958 1 8 2 8 + 6.9509920756625398E-01 a 959 1 8 2 9 + 6.2456655930282923E-01 a 960 1 8 2 10 + 6.4855725702015166E-01 a 961 1 8 2 11 + -4.2022514962350010E-01 a 962 1 8 2 12 + -9.0811240657766301E-01 a 963 1 8 2 13 + 3.3680368840187608E-01 a 964 1 8 2 14 + 1.1169015908325419E+00 a 965 1 8 2 15 + -5.1233337412587643E-01 a 966 1 8 2 16 + -5.5320793121008494E-01 a 967 1 8 2 17 + 9.3599914839600240E-01 a 968 1 8 2 18 + 6.7433707322522685E-01 a 969 1 8 2 19 + -3.7849030588103488E-01 a 970 1 8 2 20 + -2.2028781865460831E+00 a 971 1 8 2 21 + 1.5877219737008674E-01 a 972 1 8 2 22 + -3.7995590172594129E+00 a 973 1 8 2 23 + -8.2371018469596335E-01 a 974 1 8 2 24 + -1.1712057969362175E+00 a 975 1 8 2 25 + 8.7628361974167535E-01 a 976 1 9 2 1 + -4.4867754760753260E-03 a 977 1 9 2 2 + -4.3776904492820717E-01 a 978 1 9 2 3 + -1.2037943289398929E+00 a 979 1 9 2 4 + -9.2914350101498666E-01 a 980 1 9 2 5 + 6.1632279153346614E-01 a 981 1 9 2 6 + -2.0213177543706768E+00 a 982 1 9 2 7 + -1.0932389301778918E-01 a 983 1 9 2 8 + 4.6518784673679747E-01 a 984 1 9 2 9 + -6.7264757872727210E-01 a 985 1 9 2 10 + -5.0875443521893260E-01 a 986 1 9 2 11 + 6.5349517467521345E-01 a 987 1 9 2 12 + -8.3081751299065498E-01 a 988 1 9 2 13 + 7.0248658360915539E-01 a 989 1 9 2 14 + 1.0186346926327829E+00 a 990 1 9 2 15 + -1.0485541318597176E-01 a 991 1 9 2 16 + 1.1837504354702677E+00 a 992 1 9 2 17 + -3.5120636878869715E-01 a 993 1 9 2 18 + -1.0967549030845767E+00 a 994 1 9 2 19 + -1.2917485866769735E-01 a 995 1 9 2 20 + -8.4559789268034355E-02 a 996 1 9 2 21 + 6.9852268936768247E-01 a 997 1 9 2 22 + 7.6071829029337419E+00 a 998 1 9 2 23 + -1.7657150367306729E-01 a 999 1 9 2 24 + -2.0449130003488878E+00 a 1000 1 9 2 25 + -8.0747549884968048E+00 a 1001 1 10 2 1 + -8.8634792958566799E-01 a 1002 1 10 2 2 + -4.6127086081764407E-01 a 1003 1 10 2 3 + -3.7334467540371374E-01 a 1004 1 10 2 4 + -4.3054004910279492E-01 a 1005 1 10 2 5 + 2.6993881584011410E+00 a 1006 1 10 2 6 + -9.8429735845119781E-01 a 1007 1 10 2 7 + -1.2241382307669315E+00 a 1008 1 10 2 8 + 2.9216483281734784E-01 a 1009 1 10 2 9 + -1.5861713358593083E-01 a 1010 1 10 2 10 + 7.3302611207510793E-01 a 1011 1 10 2 11 + 1.0063211918156738E+00 a 1012 1 10 2 12 + 8.5455170321334495E-01 a 1013 1 10 2 13 + 2.7292552730774866E-01 a 1014 1 10 2 14 + -7.8320852806125885E-01 a 1015 1 10 2 15 + -6.2618073244068029E-01 a 1016 1 10 2 16 + -4.9591262807377240E-01 a 1017 1 10 2 17 + 2.4541963783544118E+00 a 1018 1 10 2 18 + -6.2156991881826251E-01 a 1019 1 10 2 19 + 1.0571473302241088E+00 a 1020 1 10 2 20 + -3.1732621807636856E+00 a 1021 1 10 2 21 + 7.7456805368502890E-01 a 1022 1 10 2 22 + -8.3119329317008683E-01 a 1023 1 10 2 23 + 1.2193713320805999E+00 a 1024 1 10 2 24 + 3.6491994693939334E+00 a 1025 1 10 2 25 + -2.6856055178254272E+00 a 1026 1 11 2 1 + -1.0116949528231027E+00 a 1027 1 11 2 2 + -9.9540352829095990E-01 a 1028 1 11 2 3 + 4.3004342763359571E-02 a 1029 1 11 2 4 + 2.7933117755600650E-01 a 1030 1 11 2 5 + 9.0396270304770243E-01 a 1031 1 11 2 6 + 3.9679555730976862E-01 a 1032 1 11 2 7 + -5.5973501509742940E-01 a 1033 1 11 2 8 + -4.1504891491253493E-01 a 1034 1 11 2 9 + -3.5262777924993982E-01 a 1035 1 11 2 10 + -1.0411176788136034E+00 a 1036 1 11 2 11 + -9.0297716220909041E-01 a 1037 1 11 2 12 + -6.2427433518956917E-03 a 1038 1 11 2 13 + -1.6812412098279322E-01 a 1039 1 11 2 14 + -1.8167103149720734E+00 a 1040 1 11 2 15 + -6.6199797506103031E-01 a 1041 1 11 2 16 + 4.0884104981586794E-01 a 1042 1 11 2 17 + 4.9067363709609785E-01 a 1043 1 11 2 18 + 2.5534477378097088E-02 a 1044 1 11 2 19 + 8.6068474736695688E-01 a 1045 1 11 2 20 + 1.8371584280919242E+00 a 1046 1 11 2 21 + -1.0803190520545298E+00 a 1047 1 11 2 22 + -2.5371231215621144E+00 a 1048 1 11 2 23 + -1.5358385770601988E+00 a 1049 1 11 2 24 + -3.1907792770247383E+00 a 1050 1 11 2 25 + 4.6030306883078792E-01 a 1051 1 12 2 1 + -3.0963499876239947E-01 a 1052 1 12 2 2 + -1.0940004983246108E+00 a 1053 1 12 2 3 + -4.1750065497929228E-01 a 1054 1 12 2 4 + 2.5736770603218386E+00 a 1055 1 12 2 5 + -9.8062961761113654E-01 a 1056 1 12 2 6 + -1.0532218410010987E+00 a 1057 1 12 2 7 + -3.5725645436127675E+00 a 1058 1 12 2 8 + 1.4096393935559531E-01 a 1059 1 12 2 9 + 1.9946976601289310E+00 a 1060 1 12 2 10 + 1.8435722699276744E+00 a 1061 1 12 2 11 + -2.0438788102041411E-01 a 1062 1 12 2 12 + -2.5425038881685696E-01 a 1063 1 12 2 13 + 9.5772099909966525E-03 a 1064 1 12 2 14 + 1.2217328473820388E+00 a 1065 1 12 2 15 + 2.0820408515687849E+00 a 1066 1 12 2 16 + 8.8699528862869104E-01 a 1067 1 12 2 17 + 2.4678094032754410E+00 a 1068 1 12 2 18 + -1.4687085911859508E+00 a 1069 1 12 2 19 + -4.2093073660998417E-02 a 1070 1 12 2 20 + -3.2697025479251804E+00 a 1071 1 12 2 21 + 4.4495952247262833E+00 a 1072 1 12 2 22 + -2.5500477175213829E+00 a 1073 1 12 2 23 + 1.5426557479411622E+00 a 1074 1 12 2 24 + -4.3415918398091247E+00 a 1075 1 12 2 25 + -1.7837709723341921E+00 a 1076 1 13 2 1 + 6.1765521974326089E-02 a 1077 1 13 2 2 + 1.4270144943346930E-01 a 1078 1 13 2 3 + 9.6877797086914308E-01 a 1079 1 13 2 4 + -3.8646359298400235E-01 a 1080 1 13 2 5 + -6.0257789082689994E-01 a 1081 1 13 2 6 + -6.1333483983045078E-01 a 1082 1 13 2 7 + -6.5924706654526399E-01 a 1083 1 13 2 8 + 1.3577887408597951E+00 a 1084 1 13 2 9 + 5.5233747012811663E-01 a 1085 1 13 2 10 + 3.0399128682584076E-01 a 1086 1 13 2 11 + 1.2571290273194094E-01 a 1087 1 13 2 12 + 3.0141690728843917E-01 a 1088 1 13 2 13 + 1.5586546563560341E-01 a 1089 1 13 2 14 + 2.0214921383231643E+00 a 1090 1 13 2 15 + 3.3127896825896652E-01 a 1091 1 13 2 16 + -4.4476447583914724E-01 a 1092 1 13 2 17 + -6.2761412512460968E-01 a 1093 1 13 2 18 + -4.9427182431196892E-01 a 1094 1 13 2 19 + 1.3983388512561243E-01 a 1095 1 13 2 20 + 2.3002496577740685E+00 a 1096 1 13 2 21 + 1.6701239103859009E+00 a 1097 1 13 2 22 + 1.4994823080328907E+00 a 1098 1 13 2 23 + 3.9537178110787974E-01 a 1099 1 13 2 24 + 5.8398220926075173E-01 a 1100 1 13 2 25 + 8.5295201345779237E-01 a 1101 1 14 2 1 + -5.2839167849903323E-01 a 1102 1 14 2 2 + 1.2118820764567373E+00 a 1103 1 14 2 3 + 1.7954759082816425E+00 a 1104 1 14 2 4 + 1.8747124299625395E-01 a 1105 1 14 2 5 + 5.6017574192285047E-01 a 1106 1 14 2 6 + -1.7110522199101674E-01 a 1107 1 14 2 7 + 8.3896462942648653E-01 a 1108 1 14 2 8 + -1.4616181471345491E+00 a 1109 1 14 2 9 + 8.5959907109993361E-01 a 1110 1 14 2 10 + -1.4403152519951887E-01 a 1111 1 14 2 11 + -5.0813687652801176E-01 a 1112 1 14 2 12 + -9.7981782688599128E-01 a 1113 1 14 2 13 + 7.7753224886522421E-01 a 1114 1 14 2 14 + -5.9844735095640156E-01 a 1115 1 14 2 15 + 3.4650752103169025E-01 a 1116 1 14 2 16 + -5.8711794319937194E-01 a 1117 1 14 2 17 + -1.3706594054270902E+00 a 1118 1 14 2 18 + -1.1422652077233137E+00 a 1119 1 14 2 19 + 8.0707171356885204E-04 a 1120 1 14 2 20 + 1.4089178119149774E+00 a 1121 1 14 2 21 + -2.0868443512620523E-02 a 1122 1 14 2 22 + 2.4765810938521640E-01 a 1123 1 14 2 23 + -4.5822482418987104E-01 a 1124 1 14 2 24 + -6.2760190470460109E-02 a 1125 1 14 2 25 + -6.3051316449413697E-01 a 1126 1 15 2 1 + -8.5568766828554729E-02 a 1127 1 15 2 2 + 1.2623012829197652E-01 a 1128 1 15 2 3 + -2.6333284380527960E-01 a 1129 1 15 2 4 + -1.6789499972196012E-01 a 1130 1 15 2 5 + -1.6739915035010851E+00 a 1131 1 15 2 6 + 7.5150164741418890E-01 a 1132 1 15 2 7 + 1.4850802285946663E+00 a 1133 1 15 2 8 + 1.3679527143714523E+00 a 1134 1 15 2 9 + 2.2702130106994698E+00 a 1135 1 15 2 10 + -9.0423742617082359E-01 a 1136 1 15 2 11 + -4.0104658105606300E-01 a 1137 1 15 2 12 + 3.8900726826654108E-01 a 1138 1 15 2 13 + -5.4951242988164040E-01 a 1139 1 15 2 14 + -1.7241979783027172E-02 a 1140 1 15 2 15 + -2.5629230309678513E-01 a 1141 1 15 2 16 + -1.6129459175130396E+00 a 1142 1 15 2 17 + -1.4034841005534375E+00 a 1143 1 15 2 18 + 1.1341665130800804E+00 a 1144 1 15 2 19 + 1.1213024535918692E-01 a 1145 1 15 2 20 + 3.7656367590986606E+00 a 1146 1 15 2 21 + 7.3019329240980635E-01 a 1147 1 15 2 22 + -2.5611761254488857E-01 a 1148 1 15 2 23 + -4.8540953698913802E-01 a 1149 1 15 2 24 + 1.3692262226307499E+00 a 1150 1 15 2 25 + 1.6494141683657493E+00 a 1151 1 16 2 1 + -9.6390345736239269E-01 a 1152 1 16 2 2 + 2.0793522726329236E-01 a 1153 1 16 2 3 + -5.7374450018525558E-01 a 1154 1 16 2 4 + -9.8733160966737721E-01 a 1155 1 16 2 5 + 6.5807844696554119E-01 a 1156 1 16 2 6 + 3.2247433911740793E-02 a 1157 1 16 2 7 + -2.4521651144191488E+00 a 1158 1 16 2 8 + -3.0303442815675607E+00 a 1159 1 16 2 9 + 2.2159579109757380E-01 a 1160 1 16 2 10 + -7.4309660254871501E-01 a 1161 1 16 2 11 + -2.9049753431162834E-01 a 1162 1 16 2 12 + 3.1668098555699156E+00 a 1163 1 16 2 13 + -1.2261594986593347E+00 a 1164 1 16 2 14 + 1.0349812541428842E+00 a 1165 1 16 2 15 + 1.7121815269407428E+00 a 1166 1 16 2 16 + 8.0358012812129054E-01 a 1167 1 16 2 17 + -1.3675359756343288E+00 a 1168 1 16 2 18 + -4.6006123916898067E-01 a 1169 1 16 2 19 + -2.5878505755147092E+00 a 1170 1 16 2 20 + -2.9512006713160228E+00 a 1171 1 16 2 21 + -1.1058407528187431E+00 a 1172 1 16 2 22 + 8.9298442903850317E-01 a 1173 1 16 2 23 + -9.9725253604444308E-01 a 1174 1 16 2 24 + -1.8425500935308365E+00 a 1175 1 16 2 25 + -1.8570790778452546E+00 a 1176 1 17 2 1 + -6.3973968207352483E-01 a 1177 1 17 2 2 + 2.0052987685530210E-01 a 1178 1 17 2 3 + 2.2185837483654831E+00 a 1179 1 17 2 4 + -6.0198667595147914E-01 a 1180 1 17 2 5 + 2.3405835273964992E-01 a 1181 1 17 2 6 + 3.3196570543138565E-01 a 1182 1 17 2 7 + 1.2991668836547232E+00 a 1183 1 17 2 8 + 1.5143648879673921E+00 a 1184 1 17 2 9 + 1.7917556495597248E-01 a 1185 1 17 2 10 + 6.5534517793332372E-02 a 1186 1 17 2 11 + -5.9191948460177024E-01 a 1187 1 17 2 12 + 1.2750933232410862E+00 a 1188 1 17 2 13 + -1.5608383187707420E+00 a 1189 1 17 2 14 + -4.8452426559440576E-01 a 1190 1 17 2 15 + 5.6869904306512328E-02 a 1191 1 17 2 16 + -1.3745314092035921E+00 a 1192 1 17 2 17 + -9.3363971641325649E-01 a 1193 1 17 2 18 + 1.2301554196497246E+00 a 1194 1 17 2 19 + -2.4104104828665646E-01 a 1195 1 17 2 20 + 6.6198296290777559E-01 a 1196 1 17 2 21 + -1.5152727297809043E+00 a 1197 1 17 2 22 + -5.6537663778771396E-01 a 1198 1 17 2 23 + -4.0752023749644689E-01 a 1199 1 17 2 24 + -9.0608531726854380E-01 a 1200 1 17 2 25 + 2.8033128399492440E+00 a 1201 1 18 2 1 + -8.3666510516204506E-01 a 1202 1 18 2 2 + 4.7953835552796820E-01 a 1203 1 18 2 3 + 2.9366893922704856E-01 a 1204 1 18 2 4 + -1.3407438479056275E+00 a 1205 1 18 2 5 + 2.0149219645963756E-01 a 1206 1 18 2 6 + -7.1078447275601489E-02 a 1207 1 18 2 7 + 6.8753704488081457E-01 a 1208 1 18 2 8 + 1.0614745034105677E+00 a 1209 1 18 2 9 + -5.1972296801419360E-01 a 1210 1 18 2 10 + 4.2568809194098922E-01 a 1211 1 18 2 11 + 1.1283129901890967E+00 a 1212 1 18 2 12 + 3.2368449527546245E-01 a 1213 1 18 2 13 + -4.8104595431142377E-01 a 1214 1 18 2 14 + -4.4478850619894661E-01 a 1215 1 18 2 15 + 7.5342013209859982E-01 a 1216 1 18 2 16 + -7.5251058833923024E-01 a 1217 1 18 2 17 + -3.2851254846358019E-01 a 1218 1 18 2 18 + -5.8774560188315617E-01 a 1219 1 18 2 19 + -1.1508334029793323E+00 a 1220 1 18 2 20 + -1.1354296884739232E+00 a 1221 1 18 2 21 + -2.7200286001651858E-01 a 1222 1 18 2 22 + -3.8397527569339713E+00 a 1223 1 18 2 23 + 2.2605209148377950E-01 a 1224 1 18 2 24 + 1.1365846684759007E+00 a 1225 1 18 2 25 + -5.3912432672650032E+00 a 1226 1 19 2 1 + 4.5845696130825303E-01 a 1227 1 19 2 2 + 7.0709208368568310E-01 a 1228 1 19 2 3 + -1.3973599899226747E+00 a 1229 1 19 2 4 + 3.0071504252034847E-01 a 1230 1 19 2 5 + -5.4197295981474947E-01 a 1231 1 19 2 6 + 7.4376471223405460E-01 a 1232 1 19 2 7 + -2.5079217516979186E+00 a 1233 1 19 2 8 + 2.0592046605772945E+00 a 1234 1 19 2 9 + 6.5654373849726466E-01 a 1235 1 19 2 10 + -9.0407721196091848E-02 a 1236 1 19 2 11 + 1.5566506128138184E+00 a 1237 1 19 2 12 + -9.4986537106149321E-02 a 1238 1 19 2 13 + -2.3530503270088396E-01 a 1239 1 19 2 14 + 3.6439425212581661E-01 a 1240 1 19 2 15 + 1.2871636736138770E+00 a 1241 1 19 2 16 + -8.4712787652121069E-01 a 1242 1 19 2 17 + -1.0234220464653516E+00 a 1243 1 19 2 18 + -1.3802013894870373E+00 a 1244 1 19 2 19 + 4.6238544527464259E-01 a 1245 1 19 2 20 + -3.1736140472371468E+00 a 1246 1 19 2 21 + 1.7897235482645921E+00 a 1247 1 19 2 22 + -1.2075712900497950E+00 a 1248 1 19 2 23 + -3.1032297572767770E-01 a 1249 1 19 2 24 + 2.1706205401676661E+00 a 1250 1 19 2 25 + 6.9973782486580109E+00 a 1251 1 20 2 1 + 2.9325190821916197E-01 a 1252 1 20 2 2 + -1.2648655109330131E+00 a 1253 1 20 2 3 + -4.3905910522706337E-01 a 1254 1 20 2 4 + 4.2887555555714030E-01 a 1255 1 20 2 5 + 1.3300944280643934E+00 a 1256 1 20 2 6 + 1.0988390404457922E+00 a 1257 1 20 2 7 + 2.3801051936039075E+00 a 1258 1 20 2 8 + 1.1789379212300943E-01 a 1259 1 20 2 9 + 3.9144297908957699E+00 a 1260 1 20 2 10 + 5.5000952527940228E-01 a 1261 1 20 2 11 + 2.4087943927489916E-01 a 1262 1 20 2 12 + -3.7997171313505251E-01 a 1263 1 20 2 13 + -5.4744714104500347E-01 a 1264 1 20 2 14 + 8.9095280999944937E-01 a 1265 1 20 2 15 + -8.7130940035564164E-01 a 1266 1 20 2 16 + 3.7900358553306007E-01 a 1267 1 20 2 17 + 2.1342515402584987E+00 a 1268 1 20 2 18 + 1.2475880574414706E+00 a 1269 1 20 2 19 + 7.8956439485340524E-01 a 1270 1 20 2 20 + 4.6968348528891219E+00 a 1271 1 20 2 21 + 2.4464240930319816E+00 a 1272 1 20 2 22 + -5.7785142905302376E+00 a 1273 1 20 2 23 + -2.3074149497856417E-01 a 1274 1 20 2 24 + -2.6800082940155296E+00 a 1275 1 20 2 25 + -3.2729577955630704E+00 a 1276 1 21 2 1 + -1.2928637501931926E+00 a 1277 1 21 2 2 + -2.2664219916515152E-01 a 1278 1 21 2 3 + 6.8197406796553048E-02 a 1279 1 21 2 4 + 2.2800043902454539E-01 a 1280 1 21 2 5 + -1.4547709606717896E+00 a 1281 1 21 2 6 + -8.9797316703694119E-02 a 1282 1 21 2 7 + -7.9615421262219899E-01 a 1283 1 21 2 8 + -2.5074736863647562E-01 a 1284 1 21 2 9 + -3.2383137185187805E-01 a 1285 1 21 2 10 + -7.7486670060442631E-01 a 1286 1 21 2 11 + -1.7378145875987788E-01 a 1287 1 21 2 12 + 1.7001762592878558E+00 a 1288 1 21 2 13 + -1.7033999809142997E+00 a 1289 1 21 2 14 + 3.7961258225336264E-01 a 1290 1 21 2 15 + 6.0929689839357426E-01 a 1291 1 21 2 16 + -1.9171250145280534E+00 a 1292 1 21 2 17 + -1.6594854242769004E+00 a 1293 1 21 2 18 + -2.8219229087100910E+00 a 1294 1 21 2 19 + -4.3902463688638738E-01 a 1295 1 21 2 20 + -1.1744026035352828E+00 a 1296 1 21 2 21 + 3.9648025457334164E+00 a 1297 1 21 2 22 + -1.3587513635268793E+00 a 1298 1 21 2 23 + 3.9463311556495906E-02 a 1299 1 21 2 24 + -4.6280624473662763E-01 a 1300 1 21 2 25 + 8.3725910272757709E+00 a 1301 1 22 2 1 + 1.2030400911595496E+00 a 1302 1 22 2 2 + 5.2723639396495003E-01 a 1303 1 22 2 3 + 2.4863416823271995E+00 a 1304 1 22 2 4 + 5.0656775645932173E-01 a 1305 1 22 2 5 + 7.8889662692367113E-01 a 1306 1 22 2 6 + 2.7467021112668549E-01 a 1307 1 22 2 7 + 3.5551997281423904E+00 a 1308 1 22 2 8 + -6.9074567194666425E-01 a 1309 1 22 2 9 + 9.2831069742658789E-01 a 1310 1 22 2 10 + -2.7305664188353734E-01 a 1311 1 22 2 11 + -1.6732686793215996E+00 a 1312 1 22 2 12 + -1.2508123463191103E+00 a 1313 1 22 2 13 + 1.4253551144285490E+00 a 1314 1 22 2 14 + -1.2730453204508483E+00 a 1315 1 22 2 15 + -5.6234386233504563E-01 a 1316 1 22 2 16 + 4.7348930208036427E-01 a 1317 1 22 2 17 + 1.4228359329011722E+00 a 1318 1 22 2 18 + -3.0896237212805277E-02 a 1319 1 22 2 19 + -7.7625773033108136E-01 a 1320 1 22 2 20 + 5.1571228251110171E-02 a 1321 1 22 2 21 + -1.5781774955827834E+00 a 1322 1 22 2 22 + -1.7313703986673430E+00 a 1323 1 22 2 23 + -1.3316987118953665E+00 a 1324 1 22 2 24 + -7.0760527312605037E-01 a 1325 1 22 2 25 + -8.1466385165616928E-01 a 1326 1 23 2 1 + 6.8912340727205368E-01 a 1327 1 23 2 2 + 8.4582890184800619E-01 a 1328 1 23 2 3 + 3.8163700575566650E-01 a 1329 1 23 2 4 + -6.6556600373886232E-01 a 1330 1 23 2 5 + -1.3399458536680564E+00 a 1331 1 23 2 6 + -1.7425009694107033E-01 a 1332 1 23 2 7 + -2.6104662248332646E+00 a 1333 1 23 2 8 + -1.9788280313555501E-01 a 1334 1 23 2 9 + -4.6341960827595043E+00 a 1335 1 23 2 10 + -4.1560774205921192E-01 a 1336 1 23 2 11 + -1.3453315295733928E-01 a 1337 1 23 2 12 + 5.9251987079212687E-01 a 1338 1 23 2 13 + 1.3014540212114664E-01 a 1339 1 23 2 14 + 2.4962768316839337E-01 a 1340 1 23 2 15 + 3.3868458734074913E-01 a 1341 1 23 2 16 + -2.1103970517135956E-01 a 1342 1 23 2 17 + -2.7311756320323316E-01 a 1343 1 23 2 18 + 7.7825779463422798E-02 a 1344 1 23 2 19 + -1.5510879185574573E+00 a 1345 1 23 2 20 + -3.3731285186903501E+00 a 1346 1 23 2 21 + 1.5012690395440691E+00 a 1347 1 23 2 22 + -1.4938786629136067E+00 a 1348 1 23 2 23 + 1.5155834326942672E-01 a 1349 1 23 2 24 + 2.2135367884980521E+00 a 1350 1 23 2 25 + 7.6092107307961931E-01 a 1351 1 24 2 1 + 2.5019321183393825E-02 a 1352 1 24 2 2 + 2.4714648764760871E-01 a 1353 1 24 2 3 + -4.2700090187223255E-01 a 1354 1 24 2 4 + 1.9684439924637190E-01 a 1355 1 24 2 5 + -1.6150658390090172E-01 a 1356 1 24 2 6 + -8.4941771549071021E-01 a 1357 1 24 2 7 + 3.2616941337700417E-01 a 1358 1 24 2 8 + -6.0235251095177200E-01 a 1359 1 24 2 9 + 2.0073315297316108E+00 a 1360 1 24 2 10 + 6.8678637919958119E-01 a 1361 1 24 2 11 + -1.4709309602563259E+00 a 1362 1 24 2 12 + -7.3119546383323997E-01 a 1363 1 24 2 13 + 5.9624465461749732E-01 a 1364 1 24 2 14 + 1.1965703107989687E+00 a 1365 1 24 2 15 + -4.8078015734066326E-01 a 1366 1 24 2 16 + 2.8731897539798784E-01 a 1367 1 24 2 17 + 2.8943049077679879E+00 a 1368 1 24 2 18 + 4.4309374097560666E-01 a 1369 1 24 2 19 + -5.2571668466848664E-01 a 1370 1 24 2 20 + 2.6293009755349539E+00 a 1371 1 24 2 21 + 1.1166360248787797E+00 a 1372 1 24 2 22 + 1.4367909042068954E+00 a 1373 1 24 2 23 + 1.2263949730702137E+00 a 1374 1 24 2 24 + -1.5658327417588482E+00 a 1375 1 24 2 25 + -3.0524380712257440E+00 a 1376 1 25 2 1 + -1.6248402538917406E-01 a 1377 1 25 2 2 + 5.3725239557723847E-01 a 1378 1 25 2 3 + -3.1435543583372311E-01 a 1379 1 25 2 4 + 8.0294309812719877E-01 a 1380 1 25 2 5 + -3.3745709161028831E-01 a 1381 1 25 2 6 + 2.9618139473335392E-01 a 1382 1 25 2 7 + -1.3606606680314999E+00 a 1383 1 25 2 8 + 2.9886863438452965E-01 a 1384 1 25 2 9 + 3.4365095196288835E+00 a 1385 1 25 2 10 + 2.8778063903425566E-01 a 1386 1 25 2 11 + -5.2312889094867954E-01 a 1387 1 25 2 12 + 4.5730896273705224E-01 a 1388 1 25 2 13 + -8.8949447500584955E-01 a 1389 1 25 2 14 + -8.1389897744929640E-01 a 1390 1 25 2 15 + -4.0077086298379117E-01 a 1391 1 25 2 16 + 7.2544627916775950E-01 a 1392 1 25 2 17 + -9.8029709488119798E-01 a 1393 1 25 2 18 + 8.5017837869712165E-01 a 1394 1 25 2 19 + -2.9795775527520296E-01 a 1395 1 25 2 20 + 1.1940911570260535E+00 a 1396 1 25 2 21 + -4.1259772504588357E-02 a 1397 1 25 2 22 + 1.0619824936744515E+00 a 1398 1 25 2 23 + -6.5325825341918264E-01 a 1399 1 25 2 24 + 3.7575240210802421E+00 a 1400 1 25 2 25 + -1.0787018434494783E+01 b 1401 2 1 + -8.4067078142086771E-01 b 1402 2 2 + 9.3201271110229211E-01 b 1403 2 3 + -1.8318272256547821E+00 b 1404 2 4 + -2.1732436845179119E+00 b 1405 2 5 + -2.6390929073478930E+00 b 1406 2 6 + 3.7489748853957300E-01 b 1407 2 7 + -2.3789675524866163E+00 b 1408 2 8 + 2.7252644932624959E+00 b 1409 2 9 + 2.5100559841854970E+00 b 1410 2 10 + -2.4897033671113025E-01 b 1411 2 11 + 2.6913296692082476E+00 b 1412 2 12 + 5.8162695990329221E+00 b 1413 2 13 + -1.5170700889568940E+00 b 1414 2 14 + 4.2121259244130220E+00 b 1415 2 15 + 2.2987725066596130E+00 b 1416 2 16 + -7.1493650128731911E-01 b 1417 2 17 + -3.9961443472349811E-01 b 1418 2 18 + 7.8083705485664430E+00 b 1419 2 19 + -4.0462773256448170E-01 b 1420 2 20 + -1.4333029489891109E+00 b 1421 2 21 + -4.9517224038431467E+00 b 1422 2 22 + 1.0702867307710989E+01 b 1423 2 23 + -9.7535853921453985E-01 b 1424 2 24 + 5.3161969295054172E+00 b 1425 2 25 + -5.1941647295982207E-01 a 1426 2 1 3 1 + -7.7346657642095373E-01 a 1427 2 2 3 1 + 1.4003893583106508E+00 a 1428 2 3 3 1 + 8.9188080044914464E-01 a 1429 2 4 3 1 + -2.0147808233792022E+00 a 1430 2 5 3 1 + -1.8131831735812174E+00 a 1431 2 6 3 1 + 3.3217884596641700E+00 a 1432 2 7 3 1 + -1.2675289031787327E+00 a 1433 2 8 3 1 + -1.2791140359120716E+00 a 1434 2 9 3 1 + 1.9731828075446340E+00 a 1435 2 10 3 1 + -2.3928332883234411E+00 a 1436 2 11 3 1 + -1.1755085043375486E+00 a 1437 2 12 3 1 + 2.6525670286472951E+00 a 1438 2 13 3 1 + -2.4861988521743901E+00 a 1439 2 14 3 1 + 1.2534500349238071E+00 a 1440 2 15 3 1 + 2.8804282010183990E+00 a 1441 2 16 3 1 + -2.0327745898215275E+00 a 1442 2 17 3 1 + -1.1760164122204946E+00 a 1443 2 18 3 1 + -9.9841804355412322E-01 a 1444 2 19 3 1 + -1.8663330516323837E+00 a 1445 2 20 3 1 + 6.3266049836286531E-01 a 1446 2 21 3 1 + 1.2025500357718348E+00 a 1447 2 22 3 1 + 1.1367820678861495E-01 a 1448 2 23 3 1 + -2.6481374255863193E+00 a 1449 2 24 3 1 + 5.2166795947347921E-01 a 1450 2 25 3 1 + 4.8693043186011655E+00 b 1451 3 1 diff --git a/src/USER-NNP/Install.sh b/src/USER-NNP/Install.sh new file mode 100644 index 0000000000..e17603df76 --- /dev/null +++ b/src/USER-NNP/Install.sh @@ -0,0 +1,68 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + +# edit 2 Makefile.package files to include/exclude package info + +if (test $1 = 1) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*nnp[^ \t]* //g' ../Makefile.package + sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/nnp\/include |' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/nnp\/lib |' ../Makefile.package + sed -i -e 's|^PKG_LIB =[ \t]*|&-lnnpif -lnnp |' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(nnp_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(nnp_SYSLIB) |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(nnp_SYSPATH) |' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*nnp.*$/d' ../Makefile.package.settings + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ..\/..\/lib\/nnp\/src\/libnnpif\/LAMMPS\/Makefile.lammps +' ../Makefile.package.settings + + fi + +elif (test $1 = 0) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*nnp[^ \t]* //g' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*nnp.*$/d' ../Makefile.package.settings + fi + +fi diff --git a/src/USER-NNP/README b/src/USER-NNP/README new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-NNP/pair_nnp.cpp new file mode 100644 index 0000000000..2ccde4418d --- /dev/null +++ b/src/USER-NNP/pair_nnp.cpp @@ -0,0 +1,419 @@ +// n2p2 - A neural network potential package +// Copyright (C) 2018 Andreas Singraber (University of Vienna) +// +// This program 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. +// +// This program 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 . + +#include +#include +#include "pair_nnp.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "memory.h" +#include "error.h" +#include "update.h" +#include "utils.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairNNP::PairNNP(LAMMPS *lmp) : Pair(lmp) +{ +} + +/* ---------------------------------------------------------------------- + check if allocated, since class can be destructed when incomplete +------------------------------------------------------------------------- */ + +PairNNP::~PairNNP() +{ +} + +/* ---------------------------------------------------------------------- */ + +void PairNNP::compute(int eflag, int vflag) +{ + if(eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; + + // Set number of local atoms and add index and element. + interface.setLocalAtoms(atom->nlocal,atom->tag,atom->type); + + // Transfer local neighbor list to NNP interface. + transferNeighborList(); + + // Compute symmetry functions, atomic neural networks and add up energy. + interface.process(); + + // Do all stuff related to extrapolation warnings. + if(showew == true || showewsum > 0 || maxew >= 0) { + handleExtrapolationWarnings(); + } + + // Calculate forces of local and ghost atoms. + interface.getForces(atom->f); + + // Add energy contribution to total energy. + if (eflag_global) + ev_tally(0,0,atom->nlocal,1,interface.getEnergy(),0.0,0.0,0.0,0.0,0.0); + + // Add atomic energy if requested (CAUTION: no physical meaning!). + if (eflag_atom) + for (int i = 0; i < atom->nlocal; ++i) + eatom[i] = interface.getAtomicEnergy(i); + + // If virial needed calculate via F dot r. + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairNNP::settings(int narg, char **arg) +{ + int iarg = 0; + + if (narg == 0) error->all(FLERR,"Illegal pair_style command"); + + // default settings + int len = strlen("nnp/") + 1; + directory = new char[len]; + strcpy(directory,"nnp/"); + showew = true; + showewsum = 0; + maxew = 0; + resetew = false; + cflength = 1.0; + cfenergy = 1.0; + len = strlen("") + 1; + emap = new char[len]; + strcpy(emap,""); + numExtrapolationWarningsTotal = 0; + numExtrapolationWarningsSummary = 0; + + while(iarg < narg) { + // set NNP directory + if (strcmp(arg[iarg],"dir") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + delete[] directory; + len = strlen(arg[iarg+1]) + 2; + directory = new char[len]; + sprintf(directory, "%s/", arg[iarg+1]); + iarg += 2; + // element mapping + } else if (strcmp(arg[iarg],"emap") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + delete[] emap; + len = strlen(arg[iarg+1]) + 1; + emap = new char[len]; + sprintf(emap, "%s", arg[iarg+1]); + iarg += 2; + // show extrapolation warnings + } else if (strcmp(arg[iarg],"showew") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + if (strcmp(arg[iarg+1],"yes") == 0) + showew = true; + else if (strcmp(arg[iarg+1],"no") == 0) + showew = false; + else + error->all(FLERR,"Illegal pair_style command"); + iarg += 2; + // show extrapolation warning summary + } else if (strcmp(arg[iarg],"showewsum") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + showewsum = utils::inumeric(FLERR,arg[iarg+1],false,lmp); + iarg += 2; + // maximum allowed extrapolation warnings + } else if (strcmp(arg[iarg],"maxew") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + maxew = utils::inumeric(FLERR,arg[iarg+1],false,lmp); + iarg += 2; + // reset extrapolation warning counter + } else if (strcmp(arg[iarg],"resetew") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + if (strcmp(arg[iarg+1],"yes") == 0) + resetew = true; + else if (strcmp(arg[iarg+1],"no") == 0) + resetew = false; + else + error->all(FLERR,"Illegal pair_style command"); + iarg += 2; + // length unit conversion factor + } else if (strcmp(arg[iarg],"cflength") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + cflength = utils::numeric(FLERR,arg[iarg+1],false,lmp); + iarg += 2; + // energy unit conversion factor + } else if (strcmp(arg[iarg],"cfenergy") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal pair_style command"); + cfenergy = utils::numeric(FLERR,arg[iarg+1],false,lmp); + iarg += 2; + } else error->all(FLERR,"Illegal pair_style command"); + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairNNP::coeff(int narg, char **arg) +{ + if (!allocated) allocate(); + + if (narg != 3) error->all(FLERR,"Incorrect args for pair coefficients"); + + int ilo,ihi,jlo,jhi; + utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error); + utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error); + + maxCutoffRadius = utils::numeric(FLERR,arg[2],false,lmp); + + // TODO: Check how this flag is set. + int count = 0; + for(int i=ilo; i<=ihi; i++) { + for(int j=MAX(jlo,i); j<=jhi; j++) { + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairNNP::init_style() +{ + int irequest = neighbor->request((void *) this); + neighbor->requests[irequest]->pair = 1; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + // Return immediately if NNP setup is already completed. + if (interface.isInitialized()) return; + + // Activate screen and logfile output only for rank 0. + if (comm->me == 0) { + if (lmp->screen != NULL) + interface.log.registerCFilePointer(&(lmp->screen)); + if (lmp->logfile != NULL) + interface.log.registerCFilePointer(&(lmp->logfile)); + } + + // Initialize interface on all processors. + interface.initialize(directory, + emap, + showew, + resetew, + showewsum, + maxew, + cflength, + cfenergy, + maxCutoffRadius, + atom->ntypes, + comm->me); + + // LAMMPS cutoff radius (given via pair_coeff) should not be smaller than + // maximum symmetry function cutoff radius. + if (maxCutoffRadius < interface.getMaxCutoffRadius()) + error->all(FLERR,"Inconsistent cutoff radius"); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairNNP::init_one(int i, int j) +{ + // TODO: Check how this actually works for different cutoffs. + return maxCutoffRadius; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairNNP::write_restart(FILE *fp) +{ + return; +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairNNP::read_restart(FILE *fp) +{ + return; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairNNP::write_restart_settings(FILE *fp) +{ + return; +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairNNP::read_restart_settings(FILE *fp) +{ + return; +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairNNP::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); +} + +void PairNNP::transferNeighborList() +{ + // Transfer neighbor list to NNP. + double rc2 = maxCutoffRadius * maxCutoffRadius; + for (int ii = 0; ii < list->inum; ++ii) { + int i = list->ilist[ii]; + for (int jj = 0; jj < list->numneigh[i]; ++jj) { + int j = list->firstneigh[i][jj]; + j &= NEIGHMASK; + double dx = atom->x[i][0] - atom->x[j][0]; + double dy = atom->x[i][1] - atom->x[j][1]; + double dz = atom->x[i][2] - atom->x[j][2]; + double d2 = dx * dx + dy * dy + dz * dz; + if (d2 <= rc2) { + interface.addNeighbor(i,j,atom->tag[j],atom->type[j],dx,dy,dz,d2); + } + } + } +} + +void PairNNP::handleExtrapolationWarnings() +{ + // Get number of extrapolation warnings for local atoms. + // TODO: Is the conversion from std::size_t to long ok? + long numCurrentEW = (long)interface.getNumExtrapolationWarnings(); + + // Update (or set, resetew == true) total warnings counter. + if (resetew) numExtrapolationWarningsTotal = numCurrentEW; + else numExtrapolationWarningsTotal += numCurrentEW; + + // Update warnings summary counter. + if(showewsum > 0) { + numExtrapolationWarningsSummary += numCurrentEW; + } + + // If requested write extrapolation warnings. + // Requires communication of all symmetry functions statistics entries to + // rank 0. + if(showew > 0) { + // First collect an overview of extrapolation warnings per process. + long* numEWPerProc = NULL; + if(comm->me == 0) numEWPerProc = new long[comm->nprocs]; + MPI_Gather(&numCurrentEW, 1, MPI_LONG, numEWPerProc, 1, MPI_LONG, 0, world); + + if(comm->me == 0) { + for(int i=1;inprocs;i++) { + if(numEWPerProc[i] > 0) { + long bs = 0; + MPI_Status ms; + // Get buffer size. + MPI_Recv(&bs, 1, MPI_LONG, i, 0, world, &ms); + char* buf = new char[bs]; + // Receive buffer. + MPI_Recv(buf, bs, MPI_BYTE, i, 0, world, &ms); + interface.extractEWBuffer(buf, bs); + delete[] buf; + } + } + interface.writeExtrapolationWarnings(); + } + else if(numCurrentEW > 0) { + // Get desired buffer length for all extrapolation warning entries. + long bs = interface.getEWBufferSize(); + // Allocate and fill buffer. + char* buf = new char[bs]; + interface.fillEWBuffer(buf, bs); + // Send buffer size and buffer. + MPI_Send(&bs, 1, MPI_LONG, 0, 0, world); + MPI_Send(buf, bs, MPI_BYTE, 0, 0, world); + delete[] buf; + } + + if(comm->me == 0) delete[] numEWPerProc; + } + + // If requested gather number of warnings to display summary. + if(showewsum > 0 && update->ntimestep % showewsum == 0) { + long globalEW = 0; + // Communicate the sum over all processors to proc 0. + MPI_Reduce(&numExtrapolationWarningsSummary, + &globalEW, 1, MPI_LONG, MPI_SUM, 0, world); + // Write to screen or logfile. + if(comm->me == 0) { + if(screen) { + fprintf(screen, + "### NNP EW SUMMARY ### TS: %10ld EW %10ld EWPERSTEP %10.3E\n", + update->ntimestep, + globalEW, + double(globalEW) / showewsum); + } + if(logfile) { + fprintf(logfile, + "### NNP EW SUMMARY ### TS: %10ld EW %10ld EWPERSTEP %10.3E\n", + update->ntimestep, + globalEW, + double(globalEW) / showewsum); + } + } + // Reset summary counter. + numExtrapolationWarningsSummary = 0; + } + + // Stop if maximum number of extrapolation warnings is exceeded. + if (numExtrapolationWarningsTotal > maxew) { + error->one(FLERR,"Too many extrapolation warnings"); + } + + // Reset internal extrapolation warnings counters. + interface.clearExtrapolationWarnings(); +} diff --git a/src/USER-NNP/pair_nnp.h b/src/USER-NNP/pair_nnp.h new file mode 100644 index 0000000000..c067118131 --- /dev/null +++ b/src/USER-NNP/pair_nnp.h @@ -0,0 +1,70 @@ +// n2p2 - A neural network potential package +// Copyright (C) 2018 Andreas Singraber (University of Vienna) +// +// This program 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. +// +// This program 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 . + +#ifdef PAIR_CLASS + +PairStyle(nnp,PairNNP) + +#else + +#ifndef LMP_PAIR_NNP_H +#define LMP_PAIR_NNP_H + +#include "pair.h" +#include "InterfaceLammps.h" + +namespace LAMMPS_NS { + +class PairNNP : public Pair { + + public: + + PairNNP(class LAMMPS *); + virtual ~PairNNP(); + virtual void compute(int, int); + virtual void settings(int, char **); + virtual void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + virtual void write_restart(FILE *); + virtual void read_restart(FILE *); + virtual void write_restart_settings(FILE *); + virtual void read_restart_settings(FILE *); + + protected: + + virtual void allocate(); + void transferNeighborList(); + void handleExtrapolationWarnings(); + + bool showew; + bool resetew; + int showewsum; + int maxew; + long numExtrapolationWarningsTotal; + long numExtrapolationWarningsSummary; + double cflength; + double cfenergy; + double maxCutoffRadius; + char* directory; + char* emap; + nnp::InterfaceLammps interface; +}; + +} + +#endif +#endif From 28207f15b83a0acda9e583ce0300d0ea336cef7d Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Sun, 21 Feb 2021 00:13:52 +0100 Subject: [PATCH 02/46] Switch to forward declaration in header pair_nnp.h --- src/USER-NNP/pair_nnp.cpp | 63 ++++++++++++++++++++------------------- src/USER-NNP/pair_nnp.h | 7 +++-- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-NNP/pair_nnp.cpp index 2ccde4418d..64043a78bb 100644 --- a/src/USER-NNP/pair_nnp.cpp +++ b/src/USER-NNP/pair_nnp.cpp @@ -26,6 +26,7 @@ #include "error.h" #include "update.h" #include "utils.h" +#include "InterfaceLammps.h" using namespace LAMMPS_NS; @@ -33,6 +34,7 @@ using namespace LAMMPS_NS; PairNNP::PairNNP(LAMMPS *lmp) : Pair(lmp) { + interface = new nnp::InterfaceLammps(); } /* ---------------------------------------------------------------------- @@ -41,6 +43,7 @@ PairNNP::PairNNP(LAMMPS *lmp) : Pair(lmp) PairNNP::~PairNNP() { + delete interface; } /* ---------------------------------------------------------------------- */ @@ -51,13 +54,13 @@ void PairNNP::compute(int eflag, int vflag) else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; // Set number of local atoms and add index and element. - interface.setLocalAtoms(atom->nlocal,atom->tag,atom->type); + interface->setLocalAtoms(atom->nlocal,atom->tag,atom->type); // Transfer local neighbor list to NNP interface. transferNeighborList(); // Compute symmetry functions, atomic neural networks and add up energy. - interface.process(); + interface->process(); // Do all stuff related to extrapolation warnings. if(showew == true || showewsum > 0 || maxew >= 0) { @@ -65,16 +68,16 @@ void PairNNP::compute(int eflag, int vflag) } // Calculate forces of local and ghost atoms. - interface.getForces(atom->f); + interface->getForces(atom->f); // Add energy contribution to total energy. if (eflag_global) - ev_tally(0,0,atom->nlocal,1,interface.getEnergy(),0.0,0.0,0.0,0.0,0.0); + ev_tally(0,0,atom->nlocal,1,interface->getEnergy(),0.0,0.0,0.0,0.0,0.0); // Add atomic energy if requested (CAUTION: no physical meaning!). if (eflag_atom) for (int i = 0; i < atom->nlocal; ++i) - eatom[i] = interface.getAtomicEnergy(i); + eatom[i] = interface->getAtomicEnergy(i); // If virial needed calculate via F dot r. if (vflag_fdotr) virial_fdotr_compute(); @@ -215,32 +218,32 @@ void PairNNP::init_style() neighbor->requests[irequest]->full = 1; // Return immediately if NNP setup is already completed. - if (interface.isInitialized()) return; + if (interface->isInitialized()) return; // Activate screen and logfile output only for rank 0. if (comm->me == 0) { - if (lmp->screen != NULL) - interface.log.registerCFilePointer(&(lmp->screen)); - if (lmp->logfile != NULL) - interface.log.registerCFilePointer(&(lmp->logfile)); + if (lmp->screen != nullptr) + interface->log.registerCFilePointer(&(lmp->screen)); + if (lmp->logfile != nullptr) + interface->log.registerCFilePointer(&(lmp->logfile)); } // Initialize interface on all processors. - interface.initialize(directory, - emap, - showew, - resetew, - showewsum, - maxew, - cflength, - cfenergy, - maxCutoffRadius, - atom->ntypes, - comm->me); + interface->initialize(directory, + emap, + showew, + resetew, + showewsum, + maxew, + cflength, + cfenergy, + maxCutoffRadius, + atom->ntypes, + comm->me); // LAMMPS cutoff radius (given via pair_coeff) should not be smaller than // maximum symmetry function cutoff radius. - if (maxCutoffRadius < interface.getMaxCutoffRadius()) + if (maxCutoffRadius < interface->getMaxCutoffRadius()) error->all(FLERR,"Inconsistent cutoff radius"); } @@ -321,7 +324,7 @@ void PairNNP::transferNeighborList() double dz = atom->x[i][2] - atom->x[j][2]; double d2 = dx * dx + dy * dy + dz * dz; if (d2 <= rc2) { - interface.addNeighbor(i,j,atom->tag[j],atom->type[j],dx,dy,dz,d2); + interface->addNeighbor(i,j,atom->tag[j],atom->type[j],dx,dy,dz,d2); } } } @@ -331,7 +334,7 @@ void PairNNP::handleExtrapolationWarnings() { // Get number of extrapolation warnings for local atoms. // TODO: Is the conversion from std::size_t to long ok? - long numCurrentEW = (long)interface.getNumExtrapolationWarnings(); + long numCurrentEW = (long)interface->getNumExtrapolationWarnings(); // Update (or set, resetew == true) total warnings counter. if (resetew) numExtrapolationWarningsTotal = numCurrentEW; @@ -347,7 +350,7 @@ void PairNNP::handleExtrapolationWarnings() // rank 0. if(showew > 0) { // First collect an overview of extrapolation warnings per process. - long* numEWPerProc = NULL; + long* numEWPerProc = nullptr; if(comm->me == 0) numEWPerProc = new long[comm->nprocs]; MPI_Gather(&numCurrentEW, 1, MPI_LONG, numEWPerProc, 1, MPI_LONG, 0, world); @@ -361,18 +364,18 @@ void PairNNP::handleExtrapolationWarnings() char* buf = new char[bs]; // Receive buffer. MPI_Recv(buf, bs, MPI_BYTE, i, 0, world, &ms); - interface.extractEWBuffer(buf, bs); + interface->extractEWBuffer(buf, bs); delete[] buf; } } - interface.writeExtrapolationWarnings(); + interface->writeExtrapolationWarnings(); } else if(numCurrentEW > 0) { // Get desired buffer length for all extrapolation warning entries. - long bs = interface.getEWBufferSize(); + long bs = interface->getEWBufferSize(); // Allocate and fill buffer. char* buf = new char[bs]; - interface.fillEWBuffer(buf, bs); + interface->fillEWBuffer(buf, bs); // Send buffer size and buffer. MPI_Send(&bs, 1, MPI_LONG, 0, 0, world); MPI_Send(buf, bs, MPI_BYTE, 0, 0, world); @@ -415,5 +418,5 @@ void PairNNP::handleExtrapolationWarnings() } // Reset internal extrapolation warnings counters. - interface.clearExtrapolationWarnings(); + interface->clearExtrapolationWarnings(); } diff --git a/src/USER-NNP/pair_nnp.h b/src/USER-NNP/pair_nnp.h index c067118131..ab86abbc0e 100644 --- a/src/USER-NNP/pair_nnp.h +++ b/src/USER-NNP/pair_nnp.h @@ -24,7 +24,10 @@ PairStyle(nnp,PairNNP) #define LMP_PAIR_NNP_H #include "pair.h" -#include "InterfaceLammps.h" + +namespace nnp { + class InterfaceLammps; +} namespace LAMMPS_NS { @@ -61,7 +64,7 @@ class PairNNP : public Pair { double maxCutoffRadius; char* directory; char* emap; - nnp::InterfaceLammps interface; + nnp::InterfaceLammps* interface; }; } From af974c2aba3d9d110e2b5d4f8fc15168e67660aa Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Mon, 22 Feb 2021 00:29:10 +0100 Subject: [PATCH 03/46] Added pair_nnp documentation --- doc/src/Build_extras.rst | 20 ++++ doc/src/Commands_pair.rst | 1 + doc/src/Packages_details.rst | 30 +++++ doc/src/Packages_user.rst | 2 + doc/src/pair_nnp.rst | 222 +++++++++++++++++++++++++++++++++++ doc/src/pair_style.rst | 1 + 6 files changed, 276 insertions(+) create mode 100644 doc/src/pair_nnp.rst diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index cf15de74bd..99aaf69f8f 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -52,6 +52,7 @@ This is the list of packages that may require additional steps. * :ref:`USER-MESONT ` * :ref:`USER-MOLFILE ` * :ref:`USER-NETCDF ` + * :ref:`USER-NNP ` * :ref:`USER-PLUMED ` * :ref:`USER-OMP ` * :ref:`USER-QMMM ` @@ -1586,6 +1587,25 @@ on your system. ---------- +.. _user-nnp: + +USER-NNP package +--------------------------------- + +.. tabs:: + + .. tab:: CMake build + + .. code-block:: bash + + ADD STUFF HERE + + .. tab:: Traditional make + + ADD STUFF HERE + +---------- + .. _user-omp: USER-OMP package diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index e7277e2bbb..7aa27860b1 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -197,6 +197,7 @@ OPT. * :doc:`nm/cut (o) ` * :doc:`nm/cut/coul/cut (o) ` * :doc:`nm/cut/coul/long (o) ` + * :doc:`nnp ` * :doc:`oxdna/coaxstk ` * :doc:`oxdna/excv ` * :doc:`oxdna/hbond ` diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 455df083e4..ea27bd3abf 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -88,6 +88,7 @@ page gives those details. * :ref:`USER-MOFFF ` * :ref:`USER-MOLFILE ` * :ref:`USER-NETCDF ` + * :ref:`USER-NNP ` * :ref:`USER-OMP ` * :ref:`USER-PHONON ` * :ref:`USER-PLUMED ` @@ -1921,6 +1922,35 @@ This package has :ref:`specific installation instructions ` on the ---------- +.. _PKG-USER-NNP: + +USER-NNP package +---------------- + +**Contents:** + +:doc:`pair_style nnp ` command + +.. _n2p2: https://github.com/CompPhysVienna/n2p2 + +To use this package you must have the n2p2 core and interface library +(``libnnp``, ``libnnpif``) available on your system. + +**Author:** Andreas Singraber + +**Install:** + +This package has :ref:`specific installation instructions ` on the :doc:`Build extras ` page. + +**Supporting info:** + +* src/USER-NNP: filenames -> commands +* src/USER-NNP/README +* :doc:`pair_style nnp ` +* examples/USER/nnp + +---------- + .. _PKG-USER-OMP: USER-OMP package diff --git a/doc/src/Packages_user.rst b/doc/src/Packages_user.rst index a3efaf15c8..8f7e955924 100644 --- a/doc/src/Packages_user.rst +++ b/doc/src/Packages_user.rst @@ -79,6 +79,8 @@ package: +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-NETCDF ` | dump output via NetCDF | :doc:`dump netcdf ` | n/a | ext | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ +| :ref:`USER-NNP ` | High-dimensional neural network potenials | :doc:`pair_style nnp ` | USER/nnp | ext | ++------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-OMP ` | OpenMP-enabled styles | :doc:`Speed omp ` | `Benchmarks `_ | no | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-PHONON ` | phonon dynamical matrix | :doc:`fix phonon ` | USER/phonon | no | diff --git a/doc/src/pair_nnp.rst b/doc/src/pair_nnp.rst new file mode 100644 index 0000000000..56ea8bf575 --- /dev/null +++ b/doc/src/pair_nnp.rst @@ -0,0 +1,222 @@ +.. index:: pair_style nnp + +pair_style nnp command +====================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + pair_style nnp keyword value ... + +* zero or more keyword/value pairs may be appended +* keyword = *dir* or *showew* or *showewsum* or *maxew* or *resetew* or *cflength* or *cfenergy* +* value depends on the preceding keyword: + +.. parsed-literal:: + + *emap* value = mapping + mapping = Element mapping from LAMMPS atom types to n2p2 elements + *dir* value = directory + directory = Path to NNP configuration files + *showew* value = *yes* or *no* + *showewsum* value = summary + summary = Write EW summary every this many timesteps (*0* turns summary off) + *maxew* value = threshold + threshold = Maximum number of EWs allowed + *resetew* value = *yes* or *no* + *cflength* value = length + length = Length unit conversion factor + *cfenergy* value = energy + energy = Energy unit conversion factor + +Examples +"""""""" + +.. code-block:: LAMMPS + + pair_style nnp showew yes showewsum 100 maxew 1000 resetew yes cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" + pair_coeff * * 6.35 + + pair_style nnp dir "./" showewsum 10000 + pair_coeff * * 6.01 + +Description +""""""""""" + +This pair style adds an interaction based on the high-dimensional neural network +potential method [1]_. These potentials must be carefully trained to reproduce +the potential energy surface in the desired phase-space region prior to their +usage in an MD simulation. This pair style uses an interface to the NNP library +[2]_ [3]_, see the documentation there for more information. + +The maximum cutoff radius of all symmetry functions is the only argument of the +*pair_coeff* command which should be invoked with asterisk wild-cards only: + +.. code-block:: LAMMPS + + pair_coeff * * cutoff + +.. note:: + + The cutoff must be given in LAMMPS length units, even if the neural network + potential has been trained using a different unit system (see remarks about the + *cflength* and *cfenergy* keywords below for details). + +The numeric value may be slightly larger than the actual maximum symmetry +function cutoff radius (to account for rounding errors when converting units), +but must not be smaller. + +---- + +If provided, the keyword *emap* determines the mapping from LAMMPS atom types to +n2p2 elements. The format is a comma-separated list of ``atom type:element`` +pairs, e.g. ``"1:Cu,2:Zn"`` will map atom types 1 and 2 to elements Cu and Zn, +respectively. Atom types not present in the list will be completely ignored by +the NNP. The keyword *emap* is mandatory in a "hybrid" setup (see +:doc:`pair_hybrid `) with "extra" atom types in the simulation +which are not handled by the NNP. + +.. warning:: + + Without an explicit mapping it is by default assumed that the atom type + specifications in LAMMPS configuration files are consistent with the ordering + of elements in the NNP library. Thus, without the *emap* keyword present + atom types must be sorted in order of ascending atomic number, e.g. the only + correct mapping for a configuration containing hydrogen, oxygen and zinc + atoms would be: + + +---------+---------------+-------------+ + | Element | Atomic number | LAMMPS type | + +=========+===============+=============+ + | H | 1 | 1 | + +---------+---------------+-------------+ + | O | 8 | 2 | + +---------+---------------+-------------+ + | Zn | 30 | 3 | + +---------+---------------+-------------+ + +Use the *dir* keyword to specify the directory containing the NNP configuration +files. The directory must contain ``input.nn`` with neural network and symmetry +function setup, ``scaling.data`` with symmetry function scaling data and +``weights.???.data`` with weight parameters for each element. + +The keyword *showew* can be used to turn on/off the display of extrapolation +warnings (EWs) which are issued whenever a symmetry function value is out of +bounds defined by minimum/maximum values in "scaling.data". An extrapolation +warning may look like this: + +.. code-block:: LAMMPS + + ### NNP EXTRAPOLATION WARNING ### STRUCTURE: 0 ATOM: 119 ELEMENT: Cu SYMFUNC: 32 TYPE: 3 VALUE: 2.166E-02 MIN: 2.003E-05 MAX: 1.756E-02 + +stating that the value 2.166E-02 of symmetry function 32 of type 3 (angular +narrow), element Cu (see the log file for a symmetry function listing) was out +of bounds (maximum in ``scaling.data`` is 1.756E-02) for atom 119. Here, the +atom index refers to the LAMMPS tag (global index) and the structure index is +used to print out the MPI rank the atom belongs to. + +.. note:: + + The *showew* keyword should only be set to *yes* for debugging purposes. + Extrapolation warnings may add lots of overhead as they are communicated each + timestep. Also, if the simulation is run in a region where the NNP was not + correctly trained, lots of extrapolation warnings may clog log files and the + console. In a production run use *showewsum* instead. + +The keyword *showewsum* can be used to get an overview of extrapolation warnings +occurring during an MD simulation. The argument specifies the interval at which +extrapolation warning summaries are displayed and logged. An EW summary may look +like this: + +.. code-block:: LAMMPS + + ### NNP EW SUMMARY ### TS: 100 EW 11 EWPERSTEP 1.100E-01 + +Here, at timestep 100 the occurrence of 11 extrapolation warnings since the last +summary is reported, which corresponds to an EW rate of 0.11 per timestep. +Setting *showewsum* to 0 deactivates the EW summaries. + +A maximum number of allowed extrapolation warnings can be specified with the +*maxew* keyword. If the number of EWs exceeds the *maxew* argument the +simulation is stopped. Note however that this is merely an approximate threshold +since the check is only performed at the end of each timestep and each MPI +process counts individually to minimize communication overhead. + +The keyword *resetew* alters the behavior of the above mentioned *maxew* +threshold. If *resetew* is set to *yes* the threshold is applied on a +per-timestep basis and the internal EW counters are reset at the beginning of +each timestep. With *resetew* set to *no* the counters accumulate EWs along the +whole trajectory. + +If the training of a neural network potential has been performed with different +physical units for length and energy than those set in LAMMPS, it is still +possible to use the potential when the unit conversion factors are provided via +the *cflength* and *cfenergy* keywords. If for example, the NNP was +parameterized with Bohr and Hartree training data and symmetry function +parameters (i.e. distances and energies in "input.nn" are given in Bohr and +Hartree) but LAMMPS is set to use *metal* units (Angstrom and eV) the correct +conversion factors are: + +.. code-block:: LAMMPS + + cflength 1.8897261328 + + cfenergy 0.0367493254 + +Thus, arguments of *cflength* and *cfenergy* are the multiplicative factors +required to convert lengths and energies given in LAMMPS units to respective +quantities in native NNP units (1 Angstrom = 1.8897261328 Bohr, 1 eV = +0.0367493254 Hartree). + +---- + +Mixing, shift, table, tail correction, restart, rRESPA info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +This style does not support mixing. The :doc:`pair_coeff ` command +should only be invoked with asterisk wild cards (see above). + +This style does not support the :doc:`pair_modify ` +shift, table, and tail options. + +This style does not write information to :doc:`binary restart files `. Thus, you need to re-specify the pair_style and +pair_coeff commands in an input script that reads a restart file. + +This style can only be used via the *pair* keyword of the :doc:`run_style respa ` command. It does not support the *inner*\ , +*middle*\ , *outer* keywords. + +Restrictions +"""""""""""" + +This pair style is part of the USER-NNP package. It is only enabled +if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. + +Please report bugs and feature requests to the `n2p2 GitHub issue page +`__. + +Related commands +^^^^^^^^^^^^^^^^ + +:doc:`pair_coeff `, :doc:`pair_hybrid `, :doc:`units ` + +Default +^^^^^^^ + +The default options are *dir* = "nnp/", *showew* = yes, *showewsum* = 0, *maxew* += 0, *resetew* = no, *cflength* = 1.0, *cfenergy* = 1.0. The default atom type +mapping is determined automatically according to ascending atomic number of +present elements (see above). + +---- + +.. [1] Behler, J.; Parrinello, M. Generalized Neural-Network Representation of + High-Dimensional Potential-Energy Surfaces. Phys. Rev. Lett. 2007, 98 (14), + 146401. https://doi.org/10.1103/PhysRevLett.98.146401 + +.. [2] https://github.com/CompPhysVienna/n2p2 + +.. [3] Singraber, A.; Morawietz, T.; Behler, J.; Dellago, C. Parallel + Multistream Training of High-Dimensional Neural Network Potentials. J. Chem. + Theory Comput. 2019, 15 (5), 3075–3092. https://doi.org/10.1021/acs.jctc.8b01092 diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 524581d2c4..b164e9f828 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -260,6 +260,7 @@ accelerated styles exist. * :doc:`nm/cut ` - N-M potential * :doc:`nm/cut/coul/cut ` - N-M potential with cutoff Coulomb * :doc:`nm/cut/coul/long ` - N-M potential with long-range Coulomb +* :doc:`nnp ` - High-dimensional neural network potential * :doc:`oxdna/coaxstk ` - * :doc:`oxdna/excv ` - * :doc:`oxdna/hbond ` - From 6dbb0230c23ef75673fb5bab552274c08f71df7d Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Mon, 22 Feb 2021 22:57:45 +0100 Subject: [PATCH 04/46] Updated documentation, cleaned source --- cmake/CMakeLists.txt | 2 +- cmake/presets/all_off.cmake | 4 ++-- cmake/presets/all_on.cmake | 4 ++-- cmake/presets/nolib.cmake | 4 ++-- doc/src/Build_package.rst | 22 ++++++++++----------- doc/src/pair_nnp.rst | 38 ++++++++++++++++++++++++------------- src/USER-NNP/pair_nnp.cpp | 38 ------------------------------------- src/USER-NNP/pair_nnp.h | 4 ---- 8 files changed, 43 insertions(+), 73 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index aefa9cd597..850d32714e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -110,7 +110,7 @@ set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESODPD USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD USER-MEAMC USER-MESONT USER-MGPT USER-MISC USER-MOFFF - USER-MOLFILE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB + USER-MOLFILE USER-NETCDF USER-NNP USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM USER-YAFF) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index bd94b9dbe5..d567b141bf 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -8,8 +8,8 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD - USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP - USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP + USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-NNP + USER-OMP USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF) diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 438c119c4c..2b879e9ecf 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -10,8 +10,8 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD - USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP - USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP + USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-NNP + USER-OMP USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index 0245b58cc7..c0236347cb 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -3,8 +3,8 @@ set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MPIIO MSCG PYTHON VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-H5MD USER-LB - USER-MOLFILE USER-MESONT USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP - USER-SCAFACOS USER-SMD USER-VTK) + USER-MOLFILE USER-MESONT USER-NETCDF USER-NNP USER-PLUMED USER-QMMM + USER-QUIP USER-SCAFACOS USER-SMD USER-VTK) foreach(PKG ${PACKAGES_WITH_LIB}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) diff --git a/doc/src/Build_package.rst b/doc/src/Build_package.rst index f9fc52f8db..36a7bce482 100644 --- a/doc/src/Build_package.rst +++ b/doc/src/Build_package.rst @@ -30,17 +30,17 @@ steps, as explained on the :doc:`Build extras ` page. These links take you to the extra instructions for those select packages: -+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`COMPRESS ` | :ref:`GPU ` | :ref:`KIM ` | :ref:`KOKKOS ` | :ref:`LATTE ` | :ref:`MESSAGE ` | -+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`MSCG ` | :ref:`OPT ` | :ref:`POEMS ` | :ref:`PYTHON ` | :ref:`VORONOI ` | :ref:`USER-ADIOS ` | -+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`USER-ATC ` | :ref:`USER-AWPMD ` | :ref:`USER-COLVARS ` | :ref:`USER-H5MD ` | :ref:`USER-INTEL ` | :ref:`USER-MOLFILE ` | -+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`USER-NETCDF ` | :ref:`USER-PLUMED ` | :ref:`USER-OMP ` | :ref:`USER-QMMM ` | :ref:`USER-QUIP ` | :ref:`USER-SCAFACOS ` | -+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`USER-SMD ` | :ref:`USER-VTK ` | | | | | -+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ ++--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ +| :ref:`COMPRESS ` | :ref:`GPU ` | :ref:`KIM ` | :ref:`KOKKOS ` | :ref:`LATTE ` | :ref:`MESSAGE ` | ++--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ +| :ref:`MSCG ` | :ref:`OPT ` | :ref:`POEMS ` | :ref:`PYTHON ` | :ref:`VORONOI ` | :ref:`USER-ADIOS ` | ++--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ +| :ref:`USER-ATC ` | :ref:`USER-AWPMD ` | :ref:`USER-COLVARS ` | :ref:`USER-H5MD ` | :ref:`USER-INTEL ` | :ref:`USER-MOLFILE ` | ++--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ +| :ref:`USER-NETCDF ` | :ref:`USER-NNP ` | :ref:`USER-PLUMED ` | :ref:`USER-OMP ` | :ref:`USER-QMMM ` | :ref:`USER-QUIP ` | ++--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ +| :ref:`USER-SCAFACOS ` | :ref:`USER-SMD ` | :ref:`USER-VTK ` | | | | ++--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ The mechanism for including packages is simple but different for CMake versus make. diff --git a/doc/src/pair_nnp.rst b/doc/src/pair_nnp.rst index 56ea8bf575..78fa635c1f 100644 --- a/doc/src/pair_nnp.rst +++ b/doc/src/pair_nnp.rst @@ -46,13 +46,21 @@ Description """"""""""" This pair style adds an interaction based on the high-dimensional neural network -potential method [1]_. These potentials must be carefully trained to reproduce -the potential energy surface in the desired phase-space region prior to their -usage in an MD simulation. This pair style uses an interface to the NNP library -[2]_ [3]_, see the documentation there for more information. +potential (HDNNP) method as presented in :ref:`(Behler and Parrinello 2007) +`. HDNNPs are machine learning potentials which require +careful training of neural networks prior to application in MD simulations. The +pair style uses an interface to the *n2p2* library :ref:`(Singraber et al 2019) +` which is available on Github `here +`__. Please see the *n2p2* +`documentation `__ for further details. +*n2p2* (and hence this pair style) is compatible with neural network potentials +trained with its own tools and with `RuNNer +`__. However, at this point only +short-range HDNNPs are supported. -The maximum cutoff radius of all symmetry functions is the only argument of the -*pair_coeff* command which should be invoked with asterisk wild-cards only: +The maximum cutoff radius of all symmetry functions (the atomic environment +descriptors of HDNNPs) is the only argument of the *pair_coeff* command which +should be invoked with asterisk wild-cards only: .. code-block:: LAMMPS @@ -211,12 +219,16 @@ present elements (see above). ---- -.. [1] Behler, J.; Parrinello, M. Generalized Neural-Network Representation of - High-Dimensional Potential-Energy Surfaces. Phys. Rev. Lett. 2007, 98 (14), - 146401. https://doi.org/10.1103/PhysRevLett.98.146401 +.. _Behler_Parrinello_2007: -.. [2] https://github.com/CompPhysVienna/n2p2 +**(Behler and Parrinello 2007)** Behler, J.; Parrinello, M. Generalized +Neural-Network Representation of High-Dimensional Potential-Energy Surfaces. +Phys. Rev. Lett. 2007, 98 (14), 146401. +https://doi.org/10.1103/PhysRevLett.98.146401 -.. [3] Singraber, A.; Morawietz, T.; Behler, J.; Dellago, C. Parallel - Multistream Training of High-Dimensional Neural Network Potentials. J. Chem. - Theory Comput. 2019, 15 (5), 3075–3092. https://doi.org/10.1021/acs.jctc.8b01092 +.. _Singraber_et_al_2019: + +**(Singraber et al 2019)** Singraber, A.; Behler, J.; Dellago, C. Library-Based +LAMMPS Implementation of High-Dimensional Neural Network Potentials. J. Chem. +Theory Comput. 2019, 15 (3), 1827–1840. +https://doi.org/10.1021/acs.jctc.8b00770. diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-NNP/pair_nnp.cpp index 64043a78bb..c7ac600e45 100644 --- a/src/USER-NNP/pair_nnp.cpp +++ b/src/USER-NNP/pair_nnp.cpp @@ -253,46 +253,9 @@ void PairNNP::init_style() double PairNNP::init_one(int i, int j) { - // TODO: Check how this actually works for different cutoffs. return maxCutoffRadius; } -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairNNP::write_restart(FILE *fp) -{ - return; -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairNNP::read_restart(FILE *fp) -{ - return; -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairNNP::write_restart_settings(FILE *fp) -{ - return; -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairNNP::read_restart_settings(FILE *fp) -{ - return; -} - /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ @@ -333,7 +296,6 @@ void PairNNP::transferNeighborList() void PairNNP::handleExtrapolationWarnings() { // Get number of extrapolation warnings for local atoms. - // TODO: Is the conversion from std::size_t to long ok? long numCurrentEW = (long)interface->getNumExtrapolationWarnings(); // Update (or set, resetew == true) total warnings counter. diff --git a/src/USER-NNP/pair_nnp.h b/src/USER-NNP/pair_nnp.h index ab86abbc0e..0b76739d77 100644 --- a/src/USER-NNP/pair_nnp.h +++ b/src/USER-NNP/pair_nnp.h @@ -42,10 +42,6 @@ class PairNNP : public Pair { virtual void coeff(int, char **); virtual void init_style(); virtual double init_one(int, int); - virtual void write_restart(FILE *); - virtual void read_restart(FILE *); - virtual void write_restart_settings(FILE *); - virtual void read_restart_settings(FILE *); protected: From 7e411f2b1251eadc6f59b6a25bd350574c7a2ac2 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Tue, 23 Feb 2021 14:05:06 +0100 Subject: [PATCH 05/46] New makefile in lib/nnp/ dir, updated Install.sh --- lib/nnp/README | 1 + src/USER-NNP/Install.sh | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 lib/nnp/README diff --git a/lib/nnp/README b/lib/nnp/README new file mode 100644 index 0000000000..a5cfd5cd23 --- /dev/null +++ b/lib/nnp/README @@ -0,0 +1 @@ +WRITE STUFF HERE diff --git a/src/USER-NNP/Install.sh b/src/USER-NNP/Install.sh index e17603df76..cd60ba1598 100644 --- a/src/USER-NNP/Install.sh +++ b/src/USER-NNP/Install.sh @@ -38,9 +38,6 @@ if (test $1 = 1) then if (test -e ../Makefile.package) then sed -i -e 's/[^ \t]*nnp[^ \t]* //g' ../Makefile.package - sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/nnp\/include |' ../Makefile.package - sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/nnp\/lib |' ../Makefile.package - sed -i -e 's|^PKG_LIB =[ \t]*|&-lnnpif -lnnp |' ../Makefile.package sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(nnp_SYSINC) |' ../Makefile.package sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(nnp_SYSLIB) |' ../Makefile.package sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(nnp_SYSPATH) |' ../Makefile.package @@ -50,7 +47,7 @@ if (test $1 = 1) then sed -i -e '/^include.*nnp.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ -include ..\/..\/lib\/nnp\/src\/libnnpif\/LAMMPS\/Makefile.lammps +include ..\/..\/lib\/nnp\/Makefile.lammps\ ' ../Makefile.package.settings fi From c56f665c5baab0acd6c0291b580da1918688d3a1 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Tue, 23 Feb 2021 23:35:18 +0100 Subject: [PATCH 06/46] CMake files for finding n2p2 --- cmake/CMakeLists.txt | 3 ++- cmake/Modules/FindN2P2.cmake | 25 +++++++++++++++++++++++++ cmake/Modules/Packages/USER-NNP.cmake | 3 +++ src/Makefile | 8 ++++---- 4 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 cmake/Modules/FindN2P2.cmake create mode 100644 cmake/Modules/Packages/USER-NNP.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 850d32714e..bb982085e7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -374,7 +374,8 @@ else() set(CUDA_REQUEST_PIC) endif() -foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-MOLFILE USER-NETCDF USER-PLUMED USER-QMMM +foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-MOLFILE + USER-NETCDF USER-NNP USER-PLUMED USER-QMMM USER-QUIP USER-SCAFACOS USER-SMD USER-VTK KIM LATTE MESSAGE MSCG COMPRESS) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake new file mode 100644 index 0000000000..f1a9058f33 --- /dev/null +++ b/cmake/Modules/FindN2P2.cmake @@ -0,0 +1,25 @@ +include(FindPackageHandleStandardArgs) + +if (DEFINED ENV{N2P2_DIR}) + set(N2P2_DIR "${N2P2_DIR}") +endif() +message(STATUS "N2P2_DIR=${N2P2_DIR}") + +find_path(N2P2_INCLUDE_DIR InterfaceLammps.h PATHS "${N2P2_DIR}/include") +find_library(N2P2_LIBNNP NAMES nnp PATHS "${N2P2_DIR}/lib") +find_library(N2P2_LIBNNPIF NAMES nnpif PATHS "${N2P2_DIR}/lib") + +find_package_handle_standard_args(N2P2 DEFAULT_MSG N2P2_INCLUDE_DIR N2P2_LIBNNP) + +if(N2P2_FOUND) + set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) + set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) + + mark_as_advanced( + N2P2_DIR + N2P2_INCLUDE_DIR + N2P2_LIBNNP + N2P2_LIBNNPIF + ) +endif() + diff --git a/cmake/Modules/Packages/USER-NNP.cmake b/cmake/Modules/Packages/USER-NNP.cmake new file mode 100644 index 0000000000..57eae791d2 --- /dev/null +++ b/cmake/Modules/Packages/USER-NNP.cmake @@ -0,0 +1,3 @@ +find_package(N2P2 REQUIRED) +target_include_directories(lammps PRIVATE ${N2P2_INCLUDE_DIRS}) +target_link_libraries(lammps PRIVATE ${N2P2_LIBRARIES}) diff --git a/src/Makefile b/src/Makefile index 679cbe7b97..3afe821db7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -55,14 +55,14 @@ PACKUSER = user-adios user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-c user-diffraction user-dpd user-drude user-eff user-fep user-h5md \ user-intel user-lb user-manifold user-meamc user-mesodpd user-mesont \ user-mgpt user-misc user-mofff user-molfile \ - user-netcdf user-omp user-phonon user-plumed user-ptm user-qmmm \ + user-netcdf user-nnp user-omp user-phonon user-plumed user-ptm user-qmmm \ user-qtb user-quip user-reaction user-reaxc user-scafacos user-smd user-smtbq \ user-sdpd user-sph user-tally user-uef user-vtk user-yaff PACKLIB = compress gpu kim kokkos latte message mpiio mscg poems \ python voronoi \ user-adios user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \ - user-netcdf user-plumed user-qmmm user-quip user-scafacos \ + user-netcdf user-nnp user-plumed user-qmmm user-quip user-scafacos \ user-smd user-vtk user-mesont PACKSYS = compress mpiio python user-lb @@ -70,8 +70,8 @@ PACKSYS = compress mpiio python user-lb PACKINT = gpu kokkos message poems user-atc user-awpmd user-colvars user-mesont PACKEXT = kim latte mscg voronoi \ - user-adios user-h5md user-molfile user-netcdf user-plumed user-qmmm user-quip \ - user-smd user-vtk + user-adios user-h5md user-molfile user-netcdf user-nnp user-plumed user-qmmm \ + user-quip user-smd user-vtk PACKALL = $(PACKAGE) $(PACKUSER) From e713a931d3563788db369100662a3a2a01fa5f4f Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Wed, 24 Feb 2021 17:57:24 +0100 Subject: [PATCH 07/46] Added lots of docs, finished CMake script --- cmake/Modules/FindN2P2.cmake | 28 ++++++- cmake/Modules/Packages/USER-NNP.cmake | 1 + doc/src/Build_extras.rst | 25 +++++- doc/src/Packages_user.rst | 2 +- doc/src/pair_nnp.rst | 12 +-- doc/utils/sphinx-config/false_positives.txt | 2 + lib/README | 2 + lib/nnp/README | 91 ++++++++++++++++++++- src/.gitignore | 2 + src/USER-NNP/README | 26 ++++++ src/USER-NNP/pair_nnp.cpp | 61 ++++++++------ src/USER-NNP/pair_nnp.h | 40 +++++---- 12 files changed, 238 insertions(+), 54 deletions(-) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake index f1a9058f33..a06850f07f 100644 --- a/cmake/Modules/FindN2P2.cmake +++ b/cmake/Modules/FindN2P2.cmake @@ -1,25 +1,47 @@ include(FindPackageHandleStandardArgs) +# Check if N2P2_DIR is set manually. if (DEFINED ENV{N2P2_DIR}) set(N2P2_DIR "${N2P2_DIR}") +# If not, try if directory "lib/nnp/n2p2" exists. +else() + get_filename_component(_fullpath "${LAMMPS_LIB_SOURCE_DIR}/nnp/n2p2" REALPATH) + if (EXISTS ${_fullpath}) + set(N2P2_DIR "${_fullpath}") + endif() endif() -message(STATUS "N2P2_DIR=${N2P2_DIR}") +# Set path to include directory. find_path(N2P2_INCLUDE_DIR InterfaceLammps.h PATHS "${N2P2_DIR}/include") +# Two libraries need to be linked: libnnp and libnnpif. find_library(N2P2_LIBNNP NAMES nnp PATHS "${N2P2_DIR}/lib") find_library(N2P2_LIBNNPIF NAMES nnpif PATHS "${N2P2_DIR}/lib") +# Users could compile n2p2 with extra flags which are then also required for +# pair_nnp.cpp compilation. To forward them to the LAMMPS build process n2p2 +# writes a file with cmake commands, e.g. +# +# target_compile_definitions(lammps PRIVATE -DNNP_NO_SF_GROUPS) +# +# to "lib/lammps-extra.cmake" which is then included by USER-NNP.cmake. +find_file(N2P2_CMAKE_EXTRA NAMES lammps-extra.cmake PATHS "${N2P2_DIR}/lib") -find_package_handle_standard_args(N2P2 DEFAULT_MSG N2P2_INCLUDE_DIR N2P2_LIBNNP) +find_package_handle_standard_args(N2P2 DEFAULT_MSG + N2P2_DIR + N2P2_INCLUDE_DIR + N2P2_LIBNNP + N2P2_LIBNNPIF + N2P2_CMAKE_EXTRA) if(N2P2_FOUND) set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) + set(N2P2_CMAKE_EXTRAS ${N2P2_CMAKE_EXTRA}) mark_as_advanced( N2P2_DIR N2P2_INCLUDE_DIR N2P2_LIBNNP N2P2_LIBNNPIF + N2P2_CMAKE_EXTRA ) endif() - diff --git a/cmake/Modules/Packages/USER-NNP.cmake b/cmake/Modules/Packages/USER-NNP.cmake index 57eae791d2..2ebc1f6e36 100644 --- a/cmake/Modules/Packages/USER-NNP.cmake +++ b/cmake/Modules/Packages/USER-NNP.cmake @@ -1,3 +1,4 @@ find_package(N2P2 REQUIRED) target_include_directories(lammps PRIVATE ${N2P2_INCLUDE_DIRS}) target_link_libraries(lammps PRIVATE ${N2P2_LIBRARIES}) +include(${N2P2_CMAKE_EXTRAS}) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 99aaf69f8f..f40972b544 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -1592,17 +1592,38 @@ on your system. USER-NNP package --------------------------------- +To build with the USER-NNP package it is required to download and build the +external `n2p2 `__ library ``v2.2.0`` +(or higher) before starting the LAMMPS build process. More specifically, only +the *n2p2* core library ``libnnp`` and interface library ``libnnpif`` are +actually needed: when using GCC it should suffice to execute ``make libnnpif`` +in the *n2p2* ``src`` directory. For more details please see the `n2p2 build +documentation `__. If +*n2p2* is downloaded and compiled in the LAMMPS directory ``lib/nnp/n2p2`` no +special flags need to be set besides the usual package activation. If you prefer +to install *n2p2* somewhere else on your system you must specify the path via +the ``N2P2_DIR`` variable. + .. tabs:: .. tab:: CMake build + There is one additional setting besides ``-D PKG_USER-NNP=yes`` in case + *n2p2* is not installed in the ``lib/nnp/n2p2`` directory: + .. code-block:: bash - ADD STUFF HERE + -D N2P2_DIR=path # path ... n2p2 installation path .. tab:: Traditional make - ADD STUFF HERE + There is one additional variable that needs to be set besides ``make + yes-user-nnp`` in case *n2p2* is not installed in the ``lib/nnp/n2p2`` + directory: + + .. code-block:: bash + + make N2P2_DIR=path ... ---------- diff --git a/doc/src/Packages_user.rst b/doc/src/Packages_user.rst index 8f7e955924..77bf13cde6 100644 --- a/doc/src/Packages_user.rst +++ b/doc/src/Packages_user.rst @@ -79,7 +79,7 @@ package: +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-NETCDF ` | dump output via NetCDF | :doc:`dump netcdf ` | n/a | ext | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ -| :ref:`USER-NNP ` | High-dimensional neural network potenials | :doc:`pair_style nnp ` | USER/nnp | ext | +| :ref:`USER-NNP ` | High-dimensional neural network potentials | :doc:`pair_style nnp ` | USER/nnp | ext | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-OMP ` | OpenMP-enabled styles | :doc:`Speed omp ` | `Benchmarks `_ | no | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ diff --git a/doc/src/pair_nnp.rst b/doc/src/pair_nnp.rst index 78fa635c1f..fe60ef175e 100644 --- a/doc/src/pair_nnp.rst +++ b/doc/src/pair_nnp.rst @@ -112,7 +112,7 @@ function setup, ``scaling.data`` with symmetry function scaling data and The keyword *showew* can be used to turn on/off the display of extrapolation warnings (EWs) which are issued whenever a symmetry function value is out of -bounds defined by minimum/maximum values in "scaling.data". An extrapolation +bounds defined by minimum/maximum values in ``scaling.data``. An extrapolation warning may look like this: .. code-block:: LAMMPS @@ -221,14 +221,14 @@ present elements (see above). .. _Behler_Parrinello_2007: -**(Behler and Parrinello 2007)** Behler, J.; Parrinello, M. Generalized +**(Behler and Parrinello 2007)** `Behler, J.; Parrinello, M. Generalized Neural-Network Representation of High-Dimensional Potential-Energy Surfaces. Phys. Rev. Lett. 2007, 98 (14), 146401. -https://doi.org/10.1103/PhysRevLett.98.146401 +`__ .. _Singraber_et_al_2019: -**(Singraber et al 2019)** Singraber, A.; Behler, J.; Dellago, C. Library-Based +**(Singraber et al 2019)** `Singraber, A.; Behler, J.; Dellago, C. Library-Based LAMMPS Implementation of High-Dimensional Neural Network Potentials. J. Chem. -Theory Comput. 2019, 15 (3), 1827–1840. -https://doi.org/10.1021/acs.jctc.8b00770. +Theory Comput. 2019, 15 (3), 1827-1840 +`__ diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 982e1fde2a..60eb142e20 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2171,6 +2171,8 @@ Nmin nmin Nmols nn +nnp +NNP Nocedal nocite nocoeff diff --git a/lib/README b/lib/README index d89490e202..535f2b228e 100644 --- a/lib/README +++ b/lib/README @@ -41,6 +41,8 @@ mscg hooks to the MSCG library, used by fix_mscg command from Jacob Wagner and Greg Voth group (U Chicago) netcdf hooks to a NetCDF library installed on your system from Lars Pastewka (Karlsruhe Institute of Technology) +nnp hooks to n2p2, neural network potential package, used by USER-NNP + from Andreas Singraber poems POEMS rigid-body integration package, POEMS package from Rudranarayan Mukherjee (RPI) python hooks to the system Python library, used by the PYTHON package diff --git a/lib/nnp/README b/lib/nnp/README index a5cfd5cd23..9aba16606c 100644 --- a/lib/nnp/README +++ b/lib/nnp/README @@ -1 +1,90 @@ -WRITE STUFF HERE +The USER-NNP package requires access to pre-compiled libraries of the n2p2 +package (https://github.com/CompPhysVienna/n2p2). More precisely, the n2p2 core +library ("libnnp"), the interface library ("libnnpif"), some headers and extra +build helper files are needed. These files will be created automatically during +the n2p2 build process. + +Basic build instructions for n2p2 +================================= + +The n2p2 software package comes with lots of useful tools for creating and +applying neural network potentials (NNPs). In order to use n2p2 together with +LAMMPS only a portion of the n2p2 code needs to be compiled. As an example, +everything related to NNP training is not required and would only add unwanted +library dependencies. Hence, the build infrastructure of n2p2 is designed to allow +a separate build of the LAMMPS interface. + +After downloading n2p2, change to the "src" directory and simply execute + + make libnnpif + +which should create the following files needed by the USER-NNP package: + + * "n2p2/lib/libnnp.a" + * "n2p2/lib/libnnpif.a" + * "n2p2/lib/lammps-extra.cmake" + * "n2p2/lib/Makefile.lammps-extra" + * "n2p2/include/InterfaceLammps.h" and many other header files. + +If you prefer dynamically linked libraries use + + make MODE=shared libnnpif + +instead (by default MODE=static) which will create *.so versions of the +libraries. By default, n2p2 uses the GNU C++ compiler and the corresponding +settings can be found in "n2p2/src/makefile.gnu". Other makefile presets are +also available (e.g. "makefile.intel") and can be activated by supplying the +"COMP" argument: + + make COMP=intel libnnpif + +Please make sure that your compiler settings for n2p2 and LAMMPS are compatible +(avoid mixing different compilers). For more information about the n2p2 build +process please visit https://compphysvienna.github.io/n2p2/topics/build.html or +ask questions on the Github issue page +(https://github.com/CompPhysVienna/n2p2/issues). + +Installation directory of n2p2 +============================== + +You can install n2p2 either in this folder (1) or somewhere else on your system (2): + +(1) If n2p2 is installed here, please make sure that the directory is also named + "n2p2", i.e. within "lib/nnp/n2p2" you can see the n2p2 folder structure, in + particular "lib" and "include": + + lib + | + nnp + | + n2p2 + | + ------------------ ... + | | | + include lib src ... + + In this case LAMMPS will automatically find n2p2 during the build process + and you only need to enable the USER-NNP package via CMake (-D + PKG_USER-NNP=yes) or the traditional makefile approach (make yes-user-nnp). + It is also valid to create a link here named "n2p2" which points to the n2p2 + installation directory. + +(2) If n2p2 is installed somewhere else the path must be given as an additional + setting (variable N2P2_DIR) to the build tool. For example, with CMake use + + cmake -D PKG_USER-NNP=yes -D N2P2_DIR= ../cmake/ + + and for the traditional makefiles use + + make yes-user-nnp + make N2P2_DIR= mpi + +Testing a successful build of LAMMPS with USER-NNP +================================================== + +An example is provided in the LAMMPS directory "examples/USER/nnp" which runs +10 timesteps with 360 water molecules. The neural network potential is defined +via files in the "nnp-data" subdirectory. Use the "in.nnp" LAMMPS script file +to run the simulation. You should see a large output of the n2p2 library when +the pair style "nnp" is initialized, followed by the LAMMPS per-timestep +output. diff --git a/src/.gitignore b/src/.gitignore index 45ec71e485..9e37dc316c 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1079,6 +1079,8 @@ /pair_nm_cut_coul_cut.h /pair_nm_cut_coul_long.cpp /pair_nm_cut_coul_long.h +/pair_nnp.cpp +/pair_nnp.h /pair_oxdna_*.cpp /pair_oxdna_*.h /pair_oxdna2_*.cpp diff --git a/src/USER-NNP/README b/src/USER-NNP/README index e69de29bb2..811498f448 100644 --- a/src/USER-NNP/README +++ b/src/USER-NNP/README @@ -0,0 +1,26 @@ +This package implements the "pair_style nnp" command which can be used in a +LAMMPS input script. This pair style allows to use pre-trained high-dimensional +neural network potentials[1] via an interface to the n2p2 library +(https://github.com/CompPhysVienna/n2p2)[2]. + +Please see the main documentation for the "pair_style nnp" command for further +details on how the pair style is used. An example is provided in the +"examples/USER/nnp" directory of LAMMPS. + +The USER-NNP package requires the external library n2p2 which must be +downloaded and compiled before starting the build process of LAMMPS. A rough +guideline on how to build n2p2 is presented in "lib/nnp/README". This package +supports the LAMMPS build process via CMake and traditional makefiles, please +see the LAMMPS manual section on building with external libraries for more +details. + +This package was created by Andreas Singraber, please ask questions/report bugs +on the n2p2 Github issues page (https://github.com/CompPhysVienna/n2p2/issues). + +[1] Behler, J.; Parrinello, M. Generalized Neural-Network Representation of +High-Dimensional Potential-Energy Surfaces. Phys. Rev. Lett. 2007, 98 (14), +146401. https://doi.org/10.1103/PhysRevLett.98.146401 + +[2] Singraber, A.; Behler, J.; Dellago, C. Library-Based +LAMMPS Implementation of High-Dimensional Neural Network Potentials. J. Chem. +Theory Comput. 2019, 15 (3), 1827-1840. https://doi.org/10.1021/acs.jctc.8b00770 diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-NNP/pair_nnp.cpp index c7ac600e45..39217c605d 100644 --- a/src/USER-NNP/pair_nnp.cpp +++ b/src/USER-NNP/pair_nnp.cpp @@ -1,32 +1,35 @@ -// n2p2 - A neural network potential package -// Copyright (C) 2018 Andreas Singraber (University of Vienna) -// -// This program 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. -// -// This program 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 . +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + This file initially came from n2p2 (https://github.com/CompPhysVienna/n2p2) + Copyright (2018) Andreas Singraber (University of Vienna) + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Andreas Singraber +------------------------------------------------------------------------- */ -#include -#include #include "pair_nnp.h" +#include #include "atom.h" #include "comm.h" +#include "error.h" +#include "memory.h" #include "neighbor.h" #include "neigh_list.h" #include "neigh_request.h" -#include "memory.h" -#include "error.h" #include "update.h" #include "utils.h" -#include "InterfaceLammps.h" +#include "InterfaceLammps.h" // n2p2 interface header using namespace LAMMPS_NS; @@ -89,6 +92,18 @@ void PairNNP::compute(int eflag, int vflag) void PairNNP::settings(int narg, char **arg) { + single_enable = 0; // 1 if single() routine exists + single_hessian_enable = 0; // 1 if single_hessian() routine exists + restartinfo = 0; // 1 if pair style writes restart info + respa_enable = 0; // 1 if inner/middle/outer rRESPA routines + one_coeff = 1; // 1 if allows only one coeff * * call + manybody_flag = 1; // 1 if a manybody potential + unit_convert_flag = 0; // value != 0 indicates support for unit conversion. + no_virial_fdotr_compute = 0; // 1 if does not invoke virial_fdotr_compute() + writedata = 0; // 1 if writes coeffs to data file + ghostneigh = 0; // 1 if pair style needs neighbors of ghosts + reinitflag = 0; // 1 if compatible with fix adapt and alike + int iarg = 0; if (narg == 0) error->all(FLERR,"Illegal pair_style command"); @@ -312,7 +327,7 @@ void PairNNP::handleExtrapolationWarnings() // rank 0. if(showew > 0) { // First collect an overview of extrapolation warnings per process. - long* numEWPerProc = nullptr; + long *numEWPerProc = nullptr; if(comm->me == 0) numEWPerProc = new long[comm->nprocs]; MPI_Gather(&numCurrentEW, 1, MPI_LONG, numEWPerProc, 1, MPI_LONG, 0, world); @@ -323,7 +338,7 @@ void PairNNP::handleExtrapolationWarnings() MPI_Status ms; // Get buffer size. MPI_Recv(&bs, 1, MPI_LONG, i, 0, world, &ms); - char* buf = new char[bs]; + char *buf = new char[bs]; // Receive buffer. MPI_Recv(buf, bs, MPI_BYTE, i, 0, world, &ms); interface->extractEWBuffer(buf, bs); @@ -336,7 +351,7 @@ void PairNNP::handleExtrapolationWarnings() // Get desired buffer length for all extrapolation warning entries. long bs = interface->getEWBufferSize(); // Allocate and fill buffer. - char* buf = new char[bs]; + char *buf = new char[bs]; interface->fillEWBuffer(buf, bs); // Send buffer size and buffer. MPI_Send(&bs, 1, MPI_LONG, 0, 0, world); diff --git a/src/USER-NNP/pair_nnp.h b/src/USER-NNP/pair_nnp.h index 0b76739d77..8a41d1a5d6 100644 --- a/src/USER-NNP/pair_nnp.h +++ b/src/USER-NNP/pair_nnp.h @@ -1,18 +1,22 @@ -// n2p2 - A neural network potential package -// Copyright (C) 2018 Andreas Singraber (University of Vienna) -// -// This program 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. -// -// This program 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 . +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + This file initially came from n2p2 (https://github.com/CompPhysVienna/n2p2) + Copyright (2018) Andreas Singraber (University of Vienna) + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Andreas Singraber +------------------------------------------------------------------------- */ #ifdef PAIR_CLASS @@ -58,9 +62,9 @@ class PairNNP : public Pair { double cflength; double cfenergy; double maxCutoffRadius; - char* directory; - char* emap; - nnp::InterfaceLammps* interface; + char *directory; + char *emap; + nnp::InterfaceLammps *interface; }; } From 037441b502b8cd5e6877e37c765303844873d899 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Wed, 24 Feb 2021 23:35:21 +0100 Subject: [PATCH 08/46] More documentation, added citation in source --- doc/src/Build_extras.rst | 13 ++++++------ doc/src/Packages_details.rst | 10 ++++++--- doc/src/pair_nnp.rst | 41 ++++++++++++++++++++++-------------- lib/nnp/README | 33 +++++++++++++++++++++-------- src/USER-NNP/README | 2 +- src/USER-NNP/pair_nnp.cpp | 25 +++++++++++++++++----- 6 files changed, 84 insertions(+), 40 deletions(-) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index f40972b544..6451de9ea5 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -1597,12 +1597,13 @@ external `n2p2 `__ library ``v2.2.0`` (or higher) before starting the LAMMPS build process. More specifically, only the *n2p2* core library ``libnnp`` and interface library ``libnnpif`` are actually needed: when using GCC it should suffice to execute ``make libnnpif`` -in the *n2p2* ``src`` directory. For more details please see the `n2p2 build -documentation `__. If -*n2p2* is downloaded and compiled in the LAMMPS directory ``lib/nnp/n2p2`` no -special flags need to be set besides the usual package activation. If you prefer -to install *n2p2* somewhere else on your system you must specify the path via -the ``N2P2_DIR`` variable. +in the *n2p2* ``src`` directory. For more details please see ``lib/nnp/README`` +and the `n2p2 build documentation +`__. If *n2p2* is +downloaded and compiled in the LAMMPS directory ``lib/nnp/n2p2`` no special +flags need to be set besides the usual package activation. If you prefer to +install *n2p2* somewhere else on your system you must specify the path via the +``N2P2_DIR`` variable. .. tabs:: diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index ea27bd3abf..d1bb18a405 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -1929,12 +1929,15 @@ USER-NNP package **Contents:** -:doc:`pair_style nnp ` command +A :doc:`pair_style nnp ` command which allows to use high-dimensional +neural network potentials (HDNNPs), a form of machine learning potentials. +HDNNPs must be carefully trained prior to their application in a molecular +dynamics simulation. .. _n2p2: https://github.com/CompPhysVienna/n2p2 -To use this package you must have the n2p2 core and interface library -(``libnnp``, ``libnnpif``) available on your system. +To use this package you must have the `n2p2 `_ library installed and +compiled on your system. **Author:** Andreas Singraber @@ -1946,6 +1949,7 @@ This package has :ref:`specific installation instructions ` on the :do * src/USER-NNP: filenames -> commands * src/USER-NNP/README +* lib/nnp/README * :doc:`pair_style nnp ` * examples/USER/nnp diff --git a/doc/src/pair_nnp.rst b/doc/src/pair_nnp.rst index fe60ef175e..3141dce317 100644 --- a/doc/src/pair_nnp.rst +++ b/doc/src/pair_nnp.rst @@ -49,14 +49,13 @@ This pair style adds an interaction based on the high-dimensional neural network potential (HDNNP) method as presented in :ref:`(Behler and Parrinello 2007) `. HDNNPs are machine learning potentials which require careful training of neural networks prior to application in MD simulations. The -pair style uses an interface to the *n2p2* library :ref:`(Singraber et al 2019) -` which is available on Github `here -`__. Please see the *n2p2* +pair style uses an interface to the *n2p2* library :ref:`(Singraber, Behler and +Dellago 2019) ` which is available on Github +`here `__. Please see the *n2p2* `documentation `__ for further details. *n2p2* (and hence this pair style) is compatible with neural network potentials -trained with its own tools and with `RuNNer -`__. However, at this point only -short-range HDNNPs are supported. +trained with its own tools :ref:`(Singraber et al 2019) ` +and with `RuNNer `__. The maximum cutoff radius of all symmetry functions (the atomic environment descriptors of HDNNPs) is the only argument of the *pair_coeff* command which @@ -189,17 +188,20 @@ should only be invoked with asterisk wild cards (see above). This style does not support the :doc:`pair_modify ` shift, table, and tail options. -This style does not write information to :doc:`binary restart files `. Thus, you need to re-specify the pair_style and -pair_coeff commands in an input script that reads a restart file. +This style does not write information to :doc:`binary restart files `. +Thus, you need to re-specify the pair_style and pair_coeff commands in an input +script that reads a restart file. -This style can only be used via the *pair* keyword of the :doc:`run_style respa ` command. It does not support the *inner*\ , -*middle*\ , *outer* keywords. +This style can only be used via the *pair* keyword of the :doc:`run_style respa +` command. It does not support the *inner*\ , *middle*\ , *outer* +keywords. Restrictions """""""""""" -This pair style is part of the USER-NNP package. It is only enabled -if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. +This pair style is part of the USER-NNP package. It is only enabled if LAMMPS +was built with that package. See the :doc:`Build package ` doc +page for more info. Please report bugs and feature requests to the `n2p2 GitHub issue page `__. @@ -226,9 +228,16 @@ Neural-Network Representation of High-Dimensional Potential-Energy Surfaces. Phys. Rev. Lett. 2007, 98 (14), 146401. `__ +.. _Singraber_Behler_Dellago_2019: + +**(Singraber, Behler and Dellago 2019)** `Singraber, A.; Behler, J.; Dellago, C. +Library-Based LAMMPS Implementation of High-Dimensional Neural Network +Potentials. J. Chem. Theory Comput. 2019, 15 (3), 1827-1840 +`__ + .. _Singraber_et_al_2019: -**(Singraber et al 2019)** `Singraber, A.; Behler, J.; Dellago, C. Library-Based -LAMMPS Implementation of High-Dimensional Neural Network Potentials. J. Chem. -Theory Comput. 2019, 15 (3), 1827-1840 -`__ +**(Singraber et al 2019)** `Singraber, A.; Morawietz, T.; Behler, J.; Dellago, +C. Parallel Multistream Training of High-Dimensional Neural Network Potentials. +J. Chem. Theory Comput. 2019, 15 (5), 3075-3092. +`__ diff --git a/lib/nnp/README b/lib/nnp/README index 9aba16606c..3d6d1cacbd 100644 --- a/lib/nnp/README +++ b/lib/nnp/README @@ -4,12 +4,14 @@ library ("libnnp"), the interface library ("libnnpif"), some headers and extra build helper files are needed. These files will be created automatically during the n2p2 build process. +IMPORTANT: The n2p2 version must be "v2.2.0" or higher. + Basic build instructions for n2p2 ================================= The n2p2 software package comes with lots of useful tools for creating and applying neural network potentials (NNPs). In order to use n2p2 together with -LAMMPS only a portion of the n2p2 code needs to be compiled. As an example, +LAMMPS only some parts of the n2p2 code need to be compiled. As an example, everything related to NNP training is not required and would only add unwanted library dependencies. Hence, the build infrastructure of n2p2 is designed to allow a separate build of the LAMMPS interface. @@ -39,10 +41,23 @@ also available (e.g. "makefile.intel") and can be activated by supplying the make COMP=intel libnnpif Please make sure that your compiler settings for n2p2 and LAMMPS are compatible -(avoid mixing different compilers). For more information about the n2p2 build -process please visit https://compphysvienna.github.io/n2p2/topics/build.html or -ask questions on the Github issue page -(https://github.com/CompPhysVienna/n2p2/issues). +(avoid mixing different compilers). + +If you want to build a serial version of LAMMPS with USER-NNP package n2p2 must +also be built without MPI enabled. This can be achieved with a preprocessor +flag (-DN2P2_NO_MPI) which is (among others) prepared, but commented out, in +the provided compiler-specific settings makefiles. For example, if you use the +GNU compiler simply remove the comment character '#' in front of the +corresponding line in "makefile.gnu". It should then look like this: + + PROJECT_OPTIONS+= -DN2P2_NO_MPI + +After compiling n2p2 with this flag turned on you can build a serial LAMMPS +version with "-D BUILD_MPI=off" (CMake) or "make serial" (traditional). + +For more information about the n2p2 build process please visit +https://compphysvienna.github.io/n2p2/topics/build.html or ask questions on the +Github issue page (https://github.com/CompPhysVienna/n2p2/issues). Installation directory of n2p2 ============================== @@ -64,10 +79,10 @@ You can install n2p2 either in this folder (1) or somewhere else on your system include lib src ... In this case LAMMPS will automatically find n2p2 during the build process - and you only need to enable the USER-NNP package via CMake (-D - PKG_USER-NNP=yes) or the traditional makefile approach (make yes-user-nnp). - It is also valid to create a link here named "n2p2" which points to the n2p2 - installation directory. + and you only need to enable the USER-NNP package via CMake (-D PKG_USER-NNP=yes) + or the traditional makefile approach (make yes-user-nnp). It is also valid to + create a link here named "n2p2" which points to the n2p2 installation + directory. (2) If n2p2 is installed somewhere else the path must be given as an additional setting (variable N2P2_DIR) to the build tool. For example, with CMake use diff --git a/src/USER-NNP/README b/src/USER-NNP/README index 811498f448..a8eae3d865 100644 --- a/src/USER-NNP/README +++ b/src/USER-NNP/README @@ -8,7 +8,7 @@ details on how the pair style is used. An example is provided in the "examples/USER/nnp" directory of LAMMPS. The USER-NNP package requires the external library n2p2 which must be -downloaded and compiled before starting the build process of LAMMPS. A rough +downloaded and compiled before starting the build process of LAMMPS. A guideline on how to build n2p2 is presented in "lib/nnp/README". This package supports the LAMMPS build process via CMake and traditional makefiles, please see the LAMMPS manual section on building with external libraries for more diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-NNP/pair_nnp.cpp index 39217c605d..a6b06fb66c 100644 --- a/src/USER-NNP/pair_nnp.cpp +++ b/src/USER-NNP/pair_nnp.cpp @@ -21,6 +21,7 @@ #include "pair_nnp.h" #include #include "atom.h" +#include "citeme.h" #include "comm.h" #include "error.h" #include "memory.h" @@ -33,20 +34,34 @@ using namespace LAMMPS_NS; +static const char cite_user_nnp_package[] = + "USER-NNP package:\n\n" + "@Article{Singraber19,\n" + " author = {Singraber, Andreas and Behler, J{\"o}rg and Dellago, Christoph},\n" + " title = {Library-{{Based LAMMPS Implementation}} of {{High}}-{{Dimensional Neural Network Potentials}}},\n" + " year = {2019},\n" + " month = mar,\n" + " volume = {15},\n" + " pages = {1827--1840},\n" + " doi = {10.1021/acs.jctc.8b00770},\n" + " journal = {J.~Chem.~Theory~Comput.},\n" + " number = {3}\n" + "}\n\n"; + /* ---------------------------------------------------------------------- */ PairNNP::PairNNP(LAMMPS *lmp) : Pair(lmp) { - interface = new nnp::InterfaceLammps(); + if (lmp->citeme) lmp->citeme->add(cite_user_nnp_package); + + interface = new nnp::InterfaceLammps(); } -/* ---------------------------------------------------------------------- - check if allocated, since class can be destructed when incomplete -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ PairNNP::~PairNNP() { - delete interface; + delete interface; } /* ---------------------------------------------------------------------- */ From 0c583fff7dd8fdcb657fdf7c9f5ca1c356681516 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Thu, 25 Feb 2021 11:54:37 +0100 Subject: [PATCH 09/46] Allow for -DLAMMPS_BIGBIG compilation --- lib/nnp/README | 10 +++++----- src/USER-NNP/pair_nnp.cpp | 8 ++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/nnp/README b/lib/nnp/README index 3d6d1cacbd..004d60df0b 100644 --- a/lib/nnp/README +++ b/lib/nnp/README @@ -44,11 +44,11 @@ Please make sure that your compiler settings for n2p2 and LAMMPS are compatible (avoid mixing different compilers). If you want to build a serial version of LAMMPS with USER-NNP package n2p2 must -also be built without MPI enabled. This can be achieved with a preprocessor -flag (-DN2P2_NO_MPI) which is (among others) prepared, but commented out, in -the provided compiler-specific settings makefiles. For example, if you use the -GNU compiler simply remove the comment character '#' in front of the -corresponding line in "makefile.gnu". It should then look like this: +also be built with MPI disabled. This can be achieved with a preprocessor flag +(-DN2P2_NO_MPI) which is (among others) prepared, but commented out, in the +provided compiler-specific settings makefiles. For example, if you use the GNU +compiler simply remove the comment character '#' in front of the corresponding +line (around line 49) in "makefile.gnu". It should then look like this: PROJECT_OPTIONS+= -DN2P2_NO_MPI diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-NNP/pair_nnp.cpp index a6b06fb66c..b2dae5a969 100644 --- a/src/USER-NNP/pair_nnp.cpp +++ b/src/USER-NNP/pair_nnp.cpp @@ -71,8 +71,12 @@ void PairNNP::compute(int eflag, int vflag) if(eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; - // Set number of local atoms and add index and element. - interface->setLocalAtoms(atom->nlocal,atom->tag,atom->type); + // Set number of local atoms and add element. + interface->setLocalAtoms(atom->nlocal,atom->type); + // Transfer tags separately. Interface::setLocalTags is overloaded internally + // to work with both -DLAMMPS_SMALLBIG (tagint = int) and -DLAMMPS_BIGBIG + // (tagint = int64_t) + interface->setLocalTags(atom->tag); // Transfer local neighbor list to NNP interface. transferNeighborList(); From ed53e2bbff2465dd05ba015a05843b2bb328360c Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Thu, 25 Feb 2021 14:02:00 +0100 Subject: [PATCH 10/46] Add ignored Makefile.lammps in lib/nnp --- lib/nnp/Makefile.lammps | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 lib/nnp/Makefile.lammps diff --git a/lib/nnp/Makefile.lammps b/lib/nnp/Makefile.lammps new file mode 100644 index 0000000000..fb5b939541 --- /dev/null +++ b/lib/nnp/Makefile.lammps @@ -0,0 +1,24 @@ +# Settings that the LAMMPS build will import when this package library is used +# Normally, you do NOT need to edit this file! + +# Check out if n2p2 or a link is right here. +N2P2_LOCALDIR=$(realpath ../../lib/nnp/n2p2) +ifeq ($(N2P2_DIR),) + N2P2_DIR=$(shell test -d $(N2P2_LOCALDIR) && echo $(N2P2_LOCALDIR)) +else +# If n2p2 is not found in this directory then use environment variable or set manually here: +# N2P2_DIR= +endif + +# Give up if n2p2 not found yet. +ifeq ($(N2P2_DIR),) +$(error Cannot find library for USER-NNP package, please set environment or make variable N2P2_DIR manually.) +endif + +# Read extra NNP_ compilation flags from makefile provided by n2p2: +include $(N2P2_DIR)/lib/Makefile.lammps-extra + +# Next, add general info to include/lib/path variables. +nnp_SYSINC += -I$(N2P2_DIR)/include +nnp_SYSLIB += -L$(N2P2_DIR)/lib -lnnpif -lnnp +nnp_SYSPATH += From 7b9dfb296daf7e4147d6bb2c5e12fcd798ab1422 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Thu, 1 Apr 2021 00:35:17 +0200 Subject: [PATCH 11/46] Renamed pair style, user package: nnp => hdnnp --- cmake/CMakeLists.txt | 7 +- cmake/Modules/FindN2P2.cmake | 10 +-- cmake/presets/all_off.cmake | 10 +-- cmake/presets/all_on.cmake | 10 +-- cmake/presets/nolib.cmake | 6 +- doc/src/Build_extras.rst | 84 +++++++++---------- doc/src/Build_package.rst | 4 +- doc/src/Commands_pair.rst | 2 +- doc/src/Packages_details.rst | 68 +++++++-------- doc/src/Packages_user.rst | 4 +- doc/src/{pair_nnp.rst => pair_hdnnp.rst} | 32 +++---- doc/src/pair_style.rst | 2 +- doc/utils/sphinx-config/false_positives.txt | 4 +- examples/USER/{nnp => hdnnp}/data.H2O-360mol | 0 .../nnp-data => hdnnp/hdnnp-data}/input.nn | 0 .../hdnnp-data}/scaling.data | 0 .../hdnnp-data}/weights.001.data | 0 .../hdnnp-data}/weights.008.data | 0 examples/USER/{nnp/in.nnp => hdnnp/in.hdnnp} | 16 ++-- lib/README | 4 +- lib/{nnp => hdnnp}/Makefile.lammps | 12 +-- lib/{nnp => hdnnp}/README | 42 +++++----- src/.gitignore | 4 +- src/Makefile | 10 +-- src/{USER-NNP => USER-HDNNP}/Install.sh | 16 ++-- src/{USER-NNP => USER-HDNNP}/README | 10 +-- .../pair_hdnnp.cpp} | 40 ++++----- .../pair_nnp.h => USER-HDNNP/pair_hdnnp.h} | 12 +-- 28 files changed, 204 insertions(+), 205 deletions(-) rename doc/src/{pair_nnp.rst => pair_hdnnp.rst} (90%) rename examples/USER/{nnp => hdnnp}/data.H2O-360mol (100%) rename examples/USER/{nnp/nnp-data => hdnnp/hdnnp-data}/input.nn (100%) rename examples/USER/{nnp/nnp-data => hdnnp/hdnnp-data}/scaling.data (100%) rename examples/USER/{nnp/nnp-data => hdnnp/hdnnp-data}/weights.001.data (100%) rename examples/USER/{nnp/nnp-data => hdnnp/hdnnp-data}/weights.008.data (100%) rename examples/USER/{nnp/in.nnp => hdnnp/in.hdnnp} (81%) rename lib/{nnp => hdnnp}/Makefile.lammps (62%) rename lib/{nnp => hdnnp}/README (68%) rename src/{USER-NNP => USER-HDNNP}/Install.sh (66%) rename src/{USER-NNP => USER-HDNNP}/README (75%) rename src/{USER-NNP/pair_nnp.cpp => USER-HDNNP/pair_hdnnp.cpp} (94%) rename src/{USER-NNP/pair_nnp.h => USER-HDNNP/pair_hdnnp.h} (91%) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2efd36b1f4..94f419bd37 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -116,8 +116,8 @@ set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE QEQ REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESODPD USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD - USER-LB USER-MANIFOLD USER-MEAMC USER-MESONT USER-MGPT USER-MISC USER-MOFFF - USER-MOLFILE USER-NETCDF USER-NNP USER-PHONON USER-PLUMED USER-PTM USER-QTB + USER-HDNNP USER-LB USER-MANIFOLD USER-MEAMC USER-MESONT USER-MGPT USER-MISC + USER-MOFFF USER-MOLFILE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM USER-YAFF) @@ -381,8 +381,7 @@ else() set(CUDA_REQUEST_PIC) endif() -foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-MOLFILE - USER-NETCDF USER-NNP USER-PLUMED USER-QMMM +foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-HDNNP USER-MOLFILE USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SCAFACOS USER-SMD USER-VTK KIM LATTE MESSAGE MSCG COMPRESS) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake index a06850f07f..cae5de5342 100644 --- a/cmake/Modules/FindN2P2.cmake +++ b/cmake/Modules/FindN2P2.cmake @@ -3,9 +3,9 @@ include(FindPackageHandleStandardArgs) # Check if N2P2_DIR is set manually. if (DEFINED ENV{N2P2_DIR}) set(N2P2_DIR "${N2P2_DIR}") -# If not, try if directory "lib/nnp/n2p2" exists. +# If not, try if directory "lib/hdnnp/n2p2" exists. else() - get_filename_component(_fullpath "${LAMMPS_LIB_SOURCE_DIR}/nnp/n2p2" REALPATH) + get_filename_component(_fullpath "${LAMMPS_LIB_SOURCE_DIR}/hdnnp/n2p2" REALPATH) if (EXISTS ${_fullpath}) set(N2P2_DIR "${_fullpath}") endif() @@ -17,12 +17,12 @@ find_path(N2P2_INCLUDE_DIR InterfaceLammps.h PATHS "${N2P2_DIR}/include") find_library(N2P2_LIBNNP NAMES nnp PATHS "${N2P2_DIR}/lib") find_library(N2P2_LIBNNPIF NAMES nnpif PATHS "${N2P2_DIR}/lib") # Users could compile n2p2 with extra flags which are then also required for -# pair_nnp.cpp compilation. To forward them to the LAMMPS build process n2p2 +# pair_hdnnp.cpp compilation. To forward them to the LAMMPS build process n2p2 # writes a file with cmake commands, e.g. # -# target_compile_definitions(lammps PRIVATE -DNNP_NO_SF_GROUPS) +# target_compile_definitions(lammps PRIVATE -DN2P2_NO_SF_GROUPS) # -# to "lib/lammps-extra.cmake" which is then included by USER-NNP.cmake. +# to "lib/lammps-extra.cmake" which is then included by USER-HDNNP.cmake. find_file(N2P2_CMAKE_EXTRA NAMES lammps-extra.cmake PATHS "${N2P2_DIR}/lib") find_package_handle_standard_args(N2P2 DEFAULT_MSG diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index d567b141bf..7f3caebf8c 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -7,11 +7,11 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU SNAP SPIN SRD VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP - USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD - USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-NNP - USER-OMP USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP - USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ - USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF) + USER-H5MD USER-HDNNP USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC + USER-MESODPD USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE + USER-NETCDF USER-OMP USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB + USER-QUIP USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD + USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 2b879e9ecf..fbc78ededf 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -9,11 +9,11 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU SNAP SPIN SRD VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP - USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD - USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-NNP - USER-OMP USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP - USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ - USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF) + USER-H5MD USER-HDNNP USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC + USER-MESODPD USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE + USER-NETCDF USER-OMP USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB + USER-QUIP USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD + USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index c0236347cb..a819e6a347 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -2,9 +2,9 @@ # library or special compiler (fortran or cuda) or equivalent. set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MPIIO MSCG PYTHON - VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-H5MD USER-LB - USER-MOLFILE USER-MESONT USER-NETCDF USER-NNP USER-PLUMED USER-QMMM - USER-QUIP USER-SCAFACOS USER-SMD USER-VTK) + VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-H5MD USER-HDNNP USER-LB + USER-MOLFILE USER-MESONT USER-NETCDF USER-PLUMED USER-QMMM + USER-QUIP USER-SCAFACOS USER-SMD USER-VTK) foreach(PKG ${PACKAGES_WITH_LIB}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 545a86c04e..30f4bb711d 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -48,11 +48,11 @@ This is the list of packages that may require additional steps. * :ref:`USER-AWPMD ` * :ref:`USER-COLVARS ` * :ref:`USER-H5MD ` + * :ref:`USER-HDNNP ` * :ref:`USER-INTEL ` * :ref:`USER-MESONT ` * :ref:`USER-MOLFILE ` * :ref:`USER-NETCDF ` - * :ref:`USER-NNP ` * :ref:`USER-PLUMED ` * :ref:`USER-OMP ` * :ref:`USER-QMMM ` @@ -1416,6 +1416,47 @@ the HDF5 library. ---------- +.. _user-hdnnp: + +USER-HDNNP package +--------------------------------- + +To build with the USER-HDNNP package it is required to download and build the +external `n2p2 `__ library ``v2.2.0`` +(or higher) before starting the LAMMPS build process. More specifically, only +the *n2p2* core library ``libnnp`` and interface library ``libnnpif`` are +actually needed: when using GCC it should suffice to execute ``make libnnpif`` +in the *n2p2* ``src`` directory. For more details please see +``lib/hdnnp/README`` and the `n2p2 build documentation +`__. If *n2p2* is +downloaded and compiled in the LAMMPS directory ``lib/hdnnp/n2p2`` no special +flags need to be set besides the usual package activation. If you prefer to +install *n2p2* somewhere else on your system you must specify the path via the +``N2P2_DIR`` variable. + +.. tabs:: + + .. tab:: CMake build + + There is one additional setting besides ``-D PKG_USER-HDNNP=yes`` in case + *n2p2* is not installed in the ``lib/hdnnp/n2p2`` directory: + + .. code-block:: bash + + -D N2P2_DIR=path # path ... n2p2 installation path + + .. tab:: Traditional make + + There is one additional variable that needs to be set besides ``make + yes-user-hdnnp`` in case *n2p2* is not installed in the ``lib/hdnnp/n2p2`` + directory: + + .. code-block:: bash + + make N2P2_DIR=path ... + +---------- + .. _user-intel: USER-INTEL package @@ -1597,47 +1638,6 @@ on your system. ---------- -.. _user-nnp: - -USER-NNP package ---------------------------------- - -To build with the USER-NNP package it is required to download and build the -external `n2p2 `__ library ``v2.2.0`` -(or higher) before starting the LAMMPS build process. More specifically, only -the *n2p2* core library ``libnnp`` and interface library ``libnnpif`` are -actually needed: when using GCC it should suffice to execute ``make libnnpif`` -in the *n2p2* ``src`` directory. For more details please see ``lib/nnp/README`` -and the `n2p2 build documentation -`__. If *n2p2* is -downloaded and compiled in the LAMMPS directory ``lib/nnp/n2p2`` no special -flags need to be set besides the usual package activation. If you prefer to -install *n2p2* somewhere else on your system you must specify the path via the -``N2P2_DIR`` variable. - -.. tabs:: - - .. tab:: CMake build - - There is one additional setting besides ``-D PKG_USER-NNP=yes`` in case - *n2p2* is not installed in the ``lib/nnp/n2p2`` directory: - - .. code-block:: bash - - -D N2P2_DIR=path # path ... n2p2 installation path - - .. tab:: Traditional make - - There is one additional variable that needs to be set besides ``make - yes-user-nnp`` in case *n2p2* is not installed in the ``lib/nnp/n2p2`` - directory: - - .. code-block:: bash - - make N2P2_DIR=path ... - ----------- - .. _user-omp: USER-OMP package diff --git a/doc/src/Build_package.rst b/doc/src/Build_package.rst index 36a7bce482..d069dc8a84 100644 --- a/doc/src/Build_package.rst +++ b/doc/src/Build_package.rst @@ -35,9 +35,9 @@ packages: +--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ | :ref:`MSCG ` | :ref:`OPT ` | :ref:`POEMS ` | :ref:`PYTHON ` | :ref:`VORONOI ` | :ref:`USER-ADIOS ` | +--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`USER-ATC ` | :ref:`USER-AWPMD ` | :ref:`USER-COLVARS ` | :ref:`USER-H5MD ` | :ref:`USER-INTEL ` | :ref:`USER-MOLFILE ` | +| :ref:`USER-ATC ` | :ref:`USER-AWPMD ` | :ref:`USER-COLVARS ` | :ref:`USER-H5MD ` | :ref:`USER-HDNNP ` | :ref:`USER-INTEL ` | +--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ -| :ref:`USER-NETCDF ` | :ref:`USER-NNP ` | :ref:`USER-PLUMED ` | :ref:`USER-OMP ` | :ref:`USER-QMMM ` | :ref:`USER-QUIP ` | +| :ref:`USER-MOLFILE ` | :ref:`USER-NETCDF ` | :ref:`USER-PLUMED ` | :ref:`USER-OMP ` | :ref:`USER-QMMM ` | :ref:`USER-QUIP ` | +--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ | :ref:`USER-SCAFACOS ` | :ref:`USER-SMD ` | :ref:`USER-VTK ` | | | | +--------------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+ diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index b074c2f8c3..d17f81f411 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -115,6 +115,7 @@ OPT. * :doc:`gw/zbl ` * :doc:`hbond/dreiding/lj (o) ` * :doc:`hbond/dreiding/morse (o) ` + * :doc:`hdnnp ` * :doc:`ilp/graphene/hbn ` * :doc:`kolmogorov/crespi/full ` * :doc:`kolmogorov/crespi/z ` @@ -198,7 +199,6 @@ OPT. * :doc:`nm/cut (o) ` * :doc:`nm/cut/coul/cut (o) ` * :doc:`nm/cut/coul/long (o) ` - * :doc:`nnp ` * :doc:`oxdna/coaxstk ` * :doc:`oxdna/excv ` * :doc:`oxdna/hbond ` diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index ed89341d0c..df57ff63a0 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -77,6 +77,7 @@ page gives those details. * :ref:`USER-EFF ` * :ref:`USER-FEP ` * :ref:`USER-H5MD ` + * :ref:`USER-HDNNP ` * :ref:`USER-INTEL ` * :ref:`USER-LB ` * :ref:`USER-MANIFOLD ` @@ -88,7 +89,6 @@ page gives those details. * :ref:`USER-MOFFF ` * :ref:`USER-MOLFILE ` * :ref:`USER-NETCDF ` - * :ref:`USER-NNP ` * :ref:`USER-OMP ` * :ref:`USER-PHONON ` * :ref:`USER-PLUMED ` @@ -1550,6 +1550,39 @@ This package has :ref:`specific installation instructions ` on the :d ---------- +.. _PKG-USER-HDNNP: + +USER-HDNNP package +------------------ + +**Contents:** + +A :doc:`pair_style hdnnp ` command which allows to use +high-dimensional neural network potentials (HDNNPs), a form of machine learning +potentials. HDNNPs must be carefully trained prior to their application in a +molecular dynamics simulation. + +.. _n2p2: https://github.com/CompPhysVienna/n2p2 + +To use this package you must have the `n2p2 `_ library installed and +compiled on your system. + +**Author:** Andreas Singraber + +**Install:** + +This package has :ref:`specific installation instructions ` on the :doc:`Build extras ` page. + +**Supporting info:** + +* src/USER-HDNNP: filenames -> commands +* src/USER-HDNNP/README +* lib/hdnnp/README +* :doc:`pair_style hdnnp ` +* examples/USER/hdnnp + +---------- + .. _PKG-USER-INTEL: USER-INTEL package @@ -1924,39 +1957,6 @@ This package has :ref:`specific installation instructions ` on the ---------- -.. _PKG-USER-NNP: - -USER-NNP package ----------------- - -**Contents:** - -A :doc:`pair_style nnp ` command which allows to use high-dimensional -neural network potentials (HDNNPs), a form of machine learning potentials. -HDNNPs must be carefully trained prior to their application in a molecular -dynamics simulation. - -.. _n2p2: https://github.com/CompPhysVienna/n2p2 - -To use this package you must have the `n2p2 `_ library installed and -compiled on your system. - -**Author:** Andreas Singraber - -**Install:** - -This package has :ref:`specific installation instructions ` on the :doc:`Build extras ` page. - -**Supporting info:** - -* src/USER-NNP: filenames -> commands -* src/USER-NNP/README -* lib/nnp/README -* :doc:`pair_style nnp ` -* examples/USER/nnp - ----------- - .. _PKG-USER-OMP: USER-OMP package diff --git a/doc/src/Packages_user.rst b/doc/src/Packages_user.rst index 77bf13cde6..0b25389032 100644 --- a/doc/src/Packages_user.rst +++ b/doc/src/Packages_user.rst @@ -57,6 +57,8 @@ package: +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-H5MD ` | dump output via HDF5 | :doc:`dump h5md ` | n/a | ext | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ +| :ref:`USER-HDNNP ` | High-dimensional neural network potentials | :doc:`pair_style hdnnp ` | USER/hdnnp | ext | ++------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-INTEL ` | optimized Intel CPU and KNL styles | :doc:`Speed intel ` | `Benchmarks `_ | no | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-LB ` | Lattice Boltzmann fluid | :doc:`fix lb/fluid ` | USER/lb | no | @@ -79,8 +81,6 @@ package: +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-NETCDF ` | dump output via NetCDF | :doc:`dump netcdf ` | n/a | ext | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ -| :ref:`USER-NNP ` | High-dimensional neural network potentials | :doc:`pair_style nnp ` | USER/nnp | ext | -+------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-OMP ` | OpenMP-enabled styles | :doc:`Speed omp ` | `Benchmarks `_ | no | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-PHONON ` | phonon dynamical matrix | :doc:`fix phonon ` | USER/phonon | no | diff --git a/doc/src/pair_nnp.rst b/doc/src/pair_hdnnp.rst similarity index 90% rename from doc/src/pair_nnp.rst rename to doc/src/pair_hdnnp.rst index 3141dce317..b34c00f982 100644 --- a/doc/src/pair_nnp.rst +++ b/doc/src/pair_hdnnp.rst @@ -1,14 +1,14 @@ -.. index:: pair_style nnp +.. index:: pair_style hdnnp -pair_style nnp command -====================== +pair_style hdnnp command +======================== Syntax """""" .. code-block:: LAMMPS - pair_style nnp keyword value ... + pair_style hdnnp keyword value ... * zero or more keyword/value pairs may be appended * keyword = *dir* or *showew* or *showewsum* or *maxew* or *resetew* or *cflength* or *cfenergy* @@ -19,7 +19,7 @@ Syntax *emap* value = mapping mapping = Element mapping from LAMMPS atom types to n2p2 elements *dir* value = directory - directory = Path to NNP configuration files + directory = Path to HDNNP configuration files *showew* value = *yes* or *no* *showewsum* value = summary summary = Write EW summary every this many timesteps (*0* turns summary off) @@ -36,10 +36,10 @@ Examples .. code-block:: LAMMPS - pair_style nnp showew yes showewsum 100 maxew 1000 resetew yes cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" + pair_style hdnnp showew yes showewsum 100 maxew 1000 resetew yes cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" pair_coeff * * 6.35 - pair_style nnp dir "./" showewsum 10000 + pair_style hdnnp dir "./" showewsum 10000 pair_coeff * * 6.01 Description @@ -81,15 +81,15 @@ If provided, the keyword *emap* determines the mapping from LAMMPS atom types to n2p2 elements. The format is a comma-separated list of ``atom type:element`` pairs, e.g. ``"1:Cu,2:Zn"`` will map atom types 1 and 2 to elements Cu and Zn, respectively. Atom types not present in the list will be completely ignored by -the NNP. The keyword *emap* is mandatory in a "hybrid" setup (see +the HDNNP. The keyword *emap* is mandatory in a "hybrid" setup (see :doc:`pair_hybrid `) with "extra" atom types in the simulation -which are not handled by the NNP. +which are not handled by the HDNNP. .. warning:: Without an explicit mapping it is by default assumed that the atom type specifications in LAMMPS configuration files are consistent with the ordering - of elements in the NNP library. Thus, without the *emap* keyword present + of elements in the *n2p2* library. Thus, without the *emap* keyword present atom types must be sorted in order of ascending atomic number, e.g. the only correct mapping for a configuration containing hydrogen, oxygen and zinc atoms would be: @@ -104,7 +104,7 @@ which are not handled by the NNP. | Zn | 30 | 3 | +---------+---------------+-------------+ -Use the *dir* keyword to specify the directory containing the NNP configuration +Use the *dir* keyword to specify the directory containing the HDNNP configuration files. The directory must contain ``input.nn`` with neural network and symmetry function setup, ``scaling.data`` with symmetry function scaling data and ``weights.???.data`` with weight parameters for each element. @@ -128,7 +128,7 @@ used to print out the MPI rank the atom belongs to. The *showew* keyword should only be set to *yes* for debugging purposes. Extrapolation warnings may add lots of overhead as they are communicated each - timestep. Also, if the simulation is run in a region where the NNP was not + timestep. Also, if the simulation is run in a region where the HDNNP was not correctly trained, lots of extrapolation warnings may clog log files and the console. In a production run use *showewsum* instead. @@ -160,7 +160,7 @@ whole trajectory. If the training of a neural network potential has been performed with different physical units for length and energy than those set in LAMMPS, it is still possible to use the potential when the unit conversion factors are provided via -the *cflength* and *cfenergy* keywords. If for example, the NNP was +the *cflength* and *cfenergy* keywords. If for example, the HDNNP was parameterized with Bohr and Hartree training data and symmetry function parameters (i.e. distances and energies in "input.nn" are given in Bohr and Hartree) but LAMMPS is set to use *metal* units (Angstrom and eV) the correct @@ -174,7 +174,7 @@ conversion factors are: Thus, arguments of *cflength* and *cfenergy* are the multiplicative factors required to convert lengths and energies given in LAMMPS units to respective -quantities in native NNP units (1 Angstrom = 1.8897261328 Bohr, 1 eV = +quantities in native HDNNP units (1 Angstrom = 1.8897261328 Bohr, 1 eV = 0.0367493254 Hartree). ---- @@ -199,7 +199,7 @@ keywords. Restrictions """""""""""" -This pair style is part of the USER-NNP package. It is only enabled if LAMMPS +This pair style is part of the USER-HDNNP package. It is only enabled if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. @@ -214,7 +214,7 @@ Related commands Default ^^^^^^^ -The default options are *dir* = "nnp/", *showew* = yes, *showewsum* = 0, *maxew* +The default options are *dir* = "hdnnp/", *showew* = yes, *showewsum* = 0, *maxew* = 0, *resetew* = no, *cflength* = 1.0, *cfenergy* = 1.0. The default atom type mapping is determined automatically according to ascending atomic number of present elements (see above). diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 4872f2328a..f3a59fd8bc 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -178,6 +178,7 @@ accelerated styles exist. * :doc:`gw/zbl ` - Gao-Weber potential with a repulsive ZBL core * :doc:`hbond/dreiding/lj ` - DREIDING hydrogen bonding LJ potential * :doc:`hbond/dreiding/morse ` - DREIDING hydrogen bonding Morse potential +* :doc:`hdnnp ` - High-dimensional neural network potential * :doc:`ilp/graphene/hbn ` - registry-dependent interlayer potential (ILP) * :doc:`kim ` - interface to potentials provided by KIM project * :doc:`kolmogorov/crespi/full ` - Kolmogorov-Crespi (KC) potential with no simplifications @@ -261,7 +262,6 @@ accelerated styles exist. * :doc:`nm/cut ` - N-M potential * :doc:`nm/cut/coul/cut ` - N-M potential with cutoff Coulomb * :doc:`nm/cut/coul/long ` - N-M potential with long-range Coulomb -* :doc:`nnp ` - High-dimensional neural network potential * :doc:`oxdna/coaxstk ` - * :doc:`oxdna/excv ` - * :doc:`oxdna/hbond ` - diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index e2900468fa..7d49568c55 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1211,6 +1211,8 @@ hbn hbnewflag hbond hcp +hdnnp +HDNNP heatconduction Hebenstreit Hecht @@ -2178,8 +2180,6 @@ nmin Nmols nn nnodes -nnp -NNP Nocedal nocite nocoeff diff --git a/examples/USER/nnp/data.H2O-360mol b/examples/USER/hdnnp/data.H2O-360mol similarity index 100% rename from examples/USER/nnp/data.H2O-360mol rename to examples/USER/hdnnp/data.H2O-360mol diff --git a/examples/USER/nnp/nnp-data/input.nn b/examples/USER/hdnnp/hdnnp-data/input.nn similarity index 100% rename from examples/USER/nnp/nnp-data/input.nn rename to examples/USER/hdnnp/hdnnp-data/input.nn diff --git a/examples/USER/nnp/nnp-data/scaling.data b/examples/USER/hdnnp/hdnnp-data/scaling.data similarity index 100% rename from examples/USER/nnp/nnp-data/scaling.data rename to examples/USER/hdnnp/hdnnp-data/scaling.data diff --git a/examples/USER/nnp/nnp-data/weights.001.data b/examples/USER/hdnnp/hdnnp-data/weights.001.data similarity index 100% rename from examples/USER/nnp/nnp-data/weights.001.data rename to examples/USER/hdnnp/hdnnp-data/weights.001.data diff --git a/examples/USER/nnp/nnp-data/weights.008.data b/examples/USER/hdnnp/hdnnp-data/weights.008.data similarity index 100% rename from examples/USER/nnp/nnp-data/weights.008.data rename to examples/USER/hdnnp/hdnnp-data/weights.008.data diff --git a/examples/USER/nnp/in.nnp b/examples/USER/hdnnp/in.hdnnp similarity index 81% rename from examples/USER/nnp/in.nnp rename to examples/USER/hdnnp/in.hdnnp index d4664d1c83..112fb24515 100644 --- a/examples/USER/nnp/in.nnp +++ b/examples/USER/hdnnp/in.hdnnp @@ -1,5 +1,5 @@ ############################################################################### -# MD simulation for NN water +# MD simulation for HDNNP water ############################################################################### ############################################################################### @@ -11,9 +11,9 @@ variable cfgFile string "data.H2O-360mol" # Timesteps variable numSteps equal 10 variable dt equal 0.0005 -# NN -variable nnpCutoff equal 6.36 -variable nnpDir string "nnp-data" +# HDNNP +variable hdnnpCutoff equal 6.36 +variable hdnnpDir string "hdnnp-data" ############################################################################### # GENERAL SETUP @@ -26,10 +26,10 @@ timestep ${dt} thermo 1 ############################################################################### -# NN +# HDNNP ############################################################################### -pair_style nnp dir ${nnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" -pair_coeff * * ${nnpCutoff} +pair_style hdnnp dir ${hdnnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" +pair_coeff * * ${hdnnpCutoff} ############################################################################### # INTEGRATOR @@ -39,7 +39,7 @@ fix INT all nve ############################################################################### # OUTPUT ############################################################################### -dump 1 all atom 1 dump.nnp +dump 1 all atom 1 dump.hdnnp ############################################################################### # SIMULATION diff --git a/lib/README b/lib/README index 535f2b228e..8709c7784c 100644 --- a/lib/README +++ b/lib/README @@ -27,6 +27,8 @@ gpu general GPU routines, GPU package from Mike Brown (ORNL) h5md ch5md library for output of MD data in HDF5 format from Pierre de Buyl (KU Leuven) +hdnnp hooks to n2p2, neural network potential package, used by USER-HDNNP + from Andreas Singraber kim hooks to the KIM library, used by KIM package from Ryan Elliott and Ellad Tadmor (U Minn) kokkos Kokkos package for GPU and many-core acceleration @@ -41,8 +43,6 @@ mscg hooks to the MSCG library, used by fix_mscg command from Jacob Wagner and Greg Voth group (U Chicago) netcdf hooks to a NetCDF library installed on your system from Lars Pastewka (Karlsruhe Institute of Technology) -nnp hooks to n2p2, neural network potential package, used by USER-NNP - from Andreas Singraber poems POEMS rigid-body integration package, POEMS package from Rudranarayan Mukherjee (RPI) python hooks to the system Python library, used by the PYTHON package diff --git a/lib/nnp/Makefile.lammps b/lib/hdnnp/Makefile.lammps similarity index 62% rename from lib/nnp/Makefile.lammps rename to lib/hdnnp/Makefile.lammps index fb5b939541..3b5ce3ab42 100644 --- a/lib/nnp/Makefile.lammps +++ b/lib/hdnnp/Makefile.lammps @@ -2,7 +2,7 @@ # Normally, you do NOT need to edit this file! # Check out if n2p2 or a link is right here. -N2P2_LOCALDIR=$(realpath ../../lib/nnp/n2p2) +N2P2_LOCALDIR=$(realpath ../../lib/hdnnp/n2p2) ifeq ($(N2P2_DIR),) N2P2_DIR=$(shell test -d $(N2P2_LOCALDIR) && echo $(N2P2_LOCALDIR)) else @@ -12,13 +12,13 @@ endif # Give up if n2p2 not found yet. ifeq ($(N2P2_DIR),) -$(error Cannot find library for USER-NNP package, please set environment or make variable N2P2_DIR manually.) +$(error Cannot find library for USER-HDNNP package, please set environment or make variable N2P2_DIR manually.) endif -# Read extra NNP_ compilation flags from makefile provided by n2p2: +# Read extra N2P2_ compilation flags from makefile provided by n2p2: include $(N2P2_DIR)/lib/Makefile.lammps-extra # Next, add general info to include/lib/path variables. -nnp_SYSINC += -I$(N2P2_DIR)/include -nnp_SYSLIB += -L$(N2P2_DIR)/lib -lnnpif -lnnp -nnp_SYSPATH += +hdnnp_SYSINC += -I$(N2P2_DIR)/include +hdnnp_SYSLIB += -L$(N2P2_DIR)/lib -lnnpif -lnnp +hdnnp_SYSPATH += diff --git a/lib/nnp/README b/lib/hdnnp/README similarity index 68% rename from lib/nnp/README rename to lib/hdnnp/README index 004d60df0b..d92fac5301 100644 --- a/lib/nnp/README +++ b/lib/hdnnp/README @@ -1,4 +1,4 @@ -The USER-NNP package requires access to pre-compiled libraries of the n2p2 +The USER-HDNNP package requires access to pre-compiled libraries of the n2p2 package (https://github.com/CompPhysVienna/n2p2). More precisely, the n2p2 core library ("libnnp"), the interface library ("libnnpif"), some headers and extra build helper files are needed. These files will be created automatically during @@ -10,17 +10,17 @@ Basic build instructions for n2p2 ================================= The n2p2 software package comes with lots of useful tools for creating and -applying neural network potentials (NNPs). In order to use n2p2 together with -LAMMPS only some parts of the n2p2 code need to be compiled. As an example, -everything related to NNP training is not required and would only add unwanted -library dependencies. Hence, the build infrastructure of n2p2 is designed to allow -a separate build of the LAMMPS interface. +applying high-dimensional neural network potentials (HDNNPs). In order to use +n2p2 together with LAMMPS only some parts of the n2p2 code need to be compiled. +As an example, everything related to HDNNP training is not required and would +only add unwanted library dependencies. Hence, the build infrastructure of n2p2 +is designed to allow a separate build of the LAMMPS interface. After downloading n2p2, change to the "src" directory and simply execute make libnnpif -which should create the following files needed by the USER-NNP package: +which should create the following files needed by the USER-HDNNP package: * "n2p2/lib/libnnp.a" * "n2p2/lib/libnnpif.a" @@ -43,7 +43,7 @@ also available (e.g. "makefile.intel") and can be activated by supplying the Please make sure that your compiler settings for n2p2 and LAMMPS are compatible (avoid mixing different compilers). -If you want to build a serial version of LAMMPS with USER-NNP package n2p2 must +If you want to build a serial version of LAMMPS with USER-HDNNP package n2p2 must also be built with MPI disabled. This can be achieved with a preprocessor flag (-DN2P2_NO_MPI) which is (among others) prepared, but commented out, in the provided compiler-specific settings makefiles. For example, if you use the GNU @@ -65,12 +65,12 @@ Installation directory of n2p2 You can install n2p2 either in this folder (1) or somewhere else on your system (2): (1) If n2p2 is installed here, please make sure that the directory is also named - "n2p2", i.e. within "lib/nnp/n2p2" you can see the n2p2 folder structure, in + "n2p2", i.e. within "lib/hdnnp/n2p2" you can see the n2p2 folder structure, in particular "lib" and "include": lib | - nnp + hdnnp | n2p2 | @@ -79,27 +79,27 @@ You can install n2p2 either in this folder (1) or somewhere else on your system include lib src ... In this case LAMMPS will automatically find n2p2 during the build process - and you only need to enable the USER-NNP package via CMake (-D PKG_USER-NNP=yes) - or the traditional makefile approach (make yes-user-nnp). It is also valid to - create a link here named "n2p2" which points to the n2p2 installation - directory. + and you only need to enable the USER-HDNNP package via CMake (-D + PKG_USER-HDNNP=yes) or the traditional makefile approach (make yes-user-hdnnp). + It is also valid to create a link here named "n2p2" which points to the n2p2 + installation directory. (2) If n2p2 is installed somewhere else the path must be given as an additional setting (variable N2P2_DIR) to the build tool. For example, with CMake use - cmake -D PKG_USER-NNP=yes -D N2P2_DIR= ../cmake/ + cmake -D PKG_USER-HDNNP=yes -D N2P2_DIR= ../cmake/ and for the traditional makefiles use - make yes-user-nnp + make yes-user-hdnnp make N2P2_DIR= mpi -Testing a successful build of LAMMPS with USER-NNP -================================================== +Testing a successful build of LAMMPS with USER-HDNNP +==================================================== -An example is provided in the LAMMPS directory "examples/USER/nnp" which runs +An example is provided in the LAMMPS directory "examples/USER/hdnnp" which runs 10 timesteps with 360 water molecules. The neural network potential is defined -via files in the "nnp-data" subdirectory. Use the "in.nnp" LAMMPS script file +via files in the "hdnnp-data" subdirectory. Use the "in.hdnnp" LAMMPS script file to run the simulation. You should see a large output of the n2p2 library when -the pair style "nnp" is initialized, followed by the LAMMPS per-timestep +the pair style "hdnnp" is initialized, followed by the LAMMPS per-timestep output. diff --git a/src/.gitignore b/src/.gitignore index 9e37dc316c..b02a44705c 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -971,6 +971,8 @@ /pair_hbond_dreiding_lj.h /pair_hbond_dreiding_morse.cpp /pair_hbond_dreiding_morse.h +/pair_hdnnp.cpp +/pair_hdnnp.h /pair_ilp_graphene_hbn.cpp /pair_ilp_graphene_hbn.h /pair_kolmogorov_crespi_full.cpp @@ -1079,8 +1081,6 @@ /pair_nm_cut_coul_cut.h /pair_nm_cut_coul_long.cpp /pair_nm_cut_coul_long.h -/pair_nnp.cpp -/pair_nnp.h /pair_oxdna_*.cpp /pair_oxdna_*.h /pair_oxdna2_*.cpp diff --git a/src/Makefile b/src/Makefile index 3afe821db7..7fce8e5354 100644 --- a/src/Makefile +++ b/src/Makefile @@ -52,17 +52,17 @@ PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \ python qeq replica rigid shock snap spin srd voronoi PACKUSER = user-adios user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ - user-diffraction user-dpd user-drude user-eff user-fep user-h5md \ + user-diffraction user-dpd user-drude user-eff user-fep user-h5md user-hdnnp \ user-intel user-lb user-manifold user-meamc user-mesodpd user-mesont \ user-mgpt user-misc user-mofff user-molfile \ - user-netcdf user-nnp user-omp user-phonon user-plumed user-ptm user-qmmm \ + user-netcdf user-omp user-phonon user-plumed user-ptm user-qmmm \ user-qtb user-quip user-reaction user-reaxc user-scafacos user-smd user-smtbq \ user-sdpd user-sph user-tally user-uef user-vtk user-yaff PACKLIB = compress gpu kim kokkos latte message mpiio mscg poems \ python voronoi \ - user-adios user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \ - user-netcdf user-nnp user-plumed user-qmmm user-quip user-scafacos \ + user-adios user-atc user-awpmd user-colvars user-h5md user-hdnnp user-lb user-molfile \ + user-netcdf user-plumed user-qmmm user-quip user-scafacos \ user-smd user-vtk user-mesont PACKSYS = compress mpiio python user-lb @@ -70,7 +70,7 @@ PACKSYS = compress mpiio python user-lb PACKINT = gpu kokkos message poems user-atc user-awpmd user-colvars user-mesont PACKEXT = kim latte mscg voronoi \ - user-adios user-h5md user-molfile user-netcdf user-nnp user-plumed user-qmmm \ + user-adios user-h5md user-hdnnp user-molfile user-netcdf user-plumed user-qmmm \ user-quip user-smd user-vtk PACKALL = $(PACKAGE) $(PACKUSER) diff --git a/src/USER-NNP/Install.sh b/src/USER-HDNNP/Install.sh similarity index 66% rename from src/USER-NNP/Install.sh rename to src/USER-HDNNP/Install.sh index cd60ba1598..8ee16c53ca 100644 --- a/src/USER-NNP/Install.sh +++ b/src/USER-HDNNP/Install.sh @@ -37,17 +37,17 @@ done if (test $1 = 1) then if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]*nnp[^ \t]* //g' ../Makefile.package - sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(nnp_SYSINC) |' ../Makefile.package - sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(nnp_SYSLIB) |' ../Makefile.package - sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(nnp_SYSPATH) |' ../Makefile.package + sed -i -e 's/[^ \t]*hdnnp[^ \t]* //g' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(hdnnp_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(hdnnp_SYSLIB) |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(hdnnp_SYSPATH) |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*nnp.*$/d' ../Makefile.package.settings + sed -i -e '/^include.*hdnnp.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ -include ..\/..\/lib\/nnp\/Makefile.lammps\ +include ..\/..\/lib\/hdnnp\/Makefile.lammps\ ' ../Makefile.package.settings fi @@ -55,11 +55,11 @@ include ..\/..\/lib\/nnp\/Makefile.lammps\ elif (test $1 = 0) then if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]*nnp[^ \t]* //g' ../Makefile.package + sed -i -e 's/[^ \t]*hdnnp[^ \t]* //g' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*nnp.*$/d' ../Makefile.package.settings + sed -i -e '/^include.*hdnnp.*$/d' ../Makefile.package.settings fi fi diff --git a/src/USER-NNP/README b/src/USER-HDNNP/README similarity index 75% rename from src/USER-NNP/README rename to src/USER-HDNNP/README index a8eae3d865..690db8a714 100644 --- a/src/USER-NNP/README +++ b/src/USER-HDNNP/README @@ -1,15 +1,15 @@ -This package implements the "pair_style nnp" command which can be used in a +This package implements the "pair_style hdnnp" command which can be used in a LAMMPS input script. This pair style allows to use pre-trained high-dimensional neural network potentials[1] via an interface to the n2p2 library (https://github.com/CompPhysVienna/n2p2)[2]. -Please see the main documentation for the "pair_style nnp" command for further +Please see the main documentation for the "pair_style hdnnp" command for further details on how the pair style is used. An example is provided in the -"examples/USER/nnp" directory of LAMMPS. +"examples/USER/hdnnp" directory of LAMMPS. -The USER-NNP package requires the external library n2p2 which must be +The USER-HDNNP package requires the external library n2p2 which must be downloaded and compiled before starting the build process of LAMMPS. A -guideline on how to build n2p2 is presented in "lib/nnp/README". This package +guideline on how to build n2p2 is presented in "lib/hdnnp/README". This package supports the LAMMPS build process via CMake and traditional makefiles, please see the LAMMPS manual section on building with external libraries for more details. diff --git a/src/USER-NNP/pair_nnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp similarity index 94% rename from src/USER-NNP/pair_nnp.cpp rename to src/USER-HDNNP/pair_hdnnp.cpp index b2dae5a969..213574327c 100644 --- a/src/USER-NNP/pair_nnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -18,7 +18,7 @@ Contributing author: Andreas Singraber ------------------------------------------------------------------------- */ -#include "pair_nnp.h" +#include "pair_hdnnp.h" #include #include "atom.h" #include "citeme.h" @@ -34,8 +34,8 @@ using namespace LAMMPS_NS; -static const char cite_user_nnp_package[] = - "USER-NNP package:\n\n" +static const char cite_user_hdnnp_package[] = + "USER-HDNNP package:\n\n" "@Article{Singraber19,\n" " author = {Singraber, Andreas and Behler, J{\"o}rg and Dellago, Christoph},\n" " title = {Library-{{Based LAMMPS Implementation}} of {{High}}-{{Dimensional Neural Network Potentials}}},\n" @@ -50,23 +50,23 @@ static const char cite_user_nnp_package[] = /* ---------------------------------------------------------------------- */ -PairNNP::PairNNP(LAMMPS *lmp) : Pair(lmp) +PairHDNNP::PairHDNNP(LAMMPS *lmp) : Pair(lmp) { - if (lmp->citeme) lmp->citeme->add(cite_user_nnp_package); + if (lmp->citeme) lmp->citeme->add(cite_user_hdnnp_package); interface = new nnp::InterfaceLammps(); } /* ---------------------------------------------------------------------- */ -PairNNP::~PairNNP() +PairHDNNP::~PairHDNNP() { delete interface; } /* ---------------------------------------------------------------------- */ -void PairNNP::compute(int eflag, int vflag) +void PairHDNNP::compute(int eflag, int vflag) { if(eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; @@ -78,7 +78,7 @@ void PairNNP::compute(int eflag, int vflag) // (tagint = int64_t) interface->setLocalTags(atom->tag); - // Transfer local neighbor list to NNP interface. + // Transfer local neighbor list to n2p2 interface. transferNeighborList(); // Compute symmetry functions, atomic neural networks and add up energy. @@ -109,7 +109,7 @@ void PairNNP::compute(int eflag, int vflag) global settings ------------------------------------------------------------------------- */ -void PairNNP::settings(int narg, char **arg) +void PairHDNNP::settings(int narg, char **arg) { single_enable = 0; // 1 if single() routine exists single_hessian_enable = 0; // 1 if single_hessian() routine exists @@ -128,9 +128,9 @@ void PairNNP::settings(int narg, char **arg) if (narg == 0) error->all(FLERR,"Illegal pair_style command"); // default settings - int len = strlen("nnp/") + 1; + int len = strlen("hdnnp/") + 1; directory = new char[len]; - strcpy(directory,"nnp/"); + strcpy(directory,"hdnnp/"); showew = true; showewsum = 0; maxew = 0; @@ -144,7 +144,7 @@ void PairNNP::settings(int narg, char **arg) numExtrapolationWarningsSummary = 0; while(iarg < narg) { - // set NNP directory + // set HDNNP directory if (strcmp(arg[iarg],"dir") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style command"); @@ -216,7 +216,7 @@ void PairNNP::settings(int narg, char **arg) set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairNNP::coeff(int narg, char **arg) +void PairHDNNP::coeff(int narg, char **arg) { if (!allocated) allocate(); @@ -244,14 +244,14 @@ void PairNNP::coeff(int narg, char **arg) init specific to this pair style ------------------------------------------------------------------------- */ -void PairNNP::init_style() +void PairHDNNP::init_style() { int irequest = neighbor->request((void *) this); neighbor->requests[irequest]->pair = 1; neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; - // Return immediately if NNP setup is already completed. + // Return immediately if HDNNP setup is already completed. if (interface->isInitialized()) return; // Activate screen and logfile output only for rank 0. @@ -285,7 +285,7 @@ void PairNNP::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairNNP::init_one(int i, int j) +double PairHDNNP::init_one(int i, int j) { return maxCutoffRadius; } @@ -294,7 +294,7 @@ double PairNNP::init_one(int i, int j) allocate all arrays ------------------------------------------------------------------------- */ -void PairNNP::allocate() +void PairHDNNP::allocate() { allocated = 1; int n = atom->ntypes; @@ -307,9 +307,9 @@ void PairNNP::allocate() memory->create(cutsq,n+1,n+1,"pair:cutsq"); } -void PairNNP::transferNeighborList() +void PairHDNNP::transferNeighborList() { - // Transfer neighbor list to NNP. + // Transfer neighbor list to n2p2. double rc2 = maxCutoffRadius * maxCutoffRadius; for (int ii = 0; ii < list->inum; ++ii) { int i = list->ilist[ii]; @@ -327,7 +327,7 @@ void PairNNP::transferNeighborList() } } -void PairNNP::handleExtrapolationWarnings() +void PairHDNNP::handleExtrapolationWarnings() { // Get number of extrapolation warnings for local atoms. long numCurrentEW = (long)interface->getNumExtrapolationWarnings(); diff --git a/src/USER-NNP/pair_nnp.h b/src/USER-HDNNP/pair_hdnnp.h similarity index 91% rename from src/USER-NNP/pair_nnp.h rename to src/USER-HDNNP/pair_hdnnp.h index 8a41d1a5d6..a3488bbad4 100644 --- a/src/USER-NNP/pair_nnp.h +++ b/src/USER-HDNNP/pair_hdnnp.h @@ -20,12 +20,12 @@ #ifdef PAIR_CLASS -PairStyle(nnp,PairNNP) +PairStyle(hdnnp,PairHDNNP) #else -#ifndef LMP_PAIR_NNP_H -#define LMP_PAIR_NNP_H +#ifndef LMP_PAIR_HDNNP_H +#define LMP_PAIR_HDNNP_H #include "pair.h" @@ -35,12 +35,12 @@ namespace nnp { namespace LAMMPS_NS { -class PairNNP : public Pair { +class PairHDNNP : public Pair { public: - PairNNP(class LAMMPS *); - virtual ~PairNNP(); + PairHDNNP(class LAMMPS *); + virtual ~PairHDNNP(); virtual void compute(int, int); virtual void settings(int, char **); virtual void coeff(int, char **); From 8e4a2e4c7bbc23b74be0c13339bcc768fc94007f Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Thu, 1 Apr 2021 00:41:27 +0200 Subject: [PATCH 12/46] Renamed a missing cmake file, NNP => HDNNP --- cmake/Modules/Packages/{USER-NNP.cmake => USER-HDNNP.cmake} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cmake/Modules/Packages/{USER-NNP.cmake => USER-HDNNP.cmake} (100%) diff --git a/cmake/Modules/Packages/USER-NNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake similarity index 100% rename from cmake/Modules/Packages/USER-NNP.cmake rename to cmake/Modules/Packages/USER-HDNNP.cmake From f0e3786ded9641ca0a911e374cae587a5de8a06e Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Sun, 4 Apr 2021 22:48:25 +0200 Subject: [PATCH 13/46] Minor changes to conform with coding standards --- src/USER-HDNNP/pair_hdnnp.cpp | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/USER-HDNNP/pair_hdnnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp index 213574327c..c7318ec0b5 100644 --- a/src/USER-HDNNP/pair_hdnnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -19,7 +19,7 @@ ------------------------------------------------------------------------- */ #include "pair_hdnnp.h" -#include + #include "atom.h" #include "citeme.h" #include "comm.h" @@ -29,7 +29,7 @@ #include "neigh_list.h" #include "neigh_request.h" #include "update.h" -#include "utils.h" + #include "InterfaceLammps.h" // n2p2 interface header using namespace LAMMPS_NS; @@ -54,6 +54,13 @@ PairHDNNP::PairHDNNP(LAMMPS *lmp) : Pair(lmp) { if (lmp->citeme) lmp->citeme->add(cite_user_hdnnp_package); + single_enable = 0; // 1 if single() routine exists + restartinfo = 0; // 1 if pair style writes restart info + one_coeff = 1; // 1 if allows only one coeff * * call + manybody_flag = 1; // 1 if a manybody potential + unit_convert_flag = 0; // TODO: Check possible values. value != 0 indicates support for unit conversion. + reinitflag = 0; // 1 if compatible with fix adapt and alike + interface = new nnp::InterfaceLammps(); } @@ -68,8 +75,7 @@ PairHDNNP::~PairHDNNP() void PairHDNNP::compute(int eflag, int vflag) { - if(eflag || vflag) ev_setup(eflag,vflag); - else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; + ev_init(eflag,vflag); // Set number of local atoms and add element. interface->setLocalAtoms(atom->nlocal,atom->type); @@ -111,35 +117,19 @@ void PairHDNNP::compute(int eflag, int vflag) void PairHDNNP::settings(int narg, char **arg) { - single_enable = 0; // 1 if single() routine exists - single_hessian_enable = 0; // 1 if single_hessian() routine exists - restartinfo = 0; // 1 if pair style writes restart info - respa_enable = 0; // 1 if inner/middle/outer rRESPA routines - one_coeff = 1; // 1 if allows only one coeff * * call - manybody_flag = 1; // 1 if a manybody potential - unit_convert_flag = 0; // value != 0 indicates support for unit conversion. - no_virial_fdotr_compute = 0; // 1 if does not invoke virial_fdotr_compute() - writedata = 0; // 1 if writes coeffs to data file - ghostneigh = 0; // 1 if pair style needs neighbors of ghosts - reinitflag = 0; // 1 if compatible with fix adapt and alike - int iarg = 0; if (narg == 0) error->all(FLERR,"Illegal pair_style command"); // default settings - int len = strlen("hdnnp/") + 1; - directory = new char[len]; - strcpy(directory,"hdnnp/"); + directory = utils::strdup("hdnnp/"); showew = true; showewsum = 0; maxew = 0; resetew = false; cflength = 1.0; cfenergy = 1.0; - len = strlen("") + 1; - emap = new char[len]; - strcpy(emap,""); + emap = utils::strdup(""); numExtrapolationWarningsTotal = 0; numExtrapolationWarningsSummary = 0; From ee240f93d935a087ef9313ea87143b6fdc2a482b Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Thu, 8 Apr 2021 23:54:26 +0200 Subject: [PATCH 14/46] Rearranged cutoff and element map user input Cutoff radius is now mandatory argument of pair_style. "emap" keyword is removed and replaced by additional pair_coeff arguments (similar to pair_airebo.cpp). Changes in docs are still missing. --- examples/USER/hdnnp/in.hdnnp | 4 +-- src/USER-HDNNP/pair_hdnnp.cpp | 59 ++++++++++++++++++----------------- src/USER-HDNNP/pair_hdnnp.h | 2 +- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/examples/USER/hdnnp/in.hdnnp b/examples/USER/hdnnp/in.hdnnp index 112fb24515..79edc605be 100644 --- a/examples/USER/hdnnp/in.hdnnp +++ b/examples/USER/hdnnp/in.hdnnp @@ -28,8 +28,8 @@ thermo 1 ############################################################################### # HDNNP ############################################################################### -pair_style hdnnp dir ${hdnnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" -pair_coeff * * ${hdnnpCutoff} +pair_style hdnnp ${hdnnpCutoff} dir ${hdnnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254 +pair_coeff * * H O ############################################################################### # INTEGRATOR diff --git a/src/USER-HDNNP/pair_hdnnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp index c7318ec0b5..598189b1f1 100644 --- a/src/USER-HDNNP/pair_hdnnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -119,7 +119,10 @@ void PairHDNNP::settings(int narg, char **arg) { int iarg = 0; - if (narg == 0) error->all(FLERR,"Illegal pair_style command"); + if (narg < 1) error->all(FLERR,"Illegal pair_style command"); + + maxCutoffRadius = utils::numeric(FLERR,arg[0],false,lmp); + iarg++; // default settings directory = utils::strdup("hdnnp/"); @@ -129,7 +132,6 @@ void PairHDNNP::settings(int narg, char **arg) resetew = false; cflength = 1.0; cfenergy = 1.0; - emap = utils::strdup(""); numExtrapolationWarningsTotal = 0; numExtrapolationWarningsSummary = 0; @@ -139,18 +141,7 @@ void PairHDNNP::settings(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style command"); delete[] directory; - len = strlen(arg[iarg+1]) + 2; - directory = new char[len]; - sprintf(directory, "%s/", arg[iarg+1]); - iarg += 2; - // element mapping - } else if (strcmp(arg[iarg],"emap") == 0) { - if (iarg+2 > narg) - error->all(FLERR,"Illegal pair_style command"); - delete[] emap; - len = strlen(arg[iarg+1]) + 1; - emap = new char[len]; - sprintf(emap, "%s", arg[iarg+1]); + directory = utils::strdup(arg[iarg+1]); iarg += 2; // show extrapolation warnings } else if (strcmp(arg[iarg],"showew") == 0) { @@ -208,26 +199,39 @@ void PairHDNNP::settings(int narg, char **arg) void PairHDNNP::coeff(int narg, char **arg) { + int n = atom->ntypes; + if (!allocated) allocate(); - if (narg != 3) error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg != 2 + n) + error->all(FLERR,"Incorrect args for pair coefficients"); - int ilo,ihi,jlo,jhi; - utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error); - utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error); + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); - maxCutoffRadius = utils::numeric(FLERR,arg[2],false,lmp); + int *map = new int[n+1]; + for (int i = 0; i < n; i++) map[i] = 0; - // TODO: Check how this flag is set. - int count = 0; - for(int i=ilo; i<=ihi; i++) { - for(int j=MAX(jlo,i); j<=jhi; j++) { - setflag[i][j] = 1; - count++; + emap = ""; + for (int i = 2; i < narg; i++) { + if (strcmp(arg[i],"NULL") != 0) { + if (i != 2) emap += ","; + emap += std::to_string(i-1) + ":" + arg[i]; + map[i-1] = 1; } } + int count = 0; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] > 0 && map[j] > 0) { + setflag[i][j] = 1; + count++; + } + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + + delete[] map; } /* ---------------------------------------------------------------------- @@ -237,7 +241,6 @@ void PairHDNNP::coeff(int narg, char **arg) void PairHDNNP::init_style() { int irequest = neighbor->request((void *) this); - neighbor->requests[irequest]->pair = 1; neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; @@ -254,7 +257,7 @@ void PairHDNNP::init_style() // Initialize interface on all processors. interface->initialize(directory, - emap, + emap.c_str(), showew, resetew, showewsum, @@ -294,7 +297,7 @@ void PairHDNNP::allocate() for (int j = i; j <= n; j++) setflag[i][j] = 0; - memory->create(cutsq,n+1,n+1,"pair:cutsq"); + memory->create(cutsq,n+1,n+1,"pair:cutsq"); // TODO: Is this required? } void PairHDNNP::transferNeighborList() diff --git a/src/USER-HDNNP/pair_hdnnp.h b/src/USER-HDNNP/pair_hdnnp.h index a3488bbad4..913da97933 100644 --- a/src/USER-HDNNP/pair_hdnnp.h +++ b/src/USER-HDNNP/pair_hdnnp.h @@ -63,7 +63,7 @@ class PairHDNNP : public Pair { double cfenergy; double maxCutoffRadius; char *directory; - char *emap; + std::string emap; nnp::InterfaceLammps *interface; }; From 90d3b65691dc10c213dbbb5c136352b5ebe930e4 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Tue, 20 Apr 2021 22:55:26 +0200 Subject: [PATCH 15/46] Minor changes for CMake build tested --- cmake/Modules/FindN2P2.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake index cae5de5342..95413edfb1 100644 --- a/cmake/Modules/FindN2P2.cmake +++ b/cmake/Modules/FindN2P2.cmake @@ -12,10 +12,10 @@ else() endif() # Set path to include directory. -find_path(N2P2_INCLUDE_DIR InterfaceLammps.h PATHS "${N2P2_DIR}/include") +find_path(N2P2_INCLUDE_DIR InterfaceLammps.h HINTS "${N2P2_DIR}/include") # Two libraries need to be linked: libnnp and libnnpif. -find_library(N2P2_LIBNNP NAMES nnp PATHS "${N2P2_DIR}/lib") -find_library(N2P2_LIBNNPIF NAMES nnpif PATHS "${N2P2_DIR}/lib") +find_library(N2P2_LIBNNP NAMES nnp HINTS "${N2P2_DIR}/lib") +find_library(N2P2_LIBNNPIF NAMES nnpif HINTS "${N2P2_DIR}/lib") # Users could compile n2p2 with extra flags which are then also required for # pair_hdnnp.cpp compilation. To forward them to the LAMMPS build process n2p2 # writes a file with cmake commands, e.g. @@ -23,7 +23,7 @@ find_library(N2P2_LIBNNPIF NAMES nnpif PATHS "${N2P2_DIR}/lib") # target_compile_definitions(lammps PRIVATE -DN2P2_NO_SF_GROUPS) # # to "lib/lammps-extra.cmake" which is then included by USER-HDNNP.cmake. -find_file(N2P2_CMAKE_EXTRA NAMES lammps-extra.cmake PATHS "${N2P2_DIR}/lib") +find_file(N2P2_CMAKE_EXTRA NAMES lammps-extra.cmake HINTS "${N2P2_DIR}/lib") find_package_handle_standard_args(N2P2 DEFAULT_MSG N2P2_DIR From 6a1a58d7271aacd2013533733ed17816eee430e7 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Fri, 23 Apr 2021 17:56:35 +0200 Subject: [PATCH 16/46] Added CMake imported target N2P2::N2P2 --- cmake/Modules/FindN2P2.cmake | 15 +++++++-- cmake/Modules/Packages/USER-HDNNP.cmake | 42 +++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake index 95413edfb1..6bf4da5a79 100644 --- a/cmake/Modules/FindN2P2.cmake +++ b/cmake/Modules/FindN2P2.cmake @@ -33,8 +33,19 @@ find_package_handle_standard_args(N2P2 DEFAULT_MSG N2P2_CMAKE_EXTRA) if(N2P2_FOUND) - set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) - set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) + add_library(N2P2::LIBNNP UNKNOWN IMPORTED) + set_target_properties(N2P2::LIBNNP PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} + IMPORTED_LOCATION ${N2P2_LIBNNP}) + add_library(N2P2::LIBNNPIF UNKNOWN IMPORTED) + set_target_properties(N2P2::LIBNNPIF PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} + IMPORTED_LOCATION ${N2P2_LIBNNPIF}) + add_library(N2P2::N2P2 INTERFACE IMPORTED) + set_property(TARGET N2P2::N2P2 PROPERTY + INTERFACE_LINK_LIBRARIES N2P2::LIBNNPIF N2P2::LIBNNP) + #set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) + #set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) set(N2P2_CMAKE_EXTRAS ${N2P2_CMAKE_EXTRA}) mark_as_advanced( diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 2ebc1f6e36..2d5fb406be 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -1,4 +1,42 @@ find_package(N2P2 REQUIRED) -target_include_directories(lammps PRIVATE ${N2P2_INCLUDE_DIRS}) -target_link_libraries(lammps PRIVATE ${N2P2_LIBRARIES}) +#target_include_directories(lammps PRIVATE ${N2P2_INCLUDE_DIRS}) +#target_link_libraries(lammps PRIVATE ${N2P2_LIBRARIES}) +target_link_libraries(lammps PRIVATE N2P2::N2P2) include(${N2P2_CMAKE_EXTRAS}) + +#find_package(N2P2 QUIET) +#if(N2P2_FOUND) +# set(DOWNLOAD_N2P2_DEFAULT OFF) +#else() +# set(DOWNLOAD_N2P2_DEFAULT ON) +#endif() +#option(DOWNLOAD_N2P2 "Download n2p2 library instead of using an already installed one)" ${DOWNLOAD_N2P2_DEFAULT}) +#if(DOWNLOAD_N2P2) +# set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.2.tar.gz" CACHE STRING "URL for n2p2 tarball") +# set(N2P2_MD5 "20cf194d14b1f1c72f38879bafda67e2" CACHE STRING "MD5 checksum of N2P2 tarball") +# mark_as_advanced(N2P2_URL) +# mark_as_advanced(N2P2_MD5) +# +# include(ExternalProject) +# ExternalProject_Add(n2p2_build +# URL ${N2P2_URL} +# URL_MD5 ${N2P2_MD5} +# SOURCE_SUBDIR src/ +# BUILD_COMMAND make libnnpif +# INSTALL_COMMAND "" +# BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a +# ) +# ExternalProject_get_property(n2p2_build INSTALL_DIR) +# add_library(LAMMPS::N2P2 UNKNOWN IMPORTED) +# set_target_properties(LAMMPS::N2P2 PROPERTIES +# IMPORTED_LOCATION "${INSTALL_DIR}/lib/libnnp.a" +# INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include") +# target_link_libraries(lammps PRIVATE LAMMPS::N2P2) +# add_dependencies(LAMMPS::N2P2 n2p2_build) +#else() +# find_package(N2P2) +# if(NOT N2P2_FOUND) +# message(FATAL_ERROR "n2p2 not found, help CMake to find it by setting N2P2_DIR, or set DOWNLOAD_N2P2=ON to download it") +# endif() +# target_link_libraries(lammps PRIVATE N2P2::N2P2) +#endif() From 07d4b09eb6661e2326b8a4cf949a2d20f8766c41 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Mon, 26 Apr 2021 00:03:07 +0200 Subject: [PATCH 17/46] Updated CMake files, auto-download not yet working --- cmake/Modules/FindN2P2.cmake | 46 +++++++------- cmake/Modules/Packages/USER-HDNNP.cmake | 81 ++++++++++++------------- 2 files changed, 64 insertions(+), 63 deletions(-) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake index 6bf4da5a79..975f424a39 100644 --- a/cmake/Modules/FindN2P2.cmake +++ b/cmake/Modules/FindN2P2.cmake @@ -33,26 +33,28 @@ find_package_handle_standard_args(N2P2 DEFAULT_MSG N2P2_CMAKE_EXTRA) if(N2P2_FOUND) - add_library(N2P2::LIBNNP UNKNOWN IMPORTED) - set_target_properties(N2P2::LIBNNP PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} - IMPORTED_LOCATION ${N2P2_LIBNNP}) - add_library(N2P2::LIBNNPIF UNKNOWN IMPORTED) - set_target_properties(N2P2::LIBNNPIF PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} - IMPORTED_LOCATION ${N2P2_LIBNNPIF}) - add_library(N2P2::N2P2 INTERFACE IMPORTED) - set_property(TARGET N2P2::N2P2 PROPERTY - INTERFACE_LINK_LIBRARIES N2P2::LIBNNPIF N2P2::LIBNNP) - #set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) - #set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) - set(N2P2_CMAKE_EXTRAS ${N2P2_CMAKE_EXTRA}) - - mark_as_advanced( - N2P2_DIR - N2P2_INCLUDE_DIR - N2P2_LIBNNP - N2P2_LIBNNPIF - N2P2_CMAKE_EXTRA - ) + if (NOT TARGET N2P2::N2P2) + add_library(N2P2::LIBNNP UNKNOWN IMPORTED) + set_target_properties(N2P2::LIBNNP PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} + IMPORTED_LOCATION ${N2P2_LIBNNP}) + add_library(N2P2::LIBNNPIF UNKNOWN IMPORTED) + set_target_properties(N2P2::LIBNNPIF PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} + IMPORTED_LOCATION ${N2P2_LIBNNPIF}) + add_library(N2P2::N2P2 INTERFACE IMPORTED) + set_property(TARGET N2P2::N2P2 PROPERTY + INTERFACE_LINK_LIBRARIES N2P2::LIBNNPIF N2P2::LIBNNP) + #set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) + #set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) + set(N2P2_CMAKE_EXTRAS ${N2P2_CMAKE_EXTRA}) + endif() endif() + +mark_as_advanced( + N2P2_DIR + N2P2_INCLUDE_DIR + N2P2_LIBNNP + N2P2_LIBNNPIF + N2P2_CMAKE_EXTRA +) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 2d5fb406be..2517e3304d 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -1,42 +1,41 @@ -find_package(N2P2 REQUIRED) -#target_include_directories(lammps PRIVATE ${N2P2_INCLUDE_DIRS}) -#target_link_libraries(lammps PRIVATE ${N2P2_LIBRARIES}) -target_link_libraries(lammps PRIVATE N2P2::N2P2) -include(${N2P2_CMAKE_EXTRAS}) +find_package(N2P2 QUIET) +if(N2P2_FOUND) + set(DOWNLOAD_N2P2_DEFAULT OFF) +else() + set(DOWNLOAD_N2P2_DEFAULT ON) +endif() +option(DOWNLOAD_N2P2 "Download n2p2 library instead of using an already installed one)" ${DOWNLOAD_N2P2_DEFAULT}) +if(DOWNLOAD_N2P2) + set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.2.tar.gz" CACHE STRING "URL for n2p2 tarball") + set(N2P2_MD5 "20cf194d14b1f1c72f38879bafda67e2" CACHE STRING "MD5 checksum of N2P2 tarball") + mark_as_advanced(N2P2_URL) + mark_as_advanced(N2P2_MD5) -#find_package(N2P2 QUIET) -#if(N2P2_FOUND) -# set(DOWNLOAD_N2P2_DEFAULT OFF) -#else() -# set(DOWNLOAD_N2P2_DEFAULT ON) -#endif() -#option(DOWNLOAD_N2P2 "Download n2p2 library instead of using an already installed one)" ${DOWNLOAD_N2P2_DEFAULT}) -#if(DOWNLOAD_N2P2) -# set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.2.tar.gz" CACHE STRING "URL for n2p2 tarball") -# set(N2P2_MD5 "20cf194d14b1f1c72f38879bafda67e2" CACHE STRING "MD5 checksum of N2P2 tarball") -# mark_as_advanced(N2P2_URL) -# mark_as_advanced(N2P2_MD5) -# -# include(ExternalProject) -# ExternalProject_Add(n2p2_build -# URL ${N2P2_URL} -# URL_MD5 ${N2P2_MD5} -# SOURCE_SUBDIR src/ -# BUILD_COMMAND make libnnpif -# INSTALL_COMMAND "" -# BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a -# ) -# ExternalProject_get_property(n2p2_build INSTALL_DIR) -# add_library(LAMMPS::N2P2 UNKNOWN IMPORTED) -# set_target_properties(LAMMPS::N2P2 PROPERTIES -# IMPORTED_LOCATION "${INSTALL_DIR}/lib/libnnp.a" -# INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include") -# target_link_libraries(lammps PRIVATE LAMMPS::N2P2) -# add_dependencies(LAMMPS::N2P2 n2p2_build) -#else() -# find_package(N2P2) -# if(NOT N2P2_FOUND) -# message(FATAL_ERROR "n2p2 not found, help CMake to find it by setting N2P2_DIR, or set DOWNLOAD_N2P2=ON to download it") -# endif() -# target_link_libraries(lammps PRIVATE N2P2::N2P2) -#endif() + include(ExternalProject) + ExternalProject_Add(n2p2_build + DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} + URL ${N2P2_URL} + URL_MD5 ${N2P2_MD5} + UPDATE_COMMAND "" + SOURCE_SUBDIR src/ + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND "make libnnpif" + INSTALL_COMMAND "" + #BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a + ) + ExternalProject_get_property(n2p2_build INSTALL_DIR) + add_library(LAMMPS::N2P2 STATIC IMPORTED GLOBAL) + set_target_properties(LAMMPS::N2P2 PROPERTIES + IMPORTED_LOCATION "${INSTALL_DIR}/lib/libnnp.a" + INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include") + target_link_libraries(lammps PRIVATE LAMMPS::N2P2) + add_dependencies(LAMMPS::N2P2 n2p2_build) +else() + find_package(N2P2) + if(NOT N2P2_FOUND) + message(FATAL_ERROR "n2p2 not found, help CMake to find it by setting N2P2_DIR, or set DOWNLOAD_N2P2=ON to download it") + endif() + target_link_libraries(lammps PRIVATE N2P2::N2P2) + include(${N2P2_CMAKE_EXTRAS}) +endif() From ad843f977f3a80a8901f1466d37b226608d8f6ac Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Mon, 26 Apr 2021 23:46:27 +0200 Subject: [PATCH 18/46] Auto-download works now for CMake build. --- cmake/Modules/FindN2P2.cmake | 5 ++-- cmake/Modules/Packages/USER-HDNNP.cmake | 32 ++++++++++++++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/cmake/Modules/FindN2P2.cmake b/cmake/Modules/FindN2P2.cmake index 975f424a39..8a97b7dd81 100644 --- a/cmake/Modules/FindN2P2.cmake +++ b/cmake/Modules/FindN2P2.cmake @@ -34,19 +34,20 @@ find_package_handle_standard_args(N2P2 DEFAULT_MSG if(N2P2_FOUND) if (NOT TARGET N2P2::N2P2) + # n2p2 core library "libnnp" add_library(N2P2::LIBNNP UNKNOWN IMPORTED) set_target_properties(N2P2::LIBNNP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} IMPORTED_LOCATION ${N2P2_LIBNNP}) + # n2p2 interface library "libnnpif" add_library(N2P2::LIBNNPIF UNKNOWN IMPORTED) set_target_properties(N2P2::LIBNNPIF PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${N2P2_INCLUDE_DIR} IMPORTED_LOCATION ${N2P2_LIBNNPIF}) + # Put libnnp, libnnpif and include directory together. add_library(N2P2::N2P2 INTERFACE IMPORTED) set_property(TARGET N2P2::N2P2 PROPERTY INTERFACE_LINK_LIBRARIES N2P2::LIBNNPIF N2P2::LIBNNP) - #set(N2P2_INCLUDE_DIRS ${N2P2_INCLUDE_DIR}) - #set(N2P2_LIBRARIES ${N2P2_LIBNNPIF} ${N2P2_LIBNNP}) set(N2P2_CMAKE_EXTRAS ${N2P2_CMAKE_EXTRA}) endif() endif() diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 2517e3304d..1829585ea4 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -6,31 +6,45 @@ else() endif() option(DOWNLOAD_N2P2 "Download n2p2 library instead of using an already installed one)" ${DOWNLOAD_N2P2_DEFAULT}) if(DOWNLOAD_N2P2) - set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.2.tar.gz" CACHE STRING "URL for n2p2 tarball") - set(N2P2_MD5 "20cf194d14b1f1c72f38879bafda67e2" CACHE STRING "MD5 checksum of N2P2 tarball") + set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.3.tar.gz" CACHE STRING "URL for n2p2 tarball") + set(N2P2_MD5 "5cd30194701db198e4a72ee94fa6e0db" CACHE STRING "MD5 checksum of N2P2 tarball") mark_as_advanced(N2P2_URL) mark_as_advanced(N2P2_MD5) include(ExternalProject) ExternalProject_Add(n2p2_build - DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} URL ${N2P2_URL} URL_MD5 ${N2P2_MD5} UPDATE_COMMAND "" SOURCE_SUBDIR src/ BUILD_IN_SOURCE 1 CONFIGURE_COMMAND "" - BUILD_COMMAND "make libnnpif" + BUILD_COMMAND make libnnpif INSTALL_COMMAND "" #BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a ) - ExternalProject_get_property(n2p2_build INSTALL_DIR) - add_library(LAMMPS::N2P2 STATIC IMPORTED GLOBAL) - set_target_properties(LAMMPS::N2P2 PROPERTIES - IMPORTED_LOCATION "${INSTALL_DIR}/lib/libnnp.a" - INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include") + ExternalProject_get_property(n2p2_build SOURCE_DIR) + # n2p2 core library "libnnp" + add_library(LAMMPS::N2P2::LIBNNP UNKNOWN IMPORTED) + set_target_properties(LAMMPS::N2P2::LIBNNP PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/lib/libnnp.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include") + # n2p2 interface library "libnnpif" + add_library(LAMMPS::N2P2::LIBNNPIF UNKNOWN IMPORTED) + set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/lib/libnnpif.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include") + # Put libnnp, libnnpif and include directory together. + add_library(LAMMPS::N2P2 INTERFACE IMPORTED) + set_property(TARGET LAMMPS::N2P2 PROPERTY + INTERFACE_LINK_LIBRARIES LAMMPS::N2P2::LIBNNPIF LAMMPS::N2P2::LIBNNP) target_link_libraries(lammps PRIVATE LAMMPS::N2P2) + add_dependencies(LAMMPS::N2P2 n2p2_build) + file(MAKE_DIRECTORY "${SOURCE_DIR}/include") + file(MAKE_DIRECTORY "${SOURCE_DIR}/lib") + file(TOUCH "${SOURCE_DIR}/lib/lammps-extra.cmake") + include("${SOURCE_DIR}/lib/lammps-extra.cmake") else() find_package(N2P2) if(NOT N2P2_FOUND) From f61b02eebfb9139edd46e0e66141978fc7719a8c Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Thu, 29 Apr 2021 23:40:53 +0200 Subject: [PATCH 19/46] Untested Install.py for traditional make process --- lib/hdnnp/Install.py | 117 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 lib/hdnnp/Install.py diff --git a/lib/hdnnp/Install.py b/lib/hdnnp/Install.py new file mode 100644 index 0000000000..a9cd1a52ac --- /dev/null +++ b/lib/hdnnp/Install.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python + +""" +Install.py tool to download, unpack, build, and link to the n2p2 library +used to automate the steps described in the README file in this dir +""" + +from __future__ import print_function +import sys, os, platform, subprocess, shutil +from argparse import ArgumentParser + +sys.path.append('..') +from install_helpers import get_cpus, fullpath, geturl, checkmd5sum + +parser = ArgumentParser(prog='Install.py', + description="LAMMPS library build wrapper script") + +# settings + +version = "2.1.3" + +# help message + +HELP = """ +Syntax from src dir: make lib-hdnnp args="-b" + or: make lib-hdnnp args="-b -v 2.1.3" + or: make lib-hdnnp args="-p /usr/local/n2p2" + +Syntax from lib dir: python Install.py -b -v 2.1.3 + or: python Install.py -b + or: python Install.py -p /usr/local/n2p2 + +Example: + +make lib-hdnnp args="-b" # download/build in lib/hdnnp/n2p2 +make lib-hdnnp args="-p $HOME/n2p2" # use existing n2p2 installation in $HOME/n2p2 +""" + +# known checksums for different n2p2 versions. used to validate the download. +checksums = { \ + '2.1.3' : '5cd30194701db198e4a72ee94fa6e0db', \ + } + +# parse and process arguments + +pgroup = parser.add_mutually_exclusive_group() +pgroup.add_argument("-b", "--build", action="store_true", + help="download and build the n2p2 library") +pgroup.add_argument("-p", "--path", + help="specify folder of existing n2p2 installation") +parser.add_argument("-v", "--version", default=version, choices=checksums.keys(), + help="set version of n2p2 to download and build (default: %s)" % version) + +args = parser.parse_args() + +# print help message and exit, if neither build nor path options are given +if not args.build and not args.path: + parser.print_help() + sys.exit(HELP) + +buildflag = args.build +pathflag = args.path is not None +n2p2path = args.path +mode = args.mode + +homepath = fullpath('.') +homedir = "%s/n2p2" % (homepath) + +if pathflag: + if not os.path.isdir(n2p2path): + sys.exit("n2p2 path %s does not exist" % n2p2path) + homedir = fullpath(n2p2path) + if not os.path.isfile(os.path.join(homedir, 'include', 'InterfaceLammps.h')): + sys.exit("No n2p2 installation found at %s" % n2p2path) + +# download and unpack n2p2 tarball + +if buildflag: + url = "https://github.com/CompPhysVienna/n2p2/archive/v%s.tar.gz" % (version) + filename = "n2p2-%s.tar.gz" %version + print("Downloading n2p2 ...") + geturl(url, filename) + + # verify downloaded archive integrity via md5 checksum, if known. + if version in checksums: + if not checkmd5sum(checksums[version], filename): + sys.exit("Checksum for n2p2 library does not match") + + print("Unpacking n2p2 source tarball ...") + if os.path.exists("%s/n2p2-%s" % (homepath, version)): + shutil.rmtree("%s/n2p2-%s" % (homepath, version)) + if os.path.exists(homedir): + shutil.rmtree(homedir) + cmd = 'cd "%s"; tar -xzvf %s' % (homepath, filename) + subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + os.remove(os.path.join(homepath, filename)) + + # build n2p2 + print("Building n2p2 ...") + n_cpus = get_cpus() + cmd = 'cd %s/n2p2-%s/src; make -j%d libnnpif' % (homepath, version, n_cpus) + try: + txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + print(txt.decode('UTF-8')) + except subprocess.CalledProcessError as e: + print("Make failed with:\n %s" % e.output.decode('UTF-8')) + sys.exit(1) + +# create 2 links in lib/hdnnp to n2p2 installation dir + +print("Creating links to n2p2 include and lib files") +if os.path.isfile("includelink") or os.path.islink("includelink"): + os.remove("includelink") +if os.path.isfile("liblink") or os.path.islink("liblink"): + os.remove("liblink") +os.symlink(os.path.join(homedir, 'src'), 'includelink') +os.symlink(os.path.join(homedir, 'src'), 'liblink') From 2013c478edcb7c1dde37ace440d5cf6ba362e462 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Wed, 12 May 2021 00:06:31 +0200 Subject: [PATCH 20/46] Traditional make process auto-download works Implemented via Install.py script --- lib/hdnnp/Install.py | 21 +++++++++++++-------- lib/hdnnp/Makefile.lammps | 24 ------------------------ src/USER-HDNNP/Install.sh | 5 +++-- 3 files changed, 16 insertions(+), 34 deletions(-) delete mode 100644 lib/hdnnp/Makefile.lammps diff --git a/lib/hdnnp/Install.py b/lib/hdnnp/Install.py index a9cd1a52ac..3b232f400b 100644 --- a/lib/hdnnp/Install.py +++ b/lib/hdnnp/Install.py @@ -17,16 +17,16 @@ parser = ArgumentParser(prog='Install.py', # settings -version = "2.1.3" +version = "2.1.4" # help message HELP = """ Syntax from src dir: make lib-hdnnp args="-b" - or: make lib-hdnnp args="-b -v 2.1.3" + or: make lib-hdnnp args="-b -v 2.1.4" or: make lib-hdnnp args="-p /usr/local/n2p2" -Syntax from lib dir: python Install.py -b -v 2.1.3 +Syntax from lib dir: python Install.py -b -v 2.1.4 or: python Install.py -b or: python Install.py -p /usr/local/n2p2 @@ -38,7 +38,7 @@ make lib-hdnnp args="-p $HOME/n2p2" # use existing n2p2 installation in $HOME/n2 # known checksums for different n2p2 versions. used to validate the download. checksums = { \ - '2.1.3' : '5cd30194701db198e4a72ee94fa6e0db', \ + '2.1.4' : '9595b066636cd6b90b0fef93398297a5', \ } # parse and process arguments @@ -61,7 +61,6 @@ if not args.build and not args.path: buildflag = args.build pathflag = args.path is not None n2p2path = args.path -mode = args.mode homepath = fullpath('.') homedir = "%s/n2p2" % (homepath) @@ -98,7 +97,7 @@ if buildflag: # build n2p2 print("Building n2p2 ...") n_cpus = get_cpus() - cmd = 'cd %s/n2p2-%s/src; make -j%d libnnpif' % (homepath, version, n_cpus) + cmd = 'unset MAKEFLAGS MAKELEVEL MAKEOVERRIDES MFLAGS && cd %s/n2p2-%s/src && make -j%d libnnpif' % (homepath, version, n_cpus) try: txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) print(txt.decode('UTF-8')) @@ -106,6 +105,9 @@ if buildflag: print("Make failed with:\n %s" % e.output.decode('UTF-8')) sys.exit(1) + # set correct homedir for linking step + homedir = "%s/n2p2-%s" % (homepath, version) + # create 2 links in lib/hdnnp to n2p2 installation dir print("Creating links to n2p2 include and lib files") @@ -113,5 +115,8 @@ if os.path.isfile("includelink") or os.path.islink("includelink"): os.remove("includelink") if os.path.isfile("liblink") or os.path.islink("liblink"): os.remove("liblink") -os.symlink(os.path.join(homedir, 'src'), 'includelink') -os.symlink(os.path.join(homedir, 'src'), 'liblink') +if os.path.isfile("Makefile.lammps") or os.path.islink("Makefile.lammps"): + os.remove("Makefile.lammps") +os.symlink(os.path.join(homedir, 'include'), 'includelink') +os.symlink(os.path.join(homedir, 'lib'), 'liblink') +os.symlink(os.path.join(homedir, 'lib', 'Makefile.lammps-extra'), 'Makefile.lammps') diff --git a/lib/hdnnp/Makefile.lammps b/lib/hdnnp/Makefile.lammps deleted file mode 100644 index 3b5ce3ab42..0000000000 --- a/lib/hdnnp/Makefile.lammps +++ /dev/null @@ -1,24 +0,0 @@ -# Settings that the LAMMPS build will import when this package library is used -# Normally, you do NOT need to edit this file! - -# Check out if n2p2 or a link is right here. -N2P2_LOCALDIR=$(realpath ../../lib/hdnnp/n2p2) -ifeq ($(N2P2_DIR),) - N2P2_DIR=$(shell test -d $(N2P2_LOCALDIR) && echo $(N2P2_LOCALDIR)) -else -# If n2p2 is not found in this directory then use environment variable or set manually here: -# N2P2_DIR= -endif - -# Give up if n2p2 not found yet. -ifeq ($(N2P2_DIR),) -$(error Cannot find library for USER-HDNNP package, please set environment or make variable N2P2_DIR manually.) -endif - -# Read extra N2P2_ compilation flags from makefile provided by n2p2: -include $(N2P2_DIR)/lib/Makefile.lammps-extra - -# Next, add general info to include/lib/path variables. -hdnnp_SYSINC += -I$(N2P2_DIR)/include -hdnnp_SYSLIB += -L$(N2P2_DIR)/lib -lnnpif -lnnp -hdnnp_SYSPATH += diff --git a/src/USER-HDNNP/Install.sh b/src/USER-HDNNP/Install.sh index 8ee16c53ca..74e5f1b91e 100644 --- a/src/USER-HDNNP/Install.sh +++ b/src/USER-HDNNP/Install.sh @@ -38,6 +38,8 @@ if (test $1 = 1) then if (test -e ../Makefile.package) then sed -i -e 's/[^ \t]*hdnnp[^ \t]* //g' ../Makefile.package + sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/hdnnp/includelink |' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/hdnnp/liblink |' ../Makefile.package sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(hdnnp_SYSINC) |' ../Makefile.package sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(hdnnp_SYSLIB) |' ../Makefile.package sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(hdnnp_SYSPATH) |' ../Makefile.package @@ -47,9 +49,8 @@ if (test $1 = 1) then sed -i -e '/^include.*hdnnp.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ -include ..\/..\/lib\/hdnnp\/Makefile.lammps\ +include ..\/..\/lib\/hdnnp\/Makefile.lammps ' ../Makefile.package.settings - fi elif (test $1 = 0) then From 9cf8f96838025915b17d458f679327678c2b0f09 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Mon, 17 May 2021 00:39:06 +0200 Subject: [PATCH 21/46] Fixed bug, changed build docs --- cmake/CMakeLists.txt | 2 +- cmake/Modules/Packages/USER-HDNNP.cmake | 4 ++-- doc/src/Build_extras.rst | 29 ++++++++++++++++++------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 99a7f2682b..9856a14e33 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -324,7 +324,7 @@ else() set(CUDA_REQUEST_PIC) endif() -foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS User-HDNNP USER-MDI USER-MOLFILE USER-NETCDF USER-PLUMED +foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-HDNNP USER-MDI USER-MOLFILE USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SCAFACOS USER-SMD USER-VTK KIM LATTE MESSAGE MSCG COMPRESS USER-PACE) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 1829585ea4..d964be45d9 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -6,8 +6,8 @@ else() endif() option(DOWNLOAD_N2P2 "Download n2p2 library instead of using an already installed one)" ${DOWNLOAD_N2P2_DEFAULT}) if(DOWNLOAD_N2P2) - set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.3.tar.gz" CACHE STRING "URL for n2p2 tarball") - set(N2P2_MD5 "5cd30194701db198e4a72ee94fa6e0db" CACHE STRING "MD5 checksum of N2P2 tarball") + set(N2P2_URL "https://github.com/CompPhysVienna/n2p2/archive/v2.1.4.tar.gz" CACHE STRING "URL for n2p2 tarball") + set(N2P2_MD5 "9595b066636cd6b90b0fef93398297a5" CACHE STRING "MD5 checksum of N2P2 tarball") mark_as_advanced(N2P2_URL) mark_as_advanced(N2P2_MD5) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index bee6c64aff..f7e266b5c0 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -1493,22 +1493,35 @@ install *n2p2* somewhere else on your system you must specify the path via the .. tab:: CMake build - There is one additional setting besides ``-D PKG_USER-HDNNP=yes`` in case - *n2p2* is not installed in the ``lib/hdnnp/n2p2`` directory: - .. code-block:: bash - -D N2P2_DIR=path # path ... n2p2 installation path + -D DOWNLOAD_N2P2=value # download n2p2 for build, value = no (default) or yes + -D N2P2_DIR=path # n2p2 base directory (only needed if a custom location) + + If ``DOWNLOAD_N2P2`` is set, the n2p2 library will be downloaded + and built inside the CMake build directory. If the N2P2 library + is already on your system (in a location CMake cannot find it), + set the ``N2P2_DIR`` to path where n2p2 is located. .. tab:: Traditional make - There is one additional variable that needs to be set besides ``make - yes-user-hdnnp`` in case *n2p2* is not installed in the ``lib/hdnnp/n2p2`` - directory: + You can download and build the *n2p2* library manually if you + prefer; follow the instructions in ``lib/hdnnp/README``\ . You can + also do it in one step from the ``lammps/src`` dir, using a + command like these, which simply invoke the + ``lib/hdnnp/Install.py`` script with the specified args: .. code-block:: bash - make N2P2_DIR=path ... + $ make lib-hdnnp # print help message + $ make lib-hdnnp args="-b" # download and build in lib/hdnnp/n2p2-... + $ make lib-hdnnp args="-b -v 2.1.4" # download and build specific version + $ make lib-hdnnp args="-p /usr/local/n2p2" # use the existing n2p2 installation in /usr/local/n2p2 + + Note that 3 symbolic (soft) links, ``includelink``, ``liblink`` and + ``Makefile.lammps``, will be created in ``lib/hdnnp`` to point to + ``n2p2/include``, ``n2p2/lib`` and ``n2p2/lib/Makefile.lammps-extra``, + respectively. When LAMMPS is built in src it will use these links. ---------- From a0ca2e2681d9e5b327a4cc31cddb2106a76a88d5 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Wed, 19 May 2021 00:15:25 +0200 Subject: [PATCH 22/46] Updated pair style hdnnp docs --- doc/src/pair_hdnnp.rst | 75 ++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/doc/src/pair_hdnnp.rst b/doc/src/pair_hdnnp.rst index b34c00f982..6362a6b967 100644 --- a/doc/src/pair_hdnnp.rst +++ b/doc/src/pair_hdnnp.rst @@ -8,16 +8,15 @@ Syntax .. code-block:: LAMMPS - pair_style hdnnp keyword value ... + pair_style hdnnp cutoff keyword value ... +* cutoff = short-range cutoff of HDNNP (maximum symmetry function cutoff radius) * zero or more keyword/value pairs may be appended * keyword = *dir* or *showew* or *showewsum* or *maxew* or *resetew* or *cflength* or *cfenergy* * value depends on the preceding keyword: .. parsed-literal:: - *emap* value = mapping - mapping = Element mapping from LAMMPS atom types to n2p2 elements *dir* value = directory directory = Path to HDNNP configuration files *showew* value = *yes* or *no* @@ -36,11 +35,11 @@ Examples .. code-block:: LAMMPS - pair_style hdnnp showew yes showewsum 100 maxew 1000 resetew yes cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O" - pair_coeff * * 6.35 + pair_style hdnnp 6.35 showew yes showewsum 100 maxew 1000 resetew yes cflength 1.8897261328 cfenergy 0.0367493254 + pair_coeff * * H O - pair_style hdnnp dir "./" showewsum 10000 - pair_coeff * * 6.01 + pair_style hdnnp 6.01 dir "./" showewsum 10000 + pair_coeff * * S Cu NULL Cu Description """"""""""" @@ -57,13 +56,34 @@ Dellago 2019) ` which is available on Github trained with its own tools :ref:`(Singraber et al 2019) ` and with `RuNNer `__. -The maximum cutoff radius of all symmetry functions (the atomic environment -descriptors of HDNNPs) is the only argument of the *pair_coeff* command which -should be invoked with asterisk wild-cards only: +Only a single *pair_coeff* command with two asterisk wild-cards is used with this +pair style. Its additional arguments define the mapping of LAMMPS atom types to +n2p2 elements. .. code-block:: LAMMPS - pair_coeff * * cutoff + pair_coeff * * H O + +In the above example LAMMPS types 1 and 2 are mapped to the elements "H" and "O" +in n2p2, respectively. Multiple types may map to the same element, or some types +may not be mapped at all. For example, if the LAMMPS simulation has four atom +types, the command + +.. code-block:: LAMMPS + + pair_coeff * * H H O NULL + +maps types 1 and 2 to the element "H", type 3 to "O" and type 4 is not mapped +(indicated by NULL). Atoms of an unmapped type are ignored by the HDNNP, i.e. +they do not contribute in the evaluation of HDNNP energies and forces. This may +be useful in a setup with multiple pair styles (see :doc:`pair_hybrid +`). + +---- + +The mandatory pair style argument *cutoff* must match the short-range cutoff radius +of the HDNNP. This corresponds to the maximum cutoff radius of all symmetry +functions (the atomic environment descriptors of HDNNPs) used. .. note:: @@ -75,35 +95,6 @@ The numeric value may be slightly larger than the actual maximum symmetry function cutoff radius (to account for rounding errors when converting units), but must not be smaller. ----- - -If provided, the keyword *emap* determines the mapping from LAMMPS atom types to -n2p2 elements. The format is a comma-separated list of ``atom type:element`` -pairs, e.g. ``"1:Cu,2:Zn"`` will map atom types 1 and 2 to elements Cu and Zn, -respectively. Atom types not present in the list will be completely ignored by -the HDNNP. The keyword *emap* is mandatory in a "hybrid" setup (see -:doc:`pair_hybrid `) with "extra" atom types in the simulation -which are not handled by the HDNNP. - -.. warning:: - - Without an explicit mapping it is by default assumed that the atom type - specifications in LAMMPS configuration files are consistent with the ordering - of elements in the *n2p2* library. Thus, without the *emap* keyword present - atom types must be sorted in order of ascending atomic number, e.g. the only - correct mapping for a configuration containing hydrogen, oxygen and zinc - atoms would be: - - +---------+---------------+-------------+ - | Element | Atomic number | LAMMPS type | - +=========+===============+=============+ - | H | 1 | 1 | - +---------+---------------+-------------+ - | O | 8 | 2 | - +---------+---------------+-------------+ - | Zn | 30 | 3 | - +---------+---------------+-------------+ - Use the *dir* keyword to specify the directory containing the HDNNP configuration files. The directory must contain ``input.nn`` with neural network and symmetry function setup, ``scaling.data`` with symmetry function scaling data and @@ -215,9 +206,7 @@ Default ^^^^^^^ The default options are *dir* = "hdnnp/", *showew* = yes, *showewsum* = 0, *maxew* -= 0, *resetew* = no, *cflength* = 1.0, *cfenergy* = 1.0. The default atom type -mapping is determined automatically according to ascending atomic number of -present elements (see above). += 0, *resetew* = no, *cflength* = 1.0, *cfenergy* = 1.0. ---- From e01502d3498fed6620d89eed43fc3c63a3f85244 Mon Sep 17 00:00:00 2001 From: Andreas Singraber Date: Fri, 21 May 2021 18:18:46 +0200 Subject: [PATCH 23/46] Finished build doc pages --- doc/src/Build_extras.rst | 42 ++++++++++++++++++++-------------------- lib/hdnnp/README | 42 ++++++---------------------------------- 2 files changed, 27 insertions(+), 57 deletions(-) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index f7e266b5c0..8be4b2309f 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -1477,17 +1477,17 @@ USER-HDNNP package --------------------------------- To build with the USER-HDNNP package it is required to download and build the -external `n2p2 `__ library ``v2.2.0`` -(or higher) before starting the LAMMPS build process. More specifically, only -the *n2p2* core library ``libnnp`` and interface library ``libnnpif`` are -actually needed: when using GCC it should suffice to execute ``make libnnpif`` -in the *n2p2* ``src`` directory. For more details please see -``lib/hdnnp/README`` and the `n2p2 build documentation -`__. If *n2p2* is -downloaded and compiled in the LAMMPS directory ``lib/hdnnp/n2p2`` no special -flags need to be set besides the usual package activation. If you prefer to -install *n2p2* somewhere else on your system you must specify the path via the -``N2P2_DIR`` variable. +external `n2p2 `__ library ``v2.1.4`` +(or higher). The LAMMPS build process offers an automatic download and +compilation of *n2p2* or allows you to choose the installation directory of +*n2p2* manually. Please see the boxes below for the CMake and traditional build +system for detailed information. + +In case of a manual installation of *n2p2* you only need to build the *n2p2* core +library ``libnnp`` and interface library ``libnnpif``. When using GCC it should +suffice to execute ``make libnnpif`` in the *n2p2* ``src`` directory. For more +details please see ``lib/hdnnp/README`` and the `n2p2 build documentation +`__. .. tabs:: @@ -1498,18 +1498,18 @@ install *n2p2* somewhere else on your system you must specify the path via the -D DOWNLOAD_N2P2=value # download n2p2 for build, value = no (default) or yes -D N2P2_DIR=path # n2p2 base directory (only needed if a custom location) - If ``DOWNLOAD_N2P2`` is set, the n2p2 library will be downloaded - and built inside the CMake build directory. If the N2P2 library - is already on your system (in a location CMake cannot find it), - set the ``N2P2_DIR`` to path where n2p2 is located. + If ``DOWNLOAD_N2P2`` is set, the *n2p2* library will be downloaded and + built inside the CMake build directory. If the *n2p2* library is already + on your system (in a location CMake cannot find it), set the ``N2P2_DIR`` + to path where *n2p2* is located. If *n2p2* is located directly in + ``lib/hdnnp/n2p2`` it will be automatically found by CMake. .. tab:: Traditional make - You can download and build the *n2p2* library manually if you - prefer; follow the instructions in ``lib/hdnnp/README``\ . You can - also do it in one step from the ``lammps/src`` dir, using a - command like these, which simply invoke the - ``lib/hdnnp/Install.py`` script with the specified args: + You can download and build the *n2p2* library manually if you prefer; + follow the instructions in ``lib/hdnnp/README``\ . You can also do it in + one step from the ``lammps/src`` dir, using a command like these, which + simply invoke the ``lib/hdnnp/Install.py`` script with the specified args: .. code-block:: bash @@ -1521,7 +1521,7 @@ install *n2p2* somewhere else on your system you must specify the path via the Note that 3 symbolic (soft) links, ``includelink``, ``liblink`` and ``Makefile.lammps``, will be created in ``lib/hdnnp`` to point to ``n2p2/include``, ``n2p2/lib`` and ``n2p2/lib/Makefile.lammps-extra``, - respectively. When LAMMPS is built in src it will use these links. + respectively. When LAMMPS is built in ``src`` it will use these links. ---------- diff --git a/lib/hdnnp/README b/lib/hdnnp/README index d92fac5301..ed61f211ea 100644 --- a/lib/hdnnp/README +++ b/lib/hdnnp/README @@ -4,7 +4,12 @@ library ("libnnp"), the interface library ("libnnpif"), some headers and extra build helper files are needed. These files will be created automatically during the n2p2 build process. -IMPORTANT: The n2p2 version must be "v2.2.0" or higher. +This file gives some basic instructions on how to compile n2p2 manually. How to +integrate it then in the LAMMPS build process or how to use the automatic +download and build option is described in detail on the USER-HDNNP build +instructions page of the LAMMPS documentation. + +IMPORTANT: The n2p2 version must be "v2.1.4" or higher. Basic build instructions for n2p2 ================================= @@ -59,41 +64,6 @@ For more information about the n2p2 build process please visit https://compphysvienna.github.io/n2p2/topics/build.html or ask questions on the Github issue page (https://github.com/CompPhysVienna/n2p2/issues). -Installation directory of n2p2 -============================== - -You can install n2p2 either in this folder (1) or somewhere else on your system (2): - -(1) If n2p2 is installed here, please make sure that the directory is also named - "n2p2", i.e. within "lib/hdnnp/n2p2" you can see the n2p2 folder structure, in - particular "lib" and "include": - - lib - | - hdnnp - | - n2p2 - | - ------------------ ... - | | | - include lib src ... - - In this case LAMMPS will automatically find n2p2 during the build process - and you only need to enable the USER-HDNNP package via CMake (-D - PKG_USER-HDNNP=yes) or the traditional makefile approach (make yes-user-hdnnp). - It is also valid to create a link here named "n2p2" which points to the n2p2 - installation directory. - -(2) If n2p2 is installed somewhere else the path must be given as an additional - setting (variable N2P2_DIR) to the build tool. For example, with CMake use - - cmake -D PKG_USER-HDNNP=yes -D N2P2_DIR= ../cmake/ - - and for the traditional makefiles use - - make yes-user-hdnnp - make N2P2_DIR= mpi - Testing a successful build of LAMMPS with USER-HDNNP ==================================================== From 10961b8cb692ed4923f2c877aa8d456bd7c90dac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 16:15:31 -0400 Subject: [PATCH 24/46] update to upstream --- cmake/Modules/Packages/USER-MDI.cmake | 104 +++++++++++++----- cmake/Modules/Packages/USER-PACE.cmake | 3 +- cmake/presets/all_off.cmake | 14 +-- cmake/presets/all_on.cmake | 14 +-- cmake/presets/download.cmake | 8 +- cmake/presets/mingw-cross.cmake | 4 +- cmake/presets/nolib.cmake | 2 +- doc/src/Howto_mdi.rst | 14 +-- doc/src/Run_options.rst | 19 +++- doc/src/angle_table.rst | 1 - doc/src/pair_lj_cut_tip4p.rst | 16 +++ examples/ASPHERE/box/in.box | 2 +- examples/ASPHERE/box/in.box.mp | 2 +- examples/ASPHERE/dimer/in.dimer | 2 +- examples/ASPHERE/dimer/in.dimer.mp | 2 +- examples/ASPHERE/ellipsoid/in.ellipsoid | 2 +- examples/ASPHERE/ellipsoid/in.ellipsoid.mp | 2 +- examples/ASPHERE/line/in.line.srd | 2 +- examples/ASPHERE/poly/in.poly | 2 +- examples/ASPHERE/poly/in.poly.mp | 2 +- examples/ASPHERE/star/in.star | 2 +- examples/ASPHERE/star/in.star.mp | 2 +- examples/ASPHERE/tri/in.tri.srd | 2 +- .../USER/cgsdk/sds-monolayer/in.sds-hybrid | 3 +- src/KOKKOS/memory_kokkos.h | 2 +- src/KOKKOS/pair_table_kokkos.cpp | 8 ++ src/KOKKOS/pair_table_rx_kokkos.cpp | 10 +- src/KOKKOS/sna_kokkos_impl.h | 1 + src/USER-QTB/fix_qbmsst.cpp | 2 +- src/compute_dipole_chunk.cpp | 6 + src/fix_wall_region.cpp | 2 +- src/lammps.cpp | 1 + src/pair_hybrid.cpp | 16 +++ 33 files changed, 195 insertions(+), 79 deletions(-) diff --git a/cmake/Modules/Packages/USER-MDI.cmake b/cmake/Modules/Packages/USER-MDI.cmake index 75fe0d2bca..88d7b5e498 100644 --- a/cmake/Modules/Packages/USER-MDI.cmake +++ b/cmake/Modules/Packages/USER-MDI.cmake @@ -12,37 +12,89 @@ if(DOWNLOAD_MDI) set(MDI_MD5 "ddfa46d6ee15b4e59cfd527ec7212184" CACHE STRING "MD5 checksum for MDI tarball") mark_as_advanced(MDI_URL) mark_as_advanced(MDI_MD5) + enable_language(C) - set(LAMMPS_LIB_MDI_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/mdi) + # only ON/OFF are allowed for "mpi" flag when building MDI library + # so translate boolean value of BUILD_MPI + # always disable MPI when cross-compiling to Windows. + if((BUILD_MPI) AND NOT((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING)) + set(MDI_USE_MPI ON) + else() + set(MDI_USE_MPI OFF) + endif() + # detect if we have python development support and thus can enable python plugins + set(MDI_USE_PYTHON_PLUGINS OFF) + if(CMAKE_VERSION VERSION_LESS 3.12) + find_package(PythonLibs QUIET) # Deprecated since version 3.12 + if (PYTHONLIBS_FOUND) + set(MDI_USE_PYTHON_PLUGINS ON) + endif() + else() + find_package(Python QUIET COMPONENTS Development) + if (Python_Development_FOUND) + set(MDI_USE_PYTHON_PLUGINS ON) + endif() + endif() + + # download/ build MDI library + # always build static library with -fpic + # support cross-compilation and ninja-build include(ExternalProject) - message(STATUS "Building mdi.") - ExternalProject_Add(mdi_external - URL ${MDI_URL} - URL_MD5 ${MDI_MD5} - UPDATE_COMMAND "" - CMAKE_ARGS ${CMAKE_REQUEST_PIC} - -DCMAKE_INSTALL_PREFIX=${LAMMPS_LIB_MDI_BIN_DIR} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} - -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR} - -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} - -Dlanguage=C - CMAKE_CACHE_ARGS -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} - -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} - -DTargetOpenMP_FIND_COMPONENTS:STRING=C;CXX) + ExternalProject_Add(mdi_build + URL ${MDI_URL} + URL_MD5 ${MDI_MD5} + CMAKE_ARGS ${CMAKE_REQUEST_PIC} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -Dlanguage=C + -Dlibtype=STATIC + -Dmpi=${MDI_USE_MPI} + -Dpython_plugins=${MDI_USE_PYTHON_PLUGINS} + UPDATE_COMMAND "" + INSTALL_COMMAND "" + BUILD_BYPRODUCTS "/MDI_Library/libmdi.a" + ) - # Link the lammps library against MDI - target_include_directories(lammps PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/mdi) - target_link_directories(lammps PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_LIBDIR}/mdi) - target_link_libraries(lammps PRIVATE mdi) - add_dependencies(lammps mdi_external) + # where is the compiled library? + ExternalProject_get_property(mdi_build BINARY_DIR) + set(MDI_BINARY_DIR "${BINARY_DIR}/MDI_Library") + # workaround for older CMake versions + file(MAKE_DIRECTORY ${MDI_BINARY_DIR}) - # Link the lammps executable against MDI - target_include_directories(lmp PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/mdi) - target_link_directories(lmp PRIVATE ${LAMMPS_LIB_MDI_BIN_DIR}/${CMAKE_INSTALL_LIBDIR}/mdi) - target_link_libraries(lmp PRIVATE mdi) - add_dependencies(lmp mdi_external) + # create imported target for the MDI library + add_library(LAMMPS::MDI UNKNOWN IMPORTED) + add_dependencies(LAMMPS::MDI mdi_build) + set_target_properties(LAMMPS::MDI PROPERTIES + IMPORTED_LOCATION "${MDI_BINARY_DIR}/libmdi.a" + INTERFACE_INCLUDE_DIRECTORIES ${MDI_BINARY_DIR} + ) + + set(MDI_DEP_LIBS "") + # if compiling with python plugins we need + # to add python libraries as dependency. + if(MDI_USE_PYTHON_PLUGINS) + if(CMAKE_VERSION VERSION_LESS 3.12) + list(APPEND MDI_DEP_LIBS ${PYTHON_LIBRARIES}) + else() + list(APPEND MDI_DEP_LIBS Python::Python) + endif() + + endif() + # need to add support for dlopen/dlsym, except when compiling for Windows. + if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + list(APPEND MDI_DEP_LIBS "${CMAKE_DL_LIBS}") + endif() + if(MDI_DEP_LIBS) + set_target_properties(LAMMPS::MDI PROPERTIES + IMPORTED_LINK_INTERFACE_LIBRARIES "${MDI_DEP_LIBS}") + endif() + + target_link_libraries(lammps PRIVATE LAMMPS::MDI) + target_link_libraries(lmp PRIVATE LAMMPS::MDI) else() diff --git a/cmake/Modules/Packages/USER-PACE.cmake b/cmake/Modules/Packages/USER-PACE.cmake index 2d88d3a313..ccc7423355 100644 --- a/cmake/Modules/Packages/USER-PACE.cmake +++ b/cmake/Modules/Packages/USER-PACE.cmake @@ -14,13 +14,12 @@ execute_process( WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) - file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${CMAKE_BINARY_DIR}/lammps-user-pace-*/USER-PACE) file(GLOB PACE_EVALUATOR_SOURCES ${CMAKE_BINARY_DIR}/lammps-user-pace-*/USER-PACE/*.cpp) list(FILTER PACE_EVALUATOR_SOURCES EXCLUDE REGEX pair_pace.cpp) add_library(pace STATIC ${PACE_EVALUATOR_SOURCES}) -set_target_properties(pace PROPERTIES OUTPUT_NAME lammps_pace${LAMMPS_MACHINE}) +set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE}) target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR}) target_link_libraries(lammps PRIVATE pace) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 32ab6744f5..df93599056 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -5,13 +5,13 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MESSAGE MISC MLIAP MOLECULE MPIIO MSCG OPT PERI PLUGIN POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI - USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS - USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-HDNNP - USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD USER-MESONT - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PACE - USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP USER-REACTION - USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK USER-YAFF) + USER-ADIOS USER-ATC USER-AWPMD USER-BROWNIAN USER-BOCS USER-CGDNA USER-CGSDK + USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD + USER-HDNNP USER-INTEL USER-LB USER-MANIFOLD USER-MDI USER-MEAMC USER-MESODPD + USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP + USER-PACE USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP + USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH + USER-TALLY USER-UEF USER-VTK USER-YAFF) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index f8b2889487..d84caebe28 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -7,13 +7,13 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MESSAGE MISC MLIAP MOLECULE MPIIO MSCG OPT PERI PLUGIN POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI - USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS - USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-HDNNP - USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD USER-MESONT - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PACE - USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP USER-REACTION - USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK USER-YAFF) + USER-ADIOS USER-ATC USER-AWPMD USER-BROWNIAN USER-BOCS USER-CGDNA USER-CGSDK + USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD + USER-HDNNP USER-INTEL USER-LB USER-MANIFOLD USER-MDI USER-MEAMC USER-MESODPD + USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP + USER-PACE USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP + USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH + USER-TALLY USER-UEF USER-VTK USER-YAFF) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/download.cmake b/cmake/presets/download.cmake index 84629ce785..ebab6ab658 100644 --- a/cmake/presets/download.cmake +++ b/cmake/presets/download.cmake @@ -1,7 +1,7 @@ -# preset that turns on packages with automatic downloads of sources of potentials -# compilation of libraries like Plumed or ScaFaCoS can take a considerable amount of time. +# Preset that turns on packages with automatic downloads of sources or potentials. +# Compilation of libraries like Plumed or ScaFaCoS can take a considerable amount of time. -set(ALL_PACKAGES KIM LATTE MSCG VORONOI USER-PLUMED USER-SCAFACOS USER-SMD USER-MESONT) +set(ALL_PACKAGES KIM LATTE MSCG VORONOI USER-PLUMED USER-SCAFACOS USER-SMD USER-MESONT USER-MDI USER-PACE) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) @@ -9,9 +9,11 @@ endforeach() set(DOWNLOAD_KIM ON CACHE BOOL "" FORCE) set(DOWNLOAD_LATTE ON CACHE BOOL "" FORCE) +set(DOWNLOAD_MDI ON CACHE BOOL "" FORCE) set(DOWNLOAD_MSCG ON CACHE BOOL "" FORCE) set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) +set(DOWNLOAD_PACE ON CACHE BOOL "" FORCE) set(DOWNLOAD_PLUMED ON CACHE BOOL "" FORCE) set(DOWNLOAD_SCAFACOS ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 32b17d43c2..e622211190 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -1,11 +1,11 @@ set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KSPACE LATTE MANYBODY MC MISC MLIAP MOLECULE OPT PERI POEMS QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI - USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK + USER-ATC USER-AWPMD USER-BOCS USER-BROWNIAN USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESODPD USER-MESONT USER-MISC USER-MGPT USER-MOFFF USER-MOLFILE USER-OMP - USER-PHONON USER-PTM USER-QTB USER-REACTION USER-REAXC + USER-PACE USER-PHONON USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-YAFF) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index e2ec19c2c2..08a3a531a1 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -4,7 +4,7 @@ set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MESSAGE MPIIO MSCG PYTHON VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-H5MD USER-HDNNP USER-LB USER-MOLFILE - USER-MESONT USER-NETCDF USER-PACE USER-PLUMED USER-QMMM USER-QUIP + USER-MESONT USER-MDI USER-NETCDF USER-PACE USER-PLUMED USER-QMMM USER-QUIP USER-SCAFACOS USER-SMD USER-VTK) foreach(PKG ${PACKAGES_WITH_LIB}) diff --git a/doc/src/Howto_mdi.rst b/doc/src/Howto_mdi.rst index a0a1cd0286..7cfcd01a50 100644 --- a/doc/src/Howto_mdi.rst +++ b/doc/src/Howto_mdi.rst @@ -1,7 +1,7 @@ Using LAMMPS with the MDI library for code coupling =================================================== -..note:: +.. note:: This Howto doc page will eventually replace the :doc:`Howto client/server ` doc page. @@ -65,8 +65,8 @@ how the 2 codes are launched to communicate by MPI: .. code-block:: bash -% mpirun -np 2 lmp_mpi -mdi "-role DRIVER -name d -method MPI" \ - -in in.aimd : -np 16 pw.x -in qe.in -mdi "-role ENGINE -name e -method MPI" + % mpirun -np 2 lmp_mpi -mdi "-role DRIVER -name d -method MPI" \ + -in in.aimd : -np 16 pw.x -in qe.in -mdi "-role ENGINE -name e -method MPI" In this case LAMMPS runs on 2 processors (MPI tasks), ``pw.x`` runs on 16 processors. @@ -75,8 +75,8 @@ Here is how the 2 codes are launched to communicate by sockets: .. code-block:: bash -% mpirun -np 2 lmp_mpi -mdi "-role DRIVER -name d -method TCP -port 8021" -in in.aimd -% mpirun -np 16 pw.x -in qe.in -mdi "-role ENGINE -name e -method TCP -port 8021 -hostname localhost" + % mpirun -np 2 lmp_mpi -mdi "-role DRIVER -name d -method TCP -port 8021" -in in.aimd + % mpirun -np 16 pw.x -in qe.in -mdi "-role ENGINE -name e -method TCP -port 8021 -hostname localhost" These commands could be issued in different windows on a desktop machine. Or in the same window, if the first command is ended with @@ -99,7 +99,7 @@ Examples scripts for using LAMMPS as an MDI engine are in the examples/mdi directory. See the README file in that directory for instructions on how to run the examples. -..note:: +.. note:: Work is underway to add commands that allow LAMMPS to be used as an MDI driver, e.g. for the AIMD example discussed above. Example @@ -109,7 +109,7 @@ instructions on how to run the examples. If LAMMPS is used as a stand-alone engine it should set up the system it will be modeling in its input script, then invoke the :doc:`mdi/engine ` command. This will put LAMMPS into -engine mode where it waits for messages and data from the driver. +"engine mode" where it waits for messages and data from the driver. When the driver sends an "EXIT" command, LAMMPS will exit engine mode and the input script will continue. diff --git a/doc/src/Run_options.rst b/doc/src/Run_options.rst index 25756d9be0..d8adfcc5be 100644 --- a/doc/src/Run_options.rst +++ b/doc/src/Run_options.rst @@ -10,6 +10,7 @@ letter abbreviation can be used: * :ref:`-i or -in ` * :ref:`-k or -kokkos ` * :ref:`-l or -log ` +* :ref:`-mdi ` * :ref:`-m or -mpicolor ` * :ref:`-c or -cite ` * :ref:`-nc or -nocite ` @@ -196,9 +197,23 @@ Option -plog will override the name of the partition log files file.N. ---------- +.. _mdi: + +**-mdi 'multiple flags'** + +This flag is only recognized and used when LAMMPS has support for the MolSSI +Driver Interface (MDI) included as part of the :ref:`USER-MDI ` +package. This flag is specific to the MDI library and controls how LAMMPS +interacts with MDI. There are usually multiple flags that have to follow it +and those have to be placed in quotation marks. For more information about +how to launch LAMMPS in MDI client/server mode please refer to the +:doc:`MDI Howto `. + +---------- + .. _mpicolor: -**-mpicolor** color +**-mpicolor color** If used, this must be the first command-line argument after the LAMMPS executable name. It is only used when LAMMPS is launched by an mpirun @@ -223,7 +238,7 @@ links with from the lib/message directory. See the .. _cite: -**-cite style or file name** +**-cite style** or **file name** Select how and where to output a reminder about citing contributions to the LAMMPS code that were used during the run. Available styles are diff --git a/doc/src/angle_table.rst b/doc/src/angle_table.rst index cad9f5a82f..b8aeae780b 100644 --- a/doc/src/angle_table.rst +++ b/doc/src/angle_table.rst @@ -69,7 +69,6 @@ parenthesized comments): HAM (keyword is the first text on line) N 181 FP 0 0 EQ 90.0 (N, FP, EQ parameters) (blank line) - N 181 FP 0 0 (N, FP parameters) 1 0.0 200.5 2.5 (index, angle, energy, derivative) 2 1.0 198.0 2.5 ... diff --git a/doc/src/pair_lj_cut_tip4p.rst b/doc/src/pair_lj_cut_tip4p.rst index 4f55f3b14e..5f3b4e48e7 100644 --- a/doc/src/pair_lj_cut_tip4p.rst +++ b/doc/src/pair_lj_cut_tip4p.rst @@ -145,6 +145,22 @@ specified since a Coulombic cutoff cannot be specified for an individual I,J type pair. All type pairs use the same global Coulombic cutoff specified in the pair_style command. +.. warning:: + + Because of how these pair styles implement the coulomb interactions + by implicitly defining a fourth site for the negative charge + of the TIP4P and similar water models, special care must be taken + when using these pair styles with other computations that also use + charges. Unless they are specially set up to also handle the implicit + definition of the 4th site, results are likely incorrect. Example: + :doc:`compute dipole/chunk `. For the same + reason, when using one of these pair styles with + :doc:`pair_style hybrid `, **all** coulomb interactions + should be handled by a single sub-style with TIP4P support. All other + instances and styles will "see" the M point charges at the position + of the Oxygen atom and thus compute incorrect forces and energies. + LAMMPS will print a warning when it detects one of these issues. + ---------- A version of these styles with a soft core, *lj/cut/tip4p/long/soft*\ , suitable diff --git a/examples/ASPHERE/box/in.box b/examples/ASPHERE/box/in.box index 2ec09faf56..6018458231 100644 --- a/examples/ASPHERE/box/in.box +++ b/examples/ASPHERE/box/in.box @@ -67,7 +67,7 @@ delete_atoms overlap 1.0 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/box/in.box.mp b/examples/ASPHERE/box/in.box.mp index 2953552595..ce1591c7dc 100644 --- a/examples/ASPHERE/box/in.box.mp +++ b/examples/ASPHERE/box/in.box.mp @@ -67,7 +67,7 @@ delete_atoms overlap 1.0 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/dimer/in.dimer b/examples/ASPHERE/dimer/in.dimer index 9e514d83f1..224db9937d 100644 --- a/examples/ASPHERE/dimer/in.dimer +++ b/examples/ASPHERE/dimer/in.dimer @@ -61,7 +61,7 @@ delete_atoms overlap 0.5 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/dimer/in.dimer.mp b/examples/ASPHERE/dimer/in.dimer.mp index 2970df022b..a637acaf87 100644 --- a/examples/ASPHERE/dimer/in.dimer.mp +++ b/examples/ASPHERE/dimer/in.dimer.mp @@ -61,7 +61,7 @@ delete_atoms overlap 0.5 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/ellipsoid/in.ellipsoid b/examples/ASPHERE/ellipsoid/in.ellipsoid index 241f010771..5e9a20f6e0 100644 --- a/examples/ASPHERE/ellipsoid/in.ellipsoid +++ b/examples/ASPHERE/ellipsoid/in.ellipsoid @@ -72,7 +72,7 @@ delete_atoms overlap 1.6 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/ellipsoid/in.ellipsoid.mp b/examples/ASPHERE/ellipsoid/in.ellipsoid.mp index 52c30db0a9..7ce01ad4e1 100644 --- a/examples/ASPHERE/ellipsoid/in.ellipsoid.mp +++ b/examples/ASPHERE/ellipsoid/in.ellipsoid.mp @@ -72,7 +72,7 @@ delete_atoms overlap 1.6 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/line/in.line.srd b/examples/ASPHERE/line/in.line.srd index 6ec1998d31..a32bde0b76 100644 --- a/examples/ASPHERE/line/in.line.srd +++ b/examples/ASPHERE/line/in.line.srd @@ -34,7 +34,7 @@ reset_timestep 0 velocity small create 1.44 87287 loop geom -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes neigh_modify exclude molecule/intra big include big diff --git a/examples/ASPHERE/poly/in.poly b/examples/ASPHERE/poly/in.poly index 3496a774bb..68bd2a6bbc 100644 --- a/examples/ASPHERE/poly/in.poly +++ b/examples/ASPHERE/poly/in.poly @@ -70,7 +70,7 @@ delete_atoms overlap 1.0 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/poly/in.poly.mp b/examples/ASPHERE/poly/in.poly.mp index 1c6a1faee3..8fa5d24a55 100644 --- a/examples/ASPHERE/poly/in.poly.mp +++ b/examples/ASPHERE/poly/in.poly.mp @@ -70,7 +70,7 @@ delete_atoms overlap 1.0 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/star/in.star b/examples/ASPHERE/star/in.star index 6711e7a0a7..a098810199 100644 --- a/examples/ASPHERE/star/in.star +++ b/examples/ASPHERE/star/in.star @@ -67,7 +67,7 @@ delete_atoms overlap 0.5 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/star/in.star.mp b/examples/ASPHERE/star/in.star.mp index de5f23dfb6..53cb924e42 100644 --- a/examples/ASPHERE/star/in.star.mp +++ b/examples/ASPHERE/star/in.star.mp @@ -67,7 +67,7 @@ delete_atoms overlap 0.5 small big reset_timestep 0 -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes comm_modify mode multi group big vel yes diff --git a/examples/ASPHERE/tri/in.tri.srd b/examples/ASPHERE/tri/in.tri.srd index e7ef6ef59a..9bfc9d7b65 100644 --- a/examples/ASPHERE/tri/in.tri.srd +++ b/examples/ASPHERE/tri/in.tri.srd @@ -33,7 +33,7 @@ reset_timestep 0 velocity small create 1.44 87287 loop geom -neighbor 0.3 bin +neighbor 0.3 multi neigh_modify delay 0 every 1 check yes neigh_modify exclude molecule/intra big include big diff --git a/examples/USER/cgsdk/sds-monolayer/in.sds-hybrid b/examples/USER/cgsdk/sds-monolayer/in.sds-hybrid index 3a9fcc13a9..eb3eca9c96 100644 --- a/examples/USER/cgsdk/sds-monolayer/in.sds-hybrid +++ b/examples/USER/cgsdk/sds-monolayer/in.sds-hybrid @@ -37,10 +37,11 @@ atom_modify first charged kspace_style pppm/cg 0.00001 kspace_modify order 3 -comm_modify mode multi neighbor 2.0 multi neigh_modify delay 4 every 2 check yes +comm_modify mode multi + timestep 10.0 fix 1 all nvt temp 310.0 310.0 100.0 diff --git a/src/KOKKOS/memory_kokkos.h b/src/KOKKOS/memory_kokkos.h index 86cce893c0..413d7074ce 100644 --- a/src/KOKKOS/memory_kokkos.h +++ b/src/KOKKOS/memory_kokkos.h @@ -253,7 +253,7 @@ TYPE grow_kokkos(TYPE &data, typename TYPE::value_type **&array, data.resize(n1); bigint nbytes = ((bigint) sizeof(typename TYPE::value_type *)) * n1; - array = (typename TYPE::value_type **) smalloc(nbytes,name); + array = (typename TYPE::value_type **) srealloc(array,nbytes,name); for (int i = 0; i < n1; i++) if (data.h_view.extent(1)==0) diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index a662298a3e..f803a06456 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -52,6 +52,14 @@ PairTableKokkos::~PairTableKokkos() { if (copymode) return; + if (allocated) { + memoryKK->destroy_kokkos(k_eatom,eatom); + memoryKK->destroy_kokkos(k_vatom,vatom); + memory->destroy(setflag); + memoryKK->destroy_kokkos(d_table->cutsq,cutsq); + memoryKK->destroy_kokkos(d_table->tabindex,tabindex); + } + delete h_table; h_table = nullptr; delete d_table; diff --git a/src/KOKKOS/pair_table_rx_kokkos.cpp b/src/KOKKOS/pair_table_rx_kokkos.cpp index 5465b57b81..8b5905d473 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.cpp +++ b/src/KOKKOS/pair_table_rx_kokkos.cpp @@ -166,12 +166,12 @@ PairTableRXKokkos::~PairTableRXKokkos() delete [] site1; delete [] site2; - memoryKK->destroy_kokkos(k_eatom,eatom); - memoryKK->destroy_kokkos(k_vatom,vatom); - if (allocated) { - memoryKK->destroy_kokkos(d_table->cutsq, cutsq); - memoryKK->destroy_kokkos(d_table->tabindex, tabindex); + memoryKK->destroy_kokkos(k_eatom,eatom); + memoryKK->destroy_kokkos(k_vatom,vatom); + memory->destroy(setflag); + memoryKK->destroy_kokkos(d_table->cutsq,cutsq); + memoryKK->destroy_kokkos(d_table->tabindex,tabindex); } delete h_table; diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 8f28c2ada6..7a4fdd0ece 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -55,6 +55,7 @@ SNAKokkos::SNAKokkos(real_type rfac0_in, ncoeff = compute_ncoeff(); nmax = 0; + natom = 0; build_indexlist(); diff --git a/src/USER-QTB/fix_qbmsst.cpp b/src/USER-QTB/fix_qbmsst.cpp index 341591d087..2ea66dffea 100644 --- a/src/USER-QTB/fix_qbmsst.cpp +++ b/src/USER-QTB/fix_qbmsst.cpp @@ -221,7 +221,7 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) // create a new compute potential energy compute id_pe = utils::strdup(std::string(id) + "_pe"); - modify->add_compute(fmt::format("{} all pe",id_temp)); + modify->add_compute(fmt::format("{} all pe",id_pe)); peflag = 1; // allocate qbmsst diff --git a/src/compute_dipole_chunk.cpp b/src/compute_dipole_chunk.cpp index cb0bb8d914..4ca991f90b 100644 --- a/src/compute_dipole_chunk.cpp +++ b/src/compute_dipole_chunk.cpp @@ -15,9 +15,11 @@ #include "compute_dipole_chunk.h" #include "atom.h" +#include "comm.h" #include "compute_chunk_atom.h" #include "domain.h" #include "error.h" +#include "force.h" #include "math_special.h" #include "memory.h" #include "modify.h" @@ -95,6 +97,10 @@ void ComputeDipoleChunk::init() cchunk = (ComputeChunkAtom *) modify->compute[icompute]; if (strcmp(cchunk->style,"chunk/atom") != 0) error->all(FLERR,"Compute dipole/chunk does not use chunk/atom compute"); + + if ((force->pair_match("/tip4p/",0) != nullptr) && (comm->me == 0)) + error->warning(FLERR,"Computed dipole moments may be incorrect when " + "using a tip4p pair style"); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp index d521e8e216..869a632b89 100644 --- a/src/fix_wall_region.cpp +++ b/src/fix_wall_region.cpp @@ -397,7 +397,7 @@ void FixWallRegion::morse(double r) { double dr = r - sigma; double dexp = exp(-alpha * dr); - fwall = coeff1 * (dexp*dexp - dexp) / r; + fwall = coeff1 * (dexp*dexp - dexp); eng = epsilon * (dexp*dexp - 2.0*dexp) - offset; } diff --git a/src/lammps.cpp b/src/lammps.cpp index ea83dccad1..9e340477f4 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -1142,6 +1142,7 @@ void _noopt LAMMPS::help() "-in none/filename : read input from file or stdin (default) (-i)\n" "-kokkos on/off ... : turn KOKKOS mode on or off (-k)\n" "-log none/filename : where to send log output (-l)\n" + "-mdi '' : pass flags to the MolSSI Driver Interface\n" "-mpicolor color : which exe in a multi-exe mpirun cmd (-m)\n" "-cite : select citation reminder style (-c)\n" "-nocite : disable citation reminder (-nc)\n" diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index ecbb8ffa0c..7c5976e65e 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -341,6 +341,8 @@ void PairHybrid::settings(int narg, char **arg) // multiple[i] = 1 to M if sub-style used multiple times, else 0 + int num_tip4p = 0, num_coul = 0; // count sub-styles with tip4p and coulomb + for (int i = 0; i < nstyles; i++) { int count = 0; for (int j = 0; j < nstyles; j++) { @@ -348,8 +350,22 @@ void PairHybrid::settings(int narg, char **arg) if (j == i) multiple[i] = count; } if (count == 1) multiple[i] = 0; + + if (utils::strmatch(keywords[i],"/tip4p/")) ++num_tip4p; + if (utils::strmatch(keywords[i],"/coul/") + || utils::strmatch(keywords[i],"^comb") + || utils::strmatch(keywords[i],"^reax/c")) ++num_coul; } + if ((num_tip4p > 1) && (comm->me == 0)) + error->warning(FLERR,"Using multiple tip4p sub-styles can result in " + "inconsistent calculation of coulomb interactions"); + + if ((num_tip4p > 0) && (num_coul > 0) && (comm->me == 0)) + error->warning(FLERR,"Using a tip4p sub-style with other sub-styles " + "that include coulomb interactions can result in " + "inconsistent calculation of the coulomb interactions"); + // set pair flags from sub-style flags flags(); From a9dfecc27f016a5a72324315b3cc0f87d62b2f8a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 16:16:01 -0400 Subject: [PATCH 25/46] regularize automatic download build for n2p2 library with CMake --- cmake/Modules/Packages/USER-HDNNP.cmake | 27 ++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index d964be45d9..81719beae1 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -11,16 +11,37 @@ if(DOWNLOAD_N2P2) mark_as_advanced(N2P2_URL) mark_as_advanced(N2P2_MD5) + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(N2P2_COMP llvm) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + set(N2P2_COMP intel) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(N2P2_COMP gnu) + else() # default + set(N2P2_COMP gnu) + endif() + + if(NOT BUILD_MPI) + set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI") + endif() + + string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) + set(N2P2_BUILD_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") + set(N2P2_BUILD_OPTIONS INTERFACES=LAMMPS COMP=${N2P2_COMP} "PROJECT_OPTIONS=${N2P2_PROJECT_OPTIONS}" + "PROJECT_CC=${CMAKE_CXX_COMPILER}" "PROJECT_MPICC=${MPI_CXX_COMPILER}" "PROJECT_CFLAGS=${N2P2_BUILD_FLAGS}") + message(STATUS "N2P2 BUILD OPTIONS: ${N2P2_BUILD_OPTIONS}") + include(ExternalProject) ExternalProject_Add(n2p2_build URL ${N2P2_URL} URL_MD5 ${N2P2_MD5} UPDATE_COMMAND "" - SOURCE_SUBDIR src/ - BUILD_IN_SOURCE 1 CONFIGURE_COMMAND "" - BUILD_COMMAND make libnnpif + BUILD_COMMAND make -f makefile libnnpif ${N2P2_BUILD_OPTIONS} INSTALL_COMMAND "" + BUILD_IN_SOURCE 1 + LOG_BUILD ON + SOURCE_SUBDIR src/ #BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a ) ExternalProject_get_property(n2p2_build SOURCE_DIR) From 48169abbe8cbd059f28103b0d3995148ca91502a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 16:57:24 -0400 Subject: [PATCH 26/46] add doi to short citation message --- src/USER-HDNNP/pair_hdnnp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-HDNNP/pair_hdnnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp index 598189b1f1..5a6f65ae91 100644 --- a/src/USER-HDNNP/pair_hdnnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -35,7 +35,7 @@ using namespace LAMMPS_NS; static const char cite_user_hdnnp_package[] = - "USER-HDNNP package:\n\n" + "USER-HDNNP package: 10.1021/acs.jctc.8b00770\n\n" "@Article{Singraber19,\n" " author = {Singraber, Andreas and Behler, J{\"o}rg and Dellago, Christoph},\n" " title = {Library-{{Based LAMMPS Implementation}} of {{High}}-{{Dimensional Neural Network Potentials}}},\n" From 1c4e0119263d3f4bf34640791b3986194572b6d2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 16:57:35 -0400 Subject: [PATCH 27/46] plug memory leak --- src/USER-HDNNP/pair_hdnnp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/USER-HDNNP/pair_hdnnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp index 5a6f65ae91..c7ea6044ea 100644 --- a/src/USER-HDNNP/pair_hdnnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -69,6 +69,8 @@ PairHDNNP::PairHDNNP(LAMMPS *lmp) : Pair(lmp) PairHDNNP::~PairHDNNP() { delete interface; + memory->destroy(setflag); + memory->destroy(cutsq); } /* ---------------------------------------------------------------------- */ From db55531eedb5dd576e474eac4ea221293c60b202 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 16:57:44 -0400 Subject: [PATCH 28/46] simplify --- src/USER-HDNNP/pair_hdnnp.cpp | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/USER-HDNNP/pair_hdnnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp index c7ea6044ea..9af39a80fa 100644 --- a/src/USER-HDNNP/pair_hdnnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -383,22 +383,9 @@ void PairHDNNP::handleExtrapolationWarnings() MPI_Reduce(&numExtrapolationWarningsSummary, &globalEW, 1, MPI_LONG, MPI_SUM, 0, world); // Write to screen or logfile. - if(comm->me == 0) { - if(screen) { - fprintf(screen, - "### NNP EW SUMMARY ### TS: %10ld EW %10ld EWPERSTEP %10.3E\n", - update->ntimestep, - globalEW, - double(globalEW) / showewsum); - } - if(logfile) { - fprintf(logfile, - "### NNP EW SUMMARY ### TS: %10ld EW %10ld EWPERSTEP %10.3E\n", - update->ntimestep, - globalEW, - double(globalEW) / showewsum); - } - } + if(comm->me == 0) + utils::logmesg(lmp,"### NNP EW SUMMARY ### TS: {:10d} EW {:10d} EWPERSTEP {:10.3e}\n", + update->ntimestep, globalEW, double(globalEW) / showewsum); // Reset summary counter. numExtrapolationWarningsSummary = 0; } From 9f363f219fcbba41606503df768b851916a88de0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 16:57:52 -0400 Subject: [PATCH 29/46] silence compiler warning --- src/USER-HDNNP/pair_hdnnp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-HDNNP/pair_hdnnp.cpp b/src/USER-HDNNP/pair_hdnnp.cpp index 9af39a80fa..51f3460ab7 100644 --- a/src/USER-HDNNP/pair_hdnnp.cpp +++ b/src/USER-HDNNP/pair_hdnnp.cpp @@ -280,7 +280,7 @@ void PairHDNNP::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairHDNNP::init_one(int i, int j) +double PairHDNNP::init_one(int, int) { return maxCutoffRadius; } From c0b25853cfa5edf8deabd67e363aca9372b30743 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 May 2021 17:12:11 -0400 Subject: [PATCH 30/46] more cmake tweaks --- cmake/Modules/Packages/USER-HDNNP.cmake | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 81719beae1..368f84f11f 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -38,11 +38,12 @@ if(DOWNLOAD_N2P2) UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND make -f makefile libnnpif ${N2P2_BUILD_OPTIONS} + BUILD_ALWAYS YES INSTALL_COMMAND "" BUILD_IN_SOURCE 1 LOG_BUILD ON SOURCE_SUBDIR src/ - #BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a + BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a ) ExternalProject_get_property(n2p2_build SOURCE_DIR) # n2p2 core library "libnnp" @@ -64,8 +65,6 @@ if(DOWNLOAD_N2P2) add_dependencies(LAMMPS::N2P2 n2p2_build) file(MAKE_DIRECTORY "${SOURCE_DIR}/include") file(MAKE_DIRECTORY "${SOURCE_DIR}/lib") - file(TOUCH "${SOURCE_DIR}/lib/lammps-extra.cmake") - include("${SOURCE_DIR}/lib/lammps-extra.cmake") else() find_package(N2P2) if(NOT N2P2_FOUND) From 95427b1fda2fc54ceea3736e8e28337dc3b9ade9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 07:08:45 -0400 Subject: [PATCH 31/46] add support for building with Windows including cross-compilation and MPI-2 --- cmake/Modules/Packages/USER-HDNNP.cmake | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 368f84f11f..74b815ff42 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -23,6 +23,13 @@ if(DOWNLOAD_N2P2) if(NOT BUILD_MPI) set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI") + else() + # get path to MPI include directory when cross-compiling to windows + if((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING) + get_target_property(N2P2_MPI_INCLUDE MPI::MPI_CXX INTERFACE_INCLUDE_DIRECTORIES) + set(N2P2_PROJECT_OPTIONS "-I ${N2P2_MPI_INCLUDE} -DMPICH_SKIP_MPICXX=1") + set(MPI_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + endif() endif() string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) @@ -37,6 +44,7 @@ if(DOWNLOAD_N2P2) URL_MD5 ${N2P2_MD5} UPDATE_COMMAND "" CONFIGURE_COMMAND "" + PATCH_COMMAND sed -i -e "s/MPI_Pack(/MPI_Pack((void *) /" -e "s/MPI_Unpack(/MPI_Unpack((void *) /" src/libnnpif/LAMMPS/InterfaceLammps.cpp BUILD_COMMAND make -f makefile libnnpif ${N2P2_BUILD_OPTIONS} BUILD_ALWAYS YES INSTALL_COMMAND "" @@ -56,6 +64,10 @@ if(DOWNLOAD_N2P2) set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libnnpif.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include") + if(BUILD_MPI) + set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES + INTERFACE_LINK_LIBRARIES MPI::MPI_CXX) + endif() # Put libnnp, libnnpif and include directory together. add_library(LAMMPS::N2P2 INTERFACE IMPORTED) set_property(TARGET LAMMPS::N2P2 PROPERTY From 01a94af21770c4e63e407a4ad6a954ba73a4603d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 08:01:45 -0400 Subject: [PATCH 32/46] small doc update / whitespace fix --- doc/src/pair_hdnnp.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/src/pair_hdnnp.rst b/doc/src/pair_hdnnp.rst index 6362a6b967..e4c18f0fd7 100644 --- a/doc/src/pair_hdnnp.rst +++ b/doc/src/pair_hdnnp.rst @@ -16,7 +16,7 @@ Syntax * value depends on the preceding keyword: .. parsed-literal:: - + *dir* value = directory directory = Path to HDNNP configuration files *showew* value = *yes* or *no* @@ -73,16 +73,15 @@ types, the command pair_coeff * * H H O NULL -maps types 1 and 2 to the element "H", type 3 to "O" and type 4 is not mapped -(indicated by NULL). Atoms of an unmapped type are ignored by the HDNNP, i.e. -they do not contribute in the evaluation of HDNNP energies and forces. This may -be useful in a setup with multiple pair styles (see :doc:`pair_hybrid -`). +maps atom types 1 and 2 to the element "H", type 3 to "O" and type 4 is not mapped +(indicated by NULL). Atoms mapped to NULL are ignored by the HDNNP calculation, +i.e. they do not contribute in any way to the evaluation of HDNNP energies and forces. +This may be useful in a setup with :doc: `hybrid pair styles `. ---- The mandatory pair style argument *cutoff* must match the short-range cutoff radius -of the HDNNP. This corresponds to the maximum cutoff radius of all symmetry +of the HDNNP. This corresponds to the maximum cutoff radius of all symmetry functions (the atomic environment descriptors of HDNNPs) used. .. note:: From 3083756a6492ec32afcab9399d51ca3122d71062 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 08:03:29 -0400 Subject: [PATCH 33/46] include USER-HDNNP in MinGW64 cross-compilation build --- cmake/presets/mingw-cross.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index e622211190..c72e86744e 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -3,7 +3,7 @@ set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU PERI POEMS QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI USER-ATC USER-AWPMD USER-BOCS USER-BROWNIAN USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF - USER-FEP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESODPD + USER-FEP USER-HDNNP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESODPD USER-MESONT USER-MISC USER-MGPT USER-MOFFF USER-MOLFILE USER-OMP USER-PACE USER-PHONON USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF From 450503cc424dec84e58b638ab3eb01de6fedb5f7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 10:30:38 -0400 Subject: [PATCH 34/46] pass C++ standard setting flag to N2P2 make (needed for macOS' xcode) --- cmake/Modules/Packages/USER-HDNNP.cmake | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 74b815ff42..aea362d232 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -11,14 +11,17 @@ if(DOWNLOAD_N2P2) mark_as_advanced(N2P2_URL) mark_as_advanced(N2P2_MD5) - if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") set(N2P2_COMP llvm) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + set(N2P2_CXX_STD "-std=c++11") + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") set(N2P2_COMP intel) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(N2P2_CXX_STD "-std=c++11") + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") set(N2P2_COMP gnu) + set(N2P2_CXX_STD "-std=c++11") else() # default - set(N2P2_COMP gnu) + set(N2P2_COMP "") endif() if(NOT BUILD_MPI) @@ -33,7 +36,7 @@ if(DOWNLOAD_N2P2) endif() string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) - set(N2P2_BUILD_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") + set(N2P2_BUILD_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} ${N2P2_CXX_STD}") set(N2P2_BUILD_OPTIONS INTERFACES=LAMMPS COMP=${N2P2_COMP} "PROJECT_OPTIONS=${N2P2_PROJECT_OPTIONS}" "PROJECT_CC=${CMAKE_CXX_COMPILER}" "PROJECT_MPICC=${MPI_CXX_COMPILER}" "PROJECT_CFLAGS=${N2P2_BUILD_FLAGS}") message(STATUS "N2P2 BUILD OPTIONS: ${N2P2_BUILD_OPTIONS}") From 5e2b97812e22674185045c77535097ae6c3862c7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 10:33:06 -0400 Subject: [PATCH 35/46] update sed command for BSD sed which doesn't like multiple -e options --- cmake/Modules/Packages/USER-HDNNP.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index aea362d232..df1341fd84 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -47,7 +47,7 @@ if(DOWNLOAD_N2P2) URL_MD5 ${N2P2_MD5} UPDATE_COMMAND "" CONFIGURE_COMMAND "" - PATCH_COMMAND sed -i -e "s/MPI_Pack(/MPI_Pack((void *) /" -e "s/MPI_Unpack(/MPI_Unpack((void *) /" src/libnnpif/LAMMPS/InterfaceLammps.cpp + PATCH_COMMAND sed -i -e "s/\\(MPI_\\(P\\|Unp\\)ack(\\)/\\1(void *) /" src/libnnpif/LAMMPS/InterfaceLammps.cpp BUILD_COMMAND make -f makefile libnnpif ${N2P2_BUILD_OPTIONS} BUILD_ALWAYS YES INSTALL_COMMAND "" From 14cb45c1613fb94c44392a29e89ff55ed7b4b12e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 10:40:55 -0400 Subject: [PATCH 36/46] xcode compiler may be reported as AppleClang instead of Clang --- cmake/CMakeLists.txt | 1 + cmake/Modules/Packages/USER-HDNNP.cmake | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9856a14e33..98b9aa51ca 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -234,6 +234,7 @@ if(BUILD_OMP) if (((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)) OR (CMAKE_CXX_COMPILER_ID STREQUAL "PGI") OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0))) # GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts. diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index df1341fd84..6770ed112b 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -11,7 +11,7 @@ if(DOWNLOAD_N2P2) mark_as_advanced(N2P2_URL) mark_as_advanced(N2P2_MD5) - if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) set(N2P2_COMP llvm) set(N2P2_CXX_STD "-std=c++11") elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") From 42ef13bc06c89ba5baa0c4fe80dcbb403493e6c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 11:19:54 -0400 Subject: [PATCH 37/46] enable C++11 for compiling N2P2 lib with PGI --- cmake/Modules/Packages/USER-HDNNP.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 6770ed112b..147501a7d7 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -20,6 +20,9 @@ if(DOWNLOAD_N2P2) elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") set(N2P2_COMP gnu) set(N2P2_CXX_STD "-std=c++11") + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "PGI") + set(N2P2_COMP gnu) + set(N2P2_CXX_STD "--c++11") else() # default set(N2P2_COMP "") endif() From 8b76f6ac63eeb77a1718cbcbdcbb3db50483fb30 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 11:28:06 -0400 Subject: [PATCH 38/46] disable debug settings and pass platform "ar" program --- cmake/Modules/Packages/USER-HDNNP.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 147501a7d7..3376feea88 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -40,8 +40,9 @@ if(DOWNLOAD_N2P2) string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) set(N2P2_BUILD_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} ${N2P2_CXX_STD}") - set(N2P2_BUILD_OPTIONS INTERFACES=LAMMPS COMP=${N2P2_COMP} "PROJECT_OPTIONS=${N2P2_PROJECT_OPTIONS}" - "PROJECT_CC=${CMAKE_CXX_COMPILER}" "PROJECT_MPICC=${MPI_CXX_COMPILER}" "PROJECT_CFLAGS=${N2P2_BUILD_FLAGS}") + set(N2P2_BUILD_OPTIONS INTERFACES=LAMMPS COMP=${N2P2_COMP} "PROJECT_OPTIONS=${N2P2_PROJECT_OPTIONS}" "PROJECT_DEBUG=" + "PROJECT_CC=${CMAKE_CXX_COMPILER}" "PROJECT_MPICC=${MPI_CXX_COMPILER}" "PROJECT_CFLAGS=${N2P2_BUILD_FLAGS}" + "PROJECT_AR=${CMAKE_CXX_COMPILER_AR}") message(STATUS "N2P2 BUILD OPTIONS: ${N2P2_BUILD_OPTIONS}") include(ExternalProject) From 076412b7ac3f2b8091c6ac44a74f0dc273a6b893 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 11:35:40 -0400 Subject: [PATCH 39/46] allow compiler specific ar --- cmake/Modules/Packages/USER-HDNNP.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 3376feea88..f0bfc420d4 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -27,6 +27,12 @@ if(DOWNLOAD_N2P2) set(N2P2_COMP "") endif() + if(CMAKE_CXX_COMPILER_AR) + set(N2P2_AR ${CMAKE_CXX_COMPILER_AR}) + else() + set(N2P2_AR ${CMAKE_AR}) + endif() + if(NOT BUILD_MPI) set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI") else() @@ -42,7 +48,7 @@ if(DOWNLOAD_N2P2) set(N2P2_BUILD_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} ${N2P2_CXX_STD}") set(N2P2_BUILD_OPTIONS INTERFACES=LAMMPS COMP=${N2P2_COMP} "PROJECT_OPTIONS=${N2P2_PROJECT_OPTIONS}" "PROJECT_DEBUG=" "PROJECT_CC=${CMAKE_CXX_COMPILER}" "PROJECT_MPICC=${MPI_CXX_COMPILER}" "PROJECT_CFLAGS=${N2P2_BUILD_FLAGS}" - "PROJECT_AR=${CMAKE_CXX_COMPILER_AR}") + "PROJECT_AR=${N2P2_AR}") message(STATUS "N2P2 BUILD OPTIONS: ${N2P2_BUILD_OPTIONS}") include(ExternalProject) From eae4efdbde957e9a8cc8a1589ba1433802098c07 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 11:53:35 -0400 Subject: [PATCH 40/46] silence PGI compiler warnings --- src/RIGID/fix_rigid_nh.cpp | 2 +- src/USER-BROWNIAN/fix_brownian_asphere.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index aaaabdddf0..40e3c2d1c3 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -823,7 +823,7 @@ void FixRigidNH::nhc_press_integrate() double tb_mass = kt / (p_freq_max * p_freq_max); q_b[0] = dimension * dimension * tb_mass; - for (int i = 1; i < p_chain; i++) { + for (i = 1; i < p_chain; i++) { q_b[i] = tb_mass; f_eta_b[i] = q_b[i-1] * eta_dot_b[i-1] * eta_dot_b[i-1] - kt; f_eta_b[i] /= q_b[i]; diff --git a/src/USER-BROWNIAN/fix_brownian_asphere.cpp b/src/USER-BROWNIAN/fix_brownian_asphere.cpp index 7f5a09f4a5..7805179f9a 100644 --- a/src/USER-BROWNIAN/fix_brownian_asphere.cpp +++ b/src/USER-BROWNIAN/fix_brownian_asphere.cpp @@ -73,7 +73,6 @@ void FixBrownianAsphere::init() double f_rot[3]; double *quat; - int *ellipsoid = atom->ellipsoid; AtomVecEllipsoid::Bonus *bonus = avec->bonus; double Q[3][3]; From 6fe5c338a8ff13c1503bf3f7c53feaf20b6ff59d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 11:54:35 -0400 Subject: [PATCH 41/46] add comments to document USER-HDNNP cmake scripting --- cmake/Modules/Packages/USER-HDNNP.cmake | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index f0bfc420d4..d5e3f97ab2 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -11,28 +11,34 @@ if(DOWNLOAD_N2P2) mark_as_advanced(N2P2_URL) mark_as_advanced(N2P2_MD5) + # adjust settings from detected compiler to compiler platform in n2p2 library + # set compiler specific flag to turn on C++11 syntax (required on macOS and CentOS 7) if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) set(N2P2_COMP llvm) set(N2P2_CXX_STD "-std=c++11") - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(N2P2_COMP intel) set(N2P2_CXX_STD "-std=c++11") - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(N2P2_COMP gnu) set(N2P2_CXX_STD "-std=c++11") - elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "PGI") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "PGI") set(N2P2_COMP gnu) set(N2P2_CXX_STD "--c++11") else() # default set(N2P2_COMP "") endif() + # pass on archive creator command. prefer compiler specific version, if set. + # important when using cross compiler. if(CMAKE_CXX_COMPILER_AR) set(N2P2_AR ${CMAKE_CXX_COMPILER_AR}) else() set(N2P2_AR ${CMAKE_AR}) endif() + # adjust compilation of n2p2 library to whether MPI is requested in LAMMPS or not + # need special care for compiling for MPICH2 with Linux-to-Windows cross compiler. if(NOT BUILD_MPI) set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI") else() @@ -44,13 +50,18 @@ if(DOWNLOAD_N2P2) endif() endif() + # override compiler (optimization) flags in n2p2 library to flags used for LAMMPS + # specifically -march=native can result in problems when compiling on HPC clusters or with a cross compiler + # this convoluted way gets correct quoting/escaping when configuring the external project string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) set(N2P2_BUILD_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} ${N2P2_CXX_STD}") set(N2P2_BUILD_OPTIONS INTERFACES=LAMMPS COMP=${N2P2_COMP} "PROJECT_OPTIONS=${N2P2_PROJECT_OPTIONS}" "PROJECT_DEBUG=" "PROJECT_CC=${CMAKE_CXX_COMPILER}" "PROJECT_MPICC=${MPI_CXX_COMPILER}" "PROJECT_CFLAGS=${N2P2_BUILD_FLAGS}" "PROJECT_AR=${N2P2_AR}") + # echo final flag for debugging message(STATUS "N2P2 BUILD OPTIONS: ${N2P2_BUILD_OPTIONS}") + # download compile n2p2 library. much patch MPI calls in LAMMPS interface to accommodate MPI-2 (e.g. for cross-compiling) include(ExternalProject) ExternalProject_Add(n2p2_build URL ${N2P2_URL} @@ -66,6 +77,8 @@ if(DOWNLOAD_N2P2) SOURCE_SUBDIR src/ BUILD_BYPRODUCTS /lib/libnnp.a /lib/libnnpif.a ) + + # create imported target LAMMPS::N2P2 from two libraries nnp and nnpif ExternalProject_get_property(n2p2_build SOURCE_DIR) # n2p2 core library "libnnp" add_library(LAMMPS::N2P2::LIBNNP UNKNOWN IMPORTED) @@ -77,17 +90,20 @@ if(DOWNLOAD_N2P2) set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES IMPORTED_LOCATION "${SOURCE_DIR}/lib/libnnpif.a" INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include") + # nnpif library has MPI calls if MPI is enabled, so we must link with MPI libs if(BUILD_MPI) set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES INTERFACE_LINK_LIBRARIES MPI::MPI_CXX) endif() - # Put libnnp, libnnpif and include directory together. + + # final step to define imported target add_library(LAMMPS::N2P2 INTERFACE IMPORTED) set_property(TARGET LAMMPS::N2P2 PROPERTY INTERFACE_LINK_LIBRARIES LAMMPS::N2P2::LIBNNPIF LAMMPS::N2P2::LIBNNP) target_link_libraries(lammps PRIVATE LAMMPS::N2P2) add_dependencies(LAMMPS::N2P2 n2p2_build) + # work around issues with older CMake versions file(MAKE_DIRECTORY "${SOURCE_DIR}/include") file(MAKE_DIRECTORY "${SOURCE_DIR}/lib") else() From 47507de276c2cac6a6febc2179d734539ae2bdb2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 16:26:36 -0400 Subject: [PATCH 42/46] libn2p2 uses M_PI which is non-standard and thus requires -std=gnu++11 with newer MinGW --- cmake/Modules/Packages/USER-HDNNP.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index d5e3f97ab2..523aa6d543 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -21,7 +21,7 @@ if(DOWNLOAD_N2P2) set(N2P2_CXX_STD "-std=c++11") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(N2P2_COMP gnu) - set(N2P2_CXX_STD "-std=c++11") + set(N2P2_CXX_STD "-std=gnu++11") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "PGI") set(N2P2_COMP gnu) set(N2P2_CXX_STD "--c++11") @@ -94,6 +94,9 @@ if(DOWNLOAD_N2P2) if(BUILD_MPI) set_target_properties(LAMMPS::N2P2::LIBNNPIF PROPERTIES INTERFACE_LINK_LIBRARIES MPI::MPI_CXX) + if((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING) + add_dependencies(LAMMPS::N2P2::LIBNNPIF MPI::MPI_CXX) + endif() endif() # final step to define imported target From 6a41109cde2c0b7024143baddc373046ea4dd786 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 22 May 2021 18:30:25 -0400 Subject: [PATCH 43/46] work around compatibility issues with MPI and classic intel compilers --- cmake/Modules/Packages/USER-HDNNP.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 523aa6d543..41d066a235 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -48,6 +48,11 @@ if(DOWNLOAD_N2P2) set(N2P2_PROJECT_OPTIONS "-I ${N2P2_MPI_INCLUDE} -DMPICH_SKIP_MPICXX=1") set(MPI_CXX_COMPILER ${CMAKE_CXX_COMPILER}) endif() + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + get_target_property(N2P2_MPI_INCLUDE MPI::MPI_CXX INTERFACE_INCLUDE_DIRECTORIES) + set(N2P2_PROJECT_OPTIONS "-I ${N2P2_MPI_INCLUDE} -DMPICH_SKIP_MPICXX=1") + set(MPI_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + endif() endif() # override compiler (optimization) flags in n2p2 library to flags used for LAMMPS From c55997abca9a133d14684ed076757e58ceee9cae Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Tue, 25 May 2021 14:51:55 -0600 Subject: [PATCH 44/46] Minor edits --- doc/src/Build_development.rst | 2 +- doc/src/pair_hdnnp.rst | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/src/Build_development.rst b/doc/src/Build_development.rst index cc47a617ff..e91c69221a 100644 --- a/doc/src/Build_development.rst +++ b/doc/src/Build_development.rst @@ -28,7 +28,7 @@ variable VERBOSE set to 1: ---------- -.. _clang-tidy +.. _clang-tidy: Enable static code analysis with clang-tidy ------------------------------------------- diff --git a/doc/src/pair_hdnnp.rst b/doc/src/pair_hdnnp.rst index e4c18f0fd7..77a87642c4 100644 --- a/doc/src/pair_hdnnp.rst +++ b/doc/src/pair_hdnnp.rst @@ -76,7 +76,7 @@ types, the command maps atom types 1 and 2 to the element "H", type 3 to "O" and type 4 is not mapped (indicated by NULL). Atoms mapped to NULL are ignored by the HDNNP calculation, i.e. they do not contribute in any way to the evaluation of HDNNP energies and forces. -This may be useful in a setup with :doc: `hybrid pair styles `. +This may be useful in a setup with :doc:`hybrid pair styles `. ---- @@ -108,8 +108,7 @@ warning may look like this: ### NNP EXTRAPOLATION WARNING ### STRUCTURE: 0 ATOM: 119 ELEMENT: Cu SYMFUNC: 32 TYPE: 3 VALUE: 2.166E-02 MIN: 2.003E-05 MAX: 1.756E-02 -stating that the value 2.166E-02 of symmetry function 32 of type 3 (angular -narrow), element Cu (see the log file for a symmetry function listing) was out +stating that the value 2.166E-02 of symmetry function 32 of type 3 (Narrow Angular symmetry function), element Cu (see the log file for a symmetry function listing) was out of bounds (maximum in ``scaling.data`` is 1.756E-02) for atom 119. Here, the atom index refers to the LAMMPS tag (global index) and the structure index is used to print out the MPI rank the atom belongs to. From c6bf7688264460bd9bb3d002cce90ade76ea8d1d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 May 2021 16:56:41 -0400 Subject: [PATCH 45/46] update list of packages included with cross-compilation --- cmake/presets/mingw-cross.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index c72e86744e..ab2b9f15a3 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -2,8 +2,8 @@ set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KSPACE LATTE MANYBODY MC MISC MLIAP MOLECULE OPT PERI POEMS QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI USER-ATC USER-AWPMD USER-BOCS USER-BROWNIAN USER-CGDNA USER-CGSDK - USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF - USER-FEP USER-HDNNP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESODPD + USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP + USER-HDNNP USER-INTEL USER-MANIFOLD USER-MDI USER-MEAMC USER-MESODPD USER-MESONT USER-MISC USER-MGPT USER-MOFFF USER-MOLFILE USER-OMP USER-PACE USER-PHONON USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF From 5b548879a70c6210450700063338ab5ffaf177a1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 May 2021 14:37:31 -0400 Subject: [PATCH 46/46] tell CMake to export all symbols when building .dlls on windows this needs a special treatment when compiling with the MinGW cross-compiler --- cmake/CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 35e6b2f740..cc150666bb 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -91,6 +91,11 @@ set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions") +# export all symbols when building a .dll file on windows +if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND BUILD_SHARED_LIBS) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +endif() + ######################################################################## # User input options # ######################################################################## @@ -120,6 +125,12 @@ file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) file(GLOB MAIN_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp) list(REMOVE_ITEM ALL_SOURCES ${MAIN_SOURCES}) add_library(lammps ${ALL_SOURCES}) + +# tell CMake to export all symbols to a .dll on Windows with MinGW cross-compilers +if(BUILD_SHARED_LIBS AND (CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING) + set_target_properties(lammps PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols") +endif() + add_executable(lmp ${MAIN_SOURCES}) target_link_libraries(lmp PRIVATE lammps) set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) @@ -162,6 +173,7 @@ if(NOT CMAKE_CROSSCOMPILING) find_package(MPI QUIET) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) else() + set(MPI_CXX_SKIP_MPICXX TRUE) option(BUILD_MPI "Build MPI version" OFF) endif()