From c59b3439c682430e063270b42fa58b51e2ec167d Mon Sep 17 00:00:00 2001 From: Cyril Falvo Date: Tue, 3 Jul 2018 16:07:15 +0200 Subject: [PATCH 001/372] changes the values of some parameters in REBO in accordance to the original Brenner paper --- potentials/CH.rebo | 37595 +++++++++++++++++++++++++++++++++++ src/MANYBODY/pair_rebo.cpp | 264 +- src/MANYBODY/pair_rebo.h | 1 + 3 files changed, 37855 insertions(+), 5 deletions(-) create mode 100644 potentials/CH.rebo diff --git a/potentials/CH.rebo b/potentials/CH.rebo new file mode 100644 index 0000000000..08b1b19dc2 --- /dev/null +++ b/potentials/CH.rebo @@ -0,0 +1,37595 @@ +# DATE: 2018-7-3 CONTRIBUTOR: Cyril Falvo, cyril.falvo@u-psud.fr +# REBO2 Brenner potential modified from CH.airebo +# Cite as D. W. Brenner, O. A. Shenderova, J. A. Harrison, S. J. Stuart, B. Ni, and S. B. Sinnott, +# "A second- generation reactive empirical bond order (rebo) potential energy expression for hydrocarbons.", +# J. Phys. Cond. Mat., 14:783, 2002. + +1.7 rcmin_CC +1.3 rcmin_CH +1.1 rcmin_HH +2.0 rcmax_CC +1.8 rcmax_CH +1.7 rcmax_HH +2.0 rcmaxp_CC +1.6 rcmaxp_CH +1.7 rcmaxp_HH +0.1 smin +2.0 Nmin +3.0 Nmax +3.2 NCmin +3.7 NCmax +0.3134602960833 Q_CC +0.340775728 Q_CH +0.370471487045 Q_HH +4.7465390606595 alpha_CC +4.10254983 alpha_CH +3.536298648 alpha_HH +10953.544162170 A_CC +149.94098723 A_CH +32.817355747 A_HH +12388.79197798 BIJc_CC1 +17.56740646509 BIJc_CC2 +30.71493208065 BIJc_CC3 +32.3551866587 BIJc_CH1 +0.0 BIJc_CH2 +0.0 BIJc_CH3 +29.632593 BIJc_HH1 +0.0 BIJc_HH2 +0.0 BIJc_HH3 +4.7204523127 Beta_CC1 +1.4332132499 Beta_CC2 +1.3826912506 Beta_CC3 +1.434458059249837 Beta_CH1 +0.0 Beta_CH2 +0.0 Beta_CH3 +1.71589217 Beta_HH1 +1.0 Beta_HH2 +1.0 Beta_HH3 +0.0 rho_CC +1.09 rho_CH +0.7415887 rho_HH +3.4 rcLJmin_CC +3.025 rcLJmin_CH +2.65 rcLJmin_HH +3.816370964 rcLJmax_CC +3.395447696 rcLJmax_CH +2.974524428 rcLJmax_HH +0.77 bLJmin_CC +0.75 bLJmin_CH +0.32 bLJmin_HH +0.81 bLJmax_CC +0.9 bLJmax_CH +0.42 bLJmax_HH +0.002843732471143 epsilon_CC +0.002064935027177 epsilon_CH +0.001499422575693 epsilon_HH +3.4 sigma_CC +3.025 sigma_CH +2.65 sigma_HH +0.3078851086 epsilonT_CCCC +0.1786600912 epsilonT_CCCH +0.1249753356 epsilonT_HCCH + +# gC1 and gC2 + +5 +-1.0 +-0.6666666667 +-0.5 +-0.3333333333 +1.0 + + 0.2816950000 + 1.0627430000 + 2.1363075000 + 2.5334145000 + 1.5544035000 + 0.3862485000 + 0.2827390000 + 1.0718770000 + 2.1681365000 + 2.5885710000 + 1.6019100000 + 0.4025160000 + 0.6900250000 + 5.4601600000 + 23.0108000000 + 54.9086400000 + 68.6124000000 + 34.7051520000 + 0.2718560918 + 0.4892740137 + -0.4328177539 + -0.5616817383 + 1.2708702246 + -0.0375008379 + + 0.2816950000 + 1.0627430000 + 2.1363075000 + 2.5334145000 + 1.5544035000 + 0.3862485000 + 0.2827390000 + 1.0718770000 + 2.1681365000 + 2.5885710000 + 1.6019100000 + 0.4025160000 + 0.6900250000 + 5.4601600000 + 23.0108000000 + 54.9086400000 + 68.6124000000 + 34.7051520000 + 0.3754514434 + 1.4072691309 + 2.2551320117 + 2.0288747461 + 1.4269207324 + 0.5063519355 + +# gH + +4 +-1.0 +-0.8333333333 +-0.5 +1.0 + + 270.4568000026 + 1549.6358000143 + 3781.7719000316 + 4582.1544000348 + 2721.4308000191 + 630.6336000042 + 16.9534406250 + -21.0823875000 + -102.4683000000 + -210.6432299999 + -229.8471299999 + -94.9946400000 + 19.0650249321 + 2.0177562840 + -2.5664219198 + 3.2913322346 + -2.6535615062 + 0.8376699753 + +# pCC + +4 +0.0 +4.0 +0.0 +4.0 + + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0986400000 + 0.0657600000 + 0.0000000000 + 0.0000000000 + 0.0657600000 + -0.0438400000 + -0.0025000000 + 0.0060000000 + -0.0045000000 + 0.0010000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2339100000 + -0.6402960000 + 0.4802220000 + -0.1067160000 + -0.1559400000 + 0.4268640000 + -0.3201480000 + 0.0711440000 + 0.4650000000 + -0.5985000000 + 0.2493750000 + -0.0332500000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.9074060000 + 2.4787080000 + -1.0327950000 + 0.1377060000 + 1.2716040000 + -1.6524720000 + 0.6885300000 + -0.0918040000 + -1.2900000000 + 1.1610000000 + -0.3386250000 + 0.0322500000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.8700000000 + -3.4830000000 + 1.0158750000 + -0.0967500000 + -2.5800000000 + 2.3220000000 + -0.6772500000 + 0.0645000000 + -0.1380150000 + 0.0000000000 + 0.5932650000 + -0.3955100000 + 0.3312360000 + 0.0000000000 + -1.5027480000 + 1.0018320000 + -0.2484270000 + 0.0000000000 + 1.1270610000 + -0.7513740000 + 0.0552060000 + 0.0000000000 + -0.2504580000 + 0.1669720000 + -0.3654800000 + 1.0205280000 + -0.7653960000 + 0.1700880000 + 1.0582800000 + -2.9471040000 + 2.2103280000 + -0.4911840000 + -0.7937100000 + 2.2103280000 + -1.6577460000 + 0.3683880000 + 0.1763800000 + -0.4911840000 + 0.3683880000 + -0.0818640000 + 0.6832080000 + -0.9109440000 + 0.3795600000 + -0.0506080000 + -2.0496240000 + 2.7328320000 + -1.1386800000 + 0.1518240000 + 1.5372180000 + -2.0496240000 + 0.8540100000 + -0.1138680000 + -0.3416040000 + 0.4554720000 + -0.1897800000 + 0.0253040000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.7452810000 + 0.0000000000 + -2.4934230000 + 1.6622820000 + -0.9937080000 + 0.0000000000 + 3.3245640000 + -2.2163760000 + 0.4140450000 + 0.0000000000 + -1.3852350000 + 0.9234900000 + -0.0552060000 + 0.0000000000 + 0.1846980000 + -0.1231320000 + 0.3434400000 + -1.0303200000 + 0.7727400000 + -0.1717200000 + -0.4579200000 + 1.3737600000 + -1.0303200000 + 0.2289600000 + 0.1908000000 + -0.5724000000 + 0.4293000000 + -0.0954000000 + -0.0254400000 + 0.0763200000 + -0.0572400000 + 0.0127200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + +# pCH + +4 +0.0 +4.0 +0.0 +4.0 + + 0.0000000000 + 0.0000000000 + 0.6280110000 + -0.4186740000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0300000000 + 0.0000000000 + -3.1001400000 + 2.0667600000 + -0.0200000000 + 0.0000000000 + 2.0667600000 + -1.3778400000 + -1.1595980000 + 3.2854440000 + -2.4640830000 + 0.5475740000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4966950000 + -3.6001800000 + 2.7001350000 + -0.6000300000 + -0.3311300000 + 2.4001200000 + -1.8000900000 + 0.4000200000 + -6.7698340000 + 8.6212080000 + -3.5921700000 + 0.4789560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 44.5208070000 + -58.1453640000 + 24.2272350000 + -3.2302980000 + -29.6805380000 + 38.7635760000 + -16.1514900000 + 2.1535320000 + 24.3142400000 + -21.8828160000 + 6.3824880000 + -0.6078560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -72.9427200000 + 65.6484480000 + -19.1474640000 + 1.8235680000 + 48.6284800000 + -43.7656320000 + 12.7649760000 + -1.2157120000 + -0.6502100000 + 0.0000000000 + -1.0558290000 + 0.7038860000 + 1.5845040000 + 0.0000000000 + 1.5611040000 + -1.0407360000 + -1.1883780000 + 0.0000000000 + -1.1708280000 + 0.7805520000 + 0.2640840000 + 0.0000000000 + 0.2601840000 + -0.1734560000 + 9.9867120000 + -26.3732760000 + 19.7799570000 + -4.3955460000 + -26.3537880000 + 68.3007840000 + -51.2255880000 + 11.3834640000 + 19.7653410000 + -51.2255880000 + 38.4191910000 + -8.5375980000 + -4.3922980000 + 11.3834640000 + -8.5375980000 + 1.8972440000 + -32.2817400000 + 43.0423200000 + -17.9343000000 + 2.3912400000 + 96.8452200000 + -129.1269600000 + 53.8029000000 + -7.1737200000 + -72.6339150000 + 96.8452200000 + -40.3521750000 + 5.3802900000 + 16.1408700000 + -21.5211600000 + 8.9671500000 + -1.1956200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.3172460000 + 0.0000000000 + 40.2945870000 + -26.8630580000 + 6.6795480000 + 0.0000000000 + -52.4957760000 + 34.9971840000 + -2.7831450000 + 0.0000000000 + 21.8732400000 + -14.5821600000 + 0.3710860000 + 0.0000000000 + -2.9164320000 + 1.9442880000 + -32.4571320000 + 97.3713960000 + -73.0285470000 + 16.2285660000 + 43.2761760000 + -129.8285280000 + 97.3713960000 + -21.6380880000 + -18.0317400000 + 54.0952200000 + -40.5714150000 + 9.0158700000 + 2.4042320000 + -7.2126960000 + 5.4095220000 + -1.2021160000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 24.6068000000 + 0.0000000000 + -73.8204000000 + 49.2136000000 + -22.1461200000 + 0.0000000000 + 66.4383600000 + -44.2922400000 + 6.4592850000 + 0.0000000000 + -19.3778550000 + 12.9185700000 + -0.6151700000 + 0.0000000000 + 1.8455100000 + -1.2303400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + +# piCC + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1952414550000000 + -0.1301609700000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1301609700000000 + 0.0867739800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1952414550000000 + -0.1301609700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2460512699999999 + -0.1640341799999999 + 0.0000000000000000 + 0.0000000000000000 + -0.1640341799999999 + 0.1093561200000001 + 0.0000000000000000 + 0.0000000000000000 + -0.1301609700000000 + 0.0867739800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1640341799999999 + 0.1093561200000001 + 0.0000000000000000 + 0.0000000000000000 + 0.1093561200000001 + -0.0729040800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1859428215000000 + 0.6024559355999999 + -0.4518419517000000 + 0.1004093226000000 + 0.1239618810000000 + -0.4016372904000000 + 0.3012279677999999 + -0.0669395484000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1859428215000000 + 0.6024559355999999 + -0.4518419517000000 + 0.1004093226000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3234498210000000 + 0.9186318863999997 + -0.6208630397999997 + 0.1076980643999998 + 0.2156332139999999 + -0.6124212575999999 + 0.4139086932000001 + -0.0717987096000001 + 0.1239618810000000 + -0.4016372904000000 + 0.3012279677999999 + -0.0669395484000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2156332139999999 + -0.6124212575999999 + 0.4139086932000001 + -0.0717987096000001 + -0.1437554760000001 + 0.4082808384000002 + -0.2759391288000001 + 0.0478658064000000 + 0.1388410212000000 + -0.1785098844000000 + 0.0743791185000000 + -0.0099172158000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4016472399000000 + 0.5355296532000000 + -0.2231373555000000 + 0.0297516474000000 + 0.2677648266000000 + -0.3570197688000000 + 0.1487582370000000 + -0.0198344316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4016472399000000 + 0.5355296532000000 + -0.2231373555000000 + 0.0297516474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.5450778986000007 + -5.3987902596000001 + 2.0451633165000001 + -0.2545255422000000 + -3.0300519324000001 + 3.5991935063999998 + -1.3634422110000000 + 0.1696836948000000 + 0.2677648266000000 + -0.3570197688000000 + 0.1487582370000000 + -0.0198344316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0300519324000001 + 3.5991935063999998 + -1.3634422110000000 + 0.1696836948000000 + 2.0200346216000002 + -2.3994623376000002 + 0.9089614740000000 + -0.1131224632000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1101605377500000 + -0.0734403585000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1081921266000000 + 0.0721280844000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0811440949500000 + -0.0540960633000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0180320211000000 + 0.0120213474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5308662927499996 + 1.0205775285000001 + 0.0000000000000000 + 0.0000000000000000 + 4.2922496105999990 + -2.8614997404000002 + 0.0000000000000000 + 0.0000000000000000 + -3.1601247079499992 + 2.1067498053000002 + 0.0000000000000000 + 0.0000000000000000 + 0.6759999350999999 + -0.4506666234000001 + 0.0000000000000000 + 0.0000000000000000 + 1.0205775285000001 + -0.6803850190000000 + 0.0000000000000000 + 0.0000000000000000 + -2.8614997404000002 + 1.9076664936000003 + 0.0000000000000000 + 0.0000000000000000 + 2.1067498053000002 + -1.4044998702000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4506666234000001 + 0.3004444156000000 + -0.3953362375000001 + 1.0369354002000000 + -0.7777015501500000 + 0.1728225667000000 + 0.8000527127999999 + -2.0066802120000000 + 1.5050101590000000 + -0.3344467020000000 + -0.6000395345999999 + 1.5050101590000000 + -1.1287576192500000 + 0.2508350265000000 + 0.1333421188000000 + -0.3344467020000000 + 0.2508350265000000 + -0.0557411170000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3103306184999992 + -9.0968349185999990 + 6.7318116889499997 + -1.4555961530999999 + -8.5868161127999993 + 23.8242035591999937 + -17.5957091693999956 + 3.7890715931999996 + 6.3613620845999996 + -17.6319026693999987 + 13.0195943770499980 + -2.8024286948999997 + -1.3786360187999998 + 3.8132005931999995 + -2.8144931948999998 + 0.6052619321999999 + -2.2068870789999999 + 6.0645566123999997 + -4.4878744592999995 + 0.9703974353999998 + 5.7245440751999999 + -15.8828023728000005 + 11.7304727795999995 + -2.5260477287999996 + -4.2409080563999995 + 11.7546017795999980 + -8.6797295846999987 + 1.8682857965999997 + 0.9190906791999999 + -2.5421337287999997 + 1.8763287965999997 + -0.4035079547999999 + 1.4805008319000001 + -1.9673896319999999 + 0.8197456799999999 + -0.1092994240000000 + -3.5413013375999998 + 4.7217351167999997 + -1.9673896319999997 + 0.2623186176000000 + 2.6559760031999997 + -3.5413013375999993 + 1.4755422239999998 + -0.1967389632000000 + -0.5902168896000000 + 0.7869558527999999 + -0.3278982720000000 + 0.0437197696000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -19.2295206957000033 + 24.4584372960000032 + -9.9185720400000008 + 1.2982590720000002 + 48.8229586128000079 + -61.7340105504000007 + 24.9051738960000009 + -3.2480382528000007 + -36.6172189596000024 + 46.3005079128000006 + -18.6788804219999989 + 2.4360286896000005 + 8.1371597688000001 + -10.2890017584000013 + 4.1508623160000004 + -0.5413397088000000 + 12.8196804638000010 + -16.3056248640000021 + 6.6123813600000005 + -0.8655060480000000 + -32.5486390752000005 + 41.1560070336000052 + -16.6034492640000018 + 2.1653588352000002 + 24.4114793064000004 + -30.8670052752000004 + 12.4525869480000004 + -1.6240191264000001 + -5.4247731792000007 + 6.8593345056000006 + -2.7672415440000000 + 0.3608931392000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.2914572557999993 + -3.1368362039999997 + 0.9712843094999998 + -0.0996618390000000 + -7.9931075507999978 + 7.5284068895999994 + -2.3310823427999994 + 0.2391884136000000 + 5.9948306630999983 + -5.6463051671999986 + 1.7483117570999998 + -0.1793913102000000 + -1.3321845917999997 + 1.2547344815999997 + -0.3885137237999999 + 0.0398647356000000 + -2.1943048371999994 + 2.0912241359999992 + -0.6475228729999998 + 0.0664412260000000 + 5.3287383671999988 + -5.0189379263999987 + 1.5540548951999997 + -0.1594589424000000 + -3.9965537753999993 + 3.7642034447999992 + -1.1655411713999997 + 0.1195942068000000 + 0.8881230611999998 + -0.8364896543999999 + 0.2590091492000000 + -0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 51.2174335277999973 + -34.7252003400000007 + 7.7793458265000002 + -0.5762478390000000 + -125.8865034036000026 + 85.2980168160000147 + -19.1108755836000022 + 1.4156204136000001 + 98.0036935526999997 + -66.4204326120000133 + 14.8837136877000020 + -1.1024973102000000 + -23.3736279005999990 + 15.8476161360000010 + -3.5521839306000000 + 0.2631247356000000 + -34.1449556852000029 + 23.1501335600000040 + -5.1862305510000013 + 0.3841652260000000 + 83.9243356024000065 + -56.8653445440000098 + 12.7405837224000020 + -0.9437469424000001 + -65.3357957018000093 + 44.2802884080000041 + -9.9224757918000019 + 0.7349982068000001 + 15.5824186004000005 + -10.5650774240000018 + 2.3681226204000003 + -0.1754164904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.8699219402999923 + -9.8715457799999946 + 1.7195853929999991 + -0.0996618419999999 + -45.3977355935999753 + 23.6917098719999899 + -4.1270049431999976 + 0.2391884207999999 + 34.0686926951999851 + -17.7687824039999924 + 3.0952537073999986 + -0.1793913155999999 + -7.5798832655999968 + 3.9486183119999980 + -0.6878341571999995 + 0.0398647368000000 + -12.5799479601999984 + 6.5810305199999988 + -1.1463902619999997 + 0.0664412280000000 + 30.2651570623999930 + -15.7944732479999974 + 2.7513366287999990 + -0.1594589472000000 + -22.7124617967999924 + 11.8458549359999967 + -2.0635024715999997 + 0.1195942104000000 + 5.0532555103999988 + -2.6324122079999994 + 0.4585561047999999 + -0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.0321606498499998 + 4.6881070998999999 + 0.0000000000000000 + 0.0000000000000000 + 9.1366163297999989 + -6.0910775531999999 + 0.0000000000000000 + 0.0000000000000000 + -3.8069234707500001 + 2.5379489805000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5075897961000000 + -0.3383931974000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 24.1765592188500023 + -16.1177061459000015 + 0.0000000000000000 + 0.0000000000000000 + -30.8078686818000023 + 20.5385791212000015 + 0.0000000000000000 + 0.0000000000000000 + 12.6594244507500004 + -8.4396163005000009 + 0.0000000000000000 + 0.0000000000000000 + -1.6721732601000001 + 1.1147821734000001 + 0.0000000000000000 + 0.0000000000000000 + -16.1177061459000015 + 10.7451374305999998 + 0.0000000000000000 + 0.0000000000000000 + 20.5385791212000015 + -13.6923860807999986 + 0.0000000000000000 + 0.0000000000000000 + -8.4396163005000009 + 5.6264108669999997 + 0.0000000000000000 + 0.0000000000000000 + 1.1147821734000001 + -0.7431881155999999 + 1.7964189073000001 + -9.9371338973999990 + 7.4528504230499992 + -1.6561889829000001 + -2.4750911663999995 + 13.2495118631999986 + -9.9371338973999990 + 2.2082519771999998 + 1.0312879859999999 + -5.5206299429999994 + 4.1404724572499996 + -0.9201049905000001 + -0.1375050648000000 + 0.7360839924000000 + -0.5520629942999999 + 0.1226806654000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -44.4148786822999924 + 125.9369562125999806 + -94.4527171594499890 + 20.9894927020999980 + 57.1409193383999963 + -161.7845013575999928 + 121.3383760181999946 + -26.9640835595999988 + -23.5724663909999990 + 66.7014588990000021 + -50.0260941742499909 + 11.1169098164999998 + 3.1219955187999995 + -8.8305278531999996 + 6.6228958898999997 + -1.4717546421999999 + 30.4859639041999984 + -86.0604782867999916 + 64.5453587151000079 + -14.3434130477999986 + -39.2202895175999942 + 110.5595581391999929 + -82.9196686044000018 + 18.4265930231999988 + 16.1842872989999975 + -45.5939825580000004 + 34.1954869185000021 + -7.5989970929999995 + -2.1439049731999997 + 6.0371976743999998 + -4.5278982558000003 + 1.0061996123999999 + 41.0697356006999996 + -54.7530359903999937 + 22.8137649960000033 + -3.0418353327999998 + -52.4181452760000042 + 69.8908603680000056 + -29.1211918200000000 + 3.8828255760000001 + 21.8408938650000017 + -29.1211918200000000 + 12.1338299250000006 + -1.6178439899999999 + -2.9121191820000001 + 3.8828255760000001 + -1.6178439899999999 + 0.2157125320000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.7754249068999997 + 72.4365406656000062 + -30.1818919440000002 + 4.0242522591999998 + 71.7688591056000007 + -88.1435659967999925 + 36.7264858320000016 + -4.8968647776000003 + -29.9036912940000015 + 36.7264858320000016 + -15.3027024300000001 + 2.0403603240000003 + 3.9871588392000001 + -4.8968647776000003 + 2.0403603240000003 + -0.2720480432000001 + 34.4529747782000015 + -41.9835046752000025 + 17.4931269480000005 + -2.3324169264000001 + -41.7636522936000034 + 50.6527056287999997 + -21.1052940120000017 + 2.8140392016000000 + 17.4015217890000002 + -21.1052940120000017 + 8.7938725049999995 + -1.1725163339999998 + -2.3202029051999999 + 2.8140392016000000 + -1.1725163339999998 + 0.1563355111999999 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -22.5910445969999856 + 16.9389155015999862 + -5.2449352712999966 + 0.5381739305999996 + 29.8518848603999807 + -22.5852206687999839 + 6.9932470283999955 + -0.7175652407999995 + -12.4382853584999911 + 9.4105086119999921 + -2.9138529284999981 + 0.2989855169999998 + 1.6584380477999987 + -1.2547344815999988 + 0.3885137237999997 + -0.0398647356000000 + 15.0606963979999851 + -11.2926103343999884 + 3.4966235141999964 + -0.3587826203999996 + -19.9012565735999800 + 15.0568137791999828 + -4.6621646855999952 + 0.4783768271999995 + 8.2921902389999929 + -6.2736724079999924 + 1.9425686189999980 + -0.1993236779999998 + -1.1056253651999990 + 0.8364896543999990 + -0.2590091491999997 + 0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 132.0402867341999809 + -94.3691021639999832 + 21.4156989368999930 + -1.5863480693999996 + -133.2574315811999668 + 96.4624295519999748 + -21.9475812491999918 + 1.6257467591999992 + 44.7574818254999798 + -32.8519189799999864 + 7.4931545204999956 + -0.5550484829999996 + -5.0106466433999977 + 3.7277438639999976 + -0.8522720693999993 + 0.0631312643999999 + -88.0268578227999967 + 62.9127347760000006 + -14.2771326246000001 + 1.0575653796000002 + 88.8382877207999968 + -64.3082863680000116 + 14.6317208328000028 + -1.0838311728000001 + -29.8383212170000043 + 21.9012793200000040 + -4.9954363470000018 + 0.3700323220000001 + 3.3404310956000010 + -2.4851625760000013 + 0.5681813796000004 + -0.0420875096000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -104.3657106932998886 + 53.3063472119999489 + -9.2857611221999896 + 0.5381739467999993 + 139.1294649887998673 + -71.0751296159999271 + 12.3810148295999856 + -0.7175652623999991 + -58.0317834119999389 + 29.6146373399999696 + -5.1587561789999938 + 0.2989855259999996 + 7.7430087215999910 + -3.9486183119999954 + 0.6878341571999992 + -0.0398647367999999 + 69.5771404621999920 + -35.5375648079999991 + 6.1905074148000008 + -0.3587826312000001 + -92.7529766592000016 + 47.3834197440000082 + -8.2540098864000022 + 0.4783768416000003 + 38.6878556080000138 + -19.7430915600000105 + 3.4391707860000027 + -0.1993236840000002 + -5.1620058144000041 + 2.6324122080000025 + -0.4585561048000005 + 0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1796984025000000 + 0.1197989350000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5390952075000000 + -0.3593968050000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3593968050000000 + 0.2395978700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0598994675000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.7523780425000002 + -15.7744311360000005 + 11.8308233519999995 + -2.6290718559999999 + -6.7580597519999994 + 16.2193434048000000 + -12.1645075536000000 + 2.7032239007999999 + 1.9711007609999998 + -4.7306418263999994 + 3.5479813698000000 + -0.7884403043999999 + -0.1877238820000000 + 0.4505373168000000 + -0.3379029876000000 + 0.0750895528000000 + -7.0045704549999996 + 16.5234516479999982 + -12.3925887360000004 + 2.7539086080000001 + 6.7580597519999994 + -16.2193434048000000 + 12.1645075536000000 + -2.7032239007999999 + -1.9711007609999998 + 4.7306418263999994 + -3.5479813698000000 + 0.7884403043999999 + 0.1877238820000000 + -0.4505373168000000 + 0.3379029876000000 + -0.0750895528000000 + 1.7561266437000007 + -2.3348907144000020 + 0.9728711310000014 + -0.1297161508000003 + -0.0000000000000012 + 0.0000000000000029 + -0.0000000000000020 + 0.0000000000000004 + 0.0000000000000005 + -0.0000000000000012 + 0.0000000000000008 + -0.0000000000000002 + -0.0000000000000001 + 0.0000000000000002 + -0.0000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -46.0039935710999970 + 61.0691501591999995 + -25.4454792330000004 + 3.3927305643999999 + 36.4935226607999965 + -48.6580302144000001 + 20.2741792560000000 + -2.7032239007999999 + -10.6439441093999996 + 14.1919254792000000 + -5.9133022830000002 + 0.7884403043999999 + 1.0137089628000000 + -1.3516119503999999 + 0.5631716460000000 + -0.0750895528000000 + 44.1854485514000146 + -58.7342594448000099 + 24.4726081020000059 + -3.2630144136000014 + -36.4935226608000107 + 48.6580302144000143 + -20.2741792560000071 + 2.7032239008000012 + 10.6439441094000031 + -14.1919254792000071 + 5.9133022830000037 + -0.7884403044000006 + -1.0137089628000004 + 1.3516119504000006 + -0.5631716460000002 + 0.0750895528000001 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1101605377500000 + -0.0734403585000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5308662927499996 + 1.0205775285000001 + 0.0000000000000000 + 0.0000000000000000 + 1.0205775285000001 + -0.6803850190000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1081921266000000 + 0.0721280844000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.2922496105999990 + -2.8614997404000002 + 0.0000000000000000 + 0.0000000000000000 + -2.8614997404000002 + 1.9076664936000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0811440949500000 + -0.0540960633000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.1601247079499992 + 2.1067498053000002 + 0.0000000000000000 + 0.0000000000000000 + 2.1067498053000002 + -1.4044998702000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0180320211000000 + 0.0120213474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6759999350999999 + -0.4506666234000001 + 0.0000000000000000 + 0.0000000000000000 + -0.4506666234000001 + 0.3004444156000000 + -0.3953362375000001 + 1.0369354002000000 + -0.7777015501500000 + 0.1728225667000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3103306184999992 + -9.0968349185999990 + 6.7318116889499997 + -1.4555961531000001 + -2.2068870789999999 + 6.0645566123999997 + -4.4878744593000004 + 0.9703974354000000 + 0.8000527127999999 + -2.0066802120000000 + 1.5050101590000000 + -0.3344467020000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.5868161127999993 + 23.8242035591999972 + -17.5957091693999992 + 3.7890715932000001 + 5.7245440751999999 + -15.8828023728000005 + 11.7304727795999995 + -2.5260477288000001 + -0.6000395345999999 + 1.5050101590000000 + -1.1287576192500000 + 0.2508350265000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.3613620845999996 + -17.6319026693999987 + 13.0195943770500016 + -2.8024286949000006 + -4.2409080564000003 + 11.7546017796000015 + -8.6797295847000004 + 1.8682857965999999 + 0.1333421188000000 + -0.3344467020000000 + 0.2508350265000000 + -0.0557411170000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3786360188000000 + 3.8132005932000004 + -2.8144931949000003 + 0.6052619322000001 + 0.9190906792000001 + -2.5421337288000001 + 1.8763287966000000 + -0.4035079547999999 + 1.4805008319000001 + -1.9673896319999999 + 0.8197456799999999 + -0.1092994240000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -19.2295206957000033 + 24.4584372960000032 + -9.9185720400000008 + 1.2982590720000002 + 12.8196804638000010 + -16.3056248640000021 + 6.6123813600000005 + -0.8655060480000000 + -3.5413013375999998 + 4.7217351167999997 + -1.9673896319999997 + 0.2623186176000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 48.8229586128000079 + -61.7340105504000007 + 24.9051738960000009 + -3.2480382528000007 + -32.5486390752000005 + 41.1560070336000052 + -16.6034492640000018 + 2.1653588352000002 + 2.6559760031999997 + -3.5413013375999993 + 1.4755422239999998 + -0.1967389632000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -36.6172189596000024 + 46.3005079128000006 + -18.6788804219999989 + 2.4360286896000005 + 24.4114793064000004 + -30.8670052752000004 + 12.4525869480000004 + -1.6240191264000001 + -0.5902168896000000 + 0.7869558527999999 + -0.3278982720000000 + 0.0437197696000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 8.1371597688000001 + -10.2890017584000013 + 4.1508623160000004 + -0.5413397088000000 + -5.4247731792000007 + 6.8593345056000006 + -2.7672415440000000 + 0.3608931392000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.2914572557999993 + -3.1368362039999997 + 0.9712843094999998 + -0.0996618390000000 + -2.1943048371999994 + 2.0912241359999992 + -0.6475228729999998 + 0.0664412260000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.9931075507999978 + 7.5284068895999994 + -2.3310823427999994 + 0.2391884136000000 + 5.3287383671999988 + -5.0189379263999987 + 1.5540548951999997 + -0.1594589424000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9948306630999983 + -5.6463051671999986 + 1.7483117570999998 + -0.1793913102000000 + -3.9965537753999993 + 3.7642034447999992 + -1.1655411713999997 + 0.1195942068000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3321845917999997 + 1.2547344815999997 + -0.3885137237999999 + 0.0398647356000000 + 0.8881230611999998 + -0.8364896543999999 + 0.2590091492000000 + -0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 51.2174335277999973 + -34.7252003400000007 + 7.7793458265000002 + -0.5762478390000000 + -34.1449556852000029 + 23.1501335600000040 + -5.1862305510000013 + 0.3841652260000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -125.8865034036000026 + 85.2980168160000147 + -19.1108755836000022 + 1.4156204136000001 + 83.9243356024000065 + -56.8653445440000098 + 12.7405837224000020 + -0.9437469424000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 98.0036935526999997 + -66.4204326120000133 + 14.8837136877000020 + -1.1024973102000000 + -65.3357957018000093 + 44.2802884080000041 + -9.9224757918000019 + 0.7349982068000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -23.3736279005999990 + 15.8476161360000010 + -3.5521839306000000 + 0.2631247356000000 + 15.5824186004000005 + -10.5650774240000018 + 2.3681226204000003 + -0.1754164904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.8699219402999923 + -9.8715457799999946 + 1.7195853929999991 + -0.0996618419999999 + -12.5799479601999984 + 6.5810305199999988 + -1.1463902619999997 + 0.0664412280000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -45.3977355935999753 + 23.6917098719999899 + -4.1270049431999976 + 0.2391884207999999 + 30.2651570623999930 + -15.7944732479999974 + 2.7513366287999990 + -0.1594589472000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 34.0686926951999851 + -17.7687824039999924 + 3.0952537073999986 + -0.1793913155999999 + -22.7124617967999924 + 11.8458549359999967 + -2.0635024715999997 + 0.1195942104000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5798832655999968 + 3.9486183119999980 + -0.6878341571999995 + 0.0398647368000000 + 5.0532555103999988 + -2.6324122079999994 + 0.4585561047999999 + -0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.2228846869999987 + -2.8152564579999999 + 0.0000000000000000 + 0.0000000000000000 + -11.0322309923999988 + 7.3548206615999998 + 0.0000000000000000 + 0.0000000000000000 + 8.1954232442999988 + -5.4636154962000010 + 0.0000000000000000 + 0.0000000000000000 + -1.7862051654000000 + 1.1908034436000001 + 0.0000000000000000 + 0.0000000000000000 + -11.0322309923999988 + 7.3548206615999998 + 0.0000000000000000 + 0.0000000000000000 + 29.4624929663999993 + -19.6416619776000019 + 0.0000000000000000 + 0.0000000000000000 + -21.8606197247999994 + 14.5737464832000008 + 0.0000000000000000 + 0.0000000000000000 + 4.7529154943999998 + -3.1686103296000003 + 0.0000000000000000 + 0.0000000000000000 + 8.1954232442999988 + -5.4636154962000010 + 0.0000000000000000 + 0.0000000000000000 + -21.8606197247999994 + 14.5737464832000008 + 0.0000000000000000 + 0.0000000000000000 + 16.2182772935999999 + -10.8121848624000023 + 0.0000000000000000 + 0.0000000000000000 + -3.5253116208000002 + 2.3502077472000003 + 0.0000000000000000 + 0.0000000000000000 + -1.7862051654000000 + 1.1908034436000001 + 0.0000000000000000 + 0.0000000000000000 + 4.7529154943999998 + -3.1686103296000003 + 0.0000000000000000 + 0.0000000000000000 + -3.5253116208000002 + 2.3502077472000003 + 0.0000000000000000 + 0.0000000000000000 + 0.7659025824000001 + -0.5106017216000001 + -6.4539249160000001 + 18.7708587479999949 + -13.9570580609999997 + 3.0477524580000002 + 17.1048773232000002 + -49.5868839695999952 + 36.8269049772000017 + -8.0223086616000003 + -12.7236579923999980 + 36.8751629771999987 + -27.3839287329000030 + 5.9642314962000009 + 2.7808128872000002 + -8.0544806615999995 + 5.9803174962000005 + -1.3020514436000004 + 17.1048773232000002 + -49.5868839695999952 + 36.8269049772000017 + -8.0223086616000003 + -45.7490319551999889 + 132.4958518656000024 + -98.2821148992000104 + 21.3561259776000014 + 33.9967739664000064 + -98.4268888992000086 + 73.0028361744000023 + -15.8595944832000022 + -7.4148386592000008 + 21.4526419776000026 + -15.9078524832000010 + 3.4543543296000006 + -12.7236579923999997 + 36.8751629771999987 + -27.3839287329000030 + 5.9642314962000009 + 33.9967739663999993 + -98.4268888992000086 + 73.0028361744000165 + -15.8595944832000004 + -25.2613304747999976 + 73.1114166744000045 + -54.2205646307999984 + 11.7765708624000016 + 5.5086289944000004 + -15.9319814832000013 + 11.8127643624000012 + -2.5645157472000006 + 2.7808128872000002 + -8.0544806615999995 + 5.9803174962000005 + -1.3020514436000004 + -7.4148386592000008 + 21.4526419776000026 + -15.9078524832000010 + 3.4543543296000006 + 5.5086289944000004 + -15.9319814832000013 + 11.8127643624000012 + -2.5645157472000006 + -1.2008064432000003 + 3.4704403296000006 + -2.5725587472000004 + 0.5582257216000001 + 39.8894121000000013 + -50.7093326999999903 + 20.7656306250000000 + -2.7364611499999998 + -107.5650035999999830 + 136.5474131999999940 + -55.8049815000000038 + 7.3437953999999994 + 80.6737526999999801 + -102.4105598999999955 + 41.8537361250000046 + -5.5078465500000000 + -17.9275005999999983 + 22.7579021999999966 + -9.3008302500000006 + 1.2239659000000001 + -107.5650035999999972 + 136.5474131999999940 + -55.8049815000000038 + 7.3437953999999994 + 288.7152523199999905 + -365.7688358399999515 + 149.1343596000000105 + -19.5939748799999975 + -216.5364392399999645 + 274.3266268799999921 + -111.8507697000000007 + 14.6954811599999999 + 48.1192087200000032 + -60.9614726399999967 + 24.8557266000000006 + -3.2656624800000000 + 80.6737526999999943 + -102.4105598999999955 + 41.8537361250000046 + -5.5078465500000000 + -216.5364392400000213 + 274.3266268799999921 + -111.8507697000000007 + 14.6954811599999999 + 162.4023294299999804 + -205.7449701599999798 + 83.8880772750000006 + -11.0216108699999999 + -36.0894065399999988 + 45.7211044800000010 + -18.6417949500000013 + 2.4492468600000001 + -17.9275005999999983 + 22.7579021999999966 + -9.3008302500000006 + 1.2239659000000001 + 48.1192087200000032 + -60.9614726399999967 + 24.8557266000000006 + -3.2656624800000000 + -36.0894065399999988 + 45.7211044800000010 + -18.6417949500000013 + 2.4492468600000001 + 8.0198681199999999 + -10.1602454400000006 + 4.1426211000000004 + -0.5442770800000001 + -11.9141455994999941 + 11.5908520439999947 + -3.4999733044999992 + 0.3484810289999999 + 31.2390159023999878 + -30.3275138687999863 + 9.1769633783999964 + -0.9160839407999998 + -23.4292619267999918 + 22.7456354015999942 + -6.8827225337999982 + 0.6870629555999997 + 5.2065026503999983 + -5.0545856447999986 + 1.5294938963999996 + -0.1526806568000000 + 31.2390159023999843 + -30.3275138687999899 + 9.1769633783999964 + -0.9160839407999998 + -81.3681242063999548 + 78.8087587967999639 + -23.8895779823999916 + 2.3899521887999993 + 61.0260931547999803 + -59.1065690975999729 + 17.9171834867999920 + -1.7924641415999993 + -13.5613540343999954 + 13.1347931327999969 + -3.9815963303999986 + 0.3983253647999999 + -23.4292619267999882 + 22.7456354015999906 + -6.8827225337999982 + 0.6870629555999997 + 61.0260931547999803 + -59.1065690975999729 + 17.9171834867999955 + -1.7924641415999993 + -45.7695698660999852 + 44.3299268231999832 + -13.4378876150999957 + 1.3443481061999996 + 10.1710155257999979 + -9.8510948495999990 + 2.9861972477999990 + -0.2987440236000000 + 5.2065026503999983 + -5.0545856447999986 + 1.5294938963999996 + -0.1526806568000000 + -13.5613540343999954 + 13.1347931327999969 + -3.9815963303999986 + 0.3983253647999999 + 10.1710155257999979 + -9.8510948495999990 + 2.9861972477999990 + -0.2987440236000000 + -2.2602256723999994 + 2.1891321887999995 + -0.6635993883999999 + 0.0663875608000000 + -135.7455229915000245 + 92.5172767399999998 + -20.7448023915000022 + 1.5366520290000003 + 370.6031730607999748 + -252.4316724479999721 + 56.5982632008000053 + -4.1924639408000006 + -282.7374677955999687 + 192.5863143359999867 + -43.1827734005999986 + 3.1987239556000002 + 64.9572541768000065 + -44.2469854080000005 + 9.9224278667999997 + -0.7349946568000001 + 370.6031730607999748 + -252.4316724480000289 + 56.5982632008000053 + -4.1924639408000006 + -1001.6410292688001391 + 681.9045713280002019 + -152.8863145488000157 + 11.3249121888000026 + 765.5860359516002518 + -521.2161084960000608 + 116.8669639116000099 + -8.6568121415999997 + -176.5103475448000268 + 120.1758818880000064 + -26.9492044248000013 + 1.9962373648000000 + -282.7374677955999687 + 192.5863143359999867 + -43.1827734005999986 + 3.1987239556000002 + 765.5860359516000244 + -521.2161084960000608 + 116.8669639116000099 + -8.6568121415999997 + -584.9559749637001005 + 398.2528413720000344 + -89.3018939337000006 + 6.6149551062000000 + 134.7753046586000210 + -91.7631914159999980 + 20.5789413186000019 + -1.5243660235999998 + 64.9572541768000065 + -44.2469854080000005 + 9.9224278667999997 + -0.7349946568000001 + -176.5103475448000268 + 120.1758818880000064 + -26.9492044248000013 + 1.9962373648000000 + 134.7753046586000210 + -91.7631914159999980 + 20.5789413186000019 + -1.5243660235999998 + -31.0134205908000027 + 21.1168336479999965 + -4.7362260707999999 + 0.3508315608000000 + -49.4848264664999746 + 26.2405983299999868 + -4.5854146104999991 + 0.2657560369999998 + 133.8931721307999396 + -70.8746726159999696 + 12.3806633795999943 + -0.7175439623999997 + -100.4470670980999500 + 53.1560044619999772 + -9.2854975346999957 + 0.5381579717999998 + 22.3336540217999939 + -11.8124454359999937 + 2.0634438965999995 + -0.1195906604000000 + 133.8931721307999396 + -70.8746726159999696 + 12.3806633795999943 + -0.7175439623999997 + -357.7270527887998810 + 189.0525821759999303 + -33.0151960655999872 + 1.9134562463999991 + 268.3768535915999109 + -141.7894366319999335 + 24.7613970491999922 + -1.4350921847999993 + -59.6755514647999803 + 31.5087636959999884 + -5.5025326775999988 + 0.3189093743999999 + -100.4470670980999643 + 53.1560044619999914 + -9.2854975346999957 + 0.5381579717999998 + 268.3768535915999109 + -141.7894366319999335 + 24.7613970491999922 + -1.4350921847999993 + -201.3438131936999298 + 106.3420774739999501 + -18.5710477868999924 + 1.0763191385999997 + 44.7702575985999829 + -23.6315727719999913 + 4.1268995081999993 + -0.2391820307999999 + 22.3336540217999939 + -11.8124454359999937 + 2.0634438965999995 + -0.1195906604000000 + -59.6755514647999803 + 31.5087636959999884 + -5.5025326775999988 + 0.3189093743999999 + 44.7702575985999829 + -23.6315727719999913 + 4.1268995081999993 + -0.2391820307999999 + -9.9549879107999981 + 5.2514606159999992 + -0.9170887795999998 + 0.0531515624000000 + 0.7858877775000047 + -0.0838432500000021 + 0.0001730625000003 + -0.0000088750000000 + -1.8374687780000103 + 0.2012238000000045 + -0.0004153500000007 + 0.0000213000000000 + 1.3509135835000063 + -0.1509178500000028 + 0.0003115125000004 + -0.0000159750000000 + -0.2881194630000009 + 0.0335373000000004 + -0.0000692250000000 + 0.0000035500000000 + -1.8374687780000101 + 0.2012238000000045 + -0.0004153500000007 + 0.0000213000000000 + 4.2207095280000200 + -0.4829371200000090 + 0.0009968400000013 + -0.0000511200000001 + -3.0839681460000103 + 0.3622028400000043 + -0.0007476300000006 + 0.0000383400000000 + 0.6490755880000003 + -0.0804895199999999 + 0.0001661399999999 + -0.0000085200000000 + 1.3509135835000063 + -0.1509178500000028 + 0.0003115125000004 + -0.0000159750000000 + -3.0839681460000108 + 0.3622028400000043 + -0.0007476300000006 + 0.0000383400000000 + 2.2518031095000022 + -0.2716521300000003 + 0.0005607224999999 + -0.0000287550000000 + -0.4732126909999979 + 0.0603671399999987 + -0.0001246049999998 + 0.0000063900000000 + -0.2881194630000009 + 0.0335373000000004 + -0.0000692250000000 + 0.0000035500000000 + 0.6490755880000003 + -0.0804895199999999 + 0.0001661399999999 + -0.0000085200000000 + -0.4732126909999979 + 0.0603671399999987 + -0.0001246049999998 + 0.0000063900000000 + 0.0991165979999985 + -0.0134149199999992 + 0.0000276899999999 + -0.0000014200000000 + 0.7871924025000062 + -0.0842160000000026 + 0.0001996875000003 + -0.0000088750000000 + -1.8405998780000177 + 0.2021184000000074 + -0.0004792500000010 + 0.0000213000000000 + 1.3532619085000168 + -0.1515888000000072 + 0.0003594375000010 + -0.0000159750000000 + -0.2886413130000054 + 0.0336864000000023 + -0.0000798750000003 + 0.0000035500000000 + -1.8405998780000132 + 0.2021184000000054 + -0.0004792500000007 + 0.0000213000000000 + 4.2282241680000388 + -0.4850841600000161 + 0.0011502000000022 + -0.0000511200000001 + -3.0896041260000380 + 0.3638131200000160 + -0.0008626500000022 + 0.0000383400000001 + 0.6503280280000123 + -0.0808473600000053 + 0.0001917000000008 + -0.0000085200000000 + 1.3532619085000075 + -0.1515888000000030 + 0.0003594375000004 + -0.0000159750000000 + -3.0896041260000238 + 0.3638131200000099 + -0.0008626500000014 + 0.0000383400000001 + 2.2560300945000247 + -0.2728598400000106 + 0.0006469875000015 + -0.0000287550000001 + -0.4741520210000086 + 0.0606355200000037 + -0.0001437750000005 + 0.0000063900000000 + -0.2886413130000007 + 0.0336864000000003 + -0.0000798750000000 + 0.0000035500000000 + 0.6503280280000028 + -0.0808473600000012 + 0.0001917000000002 + -0.0000085200000000 + -0.4741520210000038 + 0.0606355200000017 + -0.0001437750000003 + 0.0000063900000000 + 0.0993253380000016 + -0.0134745600000007 + 0.0000319500000001 + -0.0000014200000000 + -46.8607035974999846 + 17.1221579999999953 + -2.0678986874999996 + 0.0827161250000000 + 112.5143505220000009 + -41.0931791999999874 + 4.9629568499999985 + -0.1985187000000000 + -84.4129508914999889 + 30.8198843999999923 + -3.7222176374999982 + 0.1488890250000000 + 18.7705170869999911 + -6.8488631999999967 + 0.8271594749999995 + -0.0330864500000000 + 112.5143505219999867 + -41.0931791999999945 + 4.9629568499999994 + -0.1985187000000000 + -270.2236567919999288 + 98.6236300799999697 + -11.9110964399999943 + 0.4764448799999998 + 202.7493065939999042 + -73.9677225599999701 + 8.9333223299999958 + -0.3573336599999999 + -45.0916521319999788 + 16.4372716799999949 + -1.9851827399999988 + 0.0794074800000000 + -84.4129508914999889 + 30.8198843999999923 + -3.7222176374999991 + 0.1488890250000000 + 202.7493065939999610 + -73.9677225599999844 + 8.9333223299999975 + -0.3573336599999999 + -152.1231529454999531 + 55.4757919199999776 + -6.6999917474999968 + 0.2680002449999999 + 33.8323330989999818 + -12.3279537599999927 + 1.4888870549999993 + -0.0595556100000000 + 18.7705170869999982 + -6.8488631999999985 + 0.8271594750000000 + -0.0330864500000000 + -45.0916521319999930 + 16.4372716799999985 + -1.9851827399999995 + 0.0794074800000000 + 33.8323330989999960 + -12.3279537599999962 + 1.4888870549999995 + -0.0595556100000000 + -7.5243380219999976 + 2.7395452799999989 + -0.3308637899999998 + 0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + -32.6217780473999994 + 21.7478520315999972 + 0.0000000000000000 + 0.0000000000000000 + 42.1036102331999942 + -28.0690734888000009 + 0.0000000000000000 + 0.0000000000000000 + -17.3069209304999987 + 11.5379472869999997 + 0.0000000000000000 + 0.0000000000000000 + 2.2865894573999999 + -1.5243929716000000 + 0.0000000000000000 + 0.0000000000000000 + 80.7563291291999974 + -53.8375527528000006 + 0.0000000000000000 + 0.0000000000000000 + -103.7670803135999904 + 69.1780535423999936 + 0.0000000000000000 + 0.0000000000000000 + 42.5275334640000011 + -28.3516889759999984 + 0.0000000000000000 + 0.0000000000000000 + -5.6073377951999994 + 3.7382251968000002 + 0.0000000000000000 + 0.0000000000000000 + -60.5672468468999909 + 40.3781645645999987 + 0.0000000000000000 + 0.0000000000000000 + 77.8253102351999928 + -51.8835401567999952 + 0.0000000000000000 + 0.0000000000000000 + -31.8956500979999973 + 21.2637667320000006 + 0.0000000000000000 + 0.0000000000000000 + 4.2055033464000005 + -2.8036688975999997 + 0.0000000000000000 + 0.0000000000000000 + 13.4593881881999984 + -8.9729254587999989 + 0.0000000000000000 + 0.0000000000000000 + -17.2945133855999984 + 11.5296755904000001 + 0.0000000000000000 + 0.0000000000000000 + 7.0879222439999996 + -4.7252814960000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9345562992000001 + 0.6230375328000000 + 44.2256531812000020 + -132.2389900727999930 + 99.1792425546000089 + -22.0398316788000024 + -57.1087958436000065 + 170.7439982111999939 + -128.0579986584000096 + 28.4573330352000013 + 23.4803316015000050 + -70.1983325880000137 + 52.6487494410000068 + -11.6997220980000023 + -3.1027108802000005 + 9.2757776784000008 + -6.9568332588000015 + 1.5459629464000002 + -138.5907206816000041 + 397.2227929391999623 + -297.9170947044000286 + 66.2037988232000032 + 178.4133265968000046 + -511.2056480831998897 + 383.4042360623999457 + -85.2009413472000006 + -73.3938860820000087 + 210.1673533679999650 + -157.6255150260000164 + 35.0278922279999989 + 9.7018514776000000 + -27.7703137824000024 + 20.8277353368000036 + -4.6283856304000004 + 105.4788598592000142 + -301.6030611396000722 + 226.2022958546999973 + -50.2671768566000026 + -135.7846198235999964 + 388.1433357647999856 + -291.1075018236000460 + 64.6905559607999976 + 55.8681749264999965 + -159.6001399019999667 + 119.7001049265000034 + -26.6000233170000016 + -7.3860899902000003 + 21.0910186536000026 + -15.8182639902000002 + 3.5151697756000004 + -23.2462882296000011 + 66.5586023016000041 + -49.9189517261999995 + 11.0931003835999995 + 29.9256277248000018 + -85.6571172480000058 + 64.2428379360000008 + -14.2761862080000022 + -12.3115115519999989 + 35.2179655199999999 + -26.4134741400000017 + 5.8696609200000003 + 1.6275348736000002 + -4.6537287359999997 + 3.4902965520000002 + -0.7756214560000001 + -50.0478950811999894 + 64.5349948775999991 + -26.8895811989999984 + 3.5852774931999991 + 69.5343934043999923 + -89.6509583711999767 + 37.3545659879999903 + -4.9806087983999987 + -28.9726639184999897 + 37.3545659879999903 + -15.5644024949999960 + 2.0752536659999996 + 3.8630218557999996 + -4.9806087983999987 + 2.0752536659999996 + -0.2767004887999999 + 183.1902844943999753 + -243.4800953951999531 + 101.4500397479999805 + -13.5266719663999986 + -250.0931194127999788 + 331.8487242623999691 + -138.2703017759999966 + 18.4360402367999967 + 104.2054664220000006 + -138.2703017759999966 + 57.6126257399999915 + -7.6816834319999989 + -13.8940621895999961 + 18.4360402367999967 + -7.6816834319999989 + 1.0242244575999997 + -151.8031018499999618 + 201.5326388519999909 + -83.9719328549999915 + 11.1962577139999979 + 206.0974818899999832 + -273.2155583040000124 + 113.8398159599999957 + -15.1786421279999963 + -85.8739507874999930 + 113.8398159599999815 + -47.4332566499999970 + 6.3244342199999988 + 11.4498601049999991 + -15.1786421279999963 + 6.3244342199999988 + -0.8432578959999998 + 35.4079979087999988 + -46.8875383343999914 + 19.5364743059999952 + -2.6048632407999994 + -47.9516943455999893 + 63.4177924127999972 + -26.4240801719999965 + 3.5232106895999991 + 19.9798726439999967 + -26.4240801719999965 + 11.0100334049999979 + -1.4680044539999997 + -2.6639830191999998 + 3.5232106895999991 + -1.4680044539999997 + 0.1957339271999999 + 42.6442853668999575 + -40.0053803687999618 + 11.9066088158999897 + -1.1642323157999992 + -56.7584044271999559 + 53.3405071583999586 + -15.8754784211999898 + 1.5523097543999986 + 23.6493351779999799 + -22.2252113159999816 + 6.6147826754999954 + -0.6467957309999994 + -3.1532446903999967 + 2.9633615087999976 + -0.8819710233999991 + 0.0862394307999999 + -120.2324494991998876 + 109.5640452863999030 + -32.7718093751999717 + 3.2246967023999971 + 159.8769737135998525 + -146.0853937151998707 + 43.6957458335999576 + -4.2995956031999967 + -66.6154057139999480 + 60.8689140479999509 + -18.2065607639999811 + 1.7914981679999984 + 8.8820540951999920 + -8.1158552063999920 + 2.4275414351999975 + -0.2388664223999998 + 89.9558741243999265 + -82.1730339647999273 + 24.5788570313999770 + -2.4185225267999977 + -119.6268492851999099 + 109.5640452863999030 + -32.7718093751999717 + 3.2246967023999975 + 49.8445205354999530 + -45.6516855359999596 + 13.6549205729999876 + -1.3436236259999990 + -6.6459360713999933 + 6.0868914047999940 + -1.8206560763999984 + 0.1791498167999998 + -19.8930995831999802 + 18.2606742143999838 + -5.4619682291999947 + 0.5374494503999995 + 26.4589082855999749 + -24.3475656191999761 + 7.2826243055999935 + -0.7165992671999993 + -11.0245451189999901 + 10.1448190079999918 + -3.0344267939999972 + 0.2985830279999998 + 1.4699393491999986 + -1.3526425343999988 + 0.4045902391999996 + -0.0398110704000000 + -184.9754434746999721 + 126.2750600519999864 + -28.5549122366999981 + 2.1151786841999995 + 189.3135113616000069 + -129.2160267359999750 + 29.2643043155999933 + -2.1677262455999999 + -64.5253657339999904 + 44.0523311399999926 + -9.9912321314999986 + 0.7400912689999999 + 7.3273586311999983 + -5.0036281519999983 + 1.1364106841999997 + -0.0841785692000000 + 549.7599647855997773 + -378.5554258559998857 + 85.6643485175999899 + -6.3455072976000002 + -561.1830773327999395 + 387.2884078079999881 + -87.7923953568000002 + 6.5031403967999992 + 190.7604902219999872 + -132.0071299200000112 + 29.9734807320000023 + -2.2202578319999997 + -21.6066616295999978 + 14.9909026559999994 + -3.4092032976000000 + 0.2525335776000000 + -412.5384365891999892 + 283.9165693919999285 + -64.2482613882000066 + 4.7591304731999999 + 421.1681889995999200 + -290.4663058559999627 + 65.8442965176000001 + -4.8773552975999994 + -143.1874014164999949 + 99.0053474399999942 + -22.4801105490000026 + 1.6651933740000002 + 16.2206007222000004 + -11.2431769920000004 + 2.5569024732000005 + -0.1894001832000000 + 91.7723027975999912 + -63.0925709760000046 + 14.2773914196000007 + -1.0575845496000000 + -93.7177668888000142 + 64.5480679679999980 + -14.6320658928000018 + 1.0838567328000002 + 31.8714375370000056 + -22.0011883200000042 + 4.9955801220000016 + -0.3700429720000001 + -3.6115132716000011 + 2.4984837760000009 + -0.5682005496000003 + 0.0420889296000000 + 130.2289587202998575 + -70.6241013659999197 + 12.3802240670999844 + -0.7175173373999989 + -173.8642248983998115 + 94.1654684879999024 + -16.5069654227999791 + 0.9566897831999988 + 72.5249910409999359 + -39.2356118699999570 + 6.8779022594999919 + -0.3986207429999995 + -9.6772489387999912 + 5.2314149159999950 + -0.9170536345999990 + 0.0531494323999999 + -395.8553984243995956 + 212.1429210479998346 + -37.1411466587999683 + 2.1525807671999981 + 528.3530069471995603 + -282.8572280639997985 + 49.5215288783999625 + -2.8701076895999975 + -220.3917782279998789 + 117.8571783599999208 + -20.6339703659999856 + 1.1958782039999993 + 29.4073208303999856 + -15.7142904479999928 + 2.7511960487999989 + -0.1594504272000000 + 296.6730858182997963 + -159.1071907859998760 + 27.8558599940999869 + -1.6144355753999990 + -395.9838742103997902 + 212.1429210479998915 + -37.1411466587999826 + 2.1525807671999990 + 165.1767999209999402 + -88.3928837699999690 + 15.4754777744999963 + -0.8969086529999999 + -22.0398861227999987 + 11.7857178359999999 + -2.0633970366000001 + 0.1195878204000000 + -65.8302577373999753 + 35.3571535079999890 + -6.1901911097999989 + 0.3587634612000000 + 87.8715804911999783 + -47.1428713439999996 + 8.2535881464000003 + -0.4783512816000001 + -36.6539405380000005 + 19.6428630600000034 + -3.4389950610000017 + 0.1993130340000001 + 4.8908171384000028 + -2.6190484080000020 + 0.4585326748000005 + -0.0265750712000000 + -5.5045576885001175 + 0.4527535500000591 + -0.0009345375000100 + 0.0000479250000006 + 7.1137969800001573 + -0.6036714000000785 + 0.0012460500000132 + -0.0000639000000007 + -2.8825180750000672 + 0.2515297500000336 + -0.0005191875000056 + 0.0000266250000003 + 0.3770856100000094 + -0.0335373000000047 + 0.0000692250000008 + -0.0000035500000000 + 11.3420452620003189 + -1.0866085200001598 + 0.0022428900000267 + -0.0001150200000015 + -14.5769179680004157 + 1.4488113600002079 + -0.0029905200000346 + 0.0001533600000019 + 5.8290238200001756 + -0.6036714000000871 + 0.0012460500000144 + -0.0000639000000008 + -0.7554527760000237 + 0.0804895200000117 + -0.0001661400000019 + 0.0000085200000001 + -8.7249969465002888 + 0.8149563900001421 + -0.0016821675000234 + 0.0000862650000013 + 11.2135694760003659 + -1.0866085200001803 + 0.0022428900000296 + -0.0001150200000016 + -4.4888016150001500 + 0.4527535500000732 + -0.0009345375000119 + 0.0000479250000006 + 0.5821940820000193 + -0.0603671400000094 + 0.0001246050000015 + -0.0000063900000001 + 2.0359828770000856 + -0.1811014200000415 + 0.0003738150000067 + -0.0000191700000004 + -2.6167403280001054 + 0.2414685600000509 + -0.0004984200000082 + 0.0000255600000004 + 1.0495264700000413 + -0.1006119000000198 + 0.0002076750000032 + -0.0000106500000002 + -0.1363117960000050 + 0.0134149200000024 + -0.0000276900000004 + 0.0000014200000000 + -5.5116026635001862 + 0.4547664000000811 + -0.0010783125000117 + 0.0000479250000006 + 7.1231902800002480 + -0.6063552000001071 + 0.0014377500000154 + -0.0000639000000007 + -2.8864319500001070 + 0.2526480000000459 + -0.0005990625000066 + 0.0000266250000003 + 0.3776074600000149 + -0.0336864000000064 + 0.0000798750000009 + -0.0000035500000000 + 11.3589532020005066 + -1.0914393600002181 + 0.0025879500000312 + -0.0001150200000015 + -14.5994618880006595 + 1.4552524800002826 + -0.0034506000000403 + 0.0001533600000019 + 5.8384171200002770 + -0.6063552000001183 + 0.0014377500000168 + -0.0000639000000008 + -0.7567052160000375 + 0.0808473600000159 + -0.0001917000000022 + 0.0000085200000001 + -8.7376779015004544 + 0.8185795200001927 + -0.0019409625000273 + 0.0000862650000013 + 11.2304774160005767 + -1.0914393600002443 + 0.0025879500000344 + -0.0001150200000016 + -4.4958465900002356 + 0.4547664000000990 + -0.0010783125000139 + 0.0000479250000006 + 0.5831334120000303 + -0.0606355200000127 + 0.0001437750000018 + -0.0000063900000001 + 2.0388008670001336 + -0.1819065600000558 + 0.0004313250000078 + -0.0000191700000004 + -2.6204976480001649 + 0.2425420800000685 + -0.0005751000000095 + 0.0000255600000004 + 1.0510920200000642 + -0.1010592000000266 + 0.0002396250000037 + -0.0000106500000002 + -0.1365205360000077 + 0.0134745600000031 + -0.0000319500000004 + 0.0000014200000000 + 251.7870357364997460 + -92.4596531999998916 + 11.1666529124999840 + -0.4466670749999995 + -335.9416609199996060 + 123.2795375999998271 + -14.8888705499999823 + 0.5955560999999993 + 140.0572560499998076 + -51.3664739999999256 + 6.2036960624999917 + -0.2481483749999996 + -18.6815509399999762 + 6.8488631999999914 + -0.8271594749999989 + 0.0330864500000000 + -606.1577789579991986 + 221.9031676799996831 + -26.7999669899999589 + 1.0720009799999985 + 808.7561809919991447 + -295.8708902399996532 + 35.7332893199999475 + -1.4293346399999980 + -337.2264340799995921 + 123.2795375999998413 + -14.8888705499999787 + 0.5955560999999991 + 44.9852749439999400 + -16.4372716799999807 + 1.9851827399999973 + -0.0794074799999999 + 454.3998712184992428 + -166.4273757599997339 + 20.0999752424999656 + -0.8040007349999987 + -606.2862547439991658 + 221.9031676799996831 + -26.7999669899999589 + 1.0720009799999983 + 252.8027918099996327 + -92.4596531999998632 + 11.1666529124999840 + -0.4466670749999994 + -33.7233517079999530 + 12.3279537599999820 + -1.4888870549999980 + 0.0595556099999999 + -100.8806544929998097 + 36.9838612799999282 + -4.4666611649999908 + 0.1786668299999996 + 134.6054428319997385 + -49.3118150399999138 + 5.9555482199999883 + -0.2382224399999995 + -56.1263831799999053 + 20.5465895999999653 + -2.4814784249999957 + 0.0992593499999998 + 7.4871428239999887 + -2.7395452799999958 + 0.3308637899999995 + -0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3353203725000000 + 0.2235469150000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8047688940000000 + -0.5365125960000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6035766705000000 + 0.4023844470000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1341281490000000 + -0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 56.1396151825000089 + -135.0033327360000044 + 101.2524995520000033 + -22.5005554560000007 + -49.5027190080000068 + 118.8065256192000163 + -89.1048942144000051 + 19.8010876031999992 + 14.4382930439999981 + -34.6519033056000012 + 25.9889274792000009 + -5.7753172175999996 + -1.3750755280000000 + 3.3001812671999997 + -2.4751359503999999 + 0.5500302112000000 + -125.9664885020000042 + 302.9633875199999693 + -227.2225406400000054 + 50.4938979200000020 + 110.2406780160000039 + -264.5776272383999412 + 198.4332204287999843 + -44.0962712064000044 + -32.1535310880000011 + 77.1684746111999971 + -57.8763559583999978 + 12.8614124351999983 + 3.0622410560000000 + -7.3493785343999996 + 5.5120339008000006 + -1.2248964224000001 + 90.0868110965000000 + -216.6912079679999863 + 162.5184059759999968 + -36.1152013279999977 + -78.7312587600000029 + 188.9550210239999899 + -141.7162657679999995 + 31.4925035040000019 + 22.9632838050000032 + -55.1118811320000077 + 41.3339108490000058 + -9.1853135219999995 + -2.1869794100000002 + 5.2487505839999997 + -3.9365629379999998 + 0.8747917640000000 + -20.5720296569999981 + 49.4801736959999943 + -37.1101302719999921 + 8.2466956160000002 + 17.9932997519999986 + -43.1839194047999939 + 32.3879395535999990 + -7.1973199008000002 + -5.2480457610000002 + 12.5953098263999994 + -9.4464823697999982 + 2.0992183043999999 + 0.4998138820000000 + -1.1995533167999999 + 0.8996649876000000 + -0.1999255528000000 + -157.0620940015000429 + 216.2579120640000099 + -90.1074633599999970 + 12.0143284479999988 + 141.4799946432000013 + -194.6321208576000004 + 81.0967170240000002 + -10.8128956031999994 + -41.2649984375999992 + 56.7677019167999930 + -23.6532091320000006 + 3.1537612175999996 + 3.9299998511999998 + -5.4064478016000006 + 2.2526865840000001 + -0.3003582112000000 + 311.4225038820000009 + -432.5158241280000198 + 180.2149267199999656 + -24.0286568960000011 + -280.7129412863999391 + 389.2642417152000007 + -162.1934340479999719 + 21.6257912063999989 + 81.8746078751999846 + -113.5354038336000144 + 47.3064182640000013 + -6.3075224351999992 + -7.7975817024000005 + 10.8128956032000012 + -4.5053731680000002 + 0.6007164224000000 + -192.3943393994999838 + 270.3223900799999342 + -112.6343291999999963 + 15.0179105600000007 + 173.4794213039999988 + -243.2901510719999578 + 101.3708962799999824 + -13.5161195039999988 + -50.5981645469999961 + 70.9596273960000019 + -29.5665114150000008 + 3.9422015220000004 + 4.8188728140000006 + -6.7580597520000003 + 2.8158582299999999 + -0.3754477640000000 + 37.9715111430000007 + -54.0644780160000025 + 22.5268658399999993 + -3.0035821120000001 + -34.2464746608000041 + 48.6580302144000001 + -20.2741792560000036 + 2.7032239008000003 + 9.9885551094000000 + -14.1919254791999983 + 5.9133022830000002 + -0.7884403044000000 + -0.9512909627999999 + 1.3516119504000002 + -0.5631716460000000 + 0.0750895528000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.0321606498499998 + 4.6881070998999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 24.1765592188499987 + -16.1177061459000015 + 0.0000000000000000 + 0.0000000000000000 + -16.1177061459000015 + 10.7451374305999998 + 0.0000000000000000 + 0.0000000000000000 + 9.1366163297999989 + -6.0910775531999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -30.8078686817999952 + 20.5385791212000015 + 0.0000000000000000 + 0.0000000000000000 + 20.5385791212000015 + -13.6923860808000022 + 0.0000000000000000 + 0.0000000000000000 + -3.8069234707500001 + 2.5379489805000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.6594244507499987 + -8.4396163005000009 + 0.0000000000000000 + 0.0000000000000000 + -8.4396163005000009 + 5.6264108670000006 + 0.0000000000000000 + 0.0000000000000000 + 0.5075897961000000 + -0.3383931974000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.6721732600999999 + 1.1147821734000001 + 0.0000000000000000 + 0.0000000000000000 + 1.1147821734000001 + -0.7431881156000000 + 1.7964189073000001 + -9.9371338973999990 + 7.4528504230499992 + -1.6561889829000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -44.4148786822999995 + 125.9369562125999948 + -94.4527171594500032 + 20.9894927021000015 + 30.4859639041999984 + -86.0604782868000200 + 64.5453587151000079 + -14.3434130477999986 + -2.4750911663999995 + 13.2495118631999986 + -9.9371338973999990 + 2.2082519771999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 57.1409193383999963 + -161.7845013575999928 + 121.3383760181999946 + -26.9640835595999988 + -39.2202895176000013 + 110.5595581392000071 + -82.9196686044000160 + 18.4265930231999988 + 1.0312879859999999 + -5.5206299429999994 + 4.1404724572499996 + -0.9201049905000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -23.5724663909999990 + 66.7014588990000021 + -50.0260941742499980 + 11.1169098164999998 + 16.1842872989999975 + -45.5939825580000075 + 34.1954869185000021 + -7.5989970929999995 + -0.1375050648000000 + 0.7360839924000000 + -0.5520629942999999 + 0.1226806654000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1219955187999999 + -8.8305278531999996 + 6.6228958898999997 + -1.4717546422000001 + -2.1439049731999997 + 6.0371976743999998 + -4.5278982558000003 + 1.0061996123999999 + 41.0697356006999996 + -54.7530359903999937 + 22.8137649960000033 + -3.0418353327999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.7754249068999925 + 72.4365406655999919 + -30.1818919439999931 + 4.0242522591999990 + 34.4529747782000015 + -41.9835046751999954 + 17.4931269480000005 + -2.3324169264000001 + -52.4181452760000042 + 69.8908603680000056 + -29.1211918200000000 + 3.8828255760000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 71.7688591055999865 + -88.1435659967999783 + 36.7264858319999945 + -4.8968647775999994 + -41.7636522935999963 + 50.6527056287999997 + -21.1052940120000017 + 2.8140392016000000 + 21.8408938650000017 + -29.1211918200000000 + 12.1338299250000006 + -1.6178439899999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.9036912939999979 + 36.7264858319999945 + -15.3027024299999965 + 2.0403603239999999 + 17.4015217890000002 + -21.1052940120000017 + 8.7938725049999995 + -1.1725163340000000 + -2.9121191820000001 + 3.8828255760000001 + -1.6178439899999999 + 0.2157125320000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.9871588391999992 + -4.8968647775999994 + 2.0403603239999999 + -0.2720480432000000 + -2.3202029051999999 + 2.8140392016000000 + -1.1725163340000000 + 0.1563355112000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -22.5910445969999856 + 16.9389155015999862 + -5.2449352712999966 + 0.5381739305999996 + 15.0606963979999851 + -11.2926103343999884 + 3.4966235141999964 + -0.3587826203999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 29.8518848603999807 + -22.5852206687999839 + 6.9932470283999955 + -0.7175652407999995 + -19.9012565735999800 + 15.0568137791999828 + -4.6621646855999952 + 0.4783768271999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.4382853584999911 + 9.4105086119999921 + -2.9138529284999981 + 0.2989855169999998 + 8.2921902389999929 + -6.2736724079999924 + 1.9425686189999980 + -0.1993236779999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.6584380477999987 + -1.2547344815999988 + 0.3885137237999997 + -0.0398647356000000 + -1.1056253651999990 + 0.8364896543999990 + -0.2590091491999997 + 0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 132.0402867341999809 + -94.3691021639999832 + 21.4156989368999930 + -1.5863480693999996 + -88.0268578227999967 + 62.9127347760000006 + -14.2771326246000001 + 1.0575653796000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -133.2574315811999668 + 96.4624295519999748 + -21.9475812491999918 + 1.6257467591999992 + 88.8382877207999968 + -64.3082863680000116 + 14.6317208328000028 + -1.0838311728000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 44.7574818254999798 + -32.8519189799999864 + 7.4931545204999956 + -0.5550484829999996 + -29.8383212170000043 + 21.9012793200000040 + -4.9954363470000018 + 0.3700323220000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.0106466433999977 + 3.7277438639999976 + -0.8522720693999993 + 0.0631312643999999 + 3.3404310956000010 + -2.4851625760000013 + 0.5681813796000004 + -0.0420875096000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -104.3657106932998886 + 53.3063472119999489 + -9.2857611221999896 + 0.5381739467999993 + 69.5771404621999920 + -35.5375648079999991 + 6.1905074148000008 + -0.3587826312000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 139.1294649887998673 + -71.0751296159999271 + 12.3810148295999856 + -0.7175652623999991 + -92.7529766592000016 + 47.3834197440000082 + -8.2540098864000022 + 0.4783768416000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.0317834119999389 + 29.6146373399999696 + -5.1587561789999938 + 0.2989855259999996 + 38.6878556080000138 + -19.7430915600000105 + 3.4391707860000027 + -0.1993236840000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.7430087215999910 + -3.9486183119999954 + 0.6878341571999992 + -0.0398647367999999 + -5.1620058144000041 + 2.6324122080000025 + -0.4585561048000005 + 0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.6217780473999994 + 21.7478520315999972 + 0.0000000000000000 + 0.0000000000000000 + 80.7563291291999974 + -53.8375527528000006 + 0.0000000000000000 + 0.0000000000000000 + -60.5672468468999909 + 40.3781645645999987 + 0.0000000000000000 + 0.0000000000000000 + 13.4593881881999984 + -8.9729254587999989 + 0.0000000000000000 + 0.0000000000000000 + 42.1036102331999942 + -28.0690734887999973 + 0.0000000000000000 + 0.0000000000000000 + -103.7670803135999904 + 69.1780535423999936 + 0.0000000000000000 + 0.0000000000000000 + 77.8253102351999928 + -51.8835401567999952 + 0.0000000000000000 + 0.0000000000000000 + -17.2945133855999984 + 11.5296755904000001 + 0.0000000000000000 + 0.0000000000000000 + -17.3069209304999987 + 11.5379472869999997 + 0.0000000000000000 + 0.0000000000000000 + 42.5275334640000011 + -28.3516889759999984 + 0.0000000000000000 + 0.0000000000000000 + -31.8956500979999973 + 21.2637667320000006 + 0.0000000000000000 + 0.0000000000000000 + 7.0879222439999996 + -4.7252814960000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2865894573999999 + -1.5243929716000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6073377951999994 + 3.7382251968000002 + 0.0000000000000000 + 0.0000000000000000 + 4.2055033464000005 + -2.8036688975999997 + 0.0000000000000000 + 0.0000000000000000 + -0.9345562992000001 + 0.6230375328000000 + 44.2256531812000020 + -132.2389900727999930 + 99.1792425546000089 + -22.0398316788000024 + -138.5907206816000041 + 397.2227929391999623 + -297.9170947044000286 + 66.2037988232000032 + 105.4788598592000000 + -301.6030611396000722 + 226.2022958547000258 + -50.2671768566000026 + -23.2462882296000011 + 66.5586023016000041 + -49.9189517262000066 + 11.0931003835999995 + -57.1087958435999994 + 170.7439982111999939 + -128.0579986583999812 + 28.4573330352000013 + 178.4133265968000046 + -511.2056480832000034 + 383.4042360624000594 + -85.2009413472000006 + -135.7846198235999964 + 388.1433357647999856 + -291.1075018236000460 + 64.6905559607999976 + 29.9256277248000018 + -85.6571172480000058 + 64.2428379360000008 + -14.2761862080000022 + 23.4803316015000014 + -70.1983325879999995 + 52.6487494410000068 + -11.6997220980000023 + -73.3938860819999945 + 210.1673533680000219 + -157.6255150260000164 + 35.0278922279999989 + 55.8681749265000036 + -159.6001399020000235 + 119.7001049265000034 + -26.6000233170000016 + -12.3115115520000007 + 35.2179655199999999 + -26.4134741400000017 + 5.8696609200000003 + -3.1027108802000001 + 9.2757776784000008 + -6.9568332588000015 + 1.5459629464000002 + 9.7018514776000000 + -27.7703137823999988 + 20.8277353368000000 + -4.6283856304000004 + -7.3860899902000003 + 21.0910186535999991 + -15.8182639902000002 + 3.5151697756000004 + 1.6275348736000002 + -4.6537287359999997 + 3.4902965520000002 + -0.7756214560000001 + -50.0478950811999823 + 64.5349948775999849 + -26.8895811989999878 + 3.5852774931999987 + 183.1902844943999753 + -243.4800953951999247 + 101.4500397479999805 + -13.5266719663999968 + -151.8031018499999618 + 201.5326388519999625 + -83.9719328549999773 + 11.1962577139999979 + 35.4079979087999988 + -46.8875383343999914 + 19.5364743059999952 + -2.6048632407999994 + 69.5343934043999639 + -89.6509583711999625 + 37.3545659879999832 + -4.9806087983999978 + -250.0931194127999504 + 331.8487242623999123 + -138.2703017759999398 + 18.4360402367999932 + 206.0974818899999548 + -273.2155583039999556 + 113.8398159599999815 + -15.1786421279999963 + -47.9516943455999893 + 63.4177924127999830 + -26.4240801719999965 + 3.5232106895999991 + -28.9726639184999897 + 37.3545659879999832 + -15.5644024949999924 + 2.0752536659999992 + 104.2054664219999722 + -138.2703017759999682 + 57.6126257399999844 + -7.6816834319999980 + -85.8739507874999788 + 113.8398159599999815 + -47.4332566499999899 + 6.3244342199999988 + 19.9798726439999967 + -26.4240801719999965 + 11.0100334049999979 + -1.4680044539999997 + 3.8630218557999982 + -4.9806087983999978 + 2.0752536659999992 + -0.2767004887999999 + -13.8940621895999961 + 18.4360402367999932 + -7.6816834319999980 + 1.0242244575999997 + 11.4498601049999973 + -15.1786421279999963 + 6.3244342199999988 + -0.8432578959999998 + -2.6639830191999998 + 3.5232106895999991 + -1.4680044539999997 + 0.1957339272000000 + 42.6442853668999931 + -40.0053803687999974 + 11.9066088159000003 + -1.1642323158000001 + -120.2324494991999728 + 109.5640452863999741 + -32.7718093751999930 + 3.2246967023999997 + 89.9558741243999833 + -82.1730339647999841 + 24.5788570313999983 + -2.4185225267999999 + -19.8930995831999979 + 18.2606742143999980 + -5.4619682291999991 + 0.5374494503999999 + -56.7584044271999986 + 53.3405071583999941 + -15.8754784212000004 + 1.5523097544000002 + 159.8769737135999662 + -146.0853937151999560 + 43.6957458335999860 + -4.2995956031999993 + -119.6268492851999810 + 109.5640452863999741 + -32.7718093751999930 + 3.2246967023999993 + 26.4589082855999962 + -24.3475656191999974 + 7.2826243055999988 + -0.7165992671999999 + 23.6493351779999976 + -22.2252113159999993 + 6.6147826754999990 + -0.6467957310000000 + -66.6154057139999907 + 60.8689140479999864 + -18.2065607639999953 + 1.7914981679999997 + 49.8445205354999885 + -45.6516855359999880 + 13.6549205729999983 + -1.3436236259999998 + -11.0245451189999990 + 10.1448190079999989 + -3.0344267939999998 + 0.2985830280000000 + -3.1532446904000002 + 2.9633615088000003 + -0.8819710234000000 + 0.0862394308000000 + 8.8820540951999991 + -8.1158552063999991 + 2.4275414351999998 + -0.2388664223999999 + -6.6459360713999995 + 6.0868914047999993 + -1.8206560763999997 + 0.1791498168000000 + 1.4699393491999997 + -1.3526425343999997 + 0.4045902391999999 + -0.0398110704000000 + -184.9754434747000289 + 126.2750600520000148 + -28.5549122367000052 + 2.1151786842000004 + 549.7599647856001184 + -378.5554258559999994 + 85.6643485176000183 + -6.3455072976000011 + -412.5384365892000460 + 283.9165693920000422 + -64.2482613882000066 + 4.7591304732000008 + 91.7723027976000196 + -63.0925709760000046 + 14.2773914196000042 + -1.0575845496000000 + 189.3135113616000353 + -129.2160267360000034 + 29.2643043156000076 + -2.1677262455999999 + -561.1830773328000532 + 387.2884078080000450 + -87.7923953568000144 + 6.5031403968000010 + 421.1681889996000336 + -290.4663058560000763 + 65.8442965176000143 + -4.8773552976000012 + -93.7177668888000142 + 64.5480679680000122 + -14.6320658928000036 + 1.0838567328000002 + -64.5253657340000046 + 44.0523311400000068 + -9.9912321315000003 + 0.7400912690000001 + 190.7604902220000156 + -132.0071299200000112 + 29.9734807320000058 + -2.2202578320000006 + -143.1874014165000233 + 99.0053474400000084 + -22.4801105490000026 + 1.6651933740000002 + 31.8714375370000056 + -22.0011883200000042 + 4.9955801220000016 + -0.3700429720000001 + 7.3273586312000010 + -5.0036281520000010 + 1.1364106842000001 + -0.0841785692000000 + -21.6066616296000049 + 14.9909026560000029 + -3.4092032976000008 + 0.2525335776000001 + 16.2206007222000039 + -11.2431769920000022 + 2.5569024732000005 + -0.1894001832000000 + -3.6115132716000002 + 2.4984837760000005 + -0.5682005496000001 + 0.0420889296000000 + 130.2289587202999428 + -70.6241013659999624 + 12.3802240670999915 + -0.7175173373999993 + -395.8553984243998229 + 212.1429210479999199 + -37.1411466587999826 + 2.1525807671999990 + 296.6730858182999100 + -159.1071907859999612 + 27.8558599940999905 + -1.6144355753999995 + -65.8302577373999895 + 35.3571535079999961 + -6.1901911097999989 + 0.3587634612000000 + -173.8642248983998968 + 94.1654684879999451 + -16.5069654227999898 + 0.9566897831999992 + 528.3530069471997876 + -282.8572280639999121 + 49.5215288783999910 + -2.8701076895999988 + -395.9838742103999607 + 212.1429210479999483 + -37.1411466587999897 + 2.1525807671999995 + 87.8715804911999925 + -47.1428713439999996 + 8.2535881464000003 + -0.4783512816000000 + 72.5249910409999643 + -39.2356118699999783 + 6.8779022594999955 + -0.3986207429999997 + -220.3917782279999642 + 117.8571783599999776 + -20.6339703659999927 + 1.1958782039999996 + 165.1767999209999687 + -88.3928837699999974 + 15.4754777744999981 + -0.8969086529999999 + -36.6539405380000005 + 19.6428630599999998 + -3.4389950610000004 + 0.1993130340000000 + -9.6772489387999947 + 5.2314149159999976 + -0.9170536345999994 + 0.0531494324000000 + 29.4073208303999962 + -15.7142904479999963 + 2.7511960487999998 + -0.1594504272000000 + -22.0398861227999987 + 11.7857178359999999 + -2.0633970366000001 + 0.1195878204000000 + 4.8908171384000010 + -2.6190484080000003 + 0.4585326748000001 + -0.0265750712000000 + -5.5045576884998377 + 0.4527535499999218 + -0.0009345374999876 + 0.0000479249999993 + 11.3420452619995764 + -1.0866085199997961 + 0.0022428899999674 + -0.0001150199999983 + -8.7249969464996404 + 0.8149563899998263 + -0.0016821674999721 + 0.0000862649999985 + 2.0359828769999018 + -0.1811014199999522 + 0.0003738149999923 + -0.0000191699999996 + 7.1137969799997833 + -0.6036713999998966 + 0.0012460499999836 + -0.0000638999999991 + -14.5769179679994441 + 1.4488113599997343 + -0.0029905199999576 + 0.0001533599999978 + 11.2135694759995364 + -1.0866085199997786 + 0.0022428899999646 + -0.0001150199999981 + -2.6167403279998775 + 0.2414685599999410 + -0.0004984199999905 + 0.0000255599999995 + -2.8825180749999051 + 0.2515297499999547 + -0.0005191874999928 + 0.0000266249999996 + 5.8290238199997608 + -0.6036713999998863 + 0.0012460499999820 + -0.0000638999999990 + -4.4888016149998080 + 0.4527535499999084 + -0.0009345374999855 + 0.0000479249999992 + 1.0495264699999514 + -0.1006118999999768 + 0.0002076749999963 + -0.0000106499999998 + 0.3770856099999864 + -0.0335372999999935 + 0.0000692249999990 + -0.0000035499999999 + -0.7554527759999667 + 0.0804895199999842 + -0.0001661399999975 + 0.0000085199999999 + 0.5821940819999744 + -0.0603671399999879 + 0.0001246049999981 + -0.0000063899999999 + -0.1363117959999940 + 0.0134149199999972 + -0.0000276899999996 + 0.0000014200000000 + -5.5116026634997457 + 0.4547663999998953 + -0.0010783124999857 + 0.0000479249999993 + 11.3589532019993378 + -1.0914393599997261 + 0.0025879499999623 + -0.0001150199999983 + -8.7376779014994366 + 0.8185795199997661 + -0.0019409624999676 + 0.0000862649999985 + 2.0388008669998454 + -0.1819065599999353 + 0.0004313249999910 + -0.0000191699999996 + 7.1231902799996636 + -0.6063551999998610 + 0.0014377499999810 + -0.0000638999999991 + -14.5994618879991389 + 1.4552524799996427 + -0.0034505999999509 + 0.0001533599999978 + 11.2304774159992817 + -1.0914393599997021 + 0.0025879499999590 + -0.0001150199999981 + -2.6204976479998088 + 0.2425420799999205 + -0.0005750999999890 + 0.0000255599999995 + -2.8864319499998530 + 0.2526479999999392 + -0.0005990624999917 + 0.0000266249999996 + 5.8384171199996304 + -0.6063551999998473 + 0.0014377499999791 + -0.0000638999999990 + -4.4958465899997018 + 0.4547663999998769 + -0.0010783124999832 + 0.0000479249999992 + 1.0510920199999245 + -0.1010591999999689 + 0.0002396249999957 + -0.0000106499999998 + 0.3776074599999789 + -0.0336863999999913 + 0.0000798749999988 + -0.0000035499999999 + -0.7567052159999486 + 0.0808473599999789 + -0.0001916999999971 + 0.0000085199999999 + 0.5831334119999604 + -0.0606355199999838 + 0.0001437749999978 + -0.0000063899999999 + -0.1365205359999907 + 0.0134745599999963 + -0.0000319499999995 + 0.0000014200000000 + 251.7870357365003713 + -92.4596532000001332 + 11.1666529125000178 + -0.4466670750000007 + -606.1577789580009039 + 221.9031676800003083 + -26.7999669900000406 + 1.0720009800000017 + 454.3998712185007207 + -166.4273757600003023 + 20.0999752425000366 + -0.8040007350000014 + -100.8806544930002360 + 36.9838612800000845 + -4.4666611650000103 + 0.1786668300000004 + -335.9416609200004586 + 123.2795376000001681 + -14.8888705500000214 + 0.5955561000000008 + 808.7561809920013047 + -295.8708902400004490 + 35.7332893200000541 + -1.4293346400000022 + -606.2862547440010985 + 221.9031676800003652 + -26.7999669900000441 + 1.0720009800000017 + 134.6054428320002785 + -49.3118150400000985 + 5.9555482200000114 + -0.2382224400000005 + 140.0572560500002055 + -51.3664740000000748 + 6.2036960625000095 + -0.2481483750000004 + -337.2264340800005584 + 123.2795376000001966 + -14.8888705500000231 + 0.5955561000000009 + 252.8027918100004001 + -92.4596532000001616 + 11.1666529125000178 + -0.4466670750000007 + -56.1263831800001043 + 20.5465896000000399 + -2.4814784250000046 + 0.0992593500000002 + -18.6815509400000295 + 6.8488632000000109 + -0.8271594750000013 + 0.0330864500000001 + 44.9852749440000750 + -16.4372716800000234 + 1.9851827400000031 + -0.0794074800000001 + -33.7233517080000524 + 12.3279537600000193 + -1.4888870550000024 + 0.0595556100000001 + 7.4871428240000135 + -2.7395452800000046 + 0.3308637900000005 + -0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + 204.6814854389999709 + -136.4543236259999901 + 0.0000000000000000 + 0.0000000000000000 + -270.4943405699999630 + 180.3295603799999753 + 0.0000000000000000 + 0.0000000000000000 + 112.7059752374999988 + -75.1373168249999992 + 0.0000000000000000 + 0.0000000000000000 + -15.0274633649999991 + 10.0183089100000000 + 0.0000000000000000 + 0.0000000000000000 + -270.4943405699999630 + 180.3295603799999753 + 0.0000000000000000 + 0.0000000000000000 + 357.4400451840000414 + -238.2933634559999803 + 0.0000000000000000 + 0.0000000000000000 + -148.9333521599999983 + 99.2889014399999894 + 0.0000000000000000 + 0.0000000000000000 + 19.8577802880000007 + -13.2385201919999993 + 0.0000000000000000 + 0.0000000000000000 + 112.7059752374999988 + -75.1373168249999992 + 0.0000000000000000 + 0.0000000000000000 + -148.9333521599999983 + 99.2889014399999894 + 0.0000000000000000 + 0.0000000000000000 + 62.0555634000000040 + -41.3703755999999956 + 0.0000000000000000 + 0.0000000000000000 + -8.2740751199999991 + 5.5160500800000003 + 0.0000000000000000 + 0.0000000000000000 + -15.0274633649999991 + 10.0183089100000000 + 0.0000000000000000 + 0.0000000000000000 + 19.8577802880000007 + -13.2385201919999993 + 0.0000000000000000 + 0.0000000000000000 + -8.2740751199999991 + 5.5160500800000003 + 0.0000000000000000 + 0.0000000000000000 + 1.1032100160000000 + -0.7354733440000000 + -221.1055395120000071 + 694.3984831799999711 + -520.7988623850000067 + 115.7330805300000094 + 278.7592949099999373 + -885.4177802399999564 + 664.0633351800000810 + -147.5696300400000212 + -112.8727612125000093 + 361.0594071000000440 + -270.7945553250000330 + 60.1765678499999979 + 14.7584174950000016 + -47.4421726800000059 + 35.5816295099999991 + -7.9070287800000010 + 278.7592949099999942 + -885.4177802400001838 + 664.0633351800000810 + -147.5696300400000212 + -351.5299650720000955 + 1129.6239523200001713 + -847.2179642400000148 + 188.2706587200000001 + 142.2576037800000108 + -460.5649308000000133 + 345.4236981000000242 + -76.7608218000000022 + -18.5931725040000018 + 60.5098382400000006 + -45.3823786800000022 + 10.0849730400000013 + -112.8727612125000093 + 361.0594071000000440 + -270.7945553250000330 + 60.1765678499999979 + 142.2576037800000108 + -460.5649308000000133 + 345.4236981000000242 + -76.7608218000000022 + -57.5184953249999964 + 187.6888395000000003 + -140.7666296250000073 + 31.2814732499999977 + 7.5130877100000006 + -24.6506705999999980 + 18.4880029500000020 + -4.1084451000000000 + 14.7584174950000016 + -47.4421726800000059 + 35.5816295099999991 + -7.9070287800000001 + -18.5931725040000018 + 60.5098382400000006 + -45.3823786800000022 + 10.0849730399999995 + 7.5130877100000006 + -24.6506705999999980 + 18.4880029499999985 + -4.1084451000000000 + -0.9809390280000001 + 3.2368216800000003 + -2.4276162599999997 + 0.5394702800000000 + 191.0667307679999567 + -232.3364261399999577 + 96.8068442249999919 + -12.9075792299999978 + -257.3214441299999748 + 309.7819015199999626 + -129.0757922999999892 + 17.2101056399999948 + 107.8726573874999985 + -129.0757922999999892 + 53.7815801249999978 + -7.1708773499999996 + -14.4412777849999969 + 17.2101056399999983 + -7.1708773499999996 + 0.9561169799999999 + -257.3214441299999748 + 309.7819015199999058 + -129.0757922999999892 + 17.2101056399999948 + 346.2666576479999776 + -413.0425353599999312 + 172.1010563999999761 + -22.9468075199999966 + -145.1204170199999908 + 172.1010564000000045 + -71.7087734999999924 + 9.5611698000000001 + 19.4242905360000009 + -22.9468075200000001 + 9.5611698000000001 + -1.2748226400000000 + 107.8726573874999701 + -129.0757922999999892 + 53.7815801249999907 + -7.1708773499999987 + -145.1204170199999908 + 172.1010563999999761 + -71.7087734999999924 + 9.5611697999999983 + 60.8179416749999930 + -71.7087734999999924 + 29.8786556250000004 + -3.9838207499999996 + -8.1402678900000005 + 9.5611698000000001 + -3.9838207500000000 + 0.5311760999999999 + -14.4412777849999969 + 17.2101056399999948 + -7.1708773499999987 + 0.9561169799999998 + 19.4242905359999973 + -22.9468075199999966 + 9.5611697999999983 + -1.2748226399999998 + -8.1402678900000005 + 9.5611697999999983 + -3.9838207499999996 + 0.5311760999999999 + 1.0895302519999999 + -1.2748226400000000 + 0.5311760999999999 + -0.0708234800000000 + -91.7268526394999384 + 94.0688623799999277 + -26.5321536524999857 + 2.4120022049999981 + 119.7366670799999042 + -125.4251498399999036 + 35.3762048699999738 + -3.2160029399999974 + -49.2348889499999558 + 52.2604790999999622 + -14.7400853624999861 + 1.3400012249999991 + 6.5063950599999956 + -6.9680638799999954 + 1.9653447149999987 + -0.1786668299999999 + 119.7366670799999042 + -125.4251498399999036 + 35.3762048699999738 + -3.2160029399999974 + -156.4774906319998422 + 167.2335331199998905 + -47.1682731599999627 + 4.2880039199999960 + 64.3563114299999484 + -69.6806387999999401 + 19.6534471499999839 + -1.7866682999999985 + -8.5059399239999927 + 9.2907518399999933 + -2.6204596199999983 + 0.2382224399999998 + -49.2348889499999558 + 52.2604790999999622 + -14.7400853624999897 + 1.3400012249999991 + 64.3563114299999484 + -69.6806387999999401 + 19.6534471499999839 + -1.7866682999999985 + -26.4640285124999792 + 29.0335994999999798 + -8.1889363124999939 + 0.7444451249999995 + 3.4973281349999974 + -3.8711465999999977 + 1.0918581749999994 + -0.0992593499999999 + 6.5063950599999956 + -6.9680638799999954 + 1.9653447149999987 + -0.1786668299999999 + -8.5059399239999927 + 9.2907518399999933 + -2.6204596199999983 + 0.2382224399999998 + 3.4973281349999974 + -3.8711465999999977 + 1.0918581749999994 + -0.0992593499999999 + -0.4621492179999996 + 0.5161528799999997 + -0.1455810899999999 + 0.0132345800000000 + 24.0740975205001106 + -2.4277887000000864 + 0.0034937325000216 + -0.0002587950000018 + -34.6645998000001612 + 3.2370516000001230 + -0.0046583100000299 + 0.0003450600000024 + 15.0989722500000738 + -1.3487715000000551 + 0.0019409625000130 + -0.0001437750000010 + -2.0714531000000118 + 0.1798362000000081 + -0.0002587950000018 + 0.0000191700000001 + -34.6645998000001612 + 3.2370516000001235 + -0.0046583100000299 + 0.0003450600000024 + 49.3908652080002355 + -4.3160688000001688 + 0.0062110800000399 + -0.0004600800000031 + -21.4221701700001006 + 1.7983620000000724 + -0.0025879500000166 + 0.0001917000000013 + 2.9311909560000142 + -0.2397816000000101 + 0.0003450600000022 + -0.0000255600000002 + 15.0989722500000720 + -1.3487715000000551 + 0.0019409625000130 + -0.0001437750000010 + -21.4221701700001006 + 1.7983620000000724 + -0.0025879500000166 + 0.0001917000000013 + 9.2770054875000412 + -0.7493175000000296 + 0.0010783125000066 + -0.0000798750000005 + -1.2681430650000054 + 0.0999090000000038 + -0.0001437750000008 + 0.0000106500000001 + -2.0714531000000118 + 0.1798362000000081 + -0.0002587950000018 + 0.0000191700000001 + 2.9311909560000142 + -0.2397816000000101 + 0.0003450600000022 + -0.0000255600000002 + -1.2681430650000054 + 0.0999090000000038 + -0.0001437750000008 + 0.0000106500000001 + 0.1732469420000007 + -0.0133212000000004 + 0.0000191700000001 + -0.0000014200000000 + 24.0935071455002721 + -2.4355525500001534 + 0.0042701175000289 + -0.0002587950000018 + -34.6904793000003693 + 3.2474034000002079 + -0.0056934900000389 + 0.0003450600000024 + 15.1097553750001588 + -1.3530847500000884 + 0.0023722875000164 + -0.0001437750000010 + -2.0728908500000220 + 0.1804113000000122 + -0.0003163050000022 + 0.0000191700000001 + -34.6904793000003622 + 3.2474034000002079 + -0.0056934900000389 + 0.0003450600000024 + 49.4253712080004988 + -4.3298712000002757 + 0.0075913200000511 + -0.0004600800000031 + -21.4365476700002091 + 1.8041130000001138 + -0.0031630500000209 + 0.0001917000000013 + 2.9331079560000273 + -0.2405484000000150 + 0.0004217400000027 + -0.0000255600000002 + 15.1097553750001588 + -1.3530847500000884 + 0.0023722875000164 + -0.0001437750000010 + -21.4365476700002091 + 1.8041130000001140 + -0.0031630500000209 + 0.0001917000000013 + 9.2829961125000828 + -0.7517137500000454 + 0.0013179375000082 + -0.0000798750000005 + -1.2689418150000105 + 0.1002285000000056 + -0.0001757250000010 + 0.0000106500000001 + -2.0728908500000220 + 0.1804113000000122 + -0.0003163050000022 + 0.0000191700000001 + 2.9331079560000273 + -0.2405484000000150 + 0.0004217400000027 + -0.0000255600000002 + -1.2689418150000105 + 0.1002285000000056 + -0.0001757250000010 + 0.0000106500000001 + 0.1733534420000013 + -0.0133638000000006 + 0.0000234300000001 + -0.0000014200000000 + 24.1214570055004529 + -2.4448691700002163 + 0.0050465025000343 + -0.0002587950000018 + -34.7277457800006175 + 3.2598255600002939 + -0.0067286700000462 + 0.0003450600000024 + 15.1252830750002651 + -1.3582606500001246 + 0.0028036125000195 + -0.0001437750000010 + -2.0749612100000361 + 0.1811014200000171 + -0.0003738150000026 + 0.0000191700000001 + -34.7277457800006175 + 3.2598255600002939 + -0.0067286700000462 + 0.0003450600000024 + 49.4750598480008250 + -4.3464340800003880 + 0.0089715600000605 + -0.0004600800000031 + -21.4572512700003450 + 1.8110142000001597 + -0.0037381500000247 + 0.0001917000000013 + 2.9358684360000451 + -0.2414685600000209 + 0.0004984200000032 + -0.0000255600000002 + 15.1252830750002616 + -1.3582606500001246 + 0.0028036125000195 + -0.0001437750000010 + -21.4572512700003450 + 1.8110142000001597 + -0.0037381500000247 + 0.0001917000000013 + 9.2916226125001380 + -0.7545892500000633 + 0.0015575625000096 + -0.0000798750000005 + -1.2700920150000172 + 0.1006119000000078 + -0.0002076750000012 + 0.0000106500000001 + -2.0749612100000361 + 0.1811014200000171 + -0.0003738150000026 + 0.0000191700000001 + 2.9358684360000451 + -0.2414685600000209 + 0.0004984200000032 + -0.0000255600000002 + -1.2700920150000172 + 0.1006119000000078 + -0.0002076750000012 + 0.0000106500000001 + 0.1735068020000020 + -0.0134149200000009 + 0.0000276900000001 + -0.0000014200000000 + 24.1594998705007029 + -2.4557385600002908 + 0.0058228875000397 + -0.0002587950000018 + -34.7784696000009532 + 3.2743180800003930 + -0.0077638500000534 + 0.0003450600000024 + 15.1464180000004074 + -1.3642992000001666 + 0.0032349375000225 + -0.0001437750000010 + -2.0777792000000561 + 0.1819065600000228 + -0.0004313250000031 + 0.0000191700000001 + -34.7784696000009532 + 3.2743180800003930 + -0.0077638500000534 + 0.0003450600000024 + 49.5426916080012703 + -4.3657574400005181 + 0.0103518000000699 + -0.0004600800000031 + -21.4854311700005276 + 1.8190656000002128 + -0.0043132500000285 + 0.0001917000000013 + 2.9396257560000691 + -0.2425420800000277 + 0.0005751000000037 + -0.0000255600000002 + 15.1464180000004074 + -1.3642992000001666 + 0.0032349375000225 + -0.0001437750000010 + -21.4854311700005276 + 1.8190656000002128 + -0.0043132500000285 + 0.0001917000000013 + 9.3033642375002099 + -0.7579440000000840 + 0.0017971875000111 + -0.0000798750000005 + -1.2716575650000261 + 0.1010592000000103 + -0.0002396250000013 + 0.0000106500000001 + -2.0777792000000561 + 0.1819065600000228 + -0.0004313250000031 + 0.0000191700000001 + 2.9396257560000691 + -0.2425420800000277 + 0.0005751000000037 + -0.0000255600000002 + -1.2716575650000261 + 0.1010592000000103 + -0.0002396250000013 + 0.0000106500000001 + 0.1737155420000029 + -0.0134745600000011 + 0.0000319500000001 + -0.0000014200000000 + -1365.2531474894988150 + 499.2821272799995995 + -60.2999257274999536 + 2.4120022049999981 + 1817.7717268799983685 + -665.7095030399993902 + 80.3999009699999192 + -3.2160029399999974 + -756.7494971999993822 + 277.3789595999998028 + -33.4999587374999663 + 1.3400012249999991 + 100.8416761599999063 + -36.9838612799999709 + 4.4666611649999961 + -0.1786668299999999 + 1817.7717268799983685 + -665.7095030399995039 + 80.3999009699999192 + -3.2160029399999974 + -2420.5242370319979273 + 887.6126707199993007 + -107.1998679599999207 + 4.2880039199999960 + 1007.7091224299991836 + -369.8386127999996802 + 44.6666116499999646 + -1.7866682999999985 + -134.2863147239999080 + 49.3118150399999564 + -5.9555482199999954 + 0.2382224399999998 + -756.7494971999992686 + 277.3789595999998028 + -33.4999587374999663 + 1.3400012249999991 + 1007.7091224299990699 + -369.8386127999996802 + 44.6666116499999646 + -1.7866682999999985 + -419.5276997624996511 + 154.0994219999998904 + -18.6110881874999841 + 0.7444451249999995 + 55.9058176349999627 + -20.5465895999999830 + 2.4814784249999979 + -0.0992593499999999 + 100.8416761599999063 + -36.9838612799999709 + 4.4666611649999961 + -0.1786668299999999 + -134.2863147239999080 + 49.3118150399999564 + -5.9555482199999954 + 0.2382224399999998 + 55.9058176349999627 + -20.5465895999999830 + 2.4814784249999979 + -0.0992593499999999 + -7.4499478179999956 + 2.7395452799999984 + -0.3308637899999998 + 0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8107300115000000 + -1.2071533409999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.4143066819999999 + 1.6095377879999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0059611175000001 + -0.6706407450000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1341281490000000 + 0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 225.3083766705000244 + -539.2915199999999913 + 404.4686400000000503 + -89.8819200000000080 + -202.2343199999999968 + 485.3623680000000604 + -364.0217760000000453 + 80.8937280000000101 + 58.9850100000000026 + -141.5640239999999892 + 106.1730180000000132 + -23.5940039999999982 + -5.6176200000000005 + 13.4822880000000005 + -10.1117160000000013 + 2.2470479999999999 + -262.9603688939999984 + 629.1734400000000278 + -471.8800800000000208 + 104.8622400000000141 + 235.9400400000000104 + -566.2560960000000705 + 424.6920720000000529 + -94.3760159999999928 + -68.8158449999999959 + 165.1580280000000300 + -123.8685210000000154 + 27.5263379999999991 + 6.5538900000000009 + -15.7293360000000000 + 11.7970019999999991 + -2.6215560000000000 + 100.2041203725000003 + -239.6851199999999835 + 179.7638400000000161 + -39.9475199999999973 + -89.8819200000000080 + 215.7166080000000079 + -161.7874560000000201 + 35.9527679999999989 + 26.2155599999999964 + -62.9173439999999999 + 47.1880080000000035 + -10.4862240000000000 + -2.4967199999999998 + 5.9921279999999992 + -4.4940959999999999 + 0.9986880000000000 + -12.5283093829999999 + 29.9606400000000015 + -22.4704800000000020 + 4.9934399999999997 + 11.2352400000000010 + -26.9645760000000010 + 20.2234320000000025 + -4.4940959999999999 + -3.2769449999999996 + 7.8646680000000000 + -5.8985010000000004 + 1.3107780000000000 + 0.3120900000000000 + -0.7490160000000000 + 0.5617620000000000 + -0.1248360000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1796984025000000 + 0.1197989350000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5390952075000000 + -0.3593968050000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3593968050000000 + 0.2395978700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0598994675000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.7523780425000002 + -15.7744311360000005 + 11.8308233519999995 + -2.6290718559999999 + -7.0045704549999996 + 16.5234516479999982 + -12.3925887360000004 + 2.7539086080000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.7580597519999994 + 16.2193434048000000 + -12.1645075536000000 + 2.7032239007999999 + 6.7580597519999994 + -16.2193434048000000 + 12.1645075536000000 + -2.7032239007999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.9711007609999998 + -4.7306418263999994 + 3.5479813698000000 + -0.7884403043999999 + -1.9711007609999998 + 4.7306418263999994 + -3.5479813698000000 + 0.7884403043999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1877238820000000 + 0.4505373168000000 + -0.3379029876000000 + 0.0750895528000000 + 0.1877238820000000 + -0.4505373168000000 + 0.3379029876000000 + -0.0750895528000000 + 1.7561266437000007 + -2.3348907144000020 + 0.9728711310000014 + -0.1297161508000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -46.0039935710999970 + 61.0691501591999995 + -25.4454792330000004 + 3.3927305643999999 + 44.1854485514000146 + -58.7342594448000099 + 24.4726081020000059 + -3.2630144136000014 + -0.0000000000000012 + 0.0000000000000029 + -0.0000000000000020 + 0.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 36.4935226607999965 + -48.6580302144000001 + 20.2741792560000000 + -2.7032239007999999 + -36.4935226608000107 + 48.6580302144000143 + -20.2741792560000071 + 2.7032239008000012 + 0.0000000000000005 + -0.0000000000000012 + 0.0000000000000008 + -0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -10.6439441093999996 + 14.1919254792000000 + -5.9133022830000002 + 0.7884403043999999 + 10.6439441094000031 + -14.1919254792000071 + 5.9133022830000037 + -0.7884403044000006 + -0.0000000000000001 + 0.0000000000000002 + -0.0000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0137089628000000 + -1.3516119503999999 + 0.5631716460000000 + -0.0750895528000000 + -1.0137089628000004 + 1.3516119504000006 + -0.5631716460000002 + 0.0750895528000001 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3353203725000000 + 0.2235469150000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8047688940000000 + -0.5365125960000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6035766705000000 + 0.4023844470000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1341281490000000 + -0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 56.1396151825000018 + -135.0033327360000044 + 101.2524995520000033 + -22.5005554560000007 + -125.9664885020000042 + 302.9633875199999693 + -227.2225406399999770 + 50.4938979199999949 + 90.0868110964999858 + -216.6912079679999579 + 162.5184059759999968 + -36.1152013279999977 + -20.5720296569999981 + 49.4801736959999943 + -37.1101302719999921 + 8.2466956160000002 + -49.5027190080000068 + 118.8065256192000163 + -89.1048942144000051 + 19.8010876031999992 + 110.2406780160000039 + -264.5776272383999412 + 198.4332204287999843 + -44.0962712064000044 + -78.7312587600000029 + 188.9550210239999615 + -141.7162657679999711 + 31.4925035039999983 + 17.9932997519999986 + -43.1839194047999939 + 32.3879395535999990 + -7.1973199008000002 + 14.4382930439999981 + -34.6519033056000012 + 25.9889274792000009 + -5.7753172175999996 + -32.1535310880000011 + 77.1684746111999971 + -57.8763559583999978 + 12.8614124351999983 + 22.9632838049999997 + -55.1118811319999935 + 41.3339108489999987 + -9.1853135219999995 + -5.2480457610000002 + 12.5953098263999994 + -9.4464823697999982 + 2.0992183043999999 + -1.3750755280000000 + 3.3001812671999997 + -2.4751359503999999 + 0.5500302112000000 + 3.0622410560000000 + -7.3493785343999996 + 5.5120339008000006 + -1.2248964224000001 + -2.1869794100000002 + 5.2487505839999997 + -3.9365629379999998 + 0.8747917640000000 + 0.4998138820000000 + -1.1995533167999999 + 0.8996649876000000 + -0.1999255528000000 + -157.0620940015000429 + 216.2579120640000099 + -90.1074633599999970 + 12.0143284479999988 + 311.4225038820000009 + -432.5158241280000198 + 180.2149267199999940 + -24.0286568960000011 + -192.3943393995000122 + 270.3223900799999910 + -112.6343292000000105 + 15.0179105600000007 + 37.9715111430000007 + -54.0644780160000025 + 22.5268658399999993 + -3.0035821120000001 + 141.4799946432000013 + -194.6321208576000004 + 81.0967170240000002 + -10.8128956031999994 + -280.7129412863999960 + 389.2642417152000007 + -162.1934340480000003 + 21.6257912063999989 + 173.4794213039999988 + -243.2901510719999862 + 101.3708962799999966 + -13.5161195040000006 + -34.2464746608000041 + 48.6580302144000001 + -20.2741792560000036 + 2.7032239008000003 + -41.2649984375999992 + 56.7677019167999930 + -23.6532091319999971 + 3.1537612175999996 + 81.8746078751999988 + -113.5354038336000144 + 47.3064182640000013 + -6.3075224351999992 + -50.5981645469999961 + 70.9596273959999877 + -29.5665114149999972 + 3.9422015219999995 + 9.9885551094000000 + -14.1919254791999983 + 5.9133022830000002 + -0.7884403044000000 + 3.9299998511999998 + -5.4064478016000006 + 2.2526865840000001 + -0.3003582112000000 + -7.7975817024000005 + 10.8128956032000012 + -4.5053731680000002 + 0.6007164224000000 + 4.8188728140000006 + -6.7580597520000003 + 2.8158582299999999 + -0.3754477640000000 + -0.9512909628000000 + 1.3516119504000002 + -0.5631716460000000 + 0.0750895528000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8107300115000000 + -1.2071533409999999 + 0.0000000000000000 + 0.0000000000000000 + -2.4143066819999999 + 1.6095377879999999 + 0.0000000000000000 + 0.0000000000000000 + 1.0059611175000001 + -0.6706407450000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1341281490000000 + 0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 225.3083766704999960 + -539.2915199999999913 + 404.4686400000000503 + -89.8819200000000080 + -262.9603688939999984 + 629.1734400000000278 + -471.8800800000000208 + 104.8622400000000141 + 100.2041203725000003 + -239.6851200000000119 + 179.7638400000000161 + -39.9475200000000044 + -12.5283093829999999 + 29.9606400000000015 + -22.4704800000000020 + 4.9934399999999997 + -202.2343199999999968 + 485.3623680000000036 + -364.0217760000000453 + 80.8937280000000101 + 235.9400400000000104 + -566.2560960000000705 + 424.6920720000000529 + -94.3760160000000070 + -89.8819200000000080 + 215.7166080000000079 + -161.7874560000000201 + 35.9527680000000061 + 11.2352400000000010 + -26.9645760000000010 + 20.2234320000000025 + -4.4940959999999999 + 58.9850100000000026 + -141.5640239999999892 + 106.1730180000000132 + -23.5940039999999982 + -68.8158449999999959 + 165.1580280000000016 + -123.8685210000000154 + 27.5263379999999991 + 26.2155600000000035 + -62.9173440000000070 + 47.1880080000000035 + -10.4862240000000000 + -3.2769449999999996 + 7.8646680000000000 + -5.8985010000000004 + 1.3107780000000000 + -5.6176200000000005 + 13.4822880000000005 + -10.1117160000000013 + 2.2470479999999999 + 6.5538900000000009 + -15.7293360000000000 + 11.7970019999999991 + -2.6215560000000000 + -2.4967199999999998 + 5.9921279999999992 + -4.4940959999999999 + 0.9986880000000000 + 0.3120900000000000 + -0.7490160000000000 + 0.5617620000000000 + -0.1248360000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# piCH + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3500000000000001 + 0.9000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000000 + -0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000000 + -0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -63.4499999999999886 + 80.9999999999999858 + -33.7499999999999929 + 4.4999999999999991 + 42.2999999999999972 + -53.9999999999999858 + 22.4999999999999964 + -2.9999999999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 42.2999999999999972 + -53.9999999999999858 + 22.4999999999999964 + -2.9999999999999996 + -28.1999999999999957 + 36.0000000000000000 + -15.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 179.5499999999999545 + -161.9999999999999716 + 47.2499999999999929 + -4.4999999999999991 + -119.6999999999999886 + 107.9999999999999716 + -31.4999999999999964 + 2.9999999999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -119.6999999999999886 + 107.9999999999999716 + -31.4999999999999964 + 2.9999999999999996 + 79.7999999999999972 + -72.0000000000000000 + 21.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000003 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 4.0500000000000007 + -2.7000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.6000000000000005 + -2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + -2.7000000000000002 + 1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.1499999999999986 + 45.0000000000000000 + -33.7500000000000000 + 7.5000000000000000 + 43.2000000000000028 + -108.0000000000000000 + 81.0000000000000000 + -18.0000000000000000 + -32.3999999999999986 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 7.2000000000000002 + -18.0000000000000000 + 13.5000000000000000 + -3.0000000000000000 + 12.0999999999999996 + -30.0000000000000000 + 22.5000000000000000 + -5.0000000000000000 + -28.8000000000000007 + 72.0000000000000000 + -54.0000000000000000 + 12.0000000000000000 + 21.6000000000000014 + -54.0000000000000000 + 40.5000000000000000 + -9.0000000000000000 + -4.7999999999999998 + 12.0000000000000000 + -9.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 80.8499999999999943 + -108.0000000000000000 + 45.0000000000000000 + -6.0000000000000000 + -244.8000000000000114 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 183.5999999999999943 + -243.0000000000000000 + 101.2500000000000000 + -13.5000000000000000 + -40.7999999999999972 + 54.0000000000000000 + -22.5000000000000000 + 3.0000000000000000 + -53.9000000000000057 + 72.0000000000000000 + -30.0000000000000000 + 4.0000000000000000 + 163.1999999999999886 + -216.0000000000000000 + 90.0000000000000000 + -12.0000000000000000 + -122.4000000000000057 + 162.0000000000000000 + -67.5000000000000000 + 9.0000000000000000 + 27.1999999999999993 + -36.0000000000000000 + 15.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 60.6000000000000369 + -54.0000000000000284 + 15.7500000000000107 + -1.5000000000000011 + -1.8000000000001068 + 0.0000000000000999 + -0.0000000000000306 + 0.0000000000000031 + 1.3500000000000831 + -0.0000000000000759 + 0.0000000000000226 + -0.0000000000000022 + -0.3000000000000198 + 0.0000000000000173 + -0.0000000000000049 + 0.0000000000000004 + -40.4000000000000270 + 36.0000000000000213 + -10.5000000000000036 + 1.0000000000000004 + 1.2000000000000515 + -0.0000000000000426 + 0.0000000000000111 + -0.0000000000000009 + -0.9000000000000317 + 0.0000000000000253 + -0.0000000000000062 + 0.0000000000000004 + 0.2000000000000040 + -0.0000000000000027 + 0.0000000000000004 + 0.0000000000000000 + -3.9810265070966766 + 2.7143362548386434 + -0.6107256573386948 + 0.0452389375806441 + 9.5544636170320238 + -6.5144070116127439 + 1.4657415776128673 + -0.1085734501935457 + -7.1658477127740188 + 4.8858052587095582 + -1.0993061832096505 + 0.0814300876451593 + 1.5924106028386709 + -1.0857345019354574 + 0.2442902629354779 + -0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.5430795212900357 + -8.1430087645159333 + 1.8321769720160854 + -0.1357168127419323 + -30.4633908510960865 + 19.5432210348382434 + -4.3972247328386054 + 0.3257203505806374 + 22.8475431383220666 + -14.6574157761286834 + 3.2979185496289536 + -0.2442902629354781 + -5.0772318085160153 + 3.2572035058063742 + -0.7328707888064342 + 0.0542867250967729 + -8.3620530141933571 + 5.4286725096772885 + -1.2214513146773900 + 0.0904778751612881 + 20.3089272340640541 + -13.0288140232254914 + 2.9314831552257354 + -0.2171469003870915 + -15.2316954255480397 + 9.7716105174191163 + -2.1986123664193014 + 0.1628601752903186 + 3.3848212056773415 + -2.1714690038709143 + 0.4885805258709557 + -0.0361911500645152 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -25.2000000000000028 + 16.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 32.4000000000000057 + -21.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 9.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 16.8000000000000007 + -11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000018 + -6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 82.3499999999999943 + -217.8000000000000114 + 163.3499999999999943 + -36.2999999999999972 + -110.6999999999999886 + 291.6000000000000227 + -218.6999999999999886 + 48.6000000000000085 + 46.1250000000000000 + -121.5000000000000000 + 91.1250000000000000 + -20.2500000000000036 + -6.1500000000000004 + 16.2000000000000028 + -12.1500000000000021 + 2.7000000000000002 + -54.8999999999999986 + 145.1999999999999886 + -108.9000000000000057 + 24.1999999999999993 + 73.7999999999999972 + -194.4000000000000341 + 145.8000000000000114 + -32.3999999999999986 + -30.7500000000000000 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 4.0999999999999996 + -10.8000000000000007 + 8.0999999999999996 + -1.7999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1460.4000000000000909 + 1306.8000000000001819 + -381.1499999999999773 + 36.2999999999999972 + 1954.8000000000001819 + -1749.6000000000001364 + 510.3000000000000114 + -48.6000000000000085 + -814.5000000000001137 + 729.0000000000001137 + -212.6250000000000000 + 20.2500000000000036 + 108.5999999999999943 + -97.2000000000000028 + 28.3500000000000014 + -2.7000000000000002 + 973.5999999999999091 + -871.2000000000000455 + 254.0999999999999943 + -24.2000000000000028 + -1303.2000000000000455 + 1166.4000000000000909 + -340.2000000000000455 + 32.4000000000000057 + 543.0000000000000000 + -486.0000000000000568 + 141.7500000000000000 + -13.5000000000000000 + -72.4000000000000057 + 64.8000000000000114 + -18.8999999999999986 + 1.8000000000000000 + 21.4975431383220581 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + -28.6633908510960751 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 11.9430795212900307 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + -1.5924106028386709 + 1.0857345019354574 + -0.2442902629354779 + 0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -72.8926294149661658 + 43.9722473283860253 + -9.8937556488868559 + 0.7328707888064337 + 96.7901725532882438 + -58.6296631045147052 + 13.1916741985158090 + -0.9771610517419118 + -40.3292385638700992 + 24.4290262935477962 + -5.4965309160482541 + 0.4071504382257967 + 5.3772318085160133 + -3.2572035058063733 + 0.7328707888064341 + -0.0542867250967729 + 48.5950862766441105 + -29.3148315522573526 + 6.5958370992579045 + -0.4885805258709559 + -64.5267817021921530 + 39.0864420696764654 + -8.7944494656772036 + 0.6514407011612744 + 26.8861590425800614 + -16.2860175290318594 + 3.6643539440321682 + -0.2714336254838643 + -3.5848212056773412 + 2.1714690038709143 + -0.4885805258709557 + 0.0361911500645152 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6749999999999999 + 0.8999999999999997 + -0.6749999999999997 + 0.1499999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4499999999999999 + -0.5999999999999998 + 0.4499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6999999999999975 + -5.3999999999999968 + 1.5749999999999993 + -0.1499999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7999999999999985 + 3.5999999999999988 + -1.0499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000003 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 3.6000000000000005 + -2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.0500000000000007 + -2.7000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -2.7000000000000002 + 1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.1499999999999986 + 45.0000000000000000 + -33.7500000000000000 + 7.5000000000000000 + 12.0999999999999996 + -30.0000000000000000 + 22.5000000000000000 + -5.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + -108.0000000000000000 + 81.0000000000000000 + -18.0000000000000000 + -28.8000000000000007 + 72.0000000000000000 + -54.0000000000000000 + 12.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.3999999999999986 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 21.6000000000000014 + -54.0000000000000000 + 40.5000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000002 + -18.0000000000000000 + 13.5000000000000000 + -3.0000000000000000 + -4.7999999999999998 + 12.0000000000000000 + -9.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 80.8499999999999943 + -108.0000000000000000 + 45.0000000000000000 + -6.0000000000000000 + -53.9000000000000057 + 72.0000000000000000 + -30.0000000000000000 + 4.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -244.8000000000000114 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 163.1999999999999886 + -216.0000000000000000 + 90.0000000000000000 + -12.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 183.5999999999999943 + -243.0000000000000000 + 101.2500000000000000 + -13.5000000000000000 + -122.4000000000000057 + 162.0000000000000000 + -67.5000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.7999999999999972 + 54.0000000000000000 + -22.5000000000000000 + 3.0000000000000000 + 27.1999999999999993 + -36.0000000000000000 + 15.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 60.6000000000000369 + -54.0000000000000284 + 15.7500000000000107 + -1.5000000000000011 + -40.4000000000000270 + 36.0000000000000213 + -10.5000000000000036 + 1.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000001068 + 0.0000000000000999 + -0.0000000000000306 + 0.0000000000000031 + 1.2000000000000515 + -0.0000000000000426 + 0.0000000000000111 + -0.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3500000000000831 + -0.0000000000000759 + 0.0000000000000226 + -0.0000000000000022 + -0.9000000000000317 + 0.0000000000000253 + -0.0000000000000062 + 0.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000198 + 0.0000000000000173 + -0.0000000000000049 + 0.0000000000000004 + 0.2000000000000040 + -0.0000000000000027 + 0.0000000000000004 + 0.0000000000000000 + -3.9810265070966766 + 2.7143362548386434 + -0.6107256573386948 + 0.0452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.5430795212900303 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + -8.3620530141933536 + 5.4286725096772868 + -1.2214513146773895 + 0.0904778751612881 + 9.5544636170320238 + -6.5144070116127439 + 1.4657415776128673 + -0.1085734501935457 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -30.4633908510960723 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 20.3089272340640505 + -13.0288140232254879 + 2.9314831552257345 + -0.2171469003870915 + -7.1658477127740188 + 4.8858052587095582 + -1.0993061832096505 + 0.0814300876451593 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.8475431383220560 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + -15.2316954255480361 + 9.7716105174191163 + -2.1986123664193009 + 0.1628601752903186 + 1.5924106028386709 + -1.0857345019354574 + 0.2442902629354779 + -0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.0772318085160126 + 3.2572035058063720 + -0.7328707888064336 + 0.0542867250967729 + 3.3848212056773415 + -2.1714690038709148 + 0.4885805258709558 + -0.0361911500645152 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 16.2000000000000028 + -10.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 16.2000000000000028 + -10.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -12.1500000000000021 + 8.1000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 49.2000000000000028 + -120.0000000000000000 + 90.0000000000000000 + -20.0000000000000000 + -132.6000000000000227 + 324.0000000000000000 + -243.0000000000000000 + 54.0000000000000000 + 99.4500000000000171 + -243.0000000000000000 + 182.2500000000000000 + -40.5000000000000000 + -22.1000000000000014 + 54.0000000000000000 + -40.5000000000000000 + 9.0000000000000000 + -132.5999999999999943 + 324.0000000000000000 + -243.0000000000000000 + 54.0000000000000000 + 352.8000000000000114 + -864.0000000000000000 + 648.0000000000000000 + -144.0000000000000000 + -264.6000000000000227 + 648.0000000000000000 + -486.0000000000000000 + 108.0000000000000000 + 58.7999999999999972 + -144.0000000000000000 + 108.0000000000000000 + -24.0000000000000000 + 99.4500000000000028 + -243.0000000000000000 + 182.2500000000000000 + -40.5000000000000000 + -264.6000000000000227 + 648.0000000000000000 + -486.0000000000000000 + 108.0000000000000000 + 198.4499999999999886 + -486.0000000000000000 + 364.5000000000000000 + -81.0000000000000000 + -44.1000000000000014 + 108.0000000000000000 + -81.0000000000000000 + 18.0000000000000000 + -22.1000000000000014 + 54.0000000000000000 + -40.5000000000000000 + 9.0000000000000000 + 58.7999999999999972 + -144.0000000000000000 + 108.0000000000000000 + -24.0000000000000000 + -44.1000000000000014 + 108.0000000000000000 + -81.0000000000000000 + 18.0000000000000000 + 9.8000000000000007 + -24.0000000000000000 + 18.0000000000000000 + -4.0000000000000000 + -102.7999999999999972 + 144.0000000000000000 + -60.0000000000000000 + 8.0000000000000000 + 311.3999999999999773 + -432.0000000000000000 + 180.0000000000000000 + -24.0000000000000000 + -233.5499999999999829 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 51.8999999999999986 + -72.0000000000000000 + 30.0000000000000000 + -4.0000000000000000 + 311.3999999999999773 + -432.0000000000000000 + 180.0000000000000000 + -24.0000000000000000 + -943.2000000000000455 + 1296.0000000000000000 + -540.0000000000000000 + 72.0000000000000000 + 707.3999999999999773 + -972.0000000000000000 + 405.0000000000000000 + -54.0000000000000000 + -157.1999999999999886 + 216.0000000000000000 + -90.0000000000000000 + 12.0000000000000000 + -233.5499999999999829 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 707.4000000000000909 + -972.0000000000000000 + 405.0000000000000000 + -54.0000000000000000 + -530.5499999999999545 + 729.0000000000000000 + -303.7500000000000000 + 40.5000000000000000 + 117.9000000000000057 + -162.0000000000000000 + 67.5000000000000000 + -9.0000000000000000 + 51.8999999999999986 + -72.0000000000000000 + 30.0000000000000000 + -4.0000000000000000 + -157.1999999999999886 + 216.0000000000000000 + -90.0000000000000000 + 12.0000000000000000 + 117.9000000000000057 + -162.0000000000000000 + 67.5000000000000000 + -9.0000000000000000 + -26.1999999999999993 + 36.0000000000000000 + -15.0000000000000000 + 2.0000000000000000 + -480.8000000000000114 + 432.0000000000000000 + -126.0000000000000000 + 12.0000000000000000 + 1202.4000000000000909 + -1080.0000000000000000 + 315.0000000000000568 + -30.0000000000000036 + -901.8000000000000682 + 810.0000000000001137 + -236.2500000000000000 + 22.5000000000000036 + 200.4000000000000341 + -180.0000000000000284 + 52.5000000000000071 + -5.0000000000000000 + 1202.4000000000003183 + -1080.0000000000002274 + 315.0000000000000568 + -30.0000000000000071 + -2887.2000000000007276 + 2592.0000000000004547 + -756.0000000000001137 + 72.0000000000000142 + 2165.4000000000005457 + -1944.0000000000002274 + 567.0000000000000000 + -54.0000000000000071 + -481.2000000000000455 + 432.0000000000000568 + -126.0000000000000142 + 12.0000000000000000 + -901.8000000000000682 + 810.0000000000002274 + -236.2500000000000284 + 22.5000000000000036 + 2165.4000000000005457 + -1944.0000000000004547 + 567.0000000000000000 + -54.0000000000000071 + -1624.0500000000001819 + 1458.0000000000002274 + -425.2500000000000568 + 40.5000000000000071 + 360.9000000000000341 + -324.0000000000000568 + 94.5000000000000000 + -9.0000000000000000 + 200.4000000000000341 + -180.0000000000000284 + 52.5000000000000071 + -5.0000000000000000 + -481.2000000000000455 + 432.0000000000000568 + -126.0000000000000142 + 12.0000000000000000 + 360.9000000000000341 + -324.0000000000000568 + 94.5000000000000000 + -9.0000000000000000 + -80.2000000000000028 + 72.0000000000000000 + -21.0000000000000000 + 2.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 33.6000000000000014 + -22.3999999999999986 + 0.0000000000000000 + 0.0000000000000000 + -43.2000000000000028 + 28.8000000000000043 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + -12.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -100.8000000000000114 + 67.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 129.6000000000000227 + -86.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 36.0000000000000071 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 75.6000000000000085 + -50.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -97.2000000000000171 + 64.8000000000000114 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + -27.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + -16.8000000000000007 + 11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 21.6000000000000014 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000018 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + -109.8000000000000114 + 290.3999999999999773 + -217.7999999999999829 + 48.3999999999999986 + 147.5999999999999943 + -388.8000000000000114 + 291.6000000000000227 + -64.7999999999999972 + -61.5000000000000000 + 162.0000000000000000 + -121.5000000000000000 + 27.0000000000000000 + 8.1999999999999993 + -21.6000000000000014 + 16.1999999999999993 + -3.6000000000000001 + 329.4000000000000341 + -871.2000000000000455 + 653.3999999999999773 + -145.1999999999999886 + -442.8000000000000114 + 1166.4000000000000909 + -874.8000000000000682 + 194.4000000000000341 + 184.5000000000000000 + -486.0000000000000568 + 364.5000000000000000 + -81.0000000000000000 + -24.6000000000000014 + 64.8000000000000114 + -48.6000000000000085 + 10.8000000000000007 + -247.0499999999999829 + 653.4000000000000909 + -490.0499999999999545 + 108.9000000000000057 + 332.0999999999999659 + -874.8000000000000682 + 656.1000000000000227 + -145.8000000000000114 + -138.3750000000000000 + 364.5000000000000568 + -273.3750000000000000 + 60.7500000000000000 + 18.4499999999999993 + -48.6000000000000085 + 36.4500000000000028 + -8.0999999999999996 + 54.8999999999999986 + -145.1999999999999886 + 108.9000000000000057 + -24.1999999999999993 + -73.7999999999999972 + 194.4000000000000341 + -145.8000000000000114 + 32.3999999999999986 + 30.7500000000000000 + -81.0000000000000000 + 60.7500000000000000 + -13.5000000000000000 + -4.0999999999999996 + 10.8000000000000007 + -8.0999999999999996 + 1.7999999999999998 + -13.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 39.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -16.8750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1947.2000000000000455 + -1742.3999999999998636 + 508.1999999999999318 + -48.3999999999999986 + -2606.4000000000005457 + 2332.8000000000001819 + -680.3999999999999773 + 64.8000000000000114 + 1086.0000000000000000 + -972.0000000000001137 + 283.5000000000000000 + -27.0000000000000036 + -144.8000000000000114 + 129.5999999999999943 + -37.7999999999999972 + 3.6000000000000005 + -5841.6000000000003638 + 5227.2000000000007276 + -1524.5999999999999091 + 145.1999999999999886 + 7819.2000000000007276 + -6998.4000000000005457 + 2041.2000000000002728 + -194.4000000000000341 + -3258.0000000000004547 + 2916.0000000000004547 + -850.5000000000000000 + 81.0000000000000142 + 434.4000000000000341 + -388.8000000000000114 + 113.4000000000000057 + -10.8000000000000007 + 4381.2000000000007276 + -3920.4000000000005457 + 1143.4500000000000455 + -108.9000000000000057 + -5864.4000000000014552 + 5248.8000000000001819 + -1530.9000000000000909 + 145.8000000000000114 + 2443.5000000000004547 + -2187.0000000000004547 + 637.8750000000000000 + -60.7500000000000142 + -325.8000000000000114 + 291.6000000000000227 + -85.0500000000000114 + 8.1000000000000014 + -973.5999999999999091 + 871.2000000000000455 + -254.0999999999999943 + 24.2000000000000028 + 1303.2000000000000455 + -1166.4000000000000909 + 340.2000000000000455 + -32.4000000000000057 + -543.0000000000000000 + 486.0000000000000568 + -141.7500000000000000 + 13.5000000000000000 + 72.4000000000000057 + -64.8000000000000114 + 18.8999999999999986 + -1.8000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8999999999999998 + -1.1999999999999997 + 0.8999999999999996 + -0.1999999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.6999999999999993 + 3.5999999999999988 + -2.6999999999999988 + 0.5999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.0249999999999995 + -2.6999999999999988 + 2.0249999999999995 + -0.4499999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4499999999999999 + 0.5999999999999998 + -0.4499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.1250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5999999999999961 + 7.1999999999999966 + -2.0999999999999992 + 0.1999999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.7999999999999901 + -21.5999999999999908 + 6.2999999999999972 + -0.5999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.0999999999999943 + 16.1999999999999922 + -4.7249999999999979 + 0.4499999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7999999999999985 + -3.5999999999999988 + 1.0499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -25.2000000000000028 + 16.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 16.8000000000000007 + -11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 32.4000000000000057 + -21.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 9.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000018 + -6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 82.3499999999999943 + -217.8000000000000114 + 163.3499999999999943 + -36.2999999999999972 + -54.8999999999999986 + 145.1999999999999886 + -108.9000000000000057 + 24.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -110.6999999999999886 + 291.6000000000000227 + -218.6999999999999886 + 48.6000000000000085 + 73.7999999999999972 + -194.4000000000000341 + 145.8000000000000114 + -32.3999999999999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 46.1250000000000000 + -121.5000000000000000 + 91.1250000000000000 + -20.2500000000000036 + -30.7500000000000000 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.1500000000000004 + 16.2000000000000028 + -12.1500000000000021 + 2.7000000000000002 + 4.0999999999999996 + -10.8000000000000007 + 8.0999999999999996 + -1.7999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1460.4000000000000909 + 1306.8000000000001819 + -381.1499999999999773 + 36.2999999999999972 + 973.5999999999999091 + -871.2000000000000455 + 254.0999999999999943 + -24.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1954.8000000000001819 + -1749.6000000000001364 + 510.3000000000000114 + -48.6000000000000085 + -1303.2000000000000455 + 1166.4000000000000909 + -340.2000000000000455 + 32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -814.5000000000001137 + 729.0000000000001137 + -212.6250000000000000 + 20.2500000000000036 + 543.0000000000000000 + -486.0000000000000568 + 141.7500000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 108.5999999999999943 + -97.2000000000000028 + 28.3500000000000014 + -2.7000000000000002 + -72.4000000000000057 + 64.8000000000000114 + -18.8999999999999986 + 1.8000000000000000 + 21.4975431383220581 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -72.8926294149661658 + 43.9722473283860253 + -9.8937556488868559 + 0.7328707888064337 + 48.5950862766441105 + -29.3148315522573526 + 6.5958370992579045 + -0.4885805258709559 + -28.6633908510960751 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 96.7901725532882438 + -58.6296631045147052 + 13.1916741985158090 + -0.9771610517419118 + -64.5267817021921530 + 39.0864420696764654 + -8.7944494656772036 + 0.6514407011612744 + 11.9430795212900307 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.3292385638700992 + 24.4290262935477962 + -5.4965309160482541 + 0.4071504382257967 + 26.8861590425800614 + -16.2860175290318594 + 3.6643539440321682 + -0.2714336254838643 + -1.5924106028386709 + 1.0857345019354574 + -0.2442902629354779 + 0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.3772318085160133 + -3.2572035058063733 + 0.7328707888064341 + -0.0542867250967729 + -3.5848212056773412 + 2.1714690038709143 + -0.4885805258709557 + 0.0361911500645152 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 33.6000000000000014 + -22.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -100.8000000000000114 + 67.2000000000000171 + 0.0000000000000000 + 0.0000000000000000 + 75.6000000000000085 + -50.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -16.8000000000000007 + 11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + -43.2000000000000028 + 28.8000000000000043 + 0.0000000000000000 + 0.0000000000000000 + 129.6000000000000227 + -86.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -97.2000000000000171 + 64.8000000000000114 + 0.0000000000000000 + 0.0000000000000000 + 21.6000000000000014 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + -12.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000071 + 36.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + -27.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000018 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + -109.7999999999999829 + 290.3999999999999773 + -217.7999999999999829 + 48.3999999999999986 + 329.4000000000000341 + -871.2000000000000455 + 653.4000000000000909 + -145.1999999999999886 + -247.0499999999999829 + 653.4000000000000909 + -490.0499999999999545 + 108.9000000000000057 + 54.8999999999999986 + -145.1999999999999886 + 108.9000000000000057 + -24.1999999999999993 + 147.5999999999999943 + -388.8000000000000114 + 291.6000000000000227 + -64.8000000000000114 + -442.8000000000000114 + 1166.4000000000000909 + -874.8000000000000682 + 194.4000000000000341 + 332.0999999999999659 + -874.8000000000000682 + 656.1000000000000227 + -145.8000000000000114 + -73.7999999999999972 + 194.4000000000000341 + -145.8000000000000114 + 32.3999999999999986 + -61.4999999999999929 + 162.0000000000000284 + -121.5000000000000000 + 27.0000000000000000 + 184.5000000000000000 + -486.0000000000000568 + 364.5000000000000000 + -81.0000000000000000 + -138.3750000000000000 + 364.5000000000000568 + -273.3750000000000000 + 60.7500000000000000 + 30.7500000000000000 + -81.0000000000000000 + 60.7500000000000000 + -13.5000000000000000 + 8.1999999999999993 + -21.6000000000000014 + 16.1999999999999993 + -3.6000000000000001 + -24.6000000000000014 + 64.8000000000000114 + -48.6000000000000085 + 10.8000000000000007 + 18.4499999999999993 + -48.6000000000000085 + 36.4500000000000028 + -8.0999999999999996 + -4.0999999999999996 + 10.8000000000000007 + -8.0999999999999996 + 1.7999999999999998 + -13.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 39.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -16.8750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1947.2000000000000455 + -1742.3999999999998636 + 508.2000000000000455 + -48.3999999999999986 + -5841.6000000000003638 + 5227.2000000000007276 + -1524.5999999999999091 + 145.1999999999999886 + 4381.2000000000007276 + -3920.4000000000000909 + 1143.4500000000000455 + -108.9000000000000199 + -973.5999999999999091 + 871.2000000000000455 + -254.0999999999999943 + 24.2000000000000028 + -2606.4000000000005457 + 2332.8000000000001819 + -680.3999999999999773 + 64.8000000000000114 + 7819.2000000000007276 + -6998.4000000000005457 + 2041.2000000000000455 + -194.4000000000000341 + -5864.4000000000014552 + 5248.8000000000001819 + -1530.9000000000000909 + 145.8000000000000114 + 1303.2000000000000455 + -1166.4000000000000909 + 340.2000000000000455 + -32.4000000000000057 + 1086.0000000000000000 + -972.0000000000001137 + 283.5000000000000000 + -27.0000000000000036 + -3258.0000000000004547 + 2916.0000000000004547 + -850.5000000000000000 + 81.0000000000000142 + 2443.5000000000004547 + -2187.0000000000004547 + 637.8750000000000000 + -60.7500000000000142 + -543.0000000000000000 + 486.0000000000000568 + -141.7500000000000000 + 13.5000000000000000 + -144.8000000000000114 + 129.5999999999999943 + -37.7999999999999972 + 3.6000000000000005 + 434.4000000000000341 + -388.8000000000000114 + 113.4000000000000057 + -10.8000000000000007 + -325.8000000000000114 + 291.6000000000000227 + -85.0500000000000114 + 8.1000000000000014 + 72.4000000000000057 + -64.8000000000000114 + 18.8999999999999986 + -1.8000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6749999999999999 + 0.8999999999999997 + -0.6749999999999997 + 0.1499999999999999 + 0.4499999999999999 + -0.5999999999999998 + 0.4499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6999999999999975 + -5.3999999999999968 + 1.5749999999999993 + -0.1499999999999999 + -3.7999999999999985 + 3.5999999999999988 + -1.0499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8999999999999998 + -1.1999999999999997 + 0.8999999999999996 + -0.1999999999999999 + -2.6999999999999993 + 3.5999999999999988 + -2.6999999999999988 + 0.5999999999999998 + 2.0249999999999995 + -2.6999999999999988 + 2.0249999999999995 + -0.4499999999999998 + -0.4499999999999999 + 0.5999999999999998 + -0.4499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.1250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5999999999999961 + 7.1999999999999966 + -2.0999999999999992 + 0.1999999999999999 + 22.7999999999999901 + -21.5999999999999908 + 6.2999999999999972 + -0.5999999999999998 + -17.0999999999999943 + 16.1999999999999922 + -4.7249999999999979 + 0.4499999999999998 + 3.7999999999999985 + -3.5999999999999988 + 1.0499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# piHH + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3727308659999999 + -2.2484872439999997 + 0.0000000000000000 + 0.0000000000000000 + -2.2484872439999997 + 1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2484872439999997 + 1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 1.4989914959999999 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 13.4909234639999980 + -10.1181925979999985 + 2.2484872439999997 + 2.9979829919999998 + -8.9939489759999987 + 6.7454617319999990 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -8.9939489759999987 + 6.7454617319999990 + -1.4989914959999999 + -1.9986553279999999 + 5.9959659839999997 + -4.4969744879999993 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 2.9979829919999998 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -10.1181925979999985 + 6.7454617319999990 + 0.0000000000000000 + 0.0000000000000000 + 2.2484872439999997 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + -8.9939489759999987 + 5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 6.7454617319999990 + -4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + -1.4989914959999999 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -17.9878979519999973 + 13.4909234639999980 + -2.9979829919999998 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 13.4909234639999980 + -40.4727703919999939 + 30.3545777939999937 + -6.7454617319999990 + -2.9979829919999998 + 8.9939489759999987 + -6.7454617319999990 + 1.4989914959999999 + -3.9973106559999998 + 11.9919319679999994 + -8.9939489759999987 + 1.9986553279999999 + 11.9919319679999994 + -35.9757959039999946 + 26.9818469279999960 + -5.9959659839999997 + -8.9939489759999987 + 26.9818469279999960 + -20.2363851959999970 + 4.4969744879999993 + 1.9986553279999999 + -5.9959659839999997 + 4.4969744879999993 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 2.9979829919999998 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -8.9939489759999987 + 5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -10.1181925979999985 + 6.7454617319999990 + 0.0000000000000000 + 0.0000000000000000 + 6.7454617319999990 + -4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2484872439999997 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + -1.4989914959999999 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -17.9878979519999973 + 13.4909234639999980 + -2.9979829919999998 + -3.9973106559999998 + 11.9919319679999994 + -8.9939489759999987 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 11.9919319679999994 + -35.9757959039999946 + 26.9818469279999960 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -40.4727703919999939 + 30.3545777939999937 + -6.7454617319999990 + -8.9939489759999987 + 26.9818469279999960 + -20.2363851959999970 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 8.9939489759999987 + -6.7454617319999990 + 1.4989914959999999 + 1.9986553279999999 + -5.9959659839999997 + 4.4969744879999993 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -3.9973106559999998 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 11.9919319679999994 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 11.9919319679999994 + 0.0000000000000000 + 0.0000000000000000 + 53.9636938559999919 + -35.9757959039999946 + 0.0000000000000000 + 0.0000000000000000 + -40.4727703919999939 + 26.9818469279999960 + 0.0000000000000000 + 0.0000000000000000 + 8.9939489759999987 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -40.4727703919999939 + 26.9818469279999960 + 0.0000000000000000 + 0.0000000000000000 + 30.3545777939999937 + -20.2363851959999970 + 0.0000000000000000 + 0.0000000000000000 + -6.7454617319999990 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 8.9939489759999987 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + -6.7454617319999990 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 1.4989914959999999 + -0.9993276639999999 + -7.9946213120000005 + 23.9838639359999988 + -17.9878979519999973 + 3.9973106559999998 + 23.9838639359999988 + -71.9515918079999892 + 53.9636938559999919 + -11.9919319679999994 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 3.9973106559999998 + -11.9919319679999994 + 8.9939489759999987 + -1.9986553279999999 + 23.9838639359999988 + -71.9515918079999892 + 53.9636938559999919 + -11.9919319679999994 + -71.9515918079999892 + 215.8547754239999108 + -161.8910815680000042 + 35.9757959039999946 + 53.9636938559999919 + -161.8910815679999473 + 121.4183111759999605 + -26.9818469279999960 + -11.9919319679999994 + 35.9757959039999946 + -26.9818469279999960 + 5.9959659839999997 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 53.9636938559999919 + -161.8910815679999473 + 121.4183111759999889 + -26.9818469279999960 + -40.4727703919999939 + 121.4183111759999747 + -91.0637333819999810 + 20.2363851959999970 + 8.9939489759999987 + -26.9818469279999960 + 20.2363851959999970 + -4.4969744879999993 + 3.9973106559999998 + -11.9919319679999994 + 8.9939489759999987 + -1.9986553279999999 + -11.9919319679999994 + 35.9757959039999946 + -26.9818469279999960 + 5.9959659839999997 + 8.9939489759999987 + -26.9818469279999960 + 20.2363851959999970 + -4.4969744879999993 + -1.9986553279999999 + 5.9959659839999997 + -4.4969744879999993 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# Tij + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.6355000000 + 1.7570000000 + 0.0000000000 + 0.0000000000 + 6.3252000000 + -4.2168000000 + 0.0000000000 + 0.0000000000 + -4.7439000000 + 3.1626000000 + 0.0000000000 + 0.0000000000 + 1.0542000000 + -0.7028000000 + 0.0000000000 + 0.0000000000 + 6.3252000000 + -4.2168000000 + 0.0000000000 + 0.0000000000 + -15.1804800000 + 10.1203200000 + 0.0000000000 + 0.0000000000 + 11.3853600000 + -7.5902400000 + 0.0000000000 + 0.0000000000 + -2.5300800000 + 1.6867200000 + 0.0000000000 + 0.0000000000 + -4.7439000000 + 3.1626000000 + 0.0000000000 + 0.0000000000 + 11.3853600000 + -7.5902400000 + 0.0000000000 + 0.0000000000 + -8.5390200000 + 5.6926800000 + 0.0000000000 + 0.0000000000 + 1.8975600000 + -1.2650400000 + 0.0000000000 + 0.0000000000 + 1.0542000000 + -0.7028000000 + 0.0000000000 + 0.0000000000 + -2.5300800000 + 1.6867200000 + 0.0000000000 + 0.0000000000 + 1.8975600000 + -1.2650400000 + 0.0000000000 + 0.0000000000 + -0.4216800000 + 0.2811200000 + 3.0080000000 + -9.3276000000 + 6.9957000000 + -1.5546000000 + -7.2192000000 + 22.3862400000 + -16.7896800000 + 3.7310400000 + 5.4144000000 + -16.7896800000 + 12.5922600000 + -2.7982800000 + -1.2032000000 + 3.7310400000 + -2.7982800000 + 0.6218400000 + -7.2192000000 + 22.3862400000 + -16.7896800000 + 3.7310400000 + 17.3260800000 + -53.7269760000 + 40.2952320000 + -8.9544960000 + -12.9945600000 + 40.2952320000 + -30.2214240000 + 6.7158720000 + 2.8876800000 + -8.9544960000 + 6.7158720000 + -1.4924160000 + 5.4144000000 + -16.7896800000 + 12.5922600000 + -2.7982800000 + -12.9945600000 + 40.2952320000 + -30.2214240000 + 6.7158720000 + 9.7459200000 + -30.2214240000 + 22.6660680000 + -5.0369040000 + -2.1657600000 + 6.7158720000 + -5.0369040000 + 1.1193120000 + -1.2032000000 + 3.7310400000 + -2.7982800000 + 0.6218400000 + 2.8876800000 + -8.9544960000 + 6.7158720000 + -1.4924160000 + -2.1657600000 + 6.7158720000 + -5.0369040000 + 1.1193120000 + 0.4812800000 + -1.4924160000 + 1.1193120000 + -0.2487360000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 7.9065000000 + -5.2710000000 + 0.0000000000 + 0.0000000000 + -1.0542000000 + 0.7028000000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 45.5414400000 + -30.3609600000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 2.5300800000 + -1.6867200000 + 0.0000000000 + 0.0000000000 + 25.6170600000 + -17.0780400000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -1.8975600000 + 1.2650400000 + 0.0000000000 + 0.0000000000 + -5.6926800000 + 3.7951200000 + 0.0000000000 + 0.0000000000 + 7.5902400000 + -5.0601600000 + 0.0000000000 + 0.0000000000 + -3.1626000000 + 2.1084000000 + 0.0000000000 + 0.0000000000 + 0.4216800000 + -0.2811200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -9.0240000000 + 27.9828000000 + -20.9871000000 + 4.6638000000 + 1.2032000000 + -3.7310400000 + 2.7982800000 + -0.6218400000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -51.9782400000 + 161.1809280000 + -120.8856960000 + 26.8634880000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -2.8876800000 + 8.9544960000 + -6.7158720000 + 1.4924160000 + -29.2377600000 + 90.6642720000 + -67.9982040000 + 15.1107120000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 2.1657600000 + -6.7158720000 + 5.0369040000 + -1.1193120000 + 6.4972800000 + -20.1476160000 + 15.1107120000 + -3.3579360000 + -8.6630400000 + 26.8634880000 + -20.1476160000 + 4.4772480000 + 3.6096000000 + -11.1931200000 + 8.3948400000 + -1.8655200000 + -0.4812800000 + 1.4924160000 + -1.1193120000 + 0.2487360000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 25.6170600000 + -17.0780400000 + 0.0000000000 + 0.0000000000 + -5.6926800000 + 3.7951200000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 45.5414400000 + -30.3609600000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 7.5902400000 + -5.0601600000 + 0.0000000000 + 0.0000000000 + 7.9065000000 + -5.2710000000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -3.1626000000 + 2.1084000000 + 0.0000000000 + 0.0000000000 + -1.0542000000 + 0.7028000000 + 0.0000000000 + 0.0000000000 + 2.5300800000 + -1.6867200000 + 0.0000000000 + 0.0000000000 + -1.8975600000 + 1.2650400000 + 0.0000000000 + 0.0000000000 + 0.4216800000 + -0.2811200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -29.2377600000 + 90.6642720000 + -67.9982040000 + 15.1107120000 + 6.4972800000 + -20.1476160000 + 15.1107120000 + -3.3579360000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -51.9782400000 + 161.1809280000 + -120.8856960000 + 26.8634880000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -8.6630400000 + 26.8634880000 + -20.1476160000 + 4.4772480000 + -9.0240000000 + 27.9828000000 + -20.9871000000 + 4.6638000000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 3.6096000000 + -11.1931200000 + 8.3948400000 + -1.8655200000 + 1.2032000000 + -3.7310400000 + 2.7982800000 + -0.6218400000 + -2.8876800000 + 8.9544960000 + -6.7158720000 + 1.4924160000 + 2.1657600000 + -6.7158720000 + 5.0369040000 + -1.1193120000 + -0.4812800000 + 1.4924160000 + -1.1193120000 + 0.2487360000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -76.8511800000 + 51.2341200000 + 0.0000000000 + 0.0000000000 + 102.4682400000 + -68.3121600000 + 0.0000000000 + 0.0000000000 + -42.6951000000 + 28.4634000000 + 0.0000000000 + 0.0000000000 + 5.6926800000 + -3.7951200000 + 0.0000000000 + 0.0000000000 + 102.4682400000 + -68.3121600000 + 0.0000000000 + 0.0000000000 + -136.6243200000 + 91.0828800000 + 0.0000000000 + 0.0000000000 + 56.9268000000 + -37.9512000000 + 0.0000000000 + 0.0000000000 + -7.5902400000 + 5.0601600000 + 0.0000000000 + 0.0000000000 + -42.6951000000 + 28.4634000000 + 0.0000000000 + 0.0000000000 + 56.9268000000 + -37.9512000000 + 0.0000000000 + 0.0000000000 + -23.7195000000 + 15.8130000000 + 0.0000000000 + 0.0000000000 + 3.1626000000 + -2.1084000000 + 0.0000000000 + 0.0000000000 + 5.6926800000 + -3.7951200000 + 0.0000000000 + 0.0000000000 + -7.5902400000 + 5.0601600000 + 0.0000000000 + 0.0000000000 + 3.1626000000 + -2.1084000000 + 0.0000000000 + 0.0000000000 + -0.4216800000 + 0.2811200000 + 87.7132800000 + -271.9928159999 + 203.9946120000 + -45.3321360000 + -116.9510400000 + 362.6570879999 + -271.9928159999 + 60.4428480000 + 48.7296000000 + -151.1071200000 + 113.3303400000 + -25.1845200000 + -6.4972800000 + 20.1476160000 + -15.1107120000 + 3.3579360000 + -116.9510400000 + 362.6570880000 + -271.9928160000 + 60.4428480000 + 155.9347200000 + -483.5427840000 + 362.6570880000 + -80.5904640000 + -64.9728000000 + 201.4761600000 + -151.1071200000 + 33.5793600000 + 8.6630400000 + -26.8634880000 + 20.1476160000 + -4.4772480000 + 48.7296000000 + -151.1071200000 + 113.3303400000 + -25.1845200000 + -64.9728000000 + 201.4761600000 + -151.1071200000 + 33.5793600000 + 27.0720000000 + -83.9484000000 + 62.9613000000 + -13.9914000000 + -3.6096000000 + 11.1931200000 + -8.3948400000 + 1.8655200000 + -6.4972800000 + 20.1476160000 + -15.1107120000 + 3.3579360000 + 8.6630400000 + -26.8634880000 + 20.1476160000 + -4.4772480000 + -3.6096000000 + 11.1931200000 + -8.3948400000 + 1.8655200000 + 0.4812800000 + -1.4924160000 + 1.1193120000 + -0.2487360000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 1f31c0b0cd..10d1d83579 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -30,9 +30,263 @@ void PairREBO::settings(int narg, char **/*arg*/) cutlj = 0.0; ljflag = torflag = 0; - - // this one parameter for C-C interactions is different in REBO vs AIREBO - // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - - PCCf_2_0 = 0.0; + PCCf_2_0 = -0.0276030; +} + +/* ---------------------------------------------------------------------- + initialize spline knot values +------------------------------------------------------------------------- */ + +void PairREBO::spline_init() +{ + int i,j,k; + + for (i = 0; i < 5; i++) { + for (j = 0; j < 5; j++) { + PCCf[i][j] = 0.0; + PCCdfdx[i][j] = 0.0; + PCCdfdy[i][j] = 0.0; + PCHf[i][j] = 0.0; + PCHdfdx[i][j] = 0.0; + PCHdfdy[i][j] = 0.0; + } + } + + PCCf[0][2] = 0.007860700254745; + PCCf[0][3] = 0.016125364564267; + PCCf[1][1] = 0.003026697473481; + PCCf[1][2] = 0.006326248241119; + PCCf[2][0] = 0.; + PCCf[2][1] = 0.003179530830731; + + PCHf[0][1] = 0.2093367328250380; + PCHf[0][2] = -0.064449615432525; + PCHf[0][3] = -0.303927546346162; + PCHf[1][0] = 0.010; + PCHf[1][1] = -0.1251234006287090; + PCHf[1][2] = -0.298905245783; + PCHf[2][0] = -0.1220421462782555; + PCHf[2][1] = -0.3005291724067579; + PCHf[3][0] = -0.307584705066; + + for (int nH = 0; nH < 4; nH++) { + for (int nC = 0; nC < 4; nC++) { + double y[4] = {0}, y1[4] = {0}, y2[4] = {0}; + y[0] = PCCf[nC][nH]; + y[1] = PCCf[nC][nH+1]; + y[2] = PCCf[nC+1][nH]; + y[3] = PCCf[nC+1][nH+1]; + Spbicubic_patch_coeffs(nC, nC+1, nH, nH+1, y, y1, y2, &pCC[nC][nH][0]); + y[0] = PCHf[nC][nH]; + y[1] = PCHf[nC][nH+1]; + y[2] = PCHf[nC+1][nH]; + y[3] = PCHf[nC+1][nH+1]; + Spbicubic_patch_coeffs(nC, nC+1, nH, nH+1, y, y1, y2, &pCH[nC][nH][0]); + } + } + + for (i = 0; i < 5; i++) { + for (j = 0; j < 5; j++) { + for (k = 0; k < 10; k++) { + piCCf[i][j][k] = 0.0; + piCCdfdx[i][j][k] = 0.0; + piCCdfdy[i][j][k] = 0.0; + piCCdfdz[i][j][k] = 0.0; + piCHf[i][j][k] = 0.0; + piCHdfdx[i][j][k] = 0.0; + piCHdfdy[i][j][k] = 0.0; + piCHdfdz[i][j][k] = 0.0; + piHHf[i][j][k] = 0.0; + piHHdfdx[i][j][k] = 0.0; + piHHdfdy[i][j][k] = 0.0; + piHHdfdz[i][j][k] = 0.0; + Tf[i][j][k] = 0.0; + Tdfdx[i][j][k] = 0.0; + Tdfdy[i][j][k] = 0.0; + Tdfdz[i][j][k] = 0.0; + } + } + } + + for (i = 3; i < 10; i++) piCCf[0][0][i] = 0.0049586079; + piCCf[1][0][1] = 0.021693495; + piCCf[0][1][1] = 0.021693495; + for (i = 2; i < 10; i++) piCCf[1][0][i] = 0.0049586079; + for (i = 2; i < 10; i++) piCCf[0][1][i] = 0.0049586079; + piCCf[1][1][1] = 0.05250; + piCCf[1][1][2] = -0.002088750; + for (i = 3; i < 10; i++) piCCf[1][1][i] = -0.00804280; + piCCf[2][0][1] = 0.024698831850; + piCCf[0][2][1] = 0.024698831850; + piCCf[2][0][2] = -0.00597133450; + piCCf[0][2][2] = -0.00597133450; + for (i = 3; i < 10; i++) piCCf[2][0][i] = 0.0049586079; + for (i = 3; i < 10; i++) piCCf[0][2][i] = 0.0049586079; + piCCf[2][1][1] = 0.00482478490; + piCCf[1][2][1] = 0.00482478490; + piCCf[2][1][2] = 0.0150; + piCCf[1][2][2] = 0.0150; + piCCf[2][1][3] = -0.010; + piCCf[1][2][3] = -0.010; + piCCf[2][1][4] = -0.01168893870; + piCCf[1][2][4] = -0.01168893870; + piCCf[2][1][5] = -0.013377877400; + piCCf[1][2][5] = -0.013377877400; + piCCf[2][1][6] = -0.015066816000; + piCCf[1][2][6] = -0.015066816000; + for (i = 7; i < 10; i++) piCCf[2][1][i] = -0.015066816000; + for (i = 7; i < 10; i++) piCCf[1][2][i] = -0.015066816000; + piCCf[2][2][1] = 0.0472247850; + piCCf[2][2][2] = 0.0110; + piCCf[2][2][3] = 0.0198529350; + piCCf[2][2][4] = 0.01654411250; + piCCf[2][2][5] = 0.013235290; + piCCf[2][2][6] = 0.00992646749999 ; + piCCf[2][2][7] = 0.006617644999; + piCCf[2][2][8] = 0.00330882250; + piCCf[3][0][1] = -0.05989946750; + piCCf[0][3][1] = -0.05989946750; + piCCf[3][0][2] = -0.05989946750; + piCCf[0][3][2] = -0.05989946750; + for (i = 3; i < 10; i++) piCCf[3][0][i] = 0.0049586079; + for (i = 3; i < 10; i++) piCCf[0][3][i] = 0.0049586079; + piCCf[3][1][2] = -0.0624183760; + piCCf[1][3][2] = -0.0624183760; + for (i = 3; i < 10; i++) piCCf[3][1][i] = -0.0624183760; + for (i = 3; i < 10; i++) piCCf[1][3][i] = -0.0624183760; + piCCf[3][2][1] = -0.02235469150; + piCCf[2][3][1] = -0.02235469150; + for (i = 2; i < 10; i++) piCCf[3][2][i] = -0.02235469150; + for (i = 2; i < 10; i++) piCCf[2][3][i] = -0.02235469150; + + piCCdfdx[2][1][1] = -0.026250; + piCCdfdx[2][1][5] = -0.0271880; + piCCdfdx[2][1][6] = -0.0271880; + for (i = 7; i < 10; i++) piCCdfdx[2][1][i] = -0.0271880; + piCCdfdx[1][3][2] = 0.0187723882; + for (i = 2; i < 10; i++) piCCdfdx[2][3][i] = 0.031209; + + piCCdfdy[1][2][1] = -0.026250; + piCCdfdy[1][2][5] = -0.0271880; + piCCdfdy[1][2][6] = -0.0271880; + for (i = 7; i < 10; i++) piCCdfdy[1][2][i] = -0.0271880; + piCCdfdy[3][1][2] = 0.0187723882; + for (i = 2; i < 10; i++) piCCdfdy[3][2][i] = 0.031209; + + piCCdfdz[1][1][2] = -0.0302715; + piCCdfdz[2][1][4] = -0.0100220; + piCCdfdz[1][2][4] = -0.0100220; + piCCdfdz[2][1][5] = -0.0100220; + piCCdfdz[1][2][5] = -0.0100220; + for (i = 4; i < 9; i++) piCCdfdz[2][2][i] = -0.0033090; + + // make top end of piCC flat instead of zero + i = 4; + for (j = 0; j < 4; j++){ + for (k = 1; k < 11; k++){ + piCCf[i][j][k] = piCCf[i-1][j][k]; + } + } + for (i = 0; i < 4; i++){ // also enforces some symmetry + for (j = i+1; j < 5; j++){ + for (k = 1; k < 11; k++){ + piCCf[i][j][k] = piCCf[j][i][k]; + } + } + } + for (k = 1; k < 11; k++) piCCf[4][4][k] = piCCf[3][4][k]; + k = 10; + for (i = 0; i < 5; i++){ + for (j = 0; j < 5; j++){ + piCCf[i][j][k] = piCCf[i][j][k-1]; + } + } + + piCHf[1][1][1] = -0.050; + piCHf[1][1][2] = -0.050; + piCHf[1][1][3] = -0.30; + for (i = 4; i < 10; i++) piCHf[1][1][i] = -0.050; + for (i = 5; i < 10; i++) piCHf[2][0][i] = -0.004523893758064; + for (i = 5; i < 10; i++) piCHf[0][2][i] = -0.004523893758064; + piCHf[2][1][2] = -0.250; + piCHf[1][2][2] = -0.250; + piCHf[2][1][3] = -0.250; + piCHf[1][2][3] = -0.250; + piCHf[3][1][1] = -0.10; + piCHf[1][3][1] = -0.10; + piCHf[3][1][2] = -0.125; + piCHf[1][3][2] = -0.125; + piCHf[3][1][3] = -0.125; + piCHf[1][3][3] = -0.125; + for (i = 4; i < 10; i++) piCHf[3][1][i] = -0.10; + for (i = 4; i < 10; i++) piCHf[1][3][i] = -0.10; + + // make top end of piCH flat instead of zero + // also enforces some symmetry + + i = 4; + for (j = 0; j < 4; j++){ + for (k = 1; k < 11; k++){ + piCHf[i][j][k] = piCHf[i-1][j][k]; + } + } + for (i = 0; i < 4; i++){ + for (j = i+1; j < 5; j++){ + for (k = 1; k < 11; k++){ + piCHf[i][j][k] = piCHf[j][i][k]; + } + } + } + for (k = 1; k < 11; k++) piCHf[4][4][k] = piCHf[3][4][k]; + k = 10; + for (i = 0; i < 5; i++){ + for (j = 0; j < 5; j++){ + piCHf[i][j][k] = piCHf[i][j][k-1]; + } + } + + piHHf[1][1][1] = 0.124915958; + + Tf[2][2][1] = -0.035140; + for (i = 2; i < 10; i++) Tf[2][2][i] = -0.0040480; + + for (int nH = 0; nH < 4; nH++) { + for (int nC = 0; nC < 4; nC++) { + // Note: Spline knot values exist up to "10", but are never used because + // they are clamped down to 9. + for (int nConj = 0; nConj < 9; nConj++) { + double y[8] = {0}, y1[8] = {0}, y2[8] = {0}, y3[8] = {0}; + #define FILL_KNOTS_TRI(dest, src) \ + dest[0] = src[nC+0][nH+0][nConj+0]; \ + dest[1] = src[nC+0][nH+0][nConj+1]; \ + dest[2] = src[nC+0][nH+1][nConj+0]; \ + dest[3] = src[nC+0][nH+1][nConj+1]; \ + dest[4] = src[nC+1][nH+0][nConj+0]; \ + dest[5] = src[nC+1][nH+0][nConj+1]; \ + dest[6] = src[nC+1][nH+1][nConj+0]; \ + dest[7] = src[nC+1][nH+1][nConj+1]; + FILL_KNOTS_TRI(y, piCCf) + FILL_KNOTS_TRI(y1, piCCdfdx) + FILL_KNOTS_TRI(y2, piCCdfdy) + FILL_KNOTS_TRI(y3, piCCdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &piCC[nC][nH][nConj][0]); + FILL_KNOTS_TRI(y, piCHf) + FILL_KNOTS_TRI(y1, piCHdfdx) + FILL_KNOTS_TRI(y2, piCHdfdy) + FILL_KNOTS_TRI(y3, piCHdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &piCH[nC][nH][nConj][0]); + FILL_KNOTS_TRI(y, piHHf) + FILL_KNOTS_TRI(y1, piHHdfdx) + FILL_KNOTS_TRI(y2, piHHdfdy) + FILL_KNOTS_TRI(y3, piHHdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &piHH[nC][nH][nConj][0]); + FILL_KNOTS_TRI(y, Tf) + FILL_KNOTS_TRI(y1, Tdfdx) + FILL_KNOTS_TRI(y2, Tdfdy) + FILL_KNOTS_TRI(y3, Tdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &Tijc[nC][nH][nConj][0]); + #undef FILL_KNOTS_TRI + } + } + } } diff --git a/src/MANYBODY/pair_rebo.h b/src/MANYBODY/pair_rebo.h index be1e1f0b55..9c1a12d4de 100644 --- a/src/MANYBODY/pair_rebo.h +++ b/src/MANYBODY/pair_rebo.h @@ -28,6 +28,7 @@ class PairREBO : public PairAIREBO { public: PairREBO(class LAMMPS *); void settings(int, char **); + void spline_init(); }; } From 1235e77199eaffa29257b6ad8483cd7e98bf88b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 15:18:01 -0500 Subject: [PATCH 002/372] implemented recommended change to remove global class member --- src/MANYBODY/pair_airebo.cpp | 7 +------ src/MANYBODY/pair_airebo.h | 1 - src/MANYBODY/pair_rebo.cpp | 1 - 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index 067eb1634f..f2877647c0 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -168,10 +168,6 @@ void PairAIREBO::settings(int narg, char **arg) sigwid = sigcut - sigmin; } - // this one parameter for C-C interactions is different in AIREBO vs REBO - // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - - PCCf_2_0 = -0.0276030; } /* ---------------------------------------------------------------------- @@ -4373,8 +4369,7 @@ void PairAIREBO::spline_init() // this one parameter for C-C interactions is different in REBO vs AIREBO // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - PCCf[2][0] = PCCf_2_0; - + PCCf[2][0] = -0.0276030; PCCf[2][1] = 0.00317953083; PCHf[0][1] = 0.209336733; diff --git a/src/MANYBODY/pair_airebo.h b/src/MANYBODY/pair_airebo.h index c7c9b07357..579c342f1b 100644 --- a/src/MANYBODY/pair_airebo.h +++ b/src/MANYBODY/pair_airebo.h @@ -84,7 +84,6 @@ class PairAIREBO : public Pair { // spline knot values - double PCCf_2_0; double PCCf[5][5],PCCdfdx[5][5],PCCdfdy[5][5],PCHf[5][5]; double PCHdfdx[5][5],PCHdfdy[5][5]; double piCCf[5][5][11],piCCdfdx[5][5][11]; diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 10d1d83579..5563e1222c 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -30,7 +30,6 @@ void PairREBO::settings(int narg, char **/*arg*/) cutlj = 0.0; ljflag = torflag = 0; - PCCf_2_0 = -0.0276030; } /* ---------------------------------------------------------------------- From dcffeb546fd297d5e5cc3af5b64fdfb48de9650b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 20 Nov 2018 13:48:49 -0500 Subject: [PATCH 003/372] update AIREBO/REBO examples and provide references for rebo and airebo with LJ and TORSION turned off --- examples/airebo/in.airebo-0-0 | 22 +++++ examples/airebo/in.rebo2 | 22 +++++ examples/airebo/log.29Jun18.airebo-0-0.g++.1 | 88 +++++++++++++++++++ examples/airebo/log.29Jun18.airebo-0-0.g++.4 | 88 +++++++++++++++++++ ...ebo-m.g++.1 => log.29Jun18.airebo-m.g++.1} | 24 ++--- ...ebo-m.g++.4 => log.29Jun18.airebo-m.g++.4} | 24 ++--- ....airebo.g++.1 => log.29Jun18.airebo.g++.1} | 24 ++--- ....airebo.g++.4 => log.29Jun18.airebo.g++.4} | 24 ++--- examples/airebo/log.29Jun18.rebo2.g++.1 | 88 +++++++++++++++++++ examples/airebo/log.29Jun18.rebo2.g++.4 | 88 +++++++++++++++++++ 10 files changed, 448 insertions(+), 44 deletions(-) create mode 100644 examples/airebo/in.airebo-0-0 create mode 100644 examples/airebo/in.rebo2 create mode 100644 examples/airebo/log.29Jun18.airebo-0-0.g++.1 create mode 100644 examples/airebo/log.29Jun18.airebo-0-0.g++.4 rename examples/airebo/{log.23Jun17.airebo-m.g++.1 => log.29Jun18.airebo-m.g++.1} (78%) rename examples/airebo/{log.23Jun17.airebo-m.g++.4 => log.29Jun18.airebo-m.g++.4} (78%) rename examples/airebo/{log.23Jun17.airebo.g++.1 => log.29Jun18.airebo.g++.1} (78%) rename examples/airebo/{log.23Jun17.airebo.g++.4 => log.29Jun18.airebo.g++.4} (78%) create mode 100644 examples/airebo/log.29Jun18.rebo2.g++.1 create mode 100644 examples/airebo/log.29Jun18.rebo2.g++.4 diff --git a/examples/airebo/in.airebo-0-0 b/examples/airebo/in.airebo-0-0 new file mode 100644 index 0000000000..edcb1561fb --- /dev/null +++ b/examples/airebo/in.airebo-0-0 @@ -0,0 +1,22 @@ +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + +replicate 17 16 2 + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style airebo 3.0 0 0 +pair_coeff * * ../../potentials/CH.airebo C H + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 diff --git a/examples/airebo/in.rebo2 b/examples/airebo/in.rebo2 new file mode 100644 index 0000000000..6834528ffb --- /dev/null +++ b/examples/airebo/in.rebo2 @@ -0,0 +1,22 @@ +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + +replicate 17 16 2 + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style rebo +pair_coeff * * ../../potentials/CH.rebo C H + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.1 b/examples/airebo/log.29Jun18.airebo-0-0.g++.1 new file mode 100644 index 0000000000..d61c8e8b34 --- /dev/null +++ b/examples/airebo/log.29Jun18.airebo-0-0.g++.1 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 1 by 1 by 1 MPI processor grid + 32640 atoms + Time spent = 0.00136042 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style airebo 3.0 0 0 +pair_coeff * * ../../potentials/CH.airebo C H +Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair airebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 34.21 | 34.21 | 34.21 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0756 + 10 179.38448 -137931.29 0 -137174.48 15656.689 + 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 30 150.81289 -137807.48 0 -137171.21 -16524.191 + 40 173.24289 -137902.32 0 -137171.42 -5721.7187 + 50 151.80722 -137812.37 0 -137171.91 3489.8954 + 60 199.06038 -138013.7 0 -137173.88 17887.024 + 70 217.84848 -138093.82 0 -137174.73 -12266.16 + 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 90 194.92367 -137997.12 0 -137174.75 -32277.173 + 100 185.2078 -137954.64 0 -137173.26 -6888.5104 +Loop time of 5.00753 on 1 procs for 100 steps with 32640 atoms + +Performance: 0.863 ns/day, 27.820 hours/ns, 19.970 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.4898 | 3.4898 | 3.4898 | 0.0 | 69.69 +Neigh | 1.4697 | 1.4697 | 1.4697 | 0.0 | 29.35 +Comm | 0.015885 | 0.015885 | 0.015885 | 0.0 | 0.32 +Output | 0.00096607 | 0.00096607 | 0.00096607 | 0.0 | 0.02 +Modify | 0.021901 | 0.021901 | 0.021901 | 0.0 | 0.44 +Other | | 0.009297 | | | 0.19 + +Nlocal: 32640 ave 32640 max 32640 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 26460 ave 26460 max 26460 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 4.90213e+06 ave 4.90213e+06 max 4.90213e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.4 b/examples/airebo/log.29Jun18.airebo-0-0.g++.4 new file mode 100644 index 0000000000..72d6fdd211 --- /dev/null +++ b/examples/airebo/log.29Jun18.airebo-0-0.g++.4 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 4 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 2 by 2 by 1 MPI processor grid + 32640 atoms + Time spent = 0.000609159 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style airebo 3.0 0 0 +pair_coeff * * ../../potentials/CH.airebo C H +Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair airebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.94 | 12.13 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0756 + 10 179.38448 -137931.29 0 -137174.48 15656.689 + 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 30 150.81289 -137807.48 0 -137171.21 -16524.191 + 40 173.24289 -137902.32 0 -137171.42 -5721.7187 + 50 151.80722 -137812.37 0 -137171.91 3489.8954 + 60 199.06038 -138013.7 0 -137173.88 17887.024 + 70 217.84848 -138093.82 0 -137174.73 -12266.16 + 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 90 194.92367 -137997.12 0 -137174.75 -32277.173 + 100 185.2078 -137954.64 0 -137173.26 -6888.5104 +Loop time of 1.50369 on 4 procs for 100 steps with 32640 atoms + +Performance: 2.873 ns/day, 8.354 hours/ns, 66.503 timesteps/s +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.92943 | 0.95749 | 0.97327 | 1.8 | 63.68 +Neigh | 0.456 | 0.46115 | 0.46657 | 0.7 | 30.67 +Comm | 0.048775 | 0.068415 | 0.10077 | 8.2 | 4.55 +Output | 0.00044918 | 0.00073665 | 0.0015814 | 0.0 | 0.05 +Modify | 0.0087936 | 0.0089477 | 0.0091038 | 0.1 | 0.60 +Other | | 0.006951 | | | 0.46 + +Nlocal: 8160 ave 8163 max 8157 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 11605.8 ave 11615 max 11593 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.22553e+06 ave 1.22734e+06 max 1.22455e+06 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/airebo/log.23Jun17.airebo-m.g++.1 b/examples/airebo/log.29Jun18.airebo-m.g++.1 similarity index 78% rename from examples/airebo/log.23Jun17.airebo-m.g++.1 rename to examples/airebo/log.29Jun18.airebo-m.g++.1 index 1483fcb4a6..ea587e9380 100644 --- a/examples/airebo/log.23Jun17.airebo-m.g++.1 +++ b/examples/airebo/log.29Jun18.airebo-m.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms + Time spent = 0.00136828 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 117.672 on 1 procs for 100 steps with 32640 atoms +Loop time of 64.9938 on 1 procs for 100 steps with 32640 atoms -Performance: 0.037 ns/day, 653.734 hours/ns, 0.850 timesteps/s -99.3% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.066 ns/day, 361.077 hours/ns, 1.539 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 108.31 | 108.31 | 108.31 | 0.0 | 92.04 -Neigh | 9.2199 | 9.2199 | 9.2199 | 0.0 | 7.84 -Comm | 0.052942 | 0.052942 | 0.052942 | 0.0 | 0.04 -Output | 0.0015149 | 0.0015149 | 0.0015149 | 0.0 | 0.00 -Modify | 0.060962 | 0.060962 | 0.060962 | 0.0 | 0.05 -Other | | 0.02656 | | | 0.02 +Pair | 60.289 | 60.289 | 60.289 | 0.0 | 92.76 +Neigh | 4.6445 | 4.6445 | 4.6445 | 0.0 | 7.15 +Comm | 0.025577 | 0.025577 | 0.025577 | 0.0 | 0.04 +Output | 0.00097752 | 0.00097752 | 0.00097752 | 0.0 | 0.00 +Modify | 0.022412 | 0.022412 | 0.022412 | 0.0 | 0.03 +Other | | 0.01114 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +85,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:02:00 +Total wall time: 0:01:06 diff --git a/examples/airebo/log.23Jun17.airebo-m.g++.4 b/examples/airebo/log.29Jun18.airebo-m.g++.4 similarity index 78% rename from examples/airebo/log.23Jun17.airebo-m.g++.4 rename to examples/airebo/log.29Jun18.airebo-m.g++.4 index 3a3d922bcb..d93f6f7c85 100644 --- a/examples/airebo/log.23Jun17.airebo-m.g++.4 +++ b/examples/airebo/log.29Jun18.airebo-m.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms + Time spent = 0.000688076 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 32.9268 on 4 procs for 100 steps with 32640 atoms +Loop time of 18.0388 on 4 procs for 100 steps with 32640 atoms -Performance: 0.131 ns/day, 182.927 hours/ns, 3.037 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.239 ns/day, 100.216 hours/ns, 5.544 timesteps/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 28.045 | 28.537 | 29.42 | 10.4 | 86.67 -Neigh | 3.163 | 3.237 | 3.3761 | 4.7 | 9.83 -Comm | 0.09883 | 1.1206 | 1.6862 | 60.4 | 3.40 -Output | 0.00099325 | 0.0011329 | 0.0012462 | 0.3 | 0.00 -Modify | 0.016013 | 0.016726 | 0.017257 | 0.4 | 0.05 -Other | | 0.01459 | | | 0.04 +Pair | 15.983 | 16.085 | 16.285 | 2.9 | 89.17 +Neigh | 1.5975 | 1.6116 | 1.6215 | 0.8 | 8.93 +Comm | 0.11408 | 0.32424 | 0.43065 | 21.7 | 1.80 +Output | 0.00062895 | 0.0012782 | 0.0018394 | 1.2 | 0.01 +Modify | 0.0089653 | 0.0090135 | 0.0090837 | 0.0 | 0.05 +Other | | 0.007664 | | | 0.04 Nlocal: 8160 ave 8167 max 8153 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -83,4 +85,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:33 +Total wall time: 0:00:18 diff --git a/examples/airebo/log.23Jun17.airebo.g++.1 b/examples/airebo/log.29Jun18.airebo.g++.1 similarity index 78% rename from examples/airebo/log.23Jun17.airebo.g++.1 rename to examples/airebo/log.29Jun18.airebo.g++.1 index 0ef895dc28..12ba33cd95 100644 --- a/examples/airebo/log.23Jun17.airebo.g++.1 +++ b/examples/airebo/log.29Jun18.airebo.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms + Time spent = 0.00137973 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8462 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 110.107 on 1 procs for 100 steps with 32640 atoms +Loop time of 58.178 on 1 procs for 100 steps with 32640 atoms -Performance: 0.039 ns/day, 611.705 hours/ns, 0.908 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.074 ns/day, 323.211 hours/ns, 1.719 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 100.76 | 100.76 | 100.76 | 0.0 | 91.51 -Neigh | 9.1909 | 9.1909 | 9.1909 | 0.0 | 8.35 -Comm | 0.058134 | 0.058134 | 0.058134 | 0.0 | 0.05 -Output | 0.0015941 | 0.0015941 | 0.0015941 | 0.0 | 0.00 -Modify | 0.062212 | 0.062212 | 0.062212 | 0.0 | 0.06 -Other | | 0.03123 | | | 0.03 +Pair | 53.477 | 53.477 | 53.477 | 0.0 | 91.92 +Neigh | 4.6405 | 4.6405 | 4.6405 | 0.0 | 7.98 +Comm | 0.025745 | 0.025745 | 0.025745 | 0.0 | 0.04 +Output | 0.00097823 | 0.00097823 | 0.00097823 | 0.0 | 0.00 +Modify | 0.022715 | 0.022715 | 0.022715 | 0.0 | 0.04 +Other | | 0.01117 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +85,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:01:52 +Total wall time: 0:00:59 diff --git a/examples/airebo/log.23Jun17.airebo.g++.4 b/examples/airebo/log.29Jun18.airebo.g++.4 similarity index 78% rename from examples/airebo/log.23Jun17.airebo.g++.4 rename to examples/airebo/log.29Jun18.airebo.g++.4 index 486b48a004..36794642af 100644 --- a/examples/airebo/log.23Jun17.airebo.g++.4 +++ b/examples/airebo/log.29Jun18.airebo.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms + Time spent = 0.000712872 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8462 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 30.1916 on 4 procs for 100 steps with 32640 atoms +Loop time of 16.4409 on 4 procs for 100 steps with 32640 atoms -Performance: 0.143 ns/day, 167.731 hours/ns, 3.312 timesteps/s -99.1% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.263 ns/day, 91.338 hours/ns, 6.082 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 26.083 | 26.31 | 26.795 | 5.5 | 87.14 -Neigh | 3.1781 | 3.2134 | 3.2775 | 2.2 | 10.64 -Comm | 0.086296 | 0.63643 | 0.88995 | 40.2 | 2.11 -Output | 0.00074124 | 0.0010698 | 0.0013616 | 0.7 | 0.00 -Modify | 0.015335 | 0.016373 | 0.017565 | 0.8 | 0.05 -Other | | 0.01457 | | | 0.05 +Pair | 14.212 | 14.384 | 14.487 | 3.0 | 87.49 +Neigh | 1.5943 | 1.615 | 1.6263 | 1.0 | 9.82 +Comm | 0.30944 | 0.42389 | 0.61698 | 19.2 | 2.58 +Output | 0.00065231 | 0.00094843 | 0.0018184 | 0.0 | 0.01 +Modify | 0.0092347 | 0.0093143 | 0.0094111 | 0.1 | 0.06 +Other | | 0.007456 | | | 0.05 Nlocal: 8160 ave 8174 max 8146 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -83,4 +85,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:30 +Total wall time: 0:00:16 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.1 b/examples/airebo/log.29Jun18.rebo2.g++.1 new file mode 100644 index 0000000000..54c87ab474 --- /dev/null +++ b/examples/airebo/log.29Jun18.rebo2.g++.1 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 1 by 1 by 1 MPI processor grid + 32640 atoms + Time spent = 0.00153542 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style rebo +pair_coeff * * ../../potentials/CH.rebo C H +Reading potential file ../../potentials/CH.rebo with DATE: 2018-7-3 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 34.21 | 34.21 | 34.21 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0748 + 10 179.37985 -137931.27 0 -137174.48 15655.936 + 20 206.87654 -138046.99 0 -137174.19 -24042.627 + 30 150.80122 -137807.43 0 -137171.21 -16524.118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 50 151.80455 -137812.36 0 -137171.91 3480.4584 + 60 199.08777 -138013.82 0 -137173.88 17881.372 + 70 217.85748 -138093.86 0 -137174.73 -12270.999 + 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 90 194.90628 -137997.05 0 -137174.75 -32267.471 + 100 185.17818 -137954.51 0 -137173.26 -6901.7499 +Loop time of 5.03541 on 1 procs for 100 steps with 32640 atoms + +Performance: 0.858 ns/day, 27.975 hours/ns, 19.859 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.5083 | 3.5083 | 3.5083 | 0.0 | 69.67 +Neigh | 1.4785 | 1.4785 | 1.4785 | 0.0 | 29.36 +Comm | 0.016176 | 0.016176 | 0.016176 | 0.0 | 0.32 +Output | 0.0009644 | 0.0009644 | 0.0009644 | 0.0 | 0.02 +Modify | 0.02224 | 0.02224 | 0.02224 | 0.0 | 0.44 +Other | | 0.009286 | | | 0.18 + +Nlocal: 32640 ave 32640 max 32640 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 26460 ave 26460 max 26460 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 4.90213e+06 ave 4.90213e+06 max 4.90213e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.4 b/examples/airebo/log.29Jun18.rebo2.g++.4 new file mode 100644 index 0000000000..b7d63dd2e5 --- /dev/null +++ b/examples/airebo/log.29Jun18.rebo2.g++.4 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 4 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 2 by 2 by 1 MPI processor grid + 32640 atoms + Time spent = 0.00151467 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style rebo +pair_coeff * * ../../potentials/CH.rebo C H +Reading potential file ../../potentials/CH.rebo with DATE: 2018-7-3 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.94 | 12.13 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0748 + 10 179.37985 -137931.27 0 -137174.48 15655.936 + 20 206.87654 -138046.99 0 -137174.19 -24042.627 + 30 150.80122 -137807.43 0 -137171.21 -16524.118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 50 151.80455 -137812.36 0 -137171.91 3480.4584 + 60 199.08777 -138013.82 0 -137173.88 17881.372 + 70 217.85748 -138093.86 0 -137174.73 -12270.999 + 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 90 194.90628 -137997.05 0 -137174.75 -32267.471 + 100 185.17818 -137954.51 0 -137173.26 -6901.7499 +Loop time of 1.49632 on 4 procs for 100 steps with 32640 atoms + +Performance: 2.887 ns/day, 8.313 hours/ns, 66.831 timesteps/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.93275 | 0.95717 | 0.97367 | 1.6 | 63.97 +Neigh | 0.45634 | 0.46084 | 0.46749 | 0.6 | 30.80 +Comm | 0.038283 | 0.062074 | 0.090508 | 7.6 | 4.15 +Output | 0.00046492 | 0.00072992 | 0.0015128 | 0.0 | 0.05 +Modify | 0.0088651 | 0.0090639 | 0.0093012 | 0.2 | 0.61 +Other | | 0.006436 | | | 0.43 + +Nlocal: 8160 ave 8163 max 8157 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 11605.8 ave 11615 max 11593 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.22553e+06 ave 1.22735e+06 max 1.22455e+06 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:01 From e51720a2def24ce3194d0cce4c4f020942b70018 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 20 Nov 2018 13:51:12 -0500 Subject: [PATCH 004/372] add code to detect inconistent use of AIREBO/REBO potential files --- doc/src/pair_airebo.txt | 17 ++++++++------- src/MANYBODY/pair_airebo.cpp | 35 +++++++++++++++++++++++++----- src/MANYBODY/pair_airebo.h | 6 +++-- src/MANYBODY/pair_airebo_morse.cpp | 4 +++- src/MANYBODY/pair_rebo.cpp | 4 +++- 5 files changed, 49 insertions(+), 17 deletions(-) diff --git a/doc/src/pair_airebo.txt b/doc/src/pair_airebo.txt index c090a39af7..4d5cf4528b 100644 --- a/doc/src/pair_airebo.txt +++ b/doc/src/pair_airebo.txt @@ -36,7 +36,7 @@ pair_style airebo/morse 3.0 pair_coeff * * ../potentials/CH.airebo-m H C :pre pair_style rebo -pair_coeff * * ../potentials/CH.airebo H C :pre +pair_coeff * * ../potentials/CH.rebo H C :pre [Description:] @@ -57,7 +57,8 @@ The {rebo} pair style computes the Reactive Empirical Bond Order (REBO) Potential of "(Brenner)"_#Brenner. Note that this is the so-called 2nd generation REBO from 2002, not the original REBO from 1990. As discussed below, 2nd generation REBO is closely related to the -initial AIREBO; it is just a subset of the potential energy terms. +initial AIREBO; it is just a subset of the potential energy terms +with a few slightly different parameters The AIREBO potential consists of three terms: @@ -113,12 +114,12 @@ various dihedral angle preferences in hydrocarbon configurations. :line Only a single pair_coeff command is used with the {airebo}, {airebo} -or {rebo} style which specifies an AIREBO or AIREBO-M potential file -with parameters for C and H. Note that the {rebo} style in LAMMPS -uses the same AIREBO-formatted potential file. These are mapped to -LAMMPS atom types by specifying N additional arguments after the -filename in the pair_coeff command, where N is the number of LAMMPS -atom types: +or {rebo} style which specifies an AIREBO, REBO, or AIREBO-M potential +file with parameters for C and H. Note that as of LAMMPS version +15 November 2018 the {rebo} style in LAMMPS uses its own potential +file (CH.rebo). These are mapped to LAMMPS atom types by specifying +N additional arguments after the filename in the pair_coeff command, +where N is the number of LAMMPS atom types: filename N element names = mapping of AIREBO elements to atom types :ul diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index f2877647c0..966a2514d6 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -49,7 +49,8 @@ using namespace MathSpecial; /* ---------------------------------------------------------------------- */ -PairAIREBO::PairAIREBO(LAMMPS *lmp) : Pair(lmp) +PairAIREBO::PairAIREBO(LAMMPS *lmp) + : Pair(lmp), variant(AIREBO) { single_enable = 0; restartinfo = 0; @@ -3368,14 +3369,38 @@ void PairAIREBO::read_file(char *filename) FILE *fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - if (morseflag) - snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename); - else + switch (variant) { + + case AIREBO: snprintf(str,128,"Cannot open AIREBO potential file %s",filename); + break; + + case REBO_2: + snprintf(str,128,"Cannot open REBO2 potential file %s",filename); + break; + + case AIREBO_M: + snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename); + break; + + default: + snprintf(str,128,"Unknown REBO style variant %d",variant); + } error->one(FLERR,str); } - // skip initial comment lines + // skip initial comment line and check for potential file style identifier comment + + fgets(s,MAXLINE,fp); + fgets(s,MAXLINE,fp); + + if (((variant == AIREBO) && (strncmp(s,"# AIREBO ",9) != 0)) + || ((variant == REBO_2) && (strncmp(s,"# REBO2 ",8) != 0)) + || ((variant == AIREBO_M) && (strncmp(s,"# AIREBO-M ",11) != 0))) { + error->one(FLERR,"Potential file does not match AIREBO/REBO style variant"); + } + + // skip remaining comments while (1) { fgets(s,MAXLINE,fp); diff --git a/src/MANYBODY/pair_airebo.h b/src/MANYBODY/pair_airebo.h index 579c342f1b..31c99c4529 100644 --- a/src/MANYBODY/pair_airebo.h +++ b/src/MANYBODY/pair_airebo.h @@ -38,10 +38,12 @@ class PairAIREBO : public Pair { double init_one(int, int); double memory_usage(); - protected: + enum { AIREBO, REBO_2, AIREBO_M }; // for telling class variants apart in shared code + +protected: int *map; // 0 (C), 1 (H), or -1 (NULL) for each type - int me; + int me,variant; int ljflag,torflag; // 0/1 if LJ/Morse,torsion terms included int morseflag; // 1 if Morse instead of LJ for non-bonded diff --git a/src/MANYBODY/pair_airebo_morse.cpp b/src/MANYBODY/pair_airebo_morse.cpp index b501ed0982..a39f7df82e 100644 --- a/src/MANYBODY/pair_airebo_morse.cpp +++ b/src/MANYBODY/pair_airebo_morse.cpp @@ -19,7 +19,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairAIREBOMorse::PairAIREBOMorse(LAMMPS *lmp) : PairAIREBO(lmp) {} +PairAIREBOMorse::PairAIREBOMorse(LAMMPS *lmp) : PairAIREBO(lmp) { + variant = AIREBO_M; +} /* ---------------------------------------------------------------------- global settings diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 5563e1222c..01331c912d 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -18,7 +18,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) {} +PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) { + variant = REBO_2; +} /* ---------------------------------------------------------------------- global settings From 41ccf832bf83e11b1d3898e0437c9ab41d011f5c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 30 Dec 2018 04:30:58 -0500 Subject: [PATCH 005/372] update log files --- ...0-0.g++.1 => log.12Dec18.airebo-0-0.g++.1} | 31 +++++----- ...0-0.g++.4 => log.12Dec18.airebo-0-0.g++.4} | 33 ++++++----- ...ebo-m.g++.1 => log.12Dec18.airebo-m.g++.1} | 54 +++++++++--------- ...ebo-m.g++.4 => log.12Dec18.airebo-m.g++.4} | 54 +++++++++--------- ....airebo.g++.1 => log.12Dec18.airebo.g++.1} | 56 +++++++++---------- ....airebo.g++.4 => log.12Dec18.airebo.g++.4} | 56 +++++++++---------- ...18.rebo2.g++.1 => log.12Dec18.rebo2.g++.1} | 27 +++++---- ...18.rebo2.g++.4 => log.12Dec18.rebo2.g++.4} | 27 +++++---- 8 files changed, 167 insertions(+), 171 deletions(-) rename examples/airebo/{log.29Jun18.airebo-0-0.g++.1 => log.12Dec18.airebo-0-0.g++.1} (77%) rename examples/airebo/{log.29Jun18.airebo-0-0.g++.4 => log.12Dec18.airebo-0-0.g++.4} (76%) rename examples/airebo/{log.27Nov18.airebo-m.g++.1 => log.12Dec18.airebo-m.g++.1} (67%) rename examples/airebo/{log.27Nov18.airebo-m.g++.4 => log.12Dec18.airebo-m.g++.4} (67%) rename examples/airebo/{log.27Nov18.airebo.g++.1 => log.12Dec18.airebo.g++.1} (67%) rename examples/airebo/{log.27Nov18.airebo.g++.4 => log.12Dec18.airebo.g++.4} (66%) rename examples/airebo/{log.29Jun18.rebo2.g++.1 => log.12Dec18.rebo2.g++.1} (76%) rename examples/airebo/{log.29Jun18.rebo2.g++.4 => log.12Dec18.rebo2.g++.4} (76%) diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.1 b/examples/airebo/log.12Dec18.airebo-0-0.g++.1 similarity index 77% rename from examples/airebo/log.29Jun18.airebo-0-0.g++.1 rename to examples/airebo/log.12Dec18.airebo-0-0.g++.1 index d61c8e8b34..7efacc2dd7 100644 --- a/examples/airebo/log.29Jun18.airebo-0-0.g++.1 +++ b/examples/airebo/log.12Dec18.airebo-0-0.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00136042 secs + Time spent = 0.00132823 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -46,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 34.21 | 34.21 | 34.21 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -138442.83 0 -137177.16 2463.0756 - 10 179.38448 -137931.29 0 -137174.48 15656.689 - 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 0 300 -138442.83 0 -137177.16 2463.0755 + 10 179.38448 -137931.29 0 -137174.48 15656.69 + 20 206.89283 -138047.06 0 -137174.19 -24047.407 30 150.81289 -137807.48 0 -137171.21 -16524.191 40 173.24289 -137902.32 0 -137171.42 -5721.7187 50 151.80722 -137812.37 0 -137171.91 3489.8954 - 60 199.06038 -138013.7 0 -137173.88 17887.024 + 60 199.06038 -138013.7 0 -137173.88 17887.025 70 217.84848 -138093.82 0 -137174.73 -12266.16 - 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 80 202.34667 -138029.28 0 -137175.59 -7623.6634 90 194.92367 -137997.12 0 -137174.75 -32277.173 100 185.2078 -137954.64 0 -137173.26 -6888.5104 -Loop time of 5.00753 on 1 procs for 100 steps with 32640 atoms +Loop time of 4.96876 on 1 procs for 100 steps with 32640 atoms -Performance: 0.863 ns/day, 27.820 hours/ns, 19.970 timesteps/s +Performance: 0.869 ns/day, 27.604 hours/ns, 20.126 timesteps/s 99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.4898 | 3.4898 | 3.4898 | 0.0 | 69.69 -Neigh | 1.4697 | 1.4697 | 1.4697 | 0.0 | 29.35 -Comm | 0.015885 | 0.015885 | 0.015885 | 0.0 | 0.32 -Output | 0.00096607 | 0.00096607 | 0.00096607 | 0.0 | 0.02 -Modify | 0.021901 | 0.021901 | 0.021901 | 0.0 | 0.44 -Other | | 0.009297 | | | 0.19 +Pair | 3.4535 | 3.4535 | 3.4535 | 0.0 | 69.50 +Neigh | 1.4688 | 1.4688 | 1.4688 | 0.0 | 29.56 +Comm | 0.015106 | 0.015106 | 0.015106 | 0.0 | 0.30 +Output | 0.00098944 | 0.00098944 | 0.00098944 | 0.0 | 0.02 +Modify | 0.021631 | 0.021631 | 0.021631 | 0.0 | 0.44 +Other | | 0.008734 | | | 0.18 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.4 b/examples/airebo/log.12Dec18.airebo-0-0.g++.4 similarity index 76% rename from examples/airebo/log.29Jun18.airebo-0-0.g++.4 rename to examples/airebo/log.12Dec18.airebo-0-0.g++.4 index 72d6fdd211..e2afb10452 100644 --- a/examples/airebo/log.29Jun18.airebo-0-0.g++.4 +++ b/examples/airebo/log.12Dec18.airebo-0-0.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000609159 secs + Time spent = 0.000664234 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -46,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.94 | 12.13 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -138442.83 0 -137177.16 2463.0756 - 10 179.38448 -137931.29 0 -137174.48 15656.689 - 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 0 300 -138442.83 0 -137177.16 2463.0755 + 10 179.38448 -137931.29 0 -137174.48 15656.69 + 20 206.89283 -138047.06 0 -137174.19 -24047.407 30 150.81289 -137807.48 0 -137171.21 -16524.191 40 173.24289 -137902.32 0 -137171.42 -5721.7187 50 151.80722 -137812.37 0 -137171.91 3489.8954 - 60 199.06038 -138013.7 0 -137173.88 17887.024 + 60 199.06038 -138013.7 0 -137173.88 17887.025 70 217.84848 -138093.82 0 -137174.73 -12266.16 - 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 80 202.34667 -138029.28 0 -137175.59 -7623.6634 90 194.92367 -137997.12 0 -137174.75 -32277.173 100 185.2078 -137954.64 0 -137173.26 -6888.5104 -Loop time of 1.50369 on 4 procs for 100 steps with 32640 atoms +Loop time of 1.44469 on 4 procs for 100 steps with 32640 atoms -Performance: 2.873 ns/day, 8.354 hours/ns, 66.503 timesteps/s -98.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.990 ns/day, 8.026 hours/ns, 69.219 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.92943 | 0.95749 | 0.97327 | 1.8 | 63.68 -Neigh | 0.456 | 0.46115 | 0.46657 | 0.7 | 30.67 -Comm | 0.048775 | 0.068415 | 0.10077 | 8.2 | 4.55 -Output | 0.00044918 | 0.00073665 | 0.0015814 | 0.0 | 0.05 -Modify | 0.0087936 | 0.0089477 | 0.0091038 | 0.1 | 0.60 -Other | | 0.006951 | | | 0.46 +Pair | 0.92215 | 0.93812 | 0.95363 | 1.6 | 64.94 +Neigh | 0.45592 | 0.45842 | 0.46002 | 0.2 | 31.73 +Comm | 0.016539 | 0.03352 | 0.050276 | 8.6 | 2.32 +Output | 0.00043154 | 0.00059217 | 0.001025 | 0.0 | 0.04 +Modify | 0.0087888 | 0.0090455 | 0.0095809 | 0.3 | 0.63 +Other | | 0.004989 | | | 0.35 Nlocal: 8160 ave 8163 max 8157 min Histogram: 1 1 0 0 0 0 0 0 1 1 diff --git a/examples/airebo/log.27Nov18.airebo-m.g++.1 b/examples/airebo/log.12Dec18.airebo-m.g++.1 similarity index 67% rename from examples/airebo/log.27Nov18.airebo-m.g++.1 rename to examples/airebo/log.12Dec18.airebo-m.g++.1 index 44d8b9d59c..8042130645 100644 --- a/examples/airebo/log.27Nov18.airebo-m.g++.1 +++ b/examples/airebo/log.12Dec18.airebo-m.g++.1 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00141144 secs + Time spent = 0.00136471 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo/morse 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo-m C H -Reading potential file ../../potentials/CH.airebo-m with DATE: 2016-03-15 +pair_style airebo/morse 3.0 1 1 +pair_coeff * * CH.airebo-m C H +Reading potential file CH.airebo-m with DATE: 2016-03-15 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,7 +45,7 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 106.4 | 106.4 | 106.4 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139283.82 0 -138018.14 152.25271 + 0 300 -139283.82 0 -138018.14 152.25266 10 166.76148 -138718.75 0 -138015.19 17412.343 20 207.7293 -138891.79 0 -138015.4 -19395.339 30 138.54469 -138596.42 0 -138011.92 -11909.248 @@ -55,21 +55,21 @@ Step Temp E_pair E_mol TotEng Press 70 185.72779 -138799.18 0 -138015.61 -10803.744 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 - 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 64.6107 on 1 procs for 100 steps with 32640 atoms + 100 164.05694 -138706.58 0 -138014.44 5157.5517 +Loop time of 64.5779 on 1 procs for 100 steps with 32640 atoms -Performance: 0.067 ns/day, 358.948 hours/ns, 1.548 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.067 ns/day, 358.766 hours/ns, 1.549 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 59.916 | 59.916 | 59.916 | 0.0 | 92.73 -Neigh | 4.6347 | 4.6347 | 4.6347 | 0.0 | 7.17 -Comm | 0.025572 | 0.025572 | 0.025572 | 0.0 | 0.04 -Output | 0.00098896 | 0.00098896 | 0.00098896 | 0.0 | 0.00 -Modify | 0.022327 | 0.022327 | 0.022327 | 0.0 | 0.03 -Other | | 0.01076 | | | 0.02 +Pair | 59.905 | 59.905 | 59.905 | 0.0 | 92.76 +Neigh | 4.615 | 4.615 | 4.615 | 0.0 | 7.15 +Comm | 0.024453 | 0.024453 | 0.024453 | 0.0 | 0.04 +Output | 0.00099945 | 0.00099945 | 0.00099945 | 0.0 | 0.00 +Modify | 0.021971 | 0.021971 | 0.021971 | 0.0 | 0.03 +Other | | 0.01029 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/airebo/log.27Nov18.airebo-m.g++.4 b/examples/airebo/log.12Dec18.airebo-m.g++.4 similarity index 67% rename from examples/airebo/log.27Nov18.airebo-m.g++.4 rename to examples/airebo/log.12Dec18.airebo-m.g++.4 index a4cc55211b..1aab3b3544 100644 --- a/examples/airebo/log.27Nov18.airebo-m.g++.4 +++ b/examples/airebo/log.12Dec18.airebo-m.g++.4 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000637531 secs + Time spent = 0.000692129 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo/morse 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo-m C H -Reading potential file ../../potentials/CH.airebo-m with DATE: 2016-03-15 +pair_style airebo/morse 3.0 1 1 +pair_coeff * * CH.airebo-m C H +Reading potential file CH.airebo-m with DATE: 2016-03-15 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,7 +45,7 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 29.37 | 29.75 | 30.13 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139283.82 0 -138018.14 152.25271 + 0 300 -139283.82 0 -138018.14 152.25266 10 166.76148 -138718.75 0 -138015.19 17412.343 20 207.7293 -138891.79 0 -138015.4 -19395.339 30 138.54469 -138596.42 0 -138011.92 -11909.248 @@ -55,21 +55,21 @@ Step Temp E_pair E_mol TotEng Press 70 185.72779 -138799.18 0 -138015.61 -10803.744 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 - 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 18.1922 on 4 procs for 100 steps with 32640 atoms + 100 164.05694 -138706.58 0 -138014.44 5157.5517 +Loop time of 17.8093 on 4 procs for 100 steps with 32640 atoms -Performance: 0.237 ns/day, 101.068 hours/ns, 5.497 timesteps/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.243 ns/day, 98.940 hours/ns, 5.615 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.968 | 16.084 | 16.308 | 3.4 | 88.41 -Neigh | 1.6017 | 1.6334 | 1.7006 | 3.1 | 8.98 -Comm | 0.1603 | 0.45122 | 0.59951 | 26.0 | 2.48 -Output | 0.00042605 | 0.00073195 | 0.0016003 | 0.0 | 0.00 -Modify | 0.0092106 | 0.010544 | 0.014411 | 2.2 | 0.06 -Other | | 0.01193 | | | 0.07 +Pair | 15.932 | 16.012 | 16.082 | 1.5 | 89.91 +Neigh | 1.5933 | 1.6063 | 1.6173 | 0.7 | 9.02 +Comm | 0.098741 | 0.17402 | 0.2676 | 16.8 | 0.98 +Output | 0.00044513 | 0.00074279 | 0.0016048 | 0.0 | 0.00 +Modify | 0.0088906 | 0.0089375 | 0.008992 | 0.0 | 0.05 +Other | | 0.007106 | | | 0.04 Nlocal: 8160 ave 8167 max 8153 min Histogram: 1 0 1 0 0 0 0 1 0 1 diff --git a/examples/airebo/log.27Nov18.airebo.g++.1 b/examples/airebo/log.12Dec18.airebo.g++.1 similarity index 67% rename from examples/airebo/log.27Nov18.airebo.g++.1 rename to examples/airebo/log.12Dec18.airebo.g++.1 index 3713c8a8f8..ccc156c15b 100644 --- a/examples/airebo/log.27Nov18.airebo.g++.1 +++ b/examples/airebo/log.12Dec18.airebo.g++.1 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00144172 secs + Time spent = 0.0013268 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo C H -Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 +pair_style airebo 3.0 1 1 +pair_coeff * * CH.airebo C H +Reading potential file CH.airebo with DATE: 2011-10-25 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 106.4 | 106.4 | 106.4 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139300.72 0 -138035.04 7988.6647 + 0 300 -139300.72 0 -138035.04 7988.6646 10 161.34683 -138712.9 0 -138032.19 33228.921 20 208.59504 -138912.79 0 -138032.74 -3211.8806 30 139.7513 -138618.85 0 -138029.25 10878.143 40 142.14562 -138629.02 0 -138029.32 14601.302 - 50 114.23401 -138510.95 0 -138029 24691.125 + 50 114.23401 -138510.95 0 -138029 24691.124 60 164.92002 -138726 0 -138030.21 35125.541 70 162.15256 -138715.9 0 -138031.79 5658.7946 80 157.16184 -138695.77 0 -138032.72 19824.698 - 90 196.15907 -138860.65 0 -138033.07 -7950.8462 + 90 196.15907 -138860.65 0 -138033.07 -7950.8463 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 57.9914 on 1 procs for 100 steps with 32640 atoms +Loop time of 57.482 on 1 procs for 100 steps with 32640 atoms -Performance: 0.074 ns/day, 322.174 hours/ns, 1.724 timesteps/s +Performance: 0.075 ns/day, 319.344 hours/ns, 1.740 timesteps/s 99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 53.275 | 53.275 | 53.275 | 0.0 | 91.87 -Neigh | 4.6548 | 4.6548 | 4.6548 | 0.0 | 8.03 -Comm | 0.026622 | 0.026622 | 0.026622 | 0.0 | 0.05 -Output | 0.00097251 | 0.00097251 | 0.00097251 | 0.0 | 0.00 -Modify | 0.022773 | 0.022773 | 0.022773 | 0.0 | 0.04 -Other | | 0.01089 | | | 0.02 +Pair | 52.796 | 52.796 | 52.796 | 0.0 | 91.85 +Neigh | 4.6286 | 4.6286 | 4.6286 | 0.0 | 8.05 +Comm | 0.024035 | 0.024035 | 0.024035 | 0.0 | 0.04 +Output | 0.00098443 | 0.00098443 | 0.00098443 | 0.0 | 0.00 +Modify | 0.021958 | 0.021958 | 0.021958 | 0.0 | 0.04 +Other | | 0.01014 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -84,4 +84,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:59 +Total wall time: 0:00:58 diff --git a/examples/airebo/log.27Nov18.airebo.g++.4 b/examples/airebo/log.12Dec18.airebo.g++.4 similarity index 66% rename from examples/airebo/log.27Nov18.airebo.g++.4 rename to examples/airebo/log.12Dec18.airebo.g++.4 index 335690684a..fbdd9ed2e1 100644 --- a/examples/airebo/log.27Nov18.airebo.g++.4 +++ b/examples/airebo/log.12Dec18.airebo.g++.4 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.00262594 secs + Time spent = 0.000614405 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo C H -Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 +pair_style airebo 3.0 1 1 +pair_coeff * * CH.airebo C H +Reading potential file CH.airebo with DATE: 2011-10-25 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 29.37 | 29.75 | 30.13 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139300.72 0 -138035.04 7988.6647 + 0 300 -139300.72 0 -138035.04 7988.6646 10 161.34683 -138712.9 0 -138032.19 33228.921 20 208.59504 -138912.79 0 -138032.74 -3211.8806 30 139.7513 -138618.85 0 -138029.25 10878.143 40 142.14562 -138629.02 0 -138029.32 14601.302 - 50 114.23401 -138510.95 0 -138029 24691.125 + 50 114.23401 -138510.95 0 -138029 24691.124 60 164.92002 -138726 0 -138030.21 35125.541 70 162.15256 -138715.9 0 -138031.79 5658.7946 80 157.16184 -138695.77 0 -138032.72 19824.698 - 90 196.15907 -138860.65 0 -138033.07 -7950.8462 + 90 196.15907 -138860.65 0 -138033.07 -7950.8463 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 16.4395 on 4 procs for 100 steps with 32640 atoms +Loop time of 15.9743 on 4 procs for 100 steps with 32640 atoms -Performance: 0.263 ns/day, 91.331 hours/ns, 6.083 timesteps/s -98.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.270 ns/day, 88.746 hours/ns, 6.260 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 14.263 | 14.349 | 14.483 | 2.3 | 87.28 -Neigh | 1.6071 | 1.6283 | 1.6636 | 1.7 | 9.90 -Comm | 0.26261 | 0.43435 | 0.52323 | 16.1 | 2.64 -Output | 0.00042105 | 0.0007121 | 0.001538 | 0.0 | 0.00 -Modify | 0.00898 | 0.009112 | 0.0093675 | 0.2 | 0.06 -Other | | 0.0184 | | | 0.11 +Pair | 14.13 | 14.185 | 14.258 | 1.3 | 88.80 +Neigh | 1.5945 | 1.6093 | 1.6237 | 0.9 | 10.07 +Comm | 0.075436 | 0.16329 | 0.23273 | 14.3 | 1.02 +Output | 0.00041533 | 0.00069332 | 0.0014405 | 0.0 | 0.00 +Modify | 0.0089853 | 0.0090484 | 0.0091338 | 0.1 | 0.06 +Other | | 0.007319 | | | 0.05 Nlocal: 8160 ave 8174 max 8146 min Histogram: 1 0 1 0 0 0 0 1 0 1 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.1 b/examples/airebo/log.12Dec18.rebo2.g++.1 similarity index 76% rename from examples/airebo/log.29Jun18.rebo2.g++.1 rename to examples/airebo/log.12Dec18.rebo2.g++.1 index 54c87ab474..83c3a8ebea 100644 --- a/examples/airebo/log.29Jun18.rebo2.g++.1 +++ b/examples/airebo/log.12Dec18.rebo2.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00153542 secs + Time spent = 0.0013907 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -50,27 +49,27 @@ Step Temp E_pair E_mol TotEng Press 10 179.37985 -137931.27 0 -137174.48 15655.936 20 206.87654 -138046.99 0 -137174.19 -24042.627 30 150.80122 -137807.43 0 -137171.21 -16524.118 - 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9119 50 151.80455 -137812.36 0 -137171.91 3480.4584 60 199.08777 -138013.82 0 -137173.88 17881.372 70 217.85748 -138093.86 0 -137174.73 -12270.999 - 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 80 202.37482 -138029.39 0 -137175.59 -7622.7319 90 194.90628 -137997.05 0 -137174.75 -32267.471 100 185.17818 -137954.51 0 -137173.26 -6901.7499 -Loop time of 5.03541 on 1 procs for 100 steps with 32640 atoms +Loop time of 4.96341 on 1 procs for 100 steps with 32640 atoms -Performance: 0.858 ns/day, 27.975 hours/ns, 19.859 timesteps/s -99.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.870 ns/day, 27.574 hours/ns, 20.147 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.5083 | 3.5083 | 3.5083 | 0.0 | 69.67 -Neigh | 1.4785 | 1.4785 | 1.4785 | 0.0 | 29.36 -Comm | 0.016176 | 0.016176 | 0.016176 | 0.0 | 0.32 -Output | 0.0009644 | 0.0009644 | 0.0009644 | 0.0 | 0.02 -Modify | 0.02224 | 0.02224 | 0.02224 | 0.0 | 0.44 -Other | | 0.009286 | | | 0.18 +Pair | 3.4476 | 3.4476 | 3.4476 | 0.0 | 69.46 +Neigh | 1.4692 | 1.4692 | 1.4692 | 0.0 | 29.60 +Comm | 0.015226 | 0.015226 | 0.015226 | 0.0 | 0.31 +Output | 0.00098777 | 0.00098777 | 0.00098777 | 0.0 | 0.02 +Modify | 0.021646 | 0.021646 | 0.021646 | 0.0 | 0.44 +Other | | 0.008718 | | | 0.18 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.4 b/examples/airebo/log.12Dec18.rebo2.g++.4 similarity index 76% rename from examples/airebo/log.29Jun18.rebo2.g++.4 rename to examples/airebo/log.12Dec18.rebo2.g++.4 index b7d63dd2e5..f38f484238 100644 --- a/examples/airebo/log.29Jun18.rebo2.g++.4 +++ b/examples/airebo/log.12Dec18.rebo2.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.00151467 secs + Time spent = 0.000644684 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -50,27 +49,27 @@ Step Temp E_pair E_mol TotEng Press 10 179.37985 -137931.27 0 -137174.48 15655.936 20 206.87654 -138046.99 0 -137174.19 -24042.627 30 150.80122 -137807.43 0 -137171.21 -16524.118 - 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9119 50 151.80455 -137812.36 0 -137171.91 3480.4584 60 199.08777 -138013.82 0 -137173.88 17881.372 70 217.85748 -138093.86 0 -137174.73 -12270.999 - 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 80 202.37482 -138029.39 0 -137175.59 -7622.7319 90 194.90628 -137997.05 0 -137174.75 -32267.471 100 185.17818 -137954.51 0 -137173.26 -6901.7499 -Loop time of 1.49632 on 4 procs for 100 steps with 32640 atoms +Loop time of 1.4517 on 4 procs for 100 steps with 32640 atoms -Performance: 2.887 ns/day, 8.313 hours/ns, 66.831 timesteps/s -98.6% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.976 ns/day, 8.065 hours/ns, 68.885 timesteps/s +99.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.93275 | 0.95717 | 0.97367 | 1.6 | 63.97 -Neigh | 0.45634 | 0.46084 | 0.46749 | 0.6 | 30.80 -Comm | 0.038283 | 0.062074 | 0.090508 | 7.6 | 4.15 -Output | 0.00046492 | 0.00072992 | 0.0015128 | 0.0 | 0.05 -Modify | 0.0088651 | 0.0090639 | 0.0093012 | 0.2 | 0.61 -Other | | 0.006436 | | | 0.43 +Pair | 0.92079 | 0.93883 | 0.95524 | 1.6 | 64.67 +Neigh | 0.45826 | 0.46013 | 0.46316 | 0.3 | 31.70 +Comm | 0.02183 | 0.038046 | 0.052974 | 7.5 | 2.62 +Output | 0.00044131 | 0.00057179 | 0.00093198 | 0.0 | 0.04 +Modify | 0.0088243 | 0.0089917 | 0.0092998 | 0.2 | 0.62 +Other | | 0.005127 | | | 0.35 Nlocal: 8160 ave 8163 max 8157 min Histogram: 1 1 0 0 0 0 0 0 1 1 From 08b1728a963aac4361fcb5031f29f0640b0303e4 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 29 Jan 2019 13:05:03 -0700 Subject: [PATCH 006/372] Commit JT 012919 - commit tuesday evening, second day imp. - dev. fix_neb_spin --- examples/SPIN/gneb_bfo/README | 5 + examples/SPIN/gneb_bfo/Si.sw | 18 + examples/SPIN/gneb_bfo/final.hop1 | 2 + examples/SPIN/gneb_bfo/final.iron_spin | 68 + examples/SPIN/gneb_bfo/final.iron_spin_data | 82 ++ examples/SPIN/gneb_bfo/in.neb.hop1 | 66 + examples/SPIN/gneb_bfo/in.neb.spin_iron | 100 ++ examples/SPIN/gneb_bfo/in.spin.bfo | 56 + examples/SPIN/gneb_bfo/in.spin.iron | 56 + examples/SPIN/gneb_bfo/in.spin.single_spin | 57 + examples/SPIN/gneb_bfo/in.tad | 110 ++ examples/SPIN/gneb_bfo/initial.hop1 | 860 +++++++++++++ examples/SPIN/gneb_bfo/initial.iron_spin | 82 ++ src/REPLICA/fix_neb_spin.cpp | 1226 +++++++++++++++++++ src/REPLICA/fix_neb_spin.h | 115 ++ src/REPLICA/neb_spin.cpp | 722 +++++++++++ src/REPLICA/neb_spin.h | 137 +++ 17 files changed, 3762 insertions(+) create mode 100644 examples/SPIN/gneb_bfo/README create mode 100644 examples/SPIN/gneb_bfo/Si.sw create mode 100644 examples/SPIN/gneb_bfo/final.hop1 create mode 100644 examples/SPIN/gneb_bfo/final.iron_spin create mode 100644 examples/SPIN/gneb_bfo/final.iron_spin_data create mode 100644 examples/SPIN/gneb_bfo/in.neb.hop1 create mode 100644 examples/SPIN/gneb_bfo/in.neb.spin_iron create mode 100644 examples/SPIN/gneb_bfo/in.spin.bfo create mode 100644 examples/SPIN/gneb_bfo/in.spin.iron create mode 100644 examples/SPIN/gneb_bfo/in.spin.single_spin create mode 100644 examples/SPIN/gneb_bfo/in.tad create mode 100644 examples/SPIN/gneb_bfo/initial.hop1 create mode 100644 examples/SPIN/gneb_bfo/initial.iron_spin create mode 100644 src/REPLICA/fix_neb_spin.cpp create mode 100644 src/REPLICA/fix_neb_spin.h create mode 100644 src/REPLICA/neb_spin.cpp create mode 100644 src/REPLICA/neb_spin.h diff --git a/examples/SPIN/gneb_bfo/README b/examples/SPIN/gneb_bfo/README new file mode 100644 index 0000000000..eeb4aa4692 --- /dev/null +++ b/examples/SPIN/gneb_bfo/README @@ -0,0 +1,5 @@ +Run this example as: + +mpirun -np 3 lmp_g++ -partition 3x1 -in in.tad + +You should be able to use any number of replicas >= 3. diff --git a/examples/SPIN/gneb_bfo/Si.sw b/examples/SPIN/gneb_bfo/Si.sw new file mode 100644 index 0000000000..db4be100ef --- /dev/null +++ b/examples/SPIN/gneb_bfo/Si.sw @@ -0,0 +1,18 @@ +# DATE: 2007-06-11 CONTRIBUTOR: Aidan Thompson, athomps@sandia.gov CITATION: Stillinger and Weber, Phys Rev B, 31, 5262, (1985) +# Stillinger-Weber parameters for various elements and mixtures +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# these entries are in LAMMPS "metal" units: +# epsilon = eV; sigma = Angstroms +# other quantities are unitless + +# format of a single entry (one or more lines): +# element 1, element 2, element 3, +# epsilon, sigma, a, lambda, gamma, costheta0, A, B, p, q, tol + +# Here are the original parameters in metal units, for Silicon from: +# +# Stillinger and Weber, Phys. Rev. B, v. 31, p. 5262, (1985) +# + +Si Si Si 2.1683 2.0951 1.80 21.0 1.20 -0.333333333333 + 7.049556277 0.6022245584 4.0 0.0 0.0 diff --git a/examples/SPIN/gneb_bfo/final.hop1 b/examples/SPIN/gneb_bfo/final.hop1 new file mode 100644 index 0000000000..338e674a9c --- /dev/null +++ b/examples/SPIN/gneb_bfo/final.hop1 @@ -0,0 +1,2 @@ +1 +412 14.0 20.5 0 diff --git a/examples/SPIN/gneb_bfo/final.iron_spin b/examples/SPIN/gneb_bfo/final.iron_spin new file mode 100644 index 0000000000..a921287ccb --- /dev/null +++ b/examples/SPIN/gneb_bfo/final.iron_spin @@ -0,0 +1,68 @@ +32 +2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/SPIN/gneb_bfo/final.iron_spin_data b/examples/SPIN/gneb_bfo/final.iron_spin_data new file mode 100644 index 0000000000..b337bac188 --- /dev/null +++ b/examples/SPIN/gneb_bfo/final.iron_spin_data @@ -0,0 +1,82 @@ +LAMMPS data file via write_data, version 4 Jan 2019, timestep = 0 + +32 atoms +1 atom types + +0.0000000000000000e+00 1.1465999999999999e+01 xlo xhi +0.0000000000000000e+00 1.1465999999999999e+01 ylo yhi +0.0000000000000000e+00 2.8664999999999998e+00 zlo zhi + +Masses + +1 55.845 + +Atoms # spin + +1 1 2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +2 1 2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +3 1 2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +4 1 2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +5 1 2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +6 1 2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +7 1 2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +8 1 2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +9 1 2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +11 1 2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +13 1 2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +15 1 2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +10 1 2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +12 1 2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +14 1 2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +16 1 2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +17 1 2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +18 1 2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +19 1 2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +20 1 2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +21 1 2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +22 1 2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +23 1 2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +24 1 2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +25 1 2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +27 1 2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +29 1 2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +31 1 2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +26 1 2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +28 1 2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +30 1 2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +32 1 2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/SPIN/gneb_bfo/in.neb.hop1 b/examples/SPIN/gneb_bfo/in.neb.hop1 new file mode 100644 index 0000000000..4e203afd82 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.neb.hop1 @@ -0,0 +1,66 @@ +# 2d NEB surface simulation, hop from surface to become adatom + +dimension 2 +boundary p s p + +atom_style atomic +neighbor 0.3 bin +neigh_modify delay 5 +atom_modify map array sort 0 0.0 + +variable u uloop 20 + +# create geometry with flat surface + +lattice hex 0.9 +region box block 0 20 0 10 -0.25 0.25 + +#create_box 3 box +#create_atoms 1 box +#mass * 1.0 +#write_data initial.hop1 + +read_data ../examples/SPIN/gneb_bfo/initial.hop1 + +# LJ potentials + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_modify shift yes + +# initial minimization to relax surface + +minimize 1.0e-6 1.0e-4 1000 10000 +reset_timestep 0 + +# define groups + +region 1 block INF INF INF 1.25 INF INF +group lower region 1 +group mobile subtract all lower +set group lower type 2 + +timestep 0.05 + +# group of NEB atoms - either block or single atom ID 412 + +region surround block 10 18 17 20 0 0 units box +group nebatoms region surround +#group nebatoms id 412 +set group nebatoms type 3 +group nonneb subtract all nebatoms + +fix 1 lower setforce 0.0 0.0 0.0 +fix 2 nebatoms neb 1.0 parallel ideal +fix 3 all enforce2d + +thermo 100 + +#dump 1 nebatoms atom 10 dump.neb.$u +#dump 2 nonneb atom 10 dump.nonneb.$u + +# run NEB for 2000 steps or to force tolerance + +min_style quickmin + +neb 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.hop1 diff --git a/examples/SPIN/gneb_bfo/in.neb.spin_iron b/examples/SPIN/gneb_bfo/in.neb.spin_iron new file mode 100644 index 0000000000..6b99cd4639 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.neb.spin_iron @@ -0,0 +1,100 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p f + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 4.0 0.0 4.0 0.0 1.0 +#create_box 1 box +#create_atoms 1 box + +read_data ../examples/SPIN/gneb_bfo/initial.iron_spin + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 +fix 2 nebatoms neb_spin 1.0 +#parallel ideal + +min_style quickmin +neb 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin + + +############################################################# + +# 2d NEB surface simulation, hop from surface to become adatom + + +variable u uloop 20 + +# create geometry with flat surface + +lattice hex 0.9 +region box block 0 20 0 10 -0.25 0.25 + +#create_box 3 box +#create_atoms 1 box +#mass * 1.0 +#write_data initial.hop1 + +read_data ../examples/SPIN/gneb_bfo/initial.hop1 + +# LJ potentials + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_modify shift yes + +# initial minimization to relax surface + +minimize 1.0e-6 1.0e-4 1000 10000 +reset_timestep 0 + +# define groups + +region 1 block INF INF INF 1.25 INF INF +group lower region 1 +group mobile subtract all lower +set group lower type 2 + +timestep 0.05 + +# group of NEB atoms - either block or single atom ID 412 + +region surround block 10 18 17 20 0 0 units box +group nebatoms region surround +#group nebatoms id 412 +set group nebatoms type 3 +group nonneb subtract all nebatoms + +fix 1 lower setforce 0.0 0.0 0.0 +fix 2 nebatoms neb 1.0 parallel ideal +fix 3 all enforce2d + +thermo 100 + +#dump 1 nebatoms atom 10 dump.neb.$u +#dump 2 nonneb atom 10 dump.nonneb.$u + +# run NEB for 2000 steps or to force tolerance + +min_style quickmin + +neb 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.hop1 diff --git a/examples/SPIN/gneb_bfo/in.spin.bfo b/examples/SPIN/gneb_bfo/in.spin.bfo new file mode 100644 index 0000000000..e3c88b0f06 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.spin.bfo @@ -0,0 +1,56 @@ +# layer sc iron atoms (in the [001] plane) in bismuth oxide + +clear +units metal +atom_style spin + +dimension 3 +boundary p p f + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 3.96 +region box block 0.0 34.0 0.0 34.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bfo + +mass 1 1.0 + +set group all spin/random 11 2.50 + +#pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 +pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 +pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 +pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 +pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.1 21 +fix 3 all nve/spin lattice no + +timestep 0.0002 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +#thermo_style custom step time v_magnorm v_emag temp etotal +thermo_style custom step time v_magnorm pe ke v_emag temp etotal +thermo 10 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 diff --git a/examples/SPIN/gneb_bfo/in.spin.iron b/examples/SPIN/gneb_bfo/in.spin.iron new file mode 100644 index 0000000000..6d291c633b --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.spin.iron @@ -0,0 +1,56 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 4.0 0.0 4.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 + +set group all spin 2.2 -1.0 0.0 0.0 +#velocity all create 100 4928459 rot yes dist gaussian + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 0 +write_data final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spin.single_spin b/examples/SPIN/gneb_bfo/in.spin.single_spin new file mode 100644 index 0000000000..3a63c87b8c --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.spin.single_spin @@ -0,0 +1,57 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary f f f +#boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 2.8665 +region box block 0.0 1.0 0.0 1.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 + +set group all spin 2.2 0.0 0.0 1.0 +#velocity all create 100 4928459 rot yes dist gaussian + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.0 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.01 0.0 1.0 0.0 anisotropy 0.005 0.0 0.0 1.0 +fix 2 all langevin/spin 50.0 0.1 21 + +fix 3 all nve/spin lattice no +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magz v_magnorm v_tmag temp v_emag ke pe etotal +thermo 100 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 50000 +write_data final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.tad b/examples/SPIN/gneb_bfo/in.tad new file mode 100644 index 0000000000..674fdc8172 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.tad @@ -0,0 +1,110 @@ +# temperature accelerated dynamics model for a single vacancy in bulk Si +# events occur when a neighboring atom diffuses to the vacant site +# run this on multiple partitions as +# mpirun -np 3 lmp_g++ -partition 3x1 -in in.tad + +units metal + +atom_style atomic +atom_modify map array +boundary p p p +atom_modify sort 0 0.0 + +# temperatures +variable tlo equal 1800.0 +variable thi equal 2400.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a & + a1 1.0 0.0 0.0 & + a2 0.0 1.0 0.0 & + a3 0.0 0.0 1.0 & + basis 0.0 0.0 0.0 & + basis 0.0 0.5 0.5 & + basis 0.5 0.0 0.5 & + basis 0.5 0.5 0.0 & + basis 0.25 0.25 0.25 & + basis 0.25 0.75 0.75 & + basis 0.75 0.25 0.75 & + basis 0.75 0.75 0.25 + +region myreg block 0 4 & + 0 4 & + 0 4 +create_box 1 myreg +create_atoms 1 region myreg + +mass 1 28.06 + +group Si type 1 + +velocity all create ${thi} 5287286 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +delete_atoms group del + +pair_style sw +pair_coeff * * ../examples/SPIN/gneb_bfo/Si.sw Si + +thermo 10 + +fix 1 all nve +fix 2 all langevin ${thi} ${thi} 0.1 48278 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +# equilibrate + +run 1000 + +# Eliminate COM motion +velocity all zero linear + +# only output atoms near vacancy + +compute coord all coord/atom cutoff $r + +#dump events all custom 1 dump.prd id type x y z +#dump_modify events thresh c_coord != 4 + +compute patom all pe/atom +compute pe all reduce sum c_patom +compute satom all stress/atom NULL +compute str all reduce sum c_satom[1] c_satom[2] c_satom[3] +variable press equal (c_str[1]+c_str[2]+c_str[3])/(3*vol) + +thermo_style custom step temp pe c_pe press v_press + +compute event all event/displace 1.0 + +unfix 1 +unfix 2 +fix 1 all nvt temp ${thi} ${thi} 0.1 + +# tad nsteps nevent tlo thi delta_conf tmax compute +# [min etol ftol niter neval] +# [neb etol_neb ftol_neb n1steps n2steps nevery] +# [neb_style min_style] +# [neb_log logfile] + +tad 2000 50 ${tlo} ${thi} 0.05 1.0 event & + min ${etol} ${ftol} ${maxiter} ${maxeval} & + neb 0.0 0.01 200 200 20 neb_style fire neb_log log.neb diff --git a/examples/SPIN/gneb_bfo/initial.hop1 b/examples/SPIN/gneb_bfo/initial.hop1 new file mode 100644 index 0000000000..228708c314 --- /dev/null +++ b/examples/SPIN/gneb_bfo/initial.hop1 @@ -0,0 +1,860 @@ +LAMMPS data file via write_data, version 27 Sep 2016, timestep = 0 + +420 atoms +3 atom types + +0.0000000000000000e+00 2.2653923264628304e+01 xlo xhi +-1.9618873042551413e-03 1.9620834929855668e+01 ylo yhi +-2.8317404080785380e-01 2.8317404080785380e-01 zlo zhi + +Masses + +1 1 +2 1 +3 1 + +Atoms # atomic + +1 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +2 1 5.6634808161570760e-01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +3 1 1.1326961632314152e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +4 1 1.6990442448471228e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +5 1 2.2653923264628304e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +6 1 2.8317404080785380e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +7 1 3.3980884896942456e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +8 1 3.9644365713099532e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +9 1 4.5307846529256608e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +10 1 5.0971327345413684e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +11 1 5.6634808161570760e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +12 1 6.2298288977727836e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +13 1 6.7961769793884912e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +14 1 7.3625250610041988e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +15 1 7.9288731426199064e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +16 1 8.4952212242356140e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +17 1 9.0615693058513216e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +18 1 9.6279173874670292e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +19 1 1.0194265469082737e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +20 1 1.0760613550698444e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +21 1 1.1326961632314152e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +22 1 1.1893309713929860e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +23 1 1.2459657795545567e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +24 1 1.3026005877161275e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +25 1 1.3592353958776982e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +26 1 1.4158702040392690e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +27 1 1.4725050122008398e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +28 1 1.5291398203624105e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +29 1 1.5857746285239813e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +30 1 1.6424094366855520e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +31 1 1.6990442448471228e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +32 1 1.7556790530086936e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +33 1 1.8123138611702643e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +34 1 1.8689486693318351e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +35 1 1.9255834774934058e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +36 1 1.9822182856549766e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +37 1 2.0388530938165474e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +38 1 2.0954879019781181e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +39 1 2.1521227101396889e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +40 1 2.2087575183012596e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 +41 1 0.0000000000000000e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +42 1 5.6634808161570760e-01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +43 1 1.1326961632314152e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +44 1 1.6990442448471228e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +45 1 2.2653923264628304e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +46 1 2.8317404080785380e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +47 1 3.3980884896942456e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +48 1 3.9644365713099532e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +49 1 4.5307846529256608e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +50 1 5.0971327345413684e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +51 1 5.6634808161570760e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +52 1 6.2298288977727836e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +53 1 6.7961769793884912e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +54 1 7.3625250610041988e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +55 1 7.9288731426199064e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +56 1 8.4952212242356140e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +57 1 9.0615693058513216e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +58 1 9.6279173874670292e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +59 1 1.0194265469082737e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +60 1 1.0760613550698444e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +61 1 1.1326961632314152e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +62 1 1.1893309713929860e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +63 1 1.2459657795545567e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +64 1 1.3026005877161275e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +65 1 1.3592353958776982e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +66 1 1.4158702040392690e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +67 1 1.4725050122008398e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +68 1 1.5291398203624105e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +69 1 1.5857746285239813e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +70 1 1.6424094366855520e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +71 1 1.6990442448471228e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +72 1 1.7556790530086936e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +73 1 1.8123138611702643e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +74 1 1.8689486693318351e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +75 1 1.9255834774934058e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +76 1 1.9822182856549766e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +77 1 2.0388530938165474e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +78 1 2.0954879019781181e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +79 1 2.1521227101396889e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 +80 1 2.2087575183012596e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 +81 1 0.0000000000000000e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +82 1 5.6634808161570760e-01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +83 1 1.1326961632314152e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +84 1 1.6990442448471228e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +85 1 2.2653923264628304e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +86 1 2.8317404080785380e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +87 1 3.3980884896942456e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +88 1 3.9644365713099532e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +89 1 4.5307846529256608e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +90 1 5.0971327345413684e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +91 1 5.6634808161570760e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +92 1 6.2298288977727836e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +93 1 6.7961769793884912e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +94 1 7.3625250610041988e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +95 1 7.9288731426199064e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +96 1 8.4952212242356140e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +97 1 9.0615693058513216e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +98 1 9.6279173874670292e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +99 1 1.0194265469082737e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +100 1 1.0760613550698444e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +101 1 1.1326961632314152e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +102 1 1.1893309713929860e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +103 1 1.2459657795545567e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +104 1 1.3026005877161275e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +105 1 1.3592353958776982e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +106 1 1.4158702040392690e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +107 1 1.4725050122008398e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +108 1 1.5291398203624105e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +109 1 1.5857746285239813e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +110 1 1.6424094366855520e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +111 1 1.6990442448471228e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +112 1 1.7556790530086936e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +113 1 1.8123138611702643e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +114 1 1.8689486693318351e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +115 1 1.9255834774934058e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +116 1 1.9822182856549766e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +117 1 2.0388530938165474e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +118 1 2.0954879019781181e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +119 1 2.1521227101396889e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 +120 1 2.2087575183012596e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 +121 1 0.0000000000000000e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +122 1 5.6634808161570760e-01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +123 1 1.1326961632314152e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +124 1 1.6990442448471228e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +125 1 2.2653923264628304e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +126 1 2.8317404080785380e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +127 1 3.3980884896942456e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +128 1 3.9644365713099532e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +129 1 4.5307846529256608e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +130 1 5.0971327345413684e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +131 1 5.6634808161570760e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +132 1 6.2298288977727836e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +133 1 6.7961769793884912e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +134 1 7.3625250610041988e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +135 1 7.9288731426199064e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +136 1 8.4952212242356140e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +137 1 9.0615693058513216e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +138 1 9.6279173874670292e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +139 1 1.0194265469082737e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +140 1 1.0760613550698444e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +141 1 1.1326961632314152e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +142 1 1.1893309713929860e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +143 1 1.2459657795545567e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +144 1 1.3026005877161275e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +145 1 1.3592353958776982e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +146 1 1.4158702040392690e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +147 1 1.4725050122008398e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +148 1 1.5291398203624105e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +149 1 1.5857746285239813e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +150 1 1.6424094366855520e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +151 1 1.6990442448471228e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +152 1 1.7556790530086936e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +153 1 1.8123138611702643e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +154 1 1.8689486693318351e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +155 1 1.9255834774934058e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +156 1 1.9822182856549766e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +157 1 2.0388530938165474e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +158 1 2.0954879019781181e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +159 1 2.1521227101396889e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 +160 1 2.2087575183012596e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 +161 1 0.0000000000000000e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +162 1 5.6634808161570760e-01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +163 1 1.1326961632314152e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +164 1 1.6990442448471228e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +165 1 2.2653923264628304e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +166 1 2.8317404080785380e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +167 1 3.3980884896942456e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +168 1 3.9644365713099532e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +169 1 4.5307846529256608e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +170 1 5.0971327345413684e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +171 1 5.6634808161570760e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +172 1 6.2298288977727836e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +173 1 6.7961769793884912e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +174 1 7.3625250610041988e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +175 1 7.9288731426199064e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +176 1 8.4952212242356140e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +177 1 9.0615693058513216e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +178 1 9.6279173874670292e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +179 1 1.0194265469082737e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +180 1 1.0760613550698444e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +181 1 1.1326961632314152e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +182 1 1.1893309713929860e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +183 1 1.2459657795545567e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +184 1 1.3026005877161275e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +185 1 1.3592353958776982e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +186 1 1.4158702040392690e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +187 1 1.4725050122008398e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +188 1 1.5291398203624105e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +189 1 1.5857746285239813e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +190 1 1.6424094366855520e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +191 1 1.6990442448471228e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +192 1 1.7556790530086936e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +193 1 1.8123138611702643e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +194 1 1.8689486693318351e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +195 1 1.9255834774934058e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +196 1 1.9822182856549766e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +197 1 2.0388530938165474e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +198 1 2.0954879019781181e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +199 1 2.1521227101396889e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 +200 1 2.2087575183012596e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 +201 1 0.0000000000000000e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +202 1 5.6634808161570760e-01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +203 1 1.1326961632314152e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +204 1 1.6990442448471228e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +205 1 2.2653923264628304e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +206 1 2.8317404080785380e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +207 1 3.3980884896942456e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +208 1 3.9644365713099532e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +209 1 4.5307846529256608e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +210 1 5.0971327345413684e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +211 1 5.6634808161570760e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +212 1 6.2298288977727836e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +213 1 6.7961769793884912e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +214 1 7.3625250610041988e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +215 1 7.9288731426199064e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +216 1 8.4952212242356140e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +217 1 9.0615693058513216e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +218 1 9.6279173874670292e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +219 1 1.0194265469082737e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +220 1 1.0760613550698444e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +221 1 1.1326961632314152e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +222 1 1.1893309713929860e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +223 1 1.2459657795545567e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +224 1 1.3026005877161275e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +225 1 1.3592353958776982e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +226 1 1.4158702040392690e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +227 1 1.4725050122008398e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +228 1 1.5291398203624105e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +229 1 1.5857746285239813e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +230 1 1.6424094366855520e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +231 1 1.6990442448471228e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +232 1 1.7556790530086936e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +233 1 1.8123138611702643e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +234 1 1.8689486693318351e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +235 1 1.9255834774934058e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +236 1 1.9822182856549766e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +237 1 2.0388530938165474e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +238 1 2.0954879019781181e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +239 1 2.1521227101396889e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 +240 1 2.2087575183012596e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 +241 1 0.0000000000000000e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +242 1 5.6634808161570760e-01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +243 1 1.1326961632314152e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +244 1 1.6990442448471228e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +245 1 2.2653923264628304e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +246 1 2.8317404080785380e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +247 1 3.3980884896942456e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +248 1 3.9644365713099532e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +249 1 4.5307846529256608e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +250 1 5.0971327345413684e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +251 1 5.6634808161570760e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +252 1 6.2298288977727836e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +253 1 6.7961769793884912e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +254 1 7.3625250610041988e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +255 1 7.9288731426199064e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +256 1 8.4952212242356140e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +257 1 9.0615693058513216e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +258 1 9.6279173874670292e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +259 1 1.0194265469082737e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +260 1 1.0760613550698444e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +261 1 1.1326961632314152e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +262 1 1.1893309713929860e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +263 1 1.2459657795545567e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +264 1 1.3026005877161275e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +265 1 1.3592353958776982e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +266 1 1.4158702040392690e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +267 1 1.4725050122008398e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +268 1 1.5291398203624105e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +269 1 1.5857746285239813e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +270 1 1.6424094366855520e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +271 1 1.6990442448471228e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +272 1 1.7556790530086936e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +273 1 1.8123138611702643e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +274 1 1.8689486693318351e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +275 1 1.9255834774934058e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +276 1 1.9822182856549766e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +277 1 2.0388530938165474e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +278 1 2.0954879019781181e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +279 1 2.1521227101396889e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 +280 1 2.2087575183012596e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 +281 1 0.0000000000000000e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +282 1 5.6634808161570760e-01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +283 1 1.1326961632314152e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +284 1 1.6990442448471228e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +285 1 2.2653923264628304e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +286 1 2.8317404080785380e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +287 1 3.3980884896942456e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +288 1 3.9644365713099532e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +289 1 4.5307846529256608e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +290 1 5.0971327345413684e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +291 1 5.6634808161570760e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +292 1 6.2298288977727836e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +293 1 6.7961769793884912e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +294 1 7.3625250610041988e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +295 1 7.9288731426199064e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +296 1 8.4952212242356140e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +297 1 9.0615693058513216e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +298 1 9.6279173874670292e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +299 1 1.0194265469082737e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +300 1 1.0760613550698444e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +301 1 1.1326961632314152e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +302 1 1.1893309713929860e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +303 1 1.2459657795545567e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +304 1 1.3026005877161275e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +305 1 1.3592353958776982e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +306 1 1.4158702040392690e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +307 1 1.4725050122008398e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +308 1 1.5291398203624105e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +309 1 1.5857746285239813e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +310 1 1.6424094366855520e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +311 1 1.6990442448471228e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +312 1 1.7556790530086936e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +313 1 1.8123138611702643e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +314 1 1.8689486693318351e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +315 1 1.9255834774934058e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +316 1 1.9822182856549766e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +317 1 2.0388530938165474e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +318 1 2.0954879019781181e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +319 1 2.1521227101396889e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 +320 1 2.2087575183012596e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 +321 1 0.0000000000000000e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +322 1 5.6634808161570760e-01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +323 1 1.1326961632314152e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +324 1 1.6990442448471228e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +325 1 2.2653923264628304e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +326 1 2.8317404080785380e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +327 1 3.3980884896942456e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +328 1 3.9644365713099532e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +329 1 4.5307846529256608e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +330 1 5.0971327345413684e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +331 1 5.6634808161570760e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +332 1 6.2298288977727836e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +333 1 6.7961769793884912e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +334 1 7.3625250610041988e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +335 1 7.9288731426199064e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +336 1 8.4952212242356140e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +337 1 9.0615693058513216e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +338 1 9.6279173874670292e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +339 1 1.0194265469082737e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +340 1 1.0760613550698444e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +341 1 1.1326961632314152e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +342 1 1.1893309713929860e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +343 1 1.2459657795545567e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +344 1 1.3026005877161275e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +345 1 1.3592353958776982e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +346 1 1.4158702040392690e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +347 1 1.4725050122008398e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +348 1 1.5291398203624105e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +349 1 1.5857746285239813e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +350 1 1.6424094366855520e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +351 1 1.6990442448471228e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +352 1 1.7556790530086936e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +353 1 1.8123138611702643e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +354 1 1.8689486693318351e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +355 1 1.9255834774934058e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +356 1 1.9822182856549766e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +357 1 2.0388530938165474e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +358 1 2.0954879019781181e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +359 1 2.1521227101396889e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 +360 1 2.2087575183012596e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 +361 1 0.0000000000000000e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +362 1 5.6634808161570760e-01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +363 1 1.1326961632314152e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +364 1 1.6990442448471228e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +365 1 2.2653923264628304e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +366 1 2.8317404080785380e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +367 1 3.3980884896942456e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +368 1 3.9644365713099532e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +369 1 4.5307846529256608e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +370 1 5.0971327345413684e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +371 1 5.6634808161570760e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +372 1 6.2298288977727836e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +373 1 6.7961769793884912e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +374 1 7.3625250610041988e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +375 1 7.9288731426199064e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +376 1 8.4952212242356140e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +377 1 9.0615693058513216e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +378 1 9.6279173874670292e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +379 1 1.0194265469082737e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +380 1 1.0760613550698444e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +381 1 1.1326961632314152e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +382 1 1.1893309713929860e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +383 1 1.2459657795545567e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +384 1 1.3026005877161275e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +385 1 1.3592353958776982e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +386 1 1.4158702040392690e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +387 1 1.4725050122008398e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +388 1 1.5291398203624105e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +389 1 1.5857746285239813e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +390 1 1.6424094366855520e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +391 1 1.6990442448471228e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +392 1 1.7556790530086936e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +393 1 1.8123138611702643e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +394 1 1.8689486693318351e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +395 1 1.9255834774934058e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +396 1 1.9822182856549766e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +397 1 2.0388530938165474e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +398 1 2.0954879019781181e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +399 1 2.1521227101396889e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 +400 1 2.2087575183012596e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 +401 1 0.0000000000000000e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +402 1 1.1326961632314152e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +403 1 2.2653923264628304e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +404 1 3.3980884896942456e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +405 1 4.5307846529256608e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +406 1 5.6634808161570760e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +407 1 6.7961769793884912e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +408 1 7.9288731426199064e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +409 1 9.0615693058513216e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +410 1 1.0194265469082737e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +411 1 1.1326961632314152e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +412 1 1.2459657795545567e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +413 1 1.3592353958776982e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +414 1 1.4725050122008398e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +415 1 1.5857746285239813e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +416 1 1.6990442448471228e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +417 1 1.8123138611702643e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +418 1 1.9255834774934058e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +419 1 2.0388530938165474e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 +420 1 2.1521227101396889e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +281 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +282 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +283 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +284 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +285 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +286 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +287 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +288 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +289 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +290 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +291 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +292 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +293 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +294 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +296 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +297 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +298 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +299 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +300 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +301 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +302 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +303 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +305 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +306 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +307 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +308 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +309 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +310 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +311 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +312 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +313 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +314 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +315 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +317 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +318 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +319 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +320 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +321 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +322 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +323 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +324 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +325 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +326 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +327 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +328 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +329 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +330 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +331 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +332 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +333 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +336 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +337 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +338 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +339 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +340 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +341 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +342 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +343 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +344 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +345 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +346 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +349 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +350 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +353 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +354 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +355 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +356 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +357 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +360 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +361 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +362 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +363 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +364 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +366 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +367 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +368 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +369 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +370 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +372 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +373 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +374 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +375 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +376 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +377 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +378 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +380 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +381 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +384 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +385 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +386 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +389 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +390 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +392 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +393 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +396 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +397 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +398 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +399 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +400 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +401 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +402 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +403 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +404 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +405 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +406 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +407 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +408 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +409 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +410 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +411 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +412 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +413 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +414 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +415 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +416 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +417 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +418 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +419 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +420 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/SPIN/gneb_bfo/initial.iron_spin b/examples/SPIN/gneb_bfo/initial.iron_spin new file mode 100644 index 0000000000..1d28afe400 --- /dev/null +++ b/examples/SPIN/gneb_bfo/initial.iron_spin @@ -0,0 +1,82 @@ +LAMMPS data file via write_data, version 4 Jan 2019, timestep = 0 + +32 atoms +1 atom types + +0.0000000000000000e+00 1.1465999999999999e+01 xlo xhi +0.0000000000000000e+00 1.1465999999999999e+01 ylo yhi +0.0000000000000000e+00 2.8664999999999998e+00 zlo zhi + +Masses + +1 55.845 + +Atoms # spin + +1 1 2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +2 1 2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +3 1 2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +4 1 2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +5 1 2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +6 1 2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +7 1 2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +8 1 2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +9 1 2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +11 1 2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +13 1 2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +15 1 2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +10 1 2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +12 1 2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +14 1 2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +16 1 2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +17 1 2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +18 1 2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +19 1 2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +20 1 2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +21 1 2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +22 1 2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +23 1 2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +24 1 2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +25 1 2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +27 1 2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +29 1 2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +31 1 2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +26 1 2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +28 1 2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +30 1 2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +32 1 2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp new file mode 100644 index 0000000000..a96af45267 --- /dev/null +++ b/src/REPLICA/fix_neb_spin.cpp @@ -0,0 +1,1226 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author for: Emile Maras (CEA, France) + new options for inter-replica forces, first/last replica treatment +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +//#include "fix_neb.h" +#include "fix_neb_spin.h" +#include "universe.h" +#include "update.h" +#include "atom.h" +#include "domain.h" +#include "comm.h" +#include "modify.h" +#include "compute.h" +#include "group.h" +#include "memory.h" +#include "error.h" +#include "force.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathConst; + +enum{SINGLE_PROC_DIRECT,SINGLE_PROC_MAP,MULTI_PROC}; + +#define BUFSIZE 8 + +/* ---------------------------------------------------------------------- */ + +FixNEB_spin::FixNEB_spin(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), + id_pe(NULL), pe(NULL), nlenall(NULL), xprev(NULL), xnext(NULL), + fnext(NULL), + spprev(NULL), spnext(NULL), fmnext(NULL), + springF(NULL), tangent(NULL), + xsend(NULL), xrecv(NULL), fsend(NULL), frecv(NULL), + spsend(NULL), sprecv(NULL), fmsend(NULL), fmrecv(NULL), + tagsend(NULL), tagrecv(NULL), + xsendall(NULL), xrecvall(NULL), fsendall(NULL), frecvall(NULL), + spsendall(NULL), sprecvall(NULL), fmsendall(NULL), fmrecvall(NULL), + tagsendall(NULL), tagrecvall(NULL), counts(NULL), + displacements(NULL) +{ + + if (narg < 4) error->all(FLERR,"Illegal fix neb_spin command"); + + kspring = force->numeric(FLERR,arg[3]); + if (kspring <= 0.0) error->all(FLERR,"Illegal fix neb command"); + + // optional params + + NEBLongRange = false; // see if needed (comb. with pppm/spin?) + StandardNEB = true; // only option for now + PerpSpring = FreeEndIni = FreeEndFinal = false; + FreeEndFinalWithRespToEIni = FinalAndInterWithRespToEIni = false; + kspringPerp = 0.0; + kspringIni = 1.0; + kspringFinal = 1.0; + // only regular neb for now + SpinLattice = false; + + + + int iarg = 4; + while (iarg < narg) { + if (strcmp(arg[iarg],"lattice") == 0) + error->all(FLERR,"Illegal fix neb command"); + } + + /* + if (strcmp(arg[iarg],"parallel") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix neb command"); + if (strcmp(arg[iarg+1],"ideal") == 0) { + NEBLongRange = true; + StandardNEB = false; + } else if (strcmp(arg[iarg+1],"neigh") == 0) { + NEBLongRange = false; + StandardNEB = true; + } else error->all(FLERR,"Illegal fix neb command"); + iarg += 2; + + } else if (strcmp(arg[iarg],"perp") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix neb command"); + PerpSpring = true; + kspringPerp = force->numeric(FLERR,arg[iarg+1]); + if (kspringPerp == 0.0) PerpSpring = false; + if (kspringPerp < 0.0) error->all(FLERR,"Illegal fix neb command"); + iarg += 2; + + } else if (strcmp (arg[iarg],"end") == 0) { + if (iarg+3 > narg) error->all(FLERR,"Illegal fix neb command"); + if (strcmp(arg[iarg+1],"first") == 0) { + FreeEndIni = true; + kspringIni = force->numeric(FLERR,arg[iarg+2]); + } else if (strcmp(arg[iarg+1],"last") == 0) { + FreeEndFinal = true; + FinalAndInterWithRespToEIni = false; + FreeEndFinalWithRespToEIni = false; + kspringFinal = force->numeric(FLERR,arg[iarg+2]); + } else if (strcmp(arg[iarg+1],"last/efirst") == 0) { + FreeEndFinal = false; + FinalAndInterWithRespToEIni = false; + FreeEndFinalWithRespToEIni = true; + kspringFinal = force->numeric(FLERR,arg[iarg+2]); + } else if (strcmp(arg[iarg+1],"last/efirst/middle") == 0) { + FreeEndFinal = false; + FinalAndInterWithRespToEIni = true; + FreeEndFinalWithRespToEIni = true; + kspringFinal = force->numeric(FLERR,arg[iarg+2]); + } else error->all(FLERR,"Illegal fix neb command"); + + iarg += 3; + + } else error->all(FLERR,"Illegal fix neb command"); + } + */ + + // nreplica = number of partitions + // ireplica = which world I am in universe + // nprocs_universe = # of procs in all replicase + // procprev,procnext = root proc in adjacent replicas + + me = comm->me; + nprocs = comm->nprocs; + + nprocs_universe = universe->nprocs; + nreplica = universe->nworlds; + ireplica = universe->iworld; + + if (ireplica > 0) procprev = universe->root_proc[ireplica-1]; + else procprev = -1; + if (ireplica < nreplica-1) procnext = universe->root_proc[ireplica+1]; + else procnext = -1; + + uworld = universe->uworld; + int *iroots = new int[nreplica]; + MPI_Group uworldgroup,rootgroup; + if (NEBLongRange) { + for (int i=0; iroot_proc[i]; + MPI_Comm_group(uworld, &uworldgroup); + MPI_Group_incl(uworldgroup, nreplica, iroots, &rootgroup); + MPI_Comm_create(uworld, rootgroup, &rootworld); + } + delete [] iroots; + + // create a new compute pe style + // id = fix-ID + pe, compute group = all + + int n = strlen(id) + 4; + id_pe = new char[n]; + strcpy(id_pe,id); + strcat(id_pe,"_pe"); + + char **newarg = new char*[3]; + newarg[0] = id_pe; + newarg[1] = (char *) "all"; + newarg[2] = (char *) "pe"; + modify->add_compute(3,newarg); + delete [] newarg; + + // might need a test + // => check if pe does not compute mech potentials + + + // initialize local storage + + maxlocal = -1; + ntotal = -1; +} + +/* ---------------------------------------------------------------------- */ + +FixNEB_spin::~FixNEB_spin() +{ + modify->delete_compute(id_pe); + delete [] id_pe; + + memory->destroy(xprev); + memory->destroy(xnext); + memory->destroy(tangent); + memory->destroy(fnext); + // spin quantities + memory->destroy(spprev); + memory->destroy(spnext); + memory->destroy(fmnext); + memory->destroy(springF); + memory->destroy(xsend); + memory->destroy(xrecv); + memory->destroy(fsend); + memory->destroy(frecv); + // spin quantities + memory->destroy(spsend); + memory->destroy(sprecv); + memory->destroy(fmsend); + memory->destroy(fmrecv); + memory->destroy(tagsend); + memory->destroy(tagrecv); + + memory->destroy(xsendall); + memory->destroy(xrecvall); + memory->destroy(fsendall); + memory->destroy(frecvall); + // spin quantities + memory->destroy(spsendall); + memory->destroy(sprecvall); + memory->destroy(fmsendall); + memory->destroy(fmrecvall); + memory->destroy(tagsendall); + memory->destroy(tagrecvall); + + memory->destroy(counts); + memory->destroy(displacements); + + if (NEBLongRange) { + if (rootworld != MPI_COMM_NULL) MPI_Comm_free(&rootworld); + memory->destroy(nlenall); + } +} + +/* ---------------------------------------------------------------------- */ + +int FixNEB_spin::setmask() +{ + int mask = 0; + mask |= MIN_POST_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixNEB_spin::init() +{ + int icompute = modify->find_compute(id_pe); + if (icompute < 0) + error->all(FLERR,"Potential energy ID for fix neb does not exist"); + pe = modify->compute[icompute]; + + // turn off climbing mode, NEB command turns it on after init() + + rclimber = -1; + + // nebatoms = # of atoms in fix group = atoms with inter-replica forces + + bigint count = group->count(igroup); + if (count > MAXSMALLINT) error->all(FLERR,"Too many active NEB atoms"); + nebatoms = count; + + // comm mode for inter-replica exchange of coords + + if (nreplica == nprocs_universe && + nebatoms == atom->natoms && atom->sortfreq == 0) + cmode = SINGLE_PROC_DIRECT; + else if (nreplica == nprocs_universe) cmode = SINGLE_PROC_MAP; + else cmode = MULTI_PROC; + + // ntotal = total # of atoms in system, NEB atoms or not + + if (atom->natoms > MAXSMALLINT) error->all(FLERR,"Too many atoms for NEB"); + ntotal = atom->natoms; + + if (atom->nmax > maxlocal) reallocate(); + + if (MULTI_PROC && counts == NULL) { + memory->create(xsendall,ntotal,3,"neb:xsendall"); + memory->create(xrecvall,ntotal,3,"neb:xrecvall"); + memory->create(fsendall,ntotal,3,"neb:fsendall"); + memory->create(frecvall,ntotal,3,"neb:frecvall"); + memory->create(tagsendall,ntotal,"neb:tagsendall"); + memory->create(tagrecvall,ntotal,"neb:tagrecvall"); + // spin quantities + memory->create(spsendall,ntotal,3,"neb:xsendall"); + memory->create(sprecvall,ntotal,3,"neb:xrecvall"); + memory->create(fmsendall,ntotal,3,"neb:fsendall"); + memory->create(fmrecvall,ntotal,3,"neb:frecvall"); + memory->create(counts,nprocs,"neb:counts"); + memory->create(displacements,nprocs,"neb:displacements"); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixNEB_spin::min_setup(int vflag) +{ + min_post_force(vflag); + + // trigger potential energy computation on next timestep + + pe->addstep(update->ntimestep+1); +} + +/* ---------------------------------------------------------------------- */ + +void FixNEB_spin::min_post_force(int /*vflag*/) +{ + double vprev,vnext; + //double delxp,delyp,delzp,delxn,delyn,delzn; + // spin quantities + double delspxp,delspyp,delspzp; + double delspxn,delspyn,delspzn; + double templen; + double vIni=0.0; + + // local spin values for geo. dist. calc. + double spi[3],spj[3]; + + vprev = vnext = veng = pe->compute_scalar(); + + if (ireplica < nreplica-1 && me == 0) + MPI_Send(&veng,1,MPI_DOUBLE,procnext,0,uworld); + if (ireplica > 0 && me == 0) + MPI_Recv(&vprev,1,MPI_DOUBLE,procprev,0,uworld,MPI_STATUS_IGNORE); + + if (ireplica > 0 && me == 0) + MPI_Send(&veng,1,MPI_DOUBLE,procprev,0,uworld); + if (ireplica < nreplica-1 && me == 0) + MPI_Recv(&vnext,1,MPI_DOUBLE,procnext,0,uworld,MPI_STATUS_IGNORE); + + if (cmode == MULTI_PROC) { + MPI_Bcast(&vprev,1,MPI_DOUBLE,0,world); + MPI_Bcast(&vnext,1,MPI_DOUBLE,0,world); + } + + if (FreeEndFinal && ireplica == nreplica-1 && (update->ntimestep == 0)) EFinalIni = veng; + + if (ireplica == 0) vIni=veng; + + if (FreeEndFinalWithRespToEIni) { + if (cmode == SINGLE_PROC_DIRECT || cmode == SINGLE_PROC_MAP) { + int procFirst; + procFirst=universe->root_proc[0]; + MPI_Bcast(&vIni,1,MPI_DOUBLE,procFirst,uworld); + } else { + if (me == 0) + MPI_Bcast(&vIni,1,MPI_DOUBLE,0,rootworld); + + MPI_Bcast(&vIni,1,MPI_DOUBLE,0,world); + } + } + + if (FreeEndIni && ireplica == 0 && (update->ntimestep == 0)) EIniIni = veng; + /* if (FreeEndIni && ireplica == 0) { + // if (me == 0 ) + if (update->ntimestep == 0) { + EIniIni = veng; + // if (cmode == MULTI_PROC) + // MPI_Bcast(&EIniIni,1,MPI_DOUBLE,0,world); + } + }*/ + + // communicate atoms to/from adjacent replicas to fill xprev,xnext + + inter_replica_comm(); + + // trigger potential energy computation on next timestep + + pe->addstep(update->ntimestep+1); + + double **x = atom->x; + // spin quantities + double **sp = atom->sp; + int *mask = atom->mask; + double dot = 0.0; + double prefactor = 0.0; + + double **f = atom->f; + // spin quantities + double **fm = atom->fm; + int nlocal = atom->nlocal; + + //calculating separation between images + + plen = 0.0; + nlen = 0.0; + double tlen = 0.0; + double gradnextlen = 0.0; + + dotgrad = gradlen = dotpath = dottangrad = 0.0; + + + // computation of the tangent vector + + // final replica + if (ireplica == nreplica-1) { + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + // tangent vector + delspxp = sp[i][0] - spprev[i][0]; + delspyp = sp[i][1] - spprev[i][1]; + delspzp = sp[i][2] - spprev[i][2]; + domain->minimum_image(delspxp,delspyp,delspzp); // check what it does + delsqp = delspxp*delspxp+delspyp*delspyp+delspzp*delspzp; + + // calc. geodesic length + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spprev[i][0]; + spj[1]=spprev[i][1]; + spj[2]=spprev[i][2]; + templen = geodesic_distance(spi, spj); + plen += templen*templen; + dottangrad += delxp*fm[i][0]+ delyp*fm[i][1]+delzp*fm[i][2]; + gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; + + //plen += delxp*delxp + delyp*delyp + delzp*delzp; + //dottangrad += delxp* f[i][0]+ delyp*f[i][1]+delzp*f[i][2]; + //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; + + // final replica, no need for the tangent vector + // (unless FreeEnd option) + if (FreeEndFinal||FreeEndFinalWithRespToEIni) { + error->all(FLERR,"Free End option not yet active"); + tangent[i][0]=delspxp; + tangent[i][1]=delspyp; + tangent[i][2]=delspzp; + // if needed, tlen has to be modified + tlen += tangent[i][0]*tangent[i][0] + + tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + + fm[i][2]*tangent[i][2]; + } + + + //delxp = x[i][0] - xprev[i][0]; + //delyp = x[i][1] - xprev[i][1]; + //delzp = x[i][2] - xprev[i][2]; + //domain->minimum_image(delxp,delyp,delzp); + + //plen += delxp*delxp + delyp*delyp + delzp*delzp; + //dottangrad += delxp* f[i][0]+ delyp*f[i][1]+delzp*f[i][2]; + //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; + //if (FreeEndFinal||FreeEndFinalWithRespToEIni) { + // tangent[i][0]=delxp; + // tangent[i][1]=delyp; + // tangent[i][2]=delzp; + // tlen += tangent[i][0]*tangent[i][0] + + // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + // dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + + // f[i][2]*tangent[i][2]; + //} + } + + // initial replica + } else if (ireplica == 0) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + + // tangent vector + delspxn = spnext[i][0]- sp[i][0]; + delspyn = spnext[i][1]- sp[i][1]; + delspzn = spnext[i][2]- sp[i][2]; + domain->minimum_image(delspxn,delspyn,delspzn); // check what it does + delsqn = delspxn*delspxn+delspyn*delspyn+delspzn*delspzn; + + // calc. geodesic length + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spnext[i][0]; + spj[1]=spnext[i][1]; + spj[2]=spnext[i][2]; + templen = geodesic_distance(spi, spj); + nlen += templen*templen; + dottangrad += delspxn*fm[i][0] + delspyn*fm[i][1] + delspzp*fm[i][2]; + gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; + if (FreeEndIni) { + error->all(FLERR,"Free End option not yet active"); + tangent[i][0]=delxn; + tangent[i][1]=delyn; + tangent[i][2]=delzn; + // if needed, tlen has to be modified + tlen += tangent[i][0]*tangent[i][0] + + tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + + f[i][2]*tangent[i][2]; + } + + //delxn = xnext[i][0] - x[i][0]; + //delyn = xnext[i][1] - x[i][1]; + //delzn = xnext[i][2] - x[i][2]; + //domain->minimum_image(delxn,delyn,delzn); + //nlen += delxn*delxn + delyn*delyn + delzn*delzn; + //gradnextlen += fnext[i][0]*fnext[i][0] + // + fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2]; + //dotgrad += f[i][0]*fnext[i][0] + // + f[i][1]*fnext[i][1] + f[i][2]*fnext[i][2]; + //dottangrad += delxn*f[i][0]+ delyn*f[i][1] + delzn*f[i][2]; + //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; + //if (FreeEndIni) { + // tangent[i][0]=delxn; + // tangent[i][1]=delyn; + // tangent[i][2]=delzn; + // tlen += tangent[i][0]*tangent[i][0] + + // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + // dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + + // f[i][2]*tangent[i][2]; + //} + } + + // in-between replica + } else { + + // not the first or last replica + + double vmax = MAX(fabs(vnext-veng),fabs(vprev-veng)); + double vmin = MIN(fabs(vnext-veng),fabs(vprev-veng)); + + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + delspxp = spx[i][0] - spxprev[i][0]; + delspyp = spx[i][1] - spxprev[i][1]; + delspzp = spx[i][2] - spxprev[i][2]; + domain->minimum_image(delspxp,delspyp,delspzp); + + // calc. geodesic length + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spprev[i][0]; + spj[1]=spprev[i][1]; + spj[2]=spprev[i][2]; + templen = geodesic_distance(spi, spj); + plen += templen*templen; + + delspxn = spxnext[i][0] - spx[i][0]; + delspyn = spxnext[i][1] - spx[i][1]; + delspzn = spxnext[i][2] - spx[i][2]; + domain->minimum_image(delspxn,delspyn,delspzn); + + if (vnext > veng && veng > vprev) { + tangent[i][0] = delspxn; + tangent[i][1] = delspyn; + tangent[i][2] = delspzn; + } else if (vnext < veng && veng < vprev) { + tangent[i][0] = delspxp; + tangent[i][1] = delspyp; + tangent[i][2] = delspzp; + } else { + if (vnext > vprev) { + tangent[i][0] = vmax*delspxn + vmin*delspxp; + tangent[i][1] = vmax*delspyn + vmin*delspyp; + tangent[i][2] = vmax*delspzn + vmin*delspzp; + } else if (vnext < vprev) { + tangent[i][0] = vmin*delspxn + vmax*delspxp; + tangent[i][1] = vmin*delspyn + vmax*delspyp; + tangent[i][2] = vmin*delspzn + vmax*delspzp; + } else { // vnext == vprev, e.g. for potentials that do not compute an energy + tangent[i][0] = delspxn + delspxp; + tangent[i][1] = delspyn + delspyp; + tangent[i][2] = delspzn + delspzp; + } + } + + // calc. geodesic length + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spnext[i][0]; + spj[1]=spnext[i][1]; + spj[2]=spnext[i][2]; + templen = geodesic_distance(spi, spj); + nlen += templen*templen; + //nlen += delxn*delxn + delyn*delyn + delzn*delzn; + tlen += tangent[i][0]*tangent[i][0] + + tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; + dotpath += delspxp*delspxn + delspyp*delspyn + delspzp*delspzn; + dottangrad += tangent[i][0]*fm[i][0] + + tangent[i][1]*fm[i][1] + tangent[i][2]*fm[i][2]; + gradnextlen += fnext[i][0]*fnext[i][0] + + fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2]; + dotgrad += fm[i][0]*fnext[i][0] + fm[i][1]*fnext[i][1] + + fm[i][2]*fnext[i][2]; + + // is this a perpandicular spring force? + if (kspringPerp != 0.0) + error->all(FLERR,"Perpendicular nudging force not yet active"); + //springF[i][0] = kspringPerp*(delxn-delxp); + //springF[i][1] = kspringPerp*(delyn-delyp); + //springF[i][2] = kspringPerp*(delzn-delzp); + + //delxp = x[i][0] - xprev[i][0]; + //delyp = x[i][1] - xprev[i][1]; + //delzp = x[i][2] - xprev[i][2]; + //domain->minimum_image(delxp,delyp,delzp); + //plen += delxp*delxp + delyp*delyp + delzp*delzp; + + //delxn = xnext[i][0] - x[i][0]; + //delyn = xnext[i][1] - x[i][1]; + //delzn = xnext[i][2] - x[i][2]; + //domain->minimum_image(delxn,delyn,delzn); + + //if (vnext > veng && veng > vprev) { + // tangent[i][0] = delxn; + // tangent[i][1] = delyn; + // tangent[i][2] = delzn; + //} else if (vnext < veng && veng < vprev) { + // tangent[i][0] = delxp; + // tangent[i][1] = delyp; + // tangent[i][2] = delzp; + //} else { + // if (vnext > vprev) { + // tangent[i][0] = vmax*delxn + vmin*delxp; + // tangent[i][1] = vmax*delyn + vmin*delyp; + // tangent[i][2] = vmax*delzn + vmin*delzp; + // } else if (vnext < vprev) { + // tangent[i][0] = vmin*delxn + vmax*delxp; + // tangent[i][1] = vmin*delyn + vmax*delyp; + // tangent[i][2] = vmin*delzn + vmax*delzp; + // } else { // vnext == vprev, e.g. for potentials that do not compute an energy + // tangent[i][0] = delxn + delxp; + // tangent[i][1] = delyn + delyp; + // tangent[i][2] = delzn + delzp; + // } + //} + + //nlen += delxn*delxn + delyn*delyn + delzn*delzn; + //tlen += tangent[i][0]*tangent[i][0] + + // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; + //dotpath += delxp*delxn + delyp*delyn + delzp*delzn; + //dottangrad += tangent[i][0]*f[i][0] + + // tangent[i][1]*f[i][1] + tangent[i][2]*f[i][2]; + //gradnextlen += fnext[i][0]*fnext[i][0] + + // fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2]; + //dotgrad += f[i][0]*fnext[i][0] + f[i][1]*fnext[i][1] + + // f[i][2]*fnext[i][2]; + + //springF[i][0] = kspringPerp*(delxn-delxp); + //springF[i][1] = kspringPerp*(delyn-delyp); + //springF[i][2] = kspringPerp*(delzn-delzp); + } + } + + + // MPI reduce if more than one proc for world + + double bufin[BUFSIZE], bufout[BUFSIZE]; + bufin[0] = nlen; + bufin[1] = plen; + bufin[2] = tlen; + bufin[3] = gradlen; + bufin[4] = gradnextlen; + bufin[5] = dotpath; + bufin[6] = dottangrad; + bufin[7] = dotgrad; + MPI_Allreduce(bufin,bufout,BUFSIZE,MPI_DOUBLE,MPI_SUM,world); + nlen = sqrt(bufout[0]); + plen = sqrt(bufout[1]); + tlen = sqrt(bufout[2]); + gradlen = sqrt(bufout[3]); + gradnextlen = sqrt(bufout[4]); + dotpath = bufout[5]; + dottangrad = bufout[6]; + dotgrad = bufout[7]; + + // normalize tangent vector + + if (tlen > 0.0) { + double tleninv = 1.0/tlen; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tangent[i][0] *= tleninv; + tangent[i][1] *= tleninv; + tangent[i][2] *= tleninv; + } + } + +//////////////////////////////////////////////////////// + + // first or last replica has no change to forces, just return + + if (ireplica > 0 && ireplica < nreplica-1) + dottangrad = dottangrad/(tlen*gradlen); + if (ireplica == 0) + dottangrad = dottangrad/(nlen*gradlen); + if (ireplica == nreplica-1) + dottangrad = dottangrad/(plen*gradlen); + if (ireplica < nreplica-1) + dotgrad = dotgrad /(gradlen*gradnextlen); + + if (FreeEndIni && ireplica == 0) { + if (tlen > 0.0) { + double dotall; + MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); + dot=dotall/tlen; + + if (dot<0) prefactor = -dot - kspringIni*(veng-EIniIni); + else prefactor = -dot + kspringIni*(veng-EIniIni); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + f[i][0] += prefactor *tangent[i][0]; + f[i][1] += prefactor *tangent[i][1]; + f[i][2] += prefactor *tangent[i][2]; + } + } + } + + if (FreeEndFinal && ireplica == nreplica -1) { + if (tlen > 0.0) { + double dotall; + MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); + dot=dotall/tlen; + + if (veng 0.0) { + double dotall; + MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); + dot=dotall/tlen; + if (veng0) { + for (int i = 0; i < rclimber; i++) + lenuntilClimber += nlenall[i]; + double meanDistBeforeClimber = lenuntilClimber/rclimber; + double meanDistAfterClimber = + (lentot-lenuntilClimber)/(nreplica-rclimber-1); + if (ireplicanmax > maxlocal) reallocate(); + + double **x = atom->x; + double **f = atom->f; + // spin quantities + double **sp = atom->sp; + double **fm = atom->fm; + tagint *tag = atom->tag; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + // ----------------------------------------------------- + // 3 cases: two for single proc per replica + // one for multiple procs per replica + // ----------------------------------------------------- + + + // case 1 => to be done + + // single proc per replica + // all atoms are NEB atoms and no atom sorting + // direct comm of x -> xprev and x -> xnext + + if (cmode == SINGLE_PROC_DIRECT) { + if (ireplica > 0) + MPI_Irecv(xprev[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld,&request); + if (ireplica < nreplica-1) + MPI_Send(x[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld); + if (ireplica > 0) MPI_Wait(&request,MPI_STATUS_IGNORE); + if (ireplica < nreplica-1) + MPI_Irecv(xnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + if (ireplica > 0) + MPI_Send(x[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + if (ireplica < nreplica-1) MPI_Wait(&request,MPI_STATUS_IGNORE); + + if (ireplica < nreplica-1) + MPI_Irecv(fnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + if (ireplica > 0) + MPI_Send(f[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + if (ireplica < nreplica-1) MPI_Wait(&request,MPI_STATUS_IGNORE); + + return; + } + + // single proc per replica + // but only some atoms are NEB atoms or atom sorting is enabled + // send atom IDs and coords of only NEB atoms to prev/next proc + // recv procs use atom->map() to match received coords to owned atoms + + if (cmode == SINGLE_PROC_MAP) { + m = 0; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tagsend[m] = tag[i]; + xsend[m][0] = x[i][0]; + xsend[m][1] = x[i][1]; + xsend[m][2] = x[i][2]; + fsend[m][0] = f[i][0]; + fsend[m][1] = f[i][1]; + fsend[m][2] = f[i][2]; + // spin quantities + spsend[m][0] = sp[i][0]; + spsend[m][1] = sp[i][1]; + spsend[m][2] = sp[i][2]; + fmsend[m][0] = fm[i][0]; + fmsend[m][1] = fm[i][1]; + fmsend[m][2] = fm[i][2]; + m++; + } + + if (ireplica > 0) { + MPI_Irecv(xrecv[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + // spin quantities + MPI_Irecv(sprecv[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + MPI_Irecv(tagrecv,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld,&requests[1]); + } + if (ireplica < nreplica-1) { + MPI_Send(xsend[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + // spin quantities + MPI_Send(spsend[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(tagsend,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld); + } + + if (ireplica > 0) { + MPI_Waitall(2,requests,statuses); + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecv[i]); + xprev[m][0] = xrecv[i][0]; + xprev[m][1] = xrecv[i][1]; + xprev[m][2] = xrecv[i][2]; + // spin quantities + spprev[m][0] = sprecv[i][0]; + spprev[m][1] = sprecv[i][1]; + spprev[m][2] = sprecv[i][2]; + } + } + if (ireplica < nreplica-1) { + MPI_Irecv(xrecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(frecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + // spin quantities + MPI_Irecv(sprecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(fmrecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(tagrecv,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld,&requests[1]); + } + if (ireplica > 0) { + MPI_Send(xsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + // spin quantities + MPI_Send(spsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fmsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(tagsend,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld); + } + + if (ireplica < nreplica-1) { + MPI_Waitall(2,requests,statuses); + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecv[i]); + xnext[m][0] = xrecv[i][0]; + xnext[m][1] = xrecv[i][1]; + xnext[m][2] = xrecv[i][2]; + fnext[m][0] = frecv[i][0]; + fnext[m][1] = frecv[i][1]; + fnext[m][2] = frecv[i][2]; + // spin quantities + spnext[m][0] = sprecv[i][0]; + spnext[m][1] = sprecv[i][1]; + spnext[m][2] = sprecv[i][2]; + fmnext[m][0] = fmrecv[i][0]; + fmnext[m][1] = fmrecv[i][1]; + fmnext[m][2] = fmrecv[i][2]; + } + } + + return; + } + + // multiple procs per replica + // MPI_Gather all coords and atom IDs to root proc of each replica + // send to root of adjacent replicas + // bcast within each replica + // each proc extracts info for atoms it owns via atom->map() + + m = 0; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tagsend[m] = tag[i]; + xsend[m][0] = x[i][0]; + xsend[m][1] = x[i][1]; + xsend[m][2] = x[i][2]; + fsend[m][0] = f[i][0]; + fsend[m][1] = f[i][1]; + fsend[m][2] = f[i][2]; + // spin quantities + spsend[m][0] = sp[i][0]; + spsend[m][1] = sp[i][1]; + spsend[m][2] = sp[i][2]; + fmsend[m][0] = fm[i][0]; + fmsend[m][1] = fm[i][1]; + fmsend[m][2] = fm[i][2]; + m++; + } + + MPI_Gather(&m,1,MPI_INT,counts,1,MPI_INT,0,world); + displacements[0] = 0; + for (i = 0; i < nprocs-1; i++) + displacements[i+1] = displacements[i] + counts[i]; + MPI_Gatherv(tagsend,m,MPI_LMP_TAGINT, + tagsendall,counts,displacements,MPI_LMP_TAGINT,0,world); + for (i = 0; i < nprocs; i++) counts[i] *= 3; + for (i = 0; i < nprocs-1; i++) + displacements[i+1] = displacements[i] + counts[i]; + if (xsend) { + MPI_Gatherv(xsend[0],3*m,MPI_DOUBLE, + xsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(fsend[0],3*m,MPI_DOUBLE, + fsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } else { + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + xsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + fsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } + // spin quantities + if (spsend) { + MPI_Gatherv(spsend[0],3*m,MPI_DOUBLE, + spsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(fmsend[0],3*m,MPI_DOUBLE, + fmsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } else { + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + xsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + fmsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } + + if (ireplica > 0 && me == 0) { + MPI_Irecv(xrecvall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + // spin quantities + MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + MPI_Irecv(tagrecvall,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld, + &requests[1]); + } + if (ireplica < nreplica-1 && me == 0) { + MPI_Send(xsendall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + // spin quantities + MPI_Send(spsendall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(tagsendall,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld); + } + + if (ireplica > 0) { + if (me == 0) MPI_Waitall(2,requests,statuses); + + MPI_Bcast(tagrecvall,nebatoms,MPI_INT,0,world); + MPI_Bcast(xrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + // spin quantities + MPI_Bcast(sprecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecvall[i]); + if (m < 0 || m >= nlocal) continue; + xprev[m][0] = xrecvall[i][0]; + xprev[m][1] = xrecvall[i][1]; + xprev[m][2] = xrecvall[i][2]; + // spin quantities + spprev[m][0] = sprecvall[i][0]; + spprev[m][1] = sprecvall[i][1]; + spprev[m][2] = sprecvall[i][2]; + } + } + + if (ireplica < nreplica-1 && me == 0) { + MPI_Irecv(xrecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(frecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + // spin quantities + MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(tagrecvall,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld, + &requests[1]); + } + if (ireplica > 0 && me == 0) { + MPI_Send(xsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + // spin quantities + MPI_Send(spsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fmsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(tagsendall,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld); + } + + if (ireplica < nreplica-1) { + if (me == 0) MPI_Waitall(2,requests,statuses); + + MPI_Bcast(tagrecvall,nebatoms,MPI_INT,0,world); + MPI_Bcast(xrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + MPI_Bcast(frecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + // spin quantities + MPI_Bcast(sprecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + MPI_Bcast(fmrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecvall[i]); + if (m < 0 || m >= nlocal) continue; + xnext[m][0] = xrecvall[i][0]; + xnext[m][1] = xrecvall[i][1]; + xnext[m][2] = xrecvall[i][2]; + fnext[m][0] = frecvall[i][0]; + fnext[m][1] = frecvall[i][1]; + fnext[m][2] = frecvall[i][2]; + // spin quantities + spnext[m][0] = sprecvall[i][0]; + spnext[m][1] = sprecvall[i][1]; + spnext[m][2] = sprecvall[i][2]; + fmnext[m][0] = fmrecvall[i][0]; + fmnext[m][1] = fmrecvall[i][1]; + fmnext[m][2] = fmrecvall[i][2]; + } + } +} + +/* ---------------------------------------------------------------------- + reallocate xprev,xnext,tangent arrays if necessary + reallocate communication arrays if necessary +------------------------------------------------------------------------- */ + +void FixNEB_spin::reallocate() +{ + maxlocal = atom->nmax; + + memory->destroy(xprev); + memory->destroy(xnext); + memory->destroy(tangent); + memory->destroy(fnext); + memory->destroy(springF); + // spin quantities + memory->destroy(spprev); + memory->destroy(spnext); + memory->destroy(fmnext); + + memory->create(xprev,maxlocal,3,"neb:xprev"); + memory->create(xnext,maxlocal,3,"neb:xnext"); + memory->create(tangent,maxlocal,3,"neb:tangent"); + memory->create(fnext,maxlocal,3,"neb:fnext"); + memory->create(springF,maxlocal,3,"neb:springF"); + // spin quantities + memory->create(spprev,maxlocal,3,"neb:xprev"); + memory->create(spnext,maxlocal,3,"neb:xnext"); + memory->create(fmnext,maxlocal,3,"neb:fnext"); + + if (cmode != SINGLE_PROC_DIRECT) { + memory->destroy(xsend); + memory->destroy(fsend); + memory->destroy(xrecv); + memory->destroy(frecv); + // spin quantities + memory->destroy(spsend); + memory->destroy(fmsend); + memory->destroy(sprecv); + memory->destroy(fmrecv); + memory->destroy(tagsend); + memory->destroy(tagrecv); + memory->create(xsend,maxlocal,3,"neb:xsend"); + memory->create(fsend,maxlocal,3,"neb:fsend"); + memory->create(xrecv,maxlocal,3,"neb:xrecv"); + memory->create(frecv,maxlocal,3,"neb:frecv"); + // spin quantities + memory->create(spsend,maxlocal,3,"neb:xsend"); + memory->create(fmsend,maxlocal,3,"neb:fsend"); + memory->create(sprecv,maxlocal,3,"neb:xrecv"); + memory->create(fmrecv,maxlocal,3,"neb:frecv"); + memory->create(tagsend,maxlocal,"neb:tagsend"); + memory->create(tagrecv,maxlocal,"neb:tagrecv"); + } + + if (NEBLongRange) { + memory->destroy(nlenall); + memory->create(nlenall,nreplica,"neb:nlenall"); + } +} diff --git a/src/REPLICA/fix_neb_spin.h b/src/REPLICA/fix_neb_spin.h new file mode 100644 index 0000000000..e3bdd6889d --- /dev/null +++ b/src/REPLICA/fix_neb_spin.h @@ -0,0 +1,115 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(neb,FixNEB) +FixStyle(neb_spin,FixNEB_spin) + +#else + +#ifndef LMP_FIX_NEB_SPIN_H +#define LMP_FIX_NEB_SPIN_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixNEB_spin : public Fix { + public: + double veng,plen,nlen,dotpath,dottangrad,gradlen,dotgrad; + int rclimber; + + FixNEB_spin(class LAMMPS *, int, char **); + ~FixNEB_spin(); + int setmask(); + void init(); + void min_setup(int); + void min_post_force(int); + + private: + int me,nprocs,nprocs_universe; + double kspring,kspringIni,kspringFinal,kspringPerp,EIniIni,EFinalIni; + bool StandardNEB,NEBLongRange,PerpSpring,FreeEndIni,FreeEndFinal; + bool FreeEndFinalWithRespToEIni,FinalAndInterWithRespToEIni; + bool SpinLattice; + int ireplica,nreplica; + int procnext,procprev; + int cmode; + MPI_Comm uworld; + MPI_Comm rootworld; + + + char *id_pe; + class Compute *pe; + + int nebatoms; + int ntotal; // total # of atoms, NEB or not + int maxlocal; // size of xprev,xnext,tangent arrays + double *nlenall; + double **xprev,**xnext,**fnext; + // spin quantities + double **spprev,**spnext,**fmnext; + double **springF; + double **tangent; + double **xsend,**xrecv; // coords to send/recv to/from other replica + double **fsend,**frecv; // coords to send/recv to/from other replica + // spin quantities + double **spsend,**sprecv; // sp to send/recv to/from other replica + double **fmsend,**fmrecv; // fm to send/recv to/from other replica + tagint *tagsend,*tagrecv; // ditto for atom IDs + + // info gathered from all procs in my replica + double **xsendall,**xrecvall; // coords to send/recv to/from other replica + double **fsendall,**frecvall; // force to send/recv to/from other replica + // spin quantities + double **spsendall,**sprecvall; // sp to send/recv to/from other replica + double **fmsendall,**fmrecvall; // fm to send/recv to/from other replica + tagint *tagsendall,*tagrecvall; // ditto for atom IDs + + int *counts,*displacements; // used for MPI_Gather + + void inter_replica_comm(); + void reallocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Potential energy ID for fix neb does not exist + +Self-explanatory. + +E: Too many active NEB atoms + +UNDOCUMENTED + +E: Too many atoms for NEB + +UNDOCUMENTED + +U: Atom count changed in fix neb + +This is not allowed in a NEB calculation. + +*/ diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp new file mode 100644 index 0000000000..7860553532 --- /dev/null +++ b/src/REPLICA/neb_spin.cpp @@ -0,0 +1,722 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +// lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h +// due to OpenMPI bug which sets INT64_MAX via its mpi.h +// before lmptype.h can set flags to insure it is done correctly + +#include "lmptype.h" +#include +#include +#include +#include +//#include "neb.h" +#include "neb_spin.h" +#include "universe.h" +#include "atom.h" +#include "update.h" +#include "domain.h" +#include "comm.h" +#include "min.h" +#include "modify.h" +#include "fix.h" +#include "fix_neb.h" +#include "output.h" +#include "thermo.h" +#include "finish.h" +#include "timer.h" +#include "memory.h" +#include "error.h" +#include "force.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define MAXLINE 256 +#define CHUNK 1024 +//#define ATTRIBUTE_PERLINE 4 +// 8 attributes: tag number, coords, spin norm, spin dir. +#define ATTRIBUTE_PERLINE 8 + +/* ---------------------------------------------------------------------- */ + +NEB_spin::NEB_spin(LAMMPS *lmp) : Pointers(lmp) {} + +/* ---------------------------------------------------------------------- + internal NEB_spin constructor, called from TAD +------------------------------------------------------------------------- */ + +NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, + int n2steps_in, int nevery_in, double *buf_init, double *buf_final) + : Pointers(lmp) +{ + double delx,dely,delz; + + etol = etol_in; + ftol = ftol_in; + n1steps = n1steps_in; + n2steps = n2steps_in; + nevery = nevery_in; + + // replica info + + nreplica = universe->nworlds; + ireplica = universe->iworld; + me_universe = universe->me; + uworld = universe->uworld; + MPI_Comm_rank(world,&me); + + // generate linear interpolate replica + + double fraction = ireplica/(nreplica-1.0); + + double **x = atom->x; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + // modif interp. + int ii = 0; + for (int i = 0; i < nlocal; i++) { + delx = buf_final[ii] - buf_init[ii]; + dely = buf_final[ii+1] - buf_init[ii+1]; + delz = buf_final[ii+2] - buf_init[ii+2]; + domain->minimum_image(delx,dely,delz); + x[i][0] = buf_init[ii] + fraction*delx; + x[i][1] = buf_init[ii+1] + fraction*dely; + x[i][2] = buf_init[ii+2] + fraction*delz; + ii += 3; + } +} + +/* ---------------------------------------------------------------------- */ + +NEB_spin::~NEB_spin() +{ + MPI_Comm_free(&roots); + memory->destroy(all); + delete [] rdist; +} + +/* ---------------------------------------------------------------------- + perform NEB_spin on multiple replicas +------------------------------------------------------------------------- */ + +void NEB_spin::command(int narg, char **arg) +{ + if (domain->box_exist == 0) + error->all(FLERR,"NEB_spin command before simulation box is defined"); + + if (narg < 6) error->universe_all(FLERR,"Illegal NEB_spin command"); + + etol = force->numeric(FLERR,arg[0]); + ftol = force->numeric(FLERR,arg[1]); + n1steps = force->inumeric(FLERR,arg[2]); + n2steps = force->inumeric(FLERR,arg[3]); + nevery = force->inumeric(FLERR,arg[4]); + + // error checks + + if (etol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); + if (ftol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); + if (nevery <= 0) error->universe_all(FLERR,"Illegal NEB_spin command"); + if (n1steps % nevery || n2steps % nevery) + error->universe_all(FLERR,"Illegal NEB_spin command"); + + // replica info + + nreplica = universe->nworlds; + ireplica = universe->iworld; + me_universe = universe->me; + uworld = universe->uworld; + MPI_Comm_rank(world,&me); + + // error checks + + if (nreplica == 1) error->all(FLERR,"Cannot use NEB_spin with a single replica"); + if (atom->map_style == 0) + error->all(FLERR,"Cannot use NEB_spin unless atom map exists"); + + // process file-style setting to setup initial configs for all replicas + + if (strcmp(arg[5],"final") == 0) { + if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB_spin command"); + infile = arg[6]; + readfile(infile,0); + } else if (strcmp(arg[5],"each") == 0) { + if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB_spin command"); + infile = arg[6]; + readfile(infile,1); + } else if (strcmp(arg[5],"none") == 0) { + if (narg != 6 && narg !=7) error->universe_all(FLERR,"Illegal NEB_spin command"); + } else error->universe_all(FLERR,"Illegal NEB_spin command"); + + verbose=false; + if (strcmp(arg[narg-1],"verbose") == 0) verbose=true; + // run the NEB_spin calculation + + run(); +} + +/* ---------------------------------------------------------------------- + run NEB_spin on multiple replicas +------------------------------------------------------------------------- */ + +void NEB_spin::run() +{ + // create MPI communicator for root proc from each world + + int color; + if (me == 0) color = 0; + else color = 1; + MPI_Comm_split(uworld,color,0,&roots); + + int ineb; + for (ineb = 0; ineb < modify->nfix; ineb++) + if (strcmp(modify->fix[ineb]->style,"neb_spin") == 0) break; + if (ineb == modify->nfix) error->all(FLERR,"NEB_spin requires use of fix neb_spin"); + //int ineb; + //for (ineb = 0; ineb < modify->nfix; ineb++) + // if (strcmp(modify->fix[ineb]->style,"neb") == 0) break; + //if (ineb == modify->nfix) error->all(FLERR,"NEB_spin requires use of fix neb"); + + //fneb = (FixNEB_spin *) modify->fix[ineb]; + fneb_spin = (FixNEB_spin *) modify->fix[ineb]; + if (verbose) numall =7; + else numall = 4; + memory->create(all,nreplica,numall,"neb:all"); + rdist = new double[nreplica]; + + // initialize LAMMPS + + update->whichflag = 2; + update->etol = etol; + update->ftol = ftol; + update->multireplica = 1; + + lmp->init(); + + if (update->minimize->searchflag) + error->all(FLERR,"NEB_spin requires damped dynamics minimizer"); + + // setup regular NEB_spin minimization + FILE *uscreen = universe->uscreen; + FILE *ulogfile = universe->ulogfile; + + if (me_universe == 0 && uscreen) + fprintf(uscreen,"Setting up regular NEB_spin ...\n"); + + update->beginstep = update->firststep = update->ntimestep; + update->endstep = update->laststep = update->firststep + n1steps; + update->nsteps = n1steps; + update->max_eval = n1steps; + if (update->laststep < 0) + error->all(FLERR,"Too many timesteps for NEB_spin"); + + update->minimize->setup(); + + if (me_universe == 0) { + if (uscreen) { + if (verbose) { + fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " + "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " + "... ReplicaForceN MaxAtomForceN\n"); + } else { + fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + "RDN PEN\n"); + } + } + + if (ulogfile) { + if (verbose) { + fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " + "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " + "... ReplicaForceN MaxAtomForceN\n"); + } else { + fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + "RDN PEN\n"); + } + } + } + print_status(); + + // perform regular NEB_spin for n1steps or until replicas converge + // retrieve PE values from fix NEB_spin and print every nevery iterations + // break out of while loop early if converged + // damped dynamic min styles insure all replicas converge together + + timer->init(); + timer->barrier_start(); + + while (update->minimize->niter < n1steps) { + update->minimize->run(nevery); + print_status(); + if (update->minimize->stop_condition) break; + } + + timer->barrier_stop(); + + update->minimize->cleanup(); + + Finish finish(lmp); + finish.end(1); + + // switch fix NEB_spin to climbing mode + // top = replica that becomes hill climber + + double vmax = all[0][0]; + int top = 0; + for (int m = 1; m < nreplica; m++) + if (vmax < all[m][0]) { + vmax = all[m][0]; + top = m; + } + + // setup climbing NEB_spin minimization + // must reinitialize minimizer so it re-creates its fix MINIMIZE + + if (me_universe == 0 && uscreen) + fprintf(uscreen,"Setting up climbing ...\n"); + + if (me_universe == 0) { + if (uscreen) + fprintf(uscreen,"Climbing replica = %d\n",top+1); + if (ulogfile) + fprintf(ulogfile,"Climbing replica = %d\n",top+1); + } + + update->beginstep = update->firststep = update->ntimestep; + update->endstep = update->laststep = update->firststep + n2steps; + update->nsteps = n2steps; + update->max_eval = n2steps; + if (update->laststep < 0) + error->all(FLERR,"Too many timesteps"); + + update->minimize->init(); + //fneb->rclimber = top; + fneb_spin->rclimber = top; + update->minimize->setup(); + + if (me_universe == 0) { + if (uscreen) { + if (verbose) { + fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "pathangle1 angletangrad1 anglegrad1 gradV1 " + "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " + "... ReplicaForceN MaxAtomForceN\n"); + } else { + fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc " + "EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN\n"); + } + } + if (ulogfile) { + if (verbose) { + fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "pathangle1 angletangrad1 anglegrad1 gradV1 " + "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " + "... ReplicaForceN MaxAtomForceN\n"); + } else { + fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + "GradV0 GradV1 GradVc " + "EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN\n"); + } + } + } + print_status(); + + // perform climbing NEB_spin for n2steps or until replicas converge + // retrieve PE values from fix NEB_spin and print every nevery iterations + // break induced if converged + // damped dynamic min styles insure all replicas converge together + + timer->init(); + timer->barrier_start(); + + while (update->minimize->niter < n2steps) { + update->minimize->run(nevery); + print_status(); + if (update->minimize->stop_condition) break; + } + + timer->barrier_stop(); + + update->minimize->cleanup(); + + finish.end(1); + + update->whichflag = 0; + update->multireplica = 0; + update->firststep = update->laststep = 0; + update->beginstep = update->endstep = 0; +} + +/* ---------------------------------------------------------------------- + read initial config atom coords from file + flag = 0 + only first replica opens file and reads it + first replica bcasts lines to all replicas + final replica stores coords + intermediate replicas interpolate from coords + new coord = replica fraction between current and final state + initial replica does nothing + flag = 1 + each replica (except first) opens file and reads it + each replica stores coords + initial replica does nothing +------------------------------------------------------------------------- */ + +void NEB_spin::readfile(char *file, int flag) +{ + int i,j,m,nchunk,eofflag,nlines; + tagint tag; + char *eof,*start,*next,*buf; + char line[MAXLINE]; + double xx,yy,zz,delx,dely,delz; + // creating new temp. sp + double spx,spy,spz,delspx,delspy,delspz; + + if (me_universe == 0 && screen) + fprintf(screen,"Reading NEB_spin coordinate file(s) ...\n"); + + // flag = 0, universe root reads header of file, bcast to universe + // flag = 1, each replica's root reads header of file, bcast to world + // but explicitly skip first replica + + if (flag == 0) { + if (me_universe == 0) { + open(file); + while (1) { + eof = fgets(line,MAXLINE,fp); + if (eof == NULL) error->one(FLERR,"Unexpected end of neb file"); + start = &line[strspn(line," \t\n\v\f\r")]; + if (*start != '\0' && *start != '#') break; + } + sscanf(line,"%d",&nlines); + } + MPI_Bcast(&nlines,1,MPI_INT,0,uworld); + + } else { + if (me == 0) { + if (ireplica) { + open(file); + while (1) { + eof = fgets(line,MAXLINE,fp); + if (eof == NULL) error->one(FLERR,"Unexpected end of neb file"); + start = &line[strspn(line," \t\n\v\f\r")]; + if (*start != '\0' && *start != '#') break; + } + sscanf(line,"%d",&nlines); + } else nlines = 0; + } + MPI_Bcast(&nlines,1,MPI_INT,0,world); + } + + char *buffer = new char[CHUNK*MAXLINE]; + char **values = new char*[ATTRIBUTE_PERLINE]; + + double fraction = ireplica/(nreplica-1.0); + + double **x = atom->x; + // spin table + double **sp = atom->sp; + int nlocal = atom->nlocal; + + // loop over chunks of lines read from file + // two versions of read_lines_from_file() for world vs universe bcast + // count # of atom coords changed so can check for invalid atom IDs in file + + int ncount = 0; + + int nread = 0; + while (nread < nlines) { + nchunk = MIN(nlines-nread,CHUNK); + if (flag == 0) + eofflag = comm->read_lines_from_file_universe(fp,nchunk,MAXLINE,buffer); + else + eofflag = comm->read_lines_from_file(fp,nchunk,MAXLINE,buffer); + if (eofflag) error->all(FLERR,"Unexpected end of neb file"); + + buf = buffer; + next = strchr(buf,'\n'); + *next = '\0'; + int nwords = atom->count_words(buf); + *next = '\n'; + + if (nwords != ATTRIBUTE_PERLINE) + error->all(FLERR,"Incorrect atom format in neb file"); + + // loop over lines of atom coords + // tokenize the line into values + + for (i = 0; i < nchunk; i++) { + next = strchr(buf,'\n'); + + values[0] = strtok(buf," \t\n\r\f"); + for (j = 1; j < nwords; j++) + values[j] = strtok(NULL," \t\n\r\f"); + + // adjust atom coord based on replica fraction + // for flag = 0, interpolate for intermediate and final replicas + // for flag = 1, replace existing coord with new coord + // ignore image flags of final x + // for interpolation: + // new x is displacement from old x via minimum image convention + // if final x is across periodic boundary: + // new x may be outside box + // will be remapped back into box when simulation starts + // its image flags will then be adjusted + + tag = ATOTAGINT(values[0]); + m = atom->map(tag); + if (m >= 0 && m < nlocal) { + ncount++; + xx = atof(values[1]); + yy = atof(values[2]); + zz = atof(values[3]); + + if (flag == 0) { + delx = xx - x[m][0]; + dely = yy - x[m][1]; + delz = zz - x[m][2]; + domain->minimum_image(delx,dely,delz); + x[m][0] += fraction*delx; + x[m][1] += fraction*dely; + x[m][2] += fraction*delz; + } else { + x[m][0] = xx; + x[m][1] = yy; + x[m][2] = zz; + } + } + + buf = next + 1; + } + + nread += nchunk; + } + + // check that all atom IDs in file were found by a proc + + if (flag == 0) { + int ntotal; + MPI_Allreduce(&ncount,&ntotal,1,MPI_INT,MPI_SUM,uworld); + if (ntotal != nreplica*nlines) + error->universe_all(FLERR,"Invalid atom IDs in neb file"); + } else { + int ntotal; + MPI_Allreduce(&ncount,&ntotal,1,MPI_INT,MPI_SUM,world); + if (ntotal != nlines) + error->all(FLERR,"Invalid atom IDs in neb file"); + } + + // clean up + + delete [] buffer; + delete [] values; + + if (flag == 0) { + if (me_universe == 0) { + if (compressed) pclose(fp); + else fclose(fp); + } + } else { + if (me == 0 && ireplica) { + if (compressed) pclose(fp); + else fclose(fp); + } + } +} + +/* ---------------------------------------------------------------------- + universe proc 0 opens NEB_spin data file + test if gzipped +------------------------------------------------------------------------- */ + +void NEB_spin::open(char *file) +{ + compressed = 0; + char *suffix = file + strlen(file) - 3; + if (suffix > file && strcmp(suffix,".gz") == 0) compressed = 1; + if (!compressed) fp = fopen(file,"r"); + else { +#ifdef LAMMPS_GZIP + char gunzip[128]; + snprintf(gunzip,128,"gzip -c -d %s",file); + +#ifdef _WIN32 + fp = _popen(gunzip,"rb"); +#else + fp = popen(gunzip,"r"); +#endif + +#else + error->one(FLERR,"Cannot open gzipped file"); +#endif + } + + if (fp == NULL) { + char str[128]; + snprintf(str,128,"Cannot open file %s",file); + error->one(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- + query fix NEB_spin for info on each replica + universe proc 0 prints current NEB_spin status +------------------------------------------------------------------------- */ + +void NEB_spin::print_status() +{ + double fnorm2 = sqrt(update->minimize->fnorm_sqr()); + double fmaxreplica; + MPI_Allreduce(&fnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); + double fnorminf = update->minimize->fnorm_inf(); + double fmaxatom; + MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); + + if (verbose) { + freplica = new double[nreplica]; + MPI_Allgather(&fnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); + fmaxatomInRepl = new double[nreplica]; + MPI_Allgather(&fnorminf,1,MPI_DOUBLE,&fmaxatomInRepl[0],1,MPI_DOUBLE,roots); + } + + double one[7]; + //one[0] = fneb->veng; + //one[1] = fneb->plen; + //one[2] = fneb->nlen; + //one[3] = fneb->gradlen; + one[0] = fneb_neb->veng; + one[1] = fneb_neb->plen; + one[2] = fneb_neb->nlen; + one[3] = fneb_neb->gradlen; + + if (verbose) { + //one[4] = fneb->dotpath; + //one[5] = fneb->dottangrad; + //one[6] = fneb->dotgrad; + one[4] = fneb_spin->dotpath; + one[5] = fneb_spin->dottangrad; + one[6] = fneb_spin->dotgrad; + } + + if (output->thermo->normflag) one[0] /= atom->natoms; + if (me == 0) + MPI_Allgather(one,numall,MPI_DOUBLE,&all[0][0],numall,MPI_DOUBLE,roots); + MPI_Bcast(&all[0][0],numall*nreplica,MPI_DOUBLE,0,world); + + rdist[0] = 0.0; + for (int i = 1; i < nreplica; i++) + rdist[i] = rdist[i-1] + all[i][1]; + double endpt = rdist[nreplica-1] = rdist[nreplica-2] + all[nreplica-2][2]; + for (int i = 1; i < nreplica; i++) + rdist[i] /= endpt; + + // look up GradV for the initial, final, and climbing replicas + // these are identical to fnorm2, but to be safe we + // take them straight from fix_neb + + double gradvnorm0, gradvnorm1, gradvnormc; + + int irep; + irep = 0; + gradvnorm0 = all[irep][3]; + irep = nreplica-1; + gradvnorm1 = all[irep][3]; + irep = fneb->rclimber; + if (irep > -1) { + gradvnormc = all[irep][3]; + ebf = all[irep][0]-all[0][0]; + ebr = all[irep][0]-all[nreplica-1][0]; + } else { + double vmax = all[0][0]; + int top = 0; + for (int m = 1; m < nreplica; m++) + if (vmax < all[m][0]) { + vmax = all[m][0]; + top = m; + } + irep = top; + gradvnormc = all[irep][3]; + ebf = all[irep][0]-all[0][0]; + ebr = all[irep][0]-all[nreplica-1][0]; + } + + if (me_universe == 0) { + const double todeg=180.0/MY_PI; + FILE *uscreen = universe->uscreen; + FILE *ulogfile = universe->ulogfile; + if (uscreen) { + fprintf(uscreen,BIGINT_FORMAT " %12.8g %12.8g ", + update->ntimestep,fmaxreplica,fmaxatom); + fprintf(uscreen,"%12.8g %12.8g %12.8g ", + gradvnorm0,gradvnorm1,gradvnormc); + fprintf(uscreen,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt); + for (int i = 0; i < nreplica; i++) + fprintf(uscreen,"%12.8g %12.8g ",rdist[i],all[i][0]); + if (verbose) { + fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", + NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg, + all[0][3],freplica[0],fmaxatomInRepl[0]); + for (int i = 1; i < nreplica-1; i++) + fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", + 180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg, + 180-acos(all[i][6])*todeg,all[i][3],freplica[i], + fmaxatomInRepl[i]); + fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", + NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3], + freplica[nreplica-1],fmaxatomInRepl[nreplica-1]); + } + fprintf(uscreen,"\n"); + } + + if (ulogfile) { + fprintf(ulogfile,BIGINT_FORMAT " %12.8g %12.8g ", + update->ntimestep,fmaxreplica,fmaxatom); + fprintf(ulogfile,"%12.8g %12.8g %12.8g ", + gradvnorm0,gradvnorm1,gradvnormc); + fprintf(ulogfile,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt); + for (int i = 0; i < nreplica; i++) + fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); + if (verbose) { + fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", + NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg, + all[0][3],freplica[0],fmaxatomInRepl[0]); + for (int i = 1; i < nreplica-1; i++) + fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", + 180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg, + 180-acos(all[i][6])*todeg,all[i][3],freplica[i], + fmaxatomInRepl[i]); + fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", + NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3], + freplica[nreplica-1],fmaxatomInRepl[nreplica-1]); + } + fprintf(ulogfile,"\n"); + fflush(ulogfile); + } + } +} diff --git a/src/REPLICA/neb_spin.h b/src/REPLICA/neb_spin.h new file mode 100644 index 0000000000..3fa19460fc --- /dev/null +++ b/src/REPLICA/neb_spin.h @@ -0,0 +1,137 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS + +CommandStyle(neb_spin,NEB_SPIN) + +#else + +#ifndef LMP_NEB_SPIN_H +#define LMP_NEB_SPIN_H + +#include +#include "pointers.h" + +namespace LAMMPS_NS { + +class NEB_spin : protected Pointers { + public: + NEB_spin(class LAMMPS *); + NEB_spin(class LAMMPS *, double, double, int, int, int, double *, double *); + ~NEB_spin(); + void command(int, char **); // process neb command + void run(); // run NEB_spin + + double ebf,ebr; // forward and reverse energy barriers + + private: + int me,me_universe; // my proc ID in world and universe + int ireplica,nreplica; + bool verbose; + MPI_Comm uworld; + MPI_Comm roots; // MPI comm with 1 root proc from each world + FILE *fp; + int compressed; + double etol; // energy tolerance convergence criterion + double ftol; // force tolerance convergence criterion + int n1steps, n2steps; // number of steps in stage 1 and 2 + int nevery; // output interval + char *infile; // name of file containing final state + + class FixNEB_spin *fneb; + int numall; // per-replica dimension of array all + double **all; // PE,plen,nlen,gradvnorm from each replica + double *rdist; // normalize reaction distance, 0 to 1 + double *freplica; // force on an image + double *fmaxatomInRepl; // force on an image + + void readfile(char *, int); + void open(char *); + void print_status(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: NEB_spin command before simulation box is defined + +Self-explanatory. + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Cannot use NEB_spin with a single replica + +Self-explanatory. + +E: Cannot use NEB_spin unless atom map exists + +Use the atom_modify command to create an atom map. + +E: NEB_spin requires use of fix neb + +Self-explanatory. + +E: NEB_spin requires damped dynamics minimizer + +Use a different minimization style. + +E: Too many timesteps for NEB_spin + +You must use a number of timesteps that fit in a 32-bit integer +for NEB_spin. + +E: Too many timesteps + +The cumulative timesteps must fit in a 64-bit integer. + +E: Unexpected end of neb file + +A read operation from the file failed. + +E: Incorrect atom format in neb file + +The number of fields per line is not what expected. + +E: Invalid atom IDs in neb file + +An ID in the file was not found in the system. + +E: Cannot open gzipped file + +LAMMPS was compiled without support for reading and writing gzipped +files through a pipeline to the gzip program with -DLAMMPS_GZIP. + +E: Cannot open file %s + +The specified file cannot be opened. Check that the path and name are +correct. If the file is a compressed file, also check that the gzip +executable can be found and run. + +U: Can only use NEB_spin with 1-processor replicas + +This is current restriction for NEB_spin as implemented in LAMMPS. + +U: Cannot use NEB_spin with atom_modify sort enabled + +This is current restriction for NEB_spin implemented in LAMMPS. + +*/ From 9fcd69921fd268bcec2d23d6ec519581f2a76794 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 4 Feb 2019 11:27:00 -0700 Subject: [PATCH 007/372] Commit JT 020419 - neb/spin implemneted - rotational initial states to be implemented - climbing image to be implemented --- examples/SPIN/gneb_bfo/final.iron_spin | 64 ++-- examples/SPIN/gneb_bfo/in.neb.hop1 | 1 + examples/SPIN/gneb_bfo/in.neb.spin_iron | 82 +--- examples/SPIN/gneb_bfo/in.spin.iron | 4 +- src/REPLICA/fix_neb_spin.cpp | 481 +++++++++++++++--------- src/REPLICA/fix_neb_spin.h | 7 +- src/REPLICA/neb_spin.cpp | 453 +++++++++++++++++++--- src/REPLICA/neb_spin.h | 7 +- src/SPIN/pair_spin_exchange.cpp | 3 +- 9 files changed, 754 insertions(+), 348 deletions(-) diff --git a/examples/SPIN/gneb_bfo/final.iron_spin b/examples/SPIN/gneb_bfo/final.iron_spin index a921287ccb..aa1cbae770 100644 --- a/examples/SPIN/gneb_bfo/final.iron_spin +++ b/examples/SPIN/gneb_bfo/final.iron_spin @@ -1,36 +1,36 @@ 32 -2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1 2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/SPIN/gneb_bfo/in.neb.hop1 b/examples/SPIN/gneb_bfo/in.neb.hop1 index 4e203afd82..6697330faa 100644 --- a/examples/SPIN/gneb_bfo/in.neb.hop1 +++ b/examples/SPIN/gneb_bfo/in.neb.hop1 @@ -1,4 +1,5 @@ # 2d NEB surface simulation, hop from surface to become adatom +print "Test 1" dimension 2 boundary p s p diff --git a/examples/SPIN/gneb_bfo/in.neb.spin_iron b/examples/SPIN/gneb_bfo/in.neb.spin_iron index 6b99cd4639..2cf3a8653e 100644 --- a/examples/SPIN/gneb_bfo/in.neb.spin_iron +++ b/examples/SPIN/gneb_bfo/in.neb.spin_iron @@ -1,12 +1,12 @@ # bcc iron in a 3d periodic box +print "Test 1" -clear units metal -atom_style spin - dimension 3 boundary p p f +atom_style spin + # necessary for the serial algorithm (sametag) atom_modify map array @@ -20,7 +20,7 @@ read_data ../examples/SPIN/gneb_bfo/initial.iron_spin # setting mass, mag. moments, and interactions for bcc iron mass 1 55.845 -set group all spin 2.2 -1.0 0.0 0.0 +#set group all spin 2.2 -1.0 0.0 0.0 pair_style spin/exchange 3.5 pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 @@ -28,73 +28,13 @@ pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 -fix 2 nebatoms neb_spin 1.0 +fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 +#fix 2 all langevin/spin 0.0 0.0 21 +fix 2 all neb/spin 1.0 #parallel ideal -min_style quickmin -neb 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin +timestep 0.0001 - -############################################################# - -# 2d NEB surface simulation, hop from surface to become adatom - - -variable u uloop 20 - -# create geometry with flat surface - -lattice hex 0.9 -region box block 0 20 0 10 -0.25 0.25 - -#create_box 3 box -#create_atoms 1 box -#mass * 1.0 -#write_data initial.hop1 - -read_data ../examples/SPIN/gneb_bfo/initial.hop1 - -# LJ potentials - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_modify shift yes - -# initial minimization to relax surface - -minimize 1.0e-6 1.0e-4 1000 10000 -reset_timestep 0 - -# define groups - -region 1 block INF INF INF 1.25 INF INF -group lower region 1 -group mobile subtract all lower -set group lower type 2 - -timestep 0.05 - -# group of NEB atoms - either block or single atom ID 412 - -region surround block 10 18 17 20 0 0 units box -group nebatoms region surround -#group nebatoms id 412 -set group nebatoms type 3 -group nonneb subtract all nebatoms - -fix 1 lower setforce 0.0 0.0 0.0 -fix 2 nebatoms neb 1.0 parallel ideal -fix 3 all enforce2d - -thermo 100 - -#dump 1 nebatoms atom 10 dump.neb.$u -#dump 2 nonneb atom 10 dump.nonneb.$u - -# run NEB for 2000 steps or to force tolerance - -min_style quickmin - -neb 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.hop1 +#min_style quickmin +neb/spin 0.0 0.1 1 1 1 final ../examples/SPIN/gneb_bfo/final.iron_spin +#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spin.iron b/examples/SPIN/gneb_bfo/in.spin.iron index 6d291c633b..0c84845f5f 100644 --- a/examples/SPIN/gneb_bfo/in.spin.iron +++ b/examples/SPIN/gneb_bfo/in.spin.iron @@ -19,7 +19,7 @@ create_atoms 1 box mass 1 55.845 -set group all spin 2.2 -1.0 0.0 0.0 +set group all spin 2.2 1.0 0.0 0.0 #velocity all create 100 4928459 rot yes dist gaussian pair_style spin/exchange 3.5 @@ -53,4 +53,4 @@ compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] run 0 -write_data final.iron_spin +write_data initial.iron_spin diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index a96af45267..150c37a03e 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -11,11 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- - Contributing author for: Emile Maras (CEA, France) - new options for inter-replica forces, first/last replica treatment -------------------------------------------------------------------------- */ - #include #include #include @@ -392,6 +387,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) nlen = 0.0; double tlen = 0.0; double gradnextlen = 0.0; + double delndots, delpdots; dotgrad = gradlen = dotpath = dottangrad = 0.0; @@ -403,12 +399,20 @@ void FixNEB_spin::min_post_force(int /*vflag*/) for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { + // tangent vector delspxp = sp[i][0] - spprev[i][0]; delspyp = sp[i][1] - spprev[i][1]; delspzp = sp[i][2] - spprev[i][2]; - domain->minimum_image(delspxp,delspyp,delspzp); // check what it does - delsqp = delspxp*delspxp+delspyp*delspyp+delspzp*delspzp; + + // project delp vector on tangent space + delpdots = delspxp*sp[i][0]+delspyp*sp[i][1]+delspzp*sp[i][2]; + delspxp -= delpdots*sp[i][0]; + delspyp -= delpdots*sp[i][1]; + delspzp -= delpdots*sp[i][2]; + + // adjust distance if pbc + //domain->minimum_image(delspxp,delspyp,delspzp); // calc. geodesic length spi[0]=sp[i][0]; @@ -419,7 +423,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) spj[2]=spprev[i][2]; templen = geodesic_distance(spi, spj); plen += templen*templen; - dottangrad += delxp*fm[i][0]+ delyp*fm[i][1]+delzp*fm[i][2]; + dottangrad += delspxp*fm[i][0]+ delspyp*fm[i][1]+delspzp*fm[i][2]; gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; //plen += delxp*delxp + delyp*delyp + delzp*delzp; @@ -430,14 +434,14 @@ void FixNEB_spin::min_post_force(int /*vflag*/) // (unless FreeEnd option) if (FreeEndFinal||FreeEndFinalWithRespToEIni) { error->all(FLERR,"Free End option not yet active"); - tangent[i][0]=delspxp; - tangent[i][1]=delspyp; - tangent[i][2]=delspzp; - // if needed, tlen has to be modified - tlen += tangent[i][0]*tangent[i][0] + - tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + - fm[i][2]*tangent[i][2]; + //tangent[i][0]=delspxp; + //tangent[i][1]=delspyp; + //tangent[i][2]=delspzp; + //// if needed, tlen has to be modified + //tlen += tangent[i][0]*tangent[i][0] + + // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + //dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + + // fm[i][2]*tangent[i][2]; } @@ -469,9 +473,16 @@ void FixNEB_spin::min_post_force(int /*vflag*/) delspxn = spnext[i][0]- sp[i][0]; delspyn = spnext[i][1]- sp[i][1]; delspzn = spnext[i][2]- sp[i][2]; - domain->minimum_image(delspxn,delspyn,delspzn); // check what it does - delsqn = delspxn*delspxn+delspyn*delspyn+delspzn*delspzn; + // project deln vector on tangent space + delndots = delspxn*sp[i][0]+delspyn*sp[i][1]+delspzn*sp[i][2]; + delspxn -= delndots*sp[i][0]; + delspyn -= delndots*sp[i][1]; + delspzn -= delndots*sp[i][2]; + + // adjust del. if pbc + //domain->minimum_image(delspxn,delspyn,delspzn); + // calc. geodesic length spi[0]=sp[i][0]; spi[1]=sp[i][1]; @@ -485,14 +496,14 @@ void FixNEB_spin::min_post_force(int /*vflag*/) gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; if (FreeEndIni) { error->all(FLERR,"Free End option not yet active"); - tangent[i][0]=delxn; - tangent[i][1]=delyn; - tangent[i][2]=delzn; - // if needed, tlen has to be modified - tlen += tangent[i][0]*tangent[i][0] + - tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + - f[i][2]*tangent[i][2]; + //tangent[i][0]=delxn; + //tangent[i][1]=delyn; + //tangent[i][2]=delzn; + //// if needed, tlen has to be modified + //tlen += tangent[i][0]*tangent[i][0] + + // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + //dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + + // f[i][2]*tangent[i][2]; } //delxn = xnext[i][0] - x[i][0]; @@ -528,10 +539,20 @@ void FixNEB_spin::min_post_force(int /*vflag*/) for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - delspxp = spx[i][0] - spxprev[i][0]; - delspyp = spx[i][1] - spxprev[i][1]; - delspzp = spx[i][2] - spxprev[i][2]; - domain->minimum_image(delspxp,delspyp,delspzp); + + // calc. delp vector + delspxp = sp[i][0] - spprev[i][0]; + delspyp = sp[i][1] - spprev[i][1]; + delspzp = sp[i][2] - spprev[i][2]; + + // project delp vector on tangent space + delndots = delspxp*sp[i][0]+delspyp*sp[i][1]+delspzp*sp[i][2]; + delspxp -= delpdots*sp[i][0]; + delspyp -= delpdots*sp[i][1]; + delspzp -= delpdots*sp[i][2]; + + // adjust distance if pbc + //domain->minimum_image(delspxp,delspyp,delspzp); // calc. geodesic length spi[0]=sp[i][0]; @@ -543,10 +564,19 @@ void FixNEB_spin::min_post_force(int /*vflag*/) templen = geodesic_distance(spi, spj); plen += templen*templen; - delspxn = spxnext[i][0] - spx[i][0]; - delspyn = spxnext[i][1] - spx[i][1]; - delspzn = spxnext[i][2] - spx[i][2]; - domain->minimum_image(delspxn,delspyn,delspzn); + // calc. deln vector + delspxn = spnext[i][0] - sp[i][0]; + delspyn = spnext[i][1] - sp[i][1]; + delspzn = spnext[i][2] - sp[i][2]; + + // project deln vector on tangent space + delndots = delspxn*sp[i][0]+delspyn*sp[i][1]+delspzn*sp[i][2]; + delspxn -= delndots*sp[i][0]; + delspyn -= delndots*sp[i][1]; + delspzn -= delndots*sp[i][2]; + + // adjust distance if pbc + //domain->minimum_image(delspxn,delspyn,delspzn); if (vnext > veng && veng > vprev) { tangent[i][0] = delspxn; @@ -593,63 +623,11 @@ void FixNEB_spin::min_post_force(int /*vflag*/) dotgrad += fm[i][0]*fnext[i][0] + fm[i][1]*fnext[i][1] + fm[i][2]*fnext[i][2]; - // is this a perpandicular spring force? + // no Perpendicular nudging force option active yet + // see fix_neb for example if (kspringPerp != 0.0) - error->all(FLERR,"Perpendicular nudging force not yet active"); - //springF[i][0] = kspringPerp*(delxn-delxp); - //springF[i][1] = kspringPerp*(delyn-delyp); - //springF[i][2] = kspringPerp*(delzn-delzp); + error->all(FLERR,"NEB_spin Perpendicular nudging force not yet active"); - //delxp = x[i][0] - xprev[i][0]; - //delyp = x[i][1] - xprev[i][1]; - //delzp = x[i][2] - xprev[i][2]; - //domain->minimum_image(delxp,delyp,delzp); - //plen += delxp*delxp + delyp*delyp + delzp*delzp; - - //delxn = xnext[i][0] - x[i][0]; - //delyn = xnext[i][1] - x[i][1]; - //delzn = xnext[i][2] - x[i][2]; - //domain->minimum_image(delxn,delyn,delzn); - - //if (vnext > veng && veng > vprev) { - // tangent[i][0] = delxn; - // tangent[i][1] = delyn; - // tangent[i][2] = delzn; - //} else if (vnext < veng && veng < vprev) { - // tangent[i][0] = delxp; - // tangent[i][1] = delyp; - // tangent[i][2] = delzp; - //} else { - // if (vnext > vprev) { - // tangent[i][0] = vmax*delxn + vmin*delxp; - // tangent[i][1] = vmax*delyn + vmin*delyp; - // tangent[i][2] = vmax*delzn + vmin*delzp; - // } else if (vnext < vprev) { - // tangent[i][0] = vmin*delxn + vmax*delxp; - // tangent[i][1] = vmin*delyn + vmax*delyp; - // tangent[i][2] = vmin*delzn + vmax*delzp; - // } else { // vnext == vprev, e.g. for potentials that do not compute an energy - // tangent[i][0] = delxn + delxp; - // tangent[i][1] = delyn + delyp; - // tangent[i][2] = delzn + delzp; - // } - //} - - //nlen += delxn*delxn + delyn*delyn + delzn*delzn; - //tlen += tangent[i][0]*tangent[i][0] + - // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; - //dotpath += delxp*delxn + delyp*delyn + delzp*delzn; - //dottangrad += tangent[i][0]*f[i][0] + - // tangent[i][1]*f[i][1] + tangent[i][2]*f[i][2]; - //gradnextlen += fnext[i][0]*fnext[i][0] + - // fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2]; - //dotgrad += f[i][0]*fnext[i][0] + f[i][1]*fnext[i][1] + - // f[i][2]*fnext[i][2]; - - //springF[i][0] = kspringPerp*(delxn-delxp); - //springF[i][1] = kspringPerp*(delyn-delyp); - //springF[i][2] = kspringPerp*(delzn-delzp); } } @@ -675,6 +653,24 @@ void FixNEB_spin::min_post_force(int /*vflag*/) dottangrad = bufout[6]; dotgrad = bufout[7]; + + // project tangent vector on tangent space + + double buftan[3]; + double tandots; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tandots = tangent[i][0]*sp[i][0]+tangent[i][1]*sp[i][1]+ + tangent[i][2]*sp[i][2]; + buftan[0] = tangent[i][0]-tandots*sp[i][0]; + buftan[1] = tangent[i][1]-tandots*sp[i][1]; + buftan[2] = tangent[i][2]-tandots*sp[i][2]; + tangent[i][0] = buftan[0]; + tangent[i][1] = buftan[1]; + tangent[i][2] = buftan[2]; + } + + // normalize tangent vector if (tlen > 0.0) { @@ -687,8 +683,6 @@ void FixNEB_spin::min_post_force(int /*vflag*/) } } -//////////////////////////////////////////////////////// - // first or last replica has no change to forces, just return if (ireplica > 0 && ireplica < nreplica-1) @@ -700,93 +694,31 @@ void FixNEB_spin::min_post_force(int /*vflag*/) if (ireplica < nreplica-1) dotgrad = dotgrad /(gradlen*gradnextlen); + // no Free End option active yet + // see fix_neb for example if (FreeEndIni && ireplica == 0) { - if (tlen > 0.0) { - double dotall; - MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); - dot=dotall/tlen; - - if (dot<0) prefactor = -dot - kspringIni*(veng-EIniIni); - else prefactor = -dot + kspringIni*(veng-EIniIni); - - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - f[i][0] += prefactor *tangent[i][0]; - f[i][1] += prefactor *tangent[i][1]; - f[i][2] += prefactor *tangent[i][2]; - } - } + error->all(FLERR,"NEB_spin Free End option not yet active"); } + // no Free End option active yet + // see fix_neb for example if (FreeEndFinal && ireplica == nreplica -1) { - if (tlen > 0.0) { - double dotall; - MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); - dot=dotall/tlen; - - if (vengall(FLERR,"NEB_spin Free End option not yet active"); } + // no Free End option active yet + // see fix_neb for example if (FreeEndFinalWithRespToEIni&&ireplica == nreplica -1) { - if (tlen > 0.0) { - double dotall; - MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); - dot=dotall/tlen; - if (vengall(FLERR,"NEB_spin Free End option not yet active"); } + // no NEB_spin long range option + // see fix_neb for example double lentot = 0; double meanDist,idealPos,lenuntilIm,lenuntilClimber; lenuntilClimber=0; if (NEBLongRange) { - if (cmode == SINGLE_PROC_DIRECT || cmode == SINGLE_PROC_MAP) { - MPI_Allgather(&nlen,1,MPI_DOUBLE,&nlenall[0],1,MPI_DOUBLE,uworld); - } else { - if (me == 0) - MPI_Allgather(&nlen,1,MPI_DOUBLE,&nlenall[0],1,MPI_DOUBLE,rootworld); - MPI_Bcast(nlenall,nreplica,MPI_DOUBLE,0,world); - } - - lenuntilIm = 0; - for (int i = 0; i < ireplica; i++) - lenuntilIm += nlenall[i]; - - for (int i = 0; i < nreplica; i++) - lentot += nlenall[i]; - - meanDist = lentot/(nreplica -1); - - if (rclimber>0) { - for (int i = 0; i < rclimber; i++) - lenuntilClimber += nlenall[i]; - double meanDistBeforeClimber = lenuntilClimber/rclimber; - double meanDistAfterClimber = - (lentot-lenuntilClimber)/(nreplica-rclimber-1); - if (ireplicaall(FLERR,"NEB_spin long range option not yet active"); } if (ireplica == 0 || ireplica == nreplica-1) return ; @@ -800,12 +732,19 @@ void FixNEB_spin::min_post_force(int /*vflag*/) for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + - f[i][2]*tangent[i][2]; - dotSpringTangent += springF[i][0]*tangent[i][0] + + dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + + fm[i][2]*tangent[i][2]; + // springF defined for perp. spring option + // not defined here + //dotSpringTangent += springF[i][0]*tangent[i][0] + springF[i][1]*tangent[i][1] + springF[i][2]*tangent[i][2];} + //dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + + // f[i][2]*tangent[i][2]; + //dotSpringTangent += springF[i][0]*tangent[i][0] + + // springF[i][1]*tangent[i][1] + springF[i][2]*tangent[i][2];} } + // gather all dot and dotSpring for this replica (world) double dotSpringTangentall; MPI_Allreduce(&dotSpringTangent,&dotSpringTangentall,1, MPI_DOUBLE,MPI_SUM,world); @@ -814,20 +753,26 @@ void FixNEB_spin::min_post_force(int /*vflag*/) MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); dot=dotall; - if (ireplica == rclimber) prefactor = -2.0*dot; - else { + + // implement climbing image here + + if (ireplica == rclimber) { + error->all(FLERR,"NEB_spin climber option not yet active"); + //prefactor = -2.0*dot; + } else { if (NEBLongRange) { - prefactor = -dot - kspring*(lenuntilIm-idealPos)/(2*meanDist); + error->all(FLERR,"NEB_spin climber option not yet active"); + //prefactor = -dot - kspring*(lenuntilIm-idealPos)/(2*meanDist); } else if (StandardNEB) { prefactor = -dot + kspring*(nlen-plen); } if (FinalAndInterWithRespToEIni&& vengsametag; + int nlocal = atom->nlocal; + int *mask = atom->mask; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx,tdampy,tdampz; + double msq,scale,fm2,energy,dts2; + double alpha; + double spi[3],fmi[3]; + double cp[3],g[3]; + + //cp[0] = cp[1] = cp[2] = 0.0; + //g[0] = g[1] = g[2] = 0.0; + dts2 = dts*dts; + + // fictitious Gilbert damping of 1 + alpha = 1.0; + + // loop on all spins on proc. + + if (ireplica != nreplica-1 && ireplica != 0) + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + + fmi[0] = fm[i][0]; + fmi[1] = fm[i][1]; + fmi[2] = fm[i][2]; + + // calc. damping torque + + tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); + tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); + tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); + + // apply advance algorithm (geometric, norm preserving) + + fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); + energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); + + cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; + cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; + cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; + + g[0] = sp[i][0]+cp[0]*dts; + g[1] = sp[i][1]+cp[1]*dts; + g[2] = sp[i][2]+cp[2]*dts; + + g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; + g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; + g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; + + g[0] /= (1+0.25*fm2*dts2); + g[1] /= (1+0.25*fm2*dts2); + g[2] /= (1+0.25*fm2*dts2); + + sp[i][0] = g[0]; + sp[i][1] = g[1]; + sp[i][2] = g[2]; + + // renormalization (check if necessary) + + msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; + scale = 1.0/sqrt(msq); + sp[i][0] *= scale; + sp[i][1] *= scale; + sp[i][2] *= scale; + + // comm. sp[i] to atoms with same tag (for serial algo) + + // no need for simplecticity + //if (sector_flag == 0) { + // if (sametag[i] >= 0) { + // j = sametag[i]; + // while (j >= 0) { + // sp[j][0] = sp[i][0]; + // sp[j][1] = sp[i][1]; + // sp[j][2] = sp[i][2]; + // j = sametag[j]; + // } + // } + //} + // + + } +} + +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +double FixNEB_spin::evaluate_dt() +{ + double dtmax; + double fmsq; + double fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + int *mask = atom->mask; + double **fm = atom->fm; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + if (fmaxsqall < fmaxsqloc) + error->all(FLERR,"Incorrect fmaxall calc."); + + // define max timestep + // dividing by 10 the inverse of max frequency + + dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); + + return dtmax; +} + /* ---------------------------------------------------------------------- send/recv NEB atoms to/from adjacent replicas received atoms matching my local atoms are stored in xprev,xnext @@ -913,19 +1018,25 @@ void FixNEB_spin::inter_replica_comm() if (cmode == SINGLE_PROC_DIRECT) { if (ireplica > 0) MPI_Irecv(xprev[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld,&request); + MPI_Irecv(spprev[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld,&request); if (ireplica < nreplica-1) MPI_Send(x[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(sp[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld); if (ireplica > 0) MPI_Wait(&request,MPI_STATUS_IGNORE); if (ireplica < nreplica-1) MPI_Irecv(xnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + MPI_Irecv(spnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); if (ireplica > 0) MPI_Send(x[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(sp[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); if (ireplica < nreplica-1) MPI_Wait(&request,MPI_STATUS_IGNORE); if (ireplica < nreplica-1) MPI_Irecv(fnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + MPI_Irecv(fmnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); if (ireplica > 0) MPI_Send(f[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fm[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); if (ireplica < nreplica-1) MPI_Wait(&request,MPI_STATUS_IGNORE); return; @@ -1077,7 +1188,7 @@ void FixNEB_spin::inter_replica_comm() fmsendall[0],counts,displacements,MPI_DOUBLE,0,world); } else { MPI_Gatherv(NULL,3*m,MPI_DOUBLE, - xsendall[0],counts,displacements,MPI_DOUBLE,0,world); + spsendall[0],counts,displacements,MPI_DOUBLE,0,world); MPI_Gatherv(NULL,3*m,MPI_DOUBLE, fmsendall[0],counts,displacements,MPI_DOUBLE,0,world); } diff --git a/src/REPLICA/fix_neb_spin.h b/src/REPLICA/fix_neb_spin.h index e3bdd6889d..291341860e 100644 --- a/src/REPLICA/fix_neb_spin.h +++ b/src/REPLICA/fix_neb_spin.h @@ -13,8 +13,8 @@ #ifdef FIX_CLASS -FixStyle(neb,FixNEB) -FixStyle(neb_spin,FixNEB_spin) +//FixStyle(neb,FixNEB) +FixStyle(neb/spin,FixNEB_spin) #else @@ -36,6 +36,8 @@ class FixNEB_spin : public Fix { void init(); void min_setup(int); void min_post_force(int); + void advance_spins(double); + double evaluate_dt(); private: int me,nprocs,nprocs_universe; @@ -79,6 +81,7 @@ class FixNEB_spin : public Fix { int *counts,*displacements; // used for MPI_Gather + double geodesic_distance(double *, double *); void inter_replica_comm(); void reallocate(); }; diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index 7860553532..60d44d1875 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -13,7 +13,7 @@ // lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h // due to OpenMPI bug which sets INT64_MAX via its mpi.h -// before lmptype.h can set flags to insure it is done correctly +// before lmptype.h can set flags to insure it is done correctly #include "lmptype.h" #include @@ -21,7 +21,10 @@ #include #include //#include "neb.h" +// test spin #include "neb_spin.h" +#include "compute.h" + #include "universe.h" #include "atom.h" #include "update.h" @@ -30,7 +33,10 @@ #include "min.h" #include "modify.h" #include "fix.h" -#include "fix_neb.h" +//#include "fix_neb.h" +// test spin +#include "fix_neb_spin.h" + #include "output.h" #include "thermo.h" #include "finish.h" @@ -46,7 +52,7 @@ using namespace MathConst; #define MAXLINE 256 #define CHUNK 1024 //#define ATTRIBUTE_PERLINE 4 -// 8 attributes: tag number, coords, spin norm, spin dir. +// 8 attributes: tag, spin norm, position (3), spin direction (3) #define ATTRIBUTE_PERLINE 8 /* ---------------------------------------------------------------------- */ @@ -61,7 +67,8 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, int n2steps_in, int nevery_in, double *buf_init, double *buf_final) : Pointers(lmp) { - double delx,dely,delz; + //double delx,dely,delz; + double delspx,delspy,delspz; etol = etol_in; ftol = ftol_in; @@ -82,19 +89,40 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, double fraction = ireplica/(nreplica-1.0); double **x = atom->x; + // spin quantitites double **sp = atom->sp; int nlocal = atom->nlocal; - // modif interp. int ii = 0; + double spinit[3],spfinal[3]; for (int i = 0; i < nlocal; i++) { - delx = buf_final[ii] - buf_init[ii]; - dely = buf_final[ii+1] - buf_init[ii+1]; - delz = buf_final[ii+2] - buf_init[ii+2]; - domain->minimum_image(delx,dely,delz); - x[i][0] = buf_init[ii] + fraction*delx; - x[i][1] = buf_init[ii+1] + fraction*dely; - x[i][2] = buf_init[ii+2] + fraction*delz; + + spinit[0] = buf_init[ii]; + spinit[1] = buf_init[ii+1]; + spinit[2] = buf_init[ii+2]; + spfinal[0] = buf_final[ii]; + spfinal[1] = buf_final[ii+1]; + spfinal[2] = buf_final[ii+2]; + + initial_rotation(spinit,spfinal,fraction); + + sp[i][0] = spfinal[0]; + sp[i][1] = spfinal[1]; + sp[i][2] = spfinal[2]; + + //delx = buf_final[ii] - buf_init[ii]; + //dely = buf_final[ii+1] - buf_init[ii+1]; + //delz = buf_final[ii+2] - buf_init[ii+2]; + + // adjust distance if pbc + // not implemented yet + //domain->minimum_image(delx,dely,delz); + + // need to define a procedure for circular initialization + + //x[i][0] = buf_init[ii] + fraction*delx; + //x[i][1] = buf_init[ii+1] + fraction*dely; + //x[i][2] = buf_init[ii+2] + fraction*delz; ii += 3; } } @@ -114,6 +142,15 @@ NEB_spin::~NEB_spin() void NEB_spin::command(int narg, char **arg) { + + printf("test 1 \n"); + + // test 1 + double **sp1 = atom->sp; + printf("test 1 atom: i=%d,%g,%g,%g \n",1,sp1[1][0],sp1[1][1],sp1[1][2]); + //error->all(FLERR,"end neb_spin test"); + + if (domain->box_exist == 0) error->all(FLERR,"NEB_spin command before simulation box is defined"); @@ -141,6 +178,13 @@ void NEB_spin::command(int narg, char **arg) uworld = universe->uworld; MPI_Comm_rank(world,&me); + // check metal units and spin atom/style + + if (!atom->sp_flag) + error->all(FLERR,"neb/spin requires atom/spin style"); + if (strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"neb/spin simulation requires metal unit style"); + // error checks if (nreplica == 1) error->all(FLERR,"Cannot use NEB_spin with a single replica"); @@ -149,6 +193,7 @@ void NEB_spin::command(int narg, char **arg) // process file-style setting to setup initial configs for all replicas + // check what options are available if (strcmp(arg[5],"final") == 0) { if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB_spin command"); infile = arg[6]; @@ -163,6 +208,13 @@ void NEB_spin::command(int narg, char **arg) verbose=false; if (strcmp(arg[narg-1],"verbose") == 0) verbose=true; + + + // test 1 + double **sp = atom->sp; + printf("test 2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + error->all(FLERR,"end neb_spin test"); + // run the NEB_spin calculation run(); @@ -181,17 +233,13 @@ void NEB_spin::run() else color = 1; MPI_Comm_split(uworld,color,0,&roots); + // search for neb_spin fix, allocate it int ineb; for (ineb = 0; ineb < modify->nfix; ineb++) - if (strcmp(modify->fix[ineb]->style,"neb_spin") == 0) break; - if (ineb == modify->nfix) error->all(FLERR,"NEB_spin requires use of fix neb_spin"); - //int ineb; - //for (ineb = 0; ineb < modify->nfix; ineb++) - // if (strcmp(modify->fix[ineb]->style,"neb") == 0) break; - //if (ineb == modify->nfix) error->all(FLERR,"NEB_spin requires use of fix neb"); + if (strcmp(modify->fix[ineb]->style,"neb/spin") == 0) break; + if (ineb == modify->nfix) error->all(FLERR,"NEB_spin requires use of fix neb/spin"); - //fneb = (FixNEB_spin *) modify->fix[ineb]; - fneb_spin = (FixNEB_spin *) modify->fix[ineb]; + fneb = (FixNEB_spin *) modify->fix[ineb]; if (verbose) numall =7; else numall = 4; memory->create(all,nreplica,numall,"neb:all"); @@ -206,8 +254,10 @@ void NEB_spin::run() lmp->init(); - if (update->minimize->searchflag) - error->all(FLERR,"NEB_spin requires damped dynamics minimizer"); + // put flag to check gilbert damping procedure is set + + //if (update->minimize->searchflag) + // error->all(FLERR,"NEB_spin requires damped dynamics minimizer"); // setup regular NEB_spin minimization FILE *uscreen = universe->uscreen; @@ -264,8 +314,19 @@ void NEB_spin::run() timer->init(); timer->barrier_start(); + double dts; while (update->minimize->niter < n1steps) { - update->minimize->run(nevery); + //dts = evaluate_dt(); + //advance_spins(dts); + dts = fneb->evaluate_dt(); + fneb->advance_spins(dts); + + // no minimizer for spins + //update->minimize->run(nevery); + // + // evaluate dts + // loop on spins, damped advance + // print_status(); if (update->minimize->stop_condition) break; } @@ -309,8 +370,7 @@ void NEB_spin::run() error->all(FLERR,"Too many timesteps"); update->minimize->init(); - //fneb->rclimber = top; - fneb_spin->rclimber = top; + fneb->rclimber = top; update->minimize->setup(); if (me_universe == 0) { @@ -356,7 +416,11 @@ void NEB_spin::run() timer->barrier_start(); while (update->minimize->niter < n2steps) { - update->minimize->run(nevery); + //dts = evaluate_dt(); + //advance_spins(dts); + dts = fneb->evaluate_dt(); + fneb->advance_spins(dts); + //update->minimize->run(nevery); print_status(); if (update->minimize->stop_condition) break; } @@ -373,6 +437,174 @@ void NEB_spin::run() update->beginstep = update->endstep = 0; } +/* ---------------------------------------------------------------------- + geodesic distance calculation (Vincenty's formula) +------------------------------------------------------------------------- */ + +//double NEB_spin::geodesic_distance2(double spi[3], double spj[3]) +//{ +// double dist; +// double crossx,crossy,crossz; +// double dotx,doty,dotz; +// double crosslen,dots; +// +// crossx = spi[1]*spj[2]-spi[2]*spj[1]; +// crossy = spi[2]*spj[0]-spi[0]*spj[2]; +// crossz = spi[0]*spj[1]-spi[1]*spj[0]; +// crosslen = sqrt(crossx*crossx + crossy*crossy + crossz*crossz); +// dotx = spi[0]*spj[0]; +// doty = spi[1]*spj[1]; +// dotz = spi[2]*spj[2]; +// dots = dotx+doty+dotz; +// +// dist = atan2(crosslen,dots); +// +// return dist; +//} + +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +//double NEB_spin::evaluate_dt() +//{ +// double dtmax; +// double fmsq; +// double fmaxsqone,fmaxsqloc,fmaxsqall; +// int nlocal = atom->nlocal; +// int *mask = atom->mask; +// double **fm = atom->fm; +// +// // finding max fm on this proc. +// +// fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; +// for (int i = 0; i < nlocal; i++) +// if (mask[i] & groupbit) { +// fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; +// fmaxsqone = MAX(fmaxsqone,fmsq); +// } +// +// // finding max fm on this replica +// +// fmaxsqloc = fmaxsqone; +// MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); +// +// // finding max fm over all replicas, if necessary +// // this communicator would be invalid for multiprocess replicas +// +// if (update->multireplica == 1) { +// fmaxsqall = fmaxsqloc; +// MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); +// } +// +// if (fmaxsqall < fmaxsqloc) +// error->all(FLERR,"Incorrect fmaxall calc."); +// +// // define max timestep +// // dividing by 10 the inverse of max frequency +// +// dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); +// +// return dtmax; +//} + +/* ---------------------------------------------------------------------- + geometric damped advance os spins +---------------------------------------------------------------------- */ + +//void NEB_spin::advance_spins(double dts) +//{ +// //int j=0; +// //int *sametag = atom->sametag; +// int nlocal = atom->nlocal; +// int *mask = atom->mask; +// double **sp = atom->sp; +// double **fm = atom->fm; +// double tdampx,tdampy,tdampz; +// double msq,scale,fm2,energy,dts2; +// double alpha; +// double spi[3],fmi[3]; +// double cp[3],g[3]; +// +// //cp[0] = cp[1] = cp[2] = 0.0; +// //g[0] = g[1] = g[2] = 0.0; +// dts2 = dts*dts; +// +// // fictitious Gilbert damping of 1 +// alpha = 1.0; +// +// // loop on all spins on proc. +// +// if (ireplica != nreplica-1 && ireplica != 0) +// for (int i = 0; i < nlocal; i++) +// if (mask[i] & groupbit) { +// +// spi[0] = sp[i][0]; +// spi[1] = sp[i][1]; +// spi[2] = sp[i][2]; +// +// fmi[0] = fm[i][0]; +// fmi[1] = fm[i][1]; +// fmi[2] = fm[i][2]; +// +// // calc. damping torque +// +// tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); +// tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); +// tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); +// +// // apply advance algorithm (geometric, norm preserving) +// +// fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); +// energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); +// +// cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; +// cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; +// cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; +// +// g[0] = sp[i][0]+cp[0]*dts; +// g[1] = sp[i][1]+cp[1]*dts; +// g[2] = sp[i][2]+cp[2]*dts; +// +// g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; +// g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; +// g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; +// +// g[0] /= (1+0.25*fm2*dts2); +// g[1] /= (1+0.25*fm2*dts2); +// g[2] /= (1+0.25*fm2*dts2); +// +// sp[i][0] = g[0]; +// sp[i][1] = g[1]; +// sp[i][2] = g[2]; +// +// // renormalization (check if necessary) +// +// msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; +// scale = 1.0/sqrt(msq); +// sp[i][0] *= scale; +// sp[i][1] *= scale; +// sp[i][2] *= scale; +// +// // comm. sp[i] to atoms with same tag (for serial algo) +// +// // no need for simplecticity +// //if (sector_flag == 0) { +// // if (sametag[i] >= 0) { +// // j = sametag[i]; +// // while (j >= 0) { +// // sp[j][0] = sp[i][0]; +// // sp[j][1] = sp[i][1]; +// // sp[j][2] = sp[i][2]; +// // j = sametag[j]; +// // } +// // } +// //} +// // +// +// } +//} + /* ---------------------------------------------------------------------- read initial config atom coords from file flag = 0 @@ -395,8 +627,9 @@ void NEB_spin::readfile(char *file, int flag) char *eof,*start,*next,*buf; char line[MAXLINE]; double xx,yy,zz,delx,dely,delz; - // creating new temp. sp - double spx,spy,spz,delspx,delspy,delspz; + // spin quantities + double musp,spx,spy,spz; + //,delx,dely,delz; if (me_universe == 0 && screen) fprintf(screen,"Reading NEB_spin coordinate file(s) ...\n"); @@ -440,10 +673,17 @@ void NEB_spin::readfile(char *file, int flag) double fraction = ireplica/(nreplica-1.0); double **x = atom->x; - // spin table + // spin quantities double **sp = atom->sp; + double spinit[3],spfinal[3]; int nlocal = atom->nlocal; + // test 1.2 + //double **sp = atom->sp; + printf("test 1.2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //error->all(FLERR,"end neb_spin test"); + + // loop over chunks of lines read from file // two versions of read_lines_from_file() for world vs universe bcast // count # of atom coords changed so can check for invalid atom IDs in file @@ -493,22 +733,59 @@ void NEB_spin::readfile(char *file, int flag) m = atom->map(tag); if (m >= 0 && m < nlocal) { ncount++; - xx = atof(values[1]); - yy = atof(values[2]); - zz = atof(values[3]); + musp = atof(values[1]); + xx = atof(values[2]); + yy = atof(values[3]); + zz = atof(values[4]); + spx = atof(values[5]); + spy = atof(values[6]); + spz = atof(values[7]); + //xx = atof(values[1]); + //yy = atof(values[2]); + //zz = atof(values[3]); if (flag == 0) { - delx = xx - x[m][0]; - dely = yy - x[m][1]; - delz = zz - x[m][2]; - domain->minimum_image(delx,dely,delz); - x[m][0] += fraction*delx; - x[m][1] += fraction*dely; - x[m][2] += fraction*delz; + + // here, function interp. spin states + + //spinit[0] = x[m][0]; + //spinit[1] = x[m][1]; + //spinit[2] = x[m][2]; + spinit[0] = sp[m][0]; + spinit[1] = sp[m][1]; + spinit[2] = sp[m][2]; + spfinal[0] = spx; + spfinal[1] = spy; + spfinal[2] = spz; + //domain->minimum_image(delx,dely,delz); + + // test + printf("spinit: %g %g %g \n",spinit[0],spinit[1],spinit[2]); + printf("spfinal bef: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); + + initial_rotation(spinit,spfinal,fraction); + + // test + printf("spfinal aft: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); + + sp[m][0] = spfinal[0]; + sp[m][1] = spfinal[1]; + sp[m][2] = spfinal[2]; + sp[m][3] = musp; + //delx = xx - x[m][0]; + //dely = yy - x[m][1]; + //delz = zz - x[m][2]; + //x[m][0] += fraction*delx; + //x[m][1] += fraction*dely; + //x[m][2] += fraction*delz; } else { - x[m][0] = xx; + sp[m][3] = musp; + x[m][0] = xx; x[m][1] = yy; x[m][2] = zz; + sp[m][0] = spx; + sp[m][1] = spy; + sp[m][2] = spz; } } @@ -518,6 +795,12 @@ void NEB_spin::readfile(char *file, int flag) nread += nchunk; } + // test 1.3 + //double **sp = atom->sp; + printf("test 1.3 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //error->all(FLERR,"end neb_spin test"); + + // check that all atom IDs in file were found by a proc if (flag == 0) { @@ -550,6 +833,75 @@ void NEB_spin::readfile(char *file, int flag) } } +/* ---------------------------------------------------------------------- + initial configuration of spin sploc using Rodrigues' formula + interpolates between initial (spi) and final (stored in sploc) +------------------------------------------------------------------------- */ + +void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) +{ + + + // implementing initial rotation using atan2 + + //atan2(crosslen,dots); + + + + double theta,spdot; + double inormdot,ispinorm; + double kix,kiy,kiz; + double kinorm, ikinorm; + double crossx,crossy,crossz; + + //printf("inside rot, spi %g, spf %g \n",spi[0],sploc[0]); + + spdot = spi[0]*sploc[0]+spi[1]*sploc[1]+spi[2]*sploc[2]; + theta = fraction*acos(spdot); + + printf("inside rot, theta %g \n",theta); + + kix = spi[1]*sploc[2]-spi[2]*sploc[1]; + kiy = spi[2]*sploc[0]-spi[0]*sploc[2]; + kiz = spi[0]*sploc[1]-spi[1]*sploc[0]; + + //printf("inside rot1.1, ki %g %g %g \n",kix,kiy,kiz); + + inormdot = 1.0/sqrt(spdot); + kinorm = kix*kix+kiy*kiy+kiz*kiz; + if (kinorm == 0.0) { + kix = 0.0; + kiy = 0.0; + kiz = 0.0; + } else { + ikinorm = 1.0/kinorm; + kix *= ikinorm; + kiy *= ikinorm; + kiz *= ikinorm; + } + + //printf("inside rot1.2, kin %g %g %g \n",kix,kiy,kiz); + + crossx = kiy*spi[2]-kiz*spi[1]; + crossy = kiz*spi[0]-kix*spi[2]; + crossz = kix*spi[1]-kiy*spi[0]; + + //printf("inside rot1.3, cross %g %g %g \n",crossx,crossy,crossz); + + sploc[0] = spi[0]*cos(theta)+crossx*sin(theta); + sploc[1] = spi[1]*cos(theta)+crossy*sin(theta); + sploc[2] = spi[2]*cos(theta)+crossz*sin(theta); + + //printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); + + ispinorm = 1.0/sqrt(sploc[0]*sploc[0]+sploc[1]*sploc[1]+sploc[2]*sploc[2]); + + sploc[0] *= ispinorm; + sploc[1] *= ispinorm; + sploc[2] *= ispinorm; + printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); +} + /* ---------------------------------------------------------------------- universe proc 0 opens NEB_spin data file test if gzipped @@ -606,22 +958,15 @@ void NEB_spin::print_status() } double one[7]; - //one[0] = fneb->veng; - //one[1] = fneb->plen; - //one[2] = fneb->nlen; - //one[3] = fneb->gradlen; - one[0] = fneb_neb->veng; - one[1] = fneb_neb->plen; - one[2] = fneb_neb->nlen; - one[3] = fneb_neb->gradlen; + one[0] = fneb->veng; + one[1] = fneb->plen; + one[2] = fneb->nlen; + one[3] = fneb->gradlen; if (verbose) { - //one[4] = fneb->dotpath; - //one[5] = fneb->dottangrad; - //one[6] = fneb->dotgrad; - one[4] = fneb_spin->dotpath; - one[5] = fneb_spin->dottangrad; - one[6] = fneb_spin->dotgrad; + one[4] = fneb->dotpath; + one[5] = fneb->dottangrad; + one[6] = fneb->dotgrad; } if (output->thermo->normflag) one[0] /= atom->natoms; diff --git a/src/REPLICA/neb_spin.h b/src/REPLICA/neb_spin.h index 3fa19460fc..6541658fd7 100644 --- a/src/REPLICA/neb_spin.h +++ b/src/REPLICA/neb_spin.h @@ -13,7 +13,8 @@ #ifdef COMMAND_CLASS -CommandStyle(neb_spin,NEB_SPIN) +CommandStyle(neb/spin,NEB_spin) +//CommandStyle(neb,NEB_spin) #else @@ -56,7 +57,11 @@ class NEB_spin : protected Pointers { double *freplica; // force on an image double *fmaxatomInRepl; // force on an image + //double geodesic_distance2(double *, double *); + //double evaluate_dt(); + //void advance_spins(double); void readfile(char *, int); + void initial_rotation(double *, double *, double); void open(char *); void print_status(); }; diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 8cd9d33abd..ec21fe8838 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -153,11 +153,12 @@ void PairSpinExchange::init_style() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; - // checking if nve/spin is a listed fix + // checking if nve/spin or neb/spin are a listed fix int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if (ifix == modify->nfix) From e96878a70e9a9eaf31f2fa3e84ec655d745132c7 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 6 Feb 2019 11:35:33 -0700 Subject: [PATCH 008/372] Commit JT 020619 - correction gneb/spin - run but do not converge yet - check forces --- src/REPLICA/neb_spin.cpp | 167 +++++++++++++++++++++++++-------------- 1 file changed, 108 insertions(+), 59 deletions(-) diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index 60d44d1875..8780cb9a0a 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -143,11 +143,11 @@ NEB_spin::~NEB_spin() void NEB_spin::command(int narg, char **arg) { - printf("test 1 \n"); + //printf("test 1 \n"); // test 1 double **sp1 = atom->sp; - printf("test 1 atom: i=%d,%g,%g,%g \n",1,sp1[1][0],sp1[1][1],sp1[1][2]); + //printf("test 1 atom: i=%d,%g,%g,%g \n",1,sp1[1][0],sp1[1][1],sp1[1][2]); //error->all(FLERR,"end neb_spin test"); @@ -212,8 +212,8 @@ void NEB_spin::command(int narg, char **arg) // test 1 double **sp = atom->sp; - printf("test 2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); - error->all(FLERR,"end neb_spin test"); + //printf("test 2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //error->all(FLERR,"end neb_spin test"); // run the NEB_spin calculation @@ -680,7 +680,7 @@ void NEB_spin::readfile(char *file, int flag) // test 1.2 //double **sp = atom->sp; - printf("test 1.2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //printf("test 1.2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); //error->all(FLERR,"end neb_spin test"); @@ -760,13 +760,13 @@ void NEB_spin::readfile(char *file, int flag) //domain->minimum_image(delx,dely,delz); // test - printf("spinit: %g %g %g \n",spinit[0],spinit[1],spinit[2]); - printf("spfinal bef: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); + //printf("spinit: %g %g %g \n",spinit[0],spinit[1],spinit[2]); + //printf("spfinal bef: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); initial_rotation(spinit,spfinal,fraction); // test - printf("spfinal aft: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); + //printf("spfinal aft: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); sp[m][0] = spfinal[0]; sp[m][1] = spfinal[1]; @@ -797,7 +797,7 @@ void NEB_spin::readfile(char *file, int flag) // test 1.3 //double **sp = atom->sp; - printf("test 1.3 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //printf("test 1.3 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); //error->all(FLERR,"end neb_spin test"); @@ -841,65 +841,101 @@ void NEB_spin::readfile(char *file, int flag) void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) { - // implementing initial rotation using atan2 - //atan2(crosslen,dots); - - - - double theta,spdot; - double inormdot,ispinorm; - double kix,kiy,kiz; - double kinorm, ikinorm; - double crossx,crossy,crossz; - //printf("inside rot, spi %g, spf %g \n",spi[0],sploc[0]); + // this is not a sufficient routine, + // we need more accurate verifications - spdot = spi[0]*sploc[0]+spi[1]*sploc[1]+spi[2]*sploc[2]; - theta = fraction*acos(spdot); + + // initial and final and inter ang. values + double itheta,iphi,ftheta,fphi,ktheta,kphi; + double spix,spiy,spiz,spfx,spfy,spfz; + double spkx,spky,spkz,iknorm; + + spix = spi[0]; + spiy = spi[1]; + spiz = spi[2]; + + spfx = sploc[0]; + spfy = sploc[1]; + spfz = sploc[2]; + + iphi = acos(spiz); + itheta = acos(spix/sin(iphi)); + + fphi = acos(spfz); + ftheta = acos(spfx/sin(fphi)); - printf("inside rot, theta %g \n",theta); - - kix = spi[1]*sploc[2]-spi[2]*sploc[1]; - kiy = spi[2]*sploc[0]-spi[0]*sploc[2]; - kiz = spi[0]*sploc[1]-spi[1]*sploc[0]; - - //printf("inside rot1.1, ki %g %g %g \n",kix,kiy,kiz); - - inormdot = 1.0/sqrt(spdot); - kinorm = kix*kix+kiy*kiy+kiz*kiz; - if (kinorm == 0.0) { - kix = 0.0; - kiy = 0.0; - kiz = 0.0; - } else { - ikinorm = 1.0/kinorm; - kix *= ikinorm; - kiy *= ikinorm; - kiz *= ikinorm; - } + kphi = iphi + fraction*(fphi-iphi); + ktheta = itheta + fraction*(ftheta-itheta); - //printf("inside rot1.2, kin %g %g %g \n",kix,kiy,kiz); + spkx = cos(ktheta)*sin(kphi); + spky = sin(ktheta)*sin(kphi); + spkz = cos(kphi); - crossx = kiy*spi[2]-kiz*spi[1]; - crossy = kiz*spi[0]-kix*spi[2]; - crossz = kix*spi[1]-kiy*spi[0]; - - //printf("inside rot1.3, cross %g %g %g \n",crossx,crossy,crossz); + iknorm = spkx*spkx+spky*spky+spkz*spkz; - sploc[0] = spi[0]*cos(theta)+crossx*sin(theta); - sploc[1] = spi[1]*cos(theta)+crossy*sin(theta); - sploc[2] = spi[2]*cos(theta)+crossz*sin(theta); + spkx *= iknorm; + spky *= iknorm; + spkz *= iknorm; + + sploc[0] = spkx; + sploc[1] = spky; + sploc[2] = spkz; + //double theta,spdot; + //double inormdot,ispinorm; + //double kix,kiy,kiz; + //double kinorm, ikinorm; + //double crossx,crossy,crossz; + + ////printf("inside rot, spi %g, spf %g \n",spi[0],sploc[0]); + + //spdot = spi[0]*sploc[0]+spi[1]*sploc[1]+spi[2]*sploc[2]; + //theta = fraction*acos(spdot); + + //printf("inside rot, theta %g \n",theta); + + //kix = spi[1]*sploc[2]-spi[2]*sploc[1]; + //kiy = spi[2]*sploc[0]-spi[0]*sploc[2]; + //kiz = spi[0]*sploc[1]-spi[1]*sploc[0]; + // + ////printf("inside rot1.1, ki %g %g %g \n",kix,kiy,kiz); + + //inormdot = 1.0/sqrt(spdot); + //kinorm = kix*kix+kiy*kiy+kiz*kiz; + //if (kinorm == 0.0) { + // kix = 0.0; + // kiy = 0.0; + // kiz = 0.0; + //} else { + // ikinorm = 1.0/kinorm; + // kix *= ikinorm; + // kiy *= ikinorm; + // kiz *= ikinorm; + //} + + ////printf("inside rot1.2, kin %g %g %g \n",kix,kiy,kiz); + + //crossx = kiy*spi[2]-kiz*spi[1]; + //crossy = kiz*spi[0]-kix*spi[2]; + //crossz = kix*spi[1]-kiy*spi[0]; + // + ////printf("inside rot1.3, cross %g %g %g \n",crossx,crossy,crossz); + + //sploc[0] = spi[0]*cos(theta)+crossx*sin(theta); + //sploc[1] = spi[1]*cos(theta)+crossy*sin(theta); + //sploc[2] = spi[2]*cos(theta)+crossz*sin(theta); + // + ////printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); + + //ispinorm = 1.0/sqrt(sploc[0]*sploc[0]+sploc[1]*sploc[1]+sploc[2]*sploc[2]); + + //sploc[0] *= ispinorm; + //sploc[1] *= ispinorm; + //sploc[2] *= ispinorm; //printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); - - ispinorm = 1.0/sqrt(sploc[0]*sploc[0]+sploc[1]*sploc[1]+sploc[2]*sploc[2]); - - sploc[0] *= ispinorm; - sploc[1] *= ispinorm; - sploc[2] *= ispinorm; - printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); } /* ---------------------------------------------------------------------- @@ -943,7 +979,20 @@ void NEB_spin::open(char *file) void NEB_spin::print_status() { - double fnorm2 = sqrt(update->minimize->fnorm_sqr()); + + //double fnorm2 = sqrt(update->minimize->fnorm_sqr()); + + // test fmax spin + int nlocal = atom->nlocal; + double **fm = atom->fm; + double fnorm2; + for (int i = 0; i < nlocal; i++) + fnorm2 += (fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]); + //for (int i = 0; i < nlocal; i++) + // if (mask[i] & groupbit) { + // fnorm2 += (fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]); + // } + double fmaxreplica; MPI_Allreduce(&fnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); double fnorminf = update->minimize->fnorm_inf(); From edd4b0cf2548c6ddc5b3ad08a7141c4f5a016606 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 4 Mar 2019 07:35:02 -0700 Subject: [PATCH 009/372] Commit JT 030419 - added minspin - modifs before co --- examples/SPIN/gneb_bfo/in.neb.spin_iron | 11 +- examples/SPIN/gneb_bfo/in.neb.spin_iron_min | 42 ++ examples/SPIN/gneb_bfo/in.spin.dyna_iron | 53 +++ src/REPLICA/fix_neb_spin.cpp | 285 ++++++------- src/REPLICA/fix_neb_spin.h | 4 +- src/REPLICA/neb_spin.cpp | 45 +- src/SPIN/min_spinmin.cpp | 428 ++++++++++++++++++++ src/SPIN/min_spinmin.h | 56 +++ 8 files changed, 772 insertions(+), 152 deletions(-) create mode 100644 examples/SPIN/gneb_bfo/in.neb.spin_iron_min create mode 100644 examples/SPIN/gneb_bfo/in.spin.dyna_iron create mode 100644 src/SPIN/min_spinmin.cpp create mode 100644 src/SPIN/min_spinmin.h diff --git a/examples/SPIN/gneb_bfo/in.neb.spin_iron b/examples/SPIN/gneb_bfo/in.neb.spin_iron index 2cf3a8653e..860db24a61 100644 --- a/examples/SPIN/gneb_bfo/in.neb.spin_iron +++ b/examples/SPIN/gneb_bfo/in.neb.spin_iron @@ -29,12 +29,15 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 -#fix 2 all langevin/spin 0.0 0.0 21 -fix 2 all neb/spin 1.0 +fix 2 all langevin/spin 0.1 0.0 21 +fix 3 all neb/spin 1.0 +#fix 4 all nve/spin lattice no #parallel ideal timestep 0.0001 +thermo 100 -#min_style quickmin -neb/spin 0.0 0.1 1 1 1 final ../examples/SPIN/gneb_bfo/final.iron_spin + +min_style spinmin +neb/spin 0.0 0.1 100 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin #neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.neb.spin_iron_min b/examples/SPIN/gneb_bfo/in.neb.spin_iron_min new file mode 100644 index 0000000000..a38a8fbde5 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.neb.spin_iron_min @@ -0,0 +1,42 @@ +# bcc iron in a 3d periodic box + +units metal +dimension 3 +boundary p p f + +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 4.0 0.0 4.0 0.0 1.0 +#create_box 1 box +#create_atoms 1 box + +read_data ../examples/SPIN/gneb_bfo/initial.iron_spin + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +#set group all spin 2.2 -1.0 0.0 0.0 + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 +fix 2 all langevin/spin 0.1 0.0 21 +fix 3 all neb/spin 1.0 +fix 4 all nve/spin lattice no +#parallel ideal + +timestep 0.0001 +thermo 100 + + +min_style spinmin +neb/spin 0.0 0.1 10 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin +#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spin.dyna_iron b/examples/SPIN/gneb_bfo/in.spin.dyna_iron new file mode 100644 index 0000000000..918819c816 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.spin.dyna_iron @@ -0,0 +1,53 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary f f f + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 4.0 0.0 4.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +#read_data ../examples/SPIN/gneb_bfo/initial.iron_spin + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 +fix 2 all langevin/spin 300.0 0.01 21 +#fix 3 all neb/spin 1.0 +fix 3 all nve/spin lattice no +timestep 0.0001 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magnorm v_tmag temp v_emag ke pe etotal +thermo 100 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] +run 10000 diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index 150c37a03e..42450c2f0f 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -334,6 +334,9 @@ void FixNEB_spin::min_post_force(int /*vflag*/) MPI_Bcast(&vnext,1,MPI_DOUBLE,0,world); } + //printf("test veng: %g / %g / %g \n",veng,vprev,vnext); + //error->universe_all(FLERR,"End test"); + if (FreeEndFinal && ireplica == nreplica-1 && (update->ntimestep == 0)) EFinalIni = veng; if (ireplica == 0) vIni=veng; @@ -391,7 +394,6 @@ void FixNEB_spin::min_post_force(int /*vflag*/) dotgrad = gradlen = dotpath = dottangrad = 0.0; - // computation of the tangent vector // final replica @@ -401,11 +403,13 @@ void FixNEB_spin::min_post_force(int /*vflag*/) if (mask[i] & groupbit) { // tangent vector + delspxp = sp[i][0] - spprev[i][0]; delspyp = sp[i][1] - spprev[i][1]; delspzp = sp[i][2] - spprev[i][2]; // project delp vector on tangent space + delpdots = delspxp*sp[i][0]+delspyp*sp[i][1]+delspzp*sp[i][2]; delspxp -= delpdots*sp[i][0]; delspyp -= delpdots*sp[i][1]; @@ -415,6 +419,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) //domain->minimum_image(delspxp,delspyp,delspzp); // calc. geodesic length + spi[0]=sp[i][0]; spi[1]=sp[i][1]; spi[2]=sp[i][2]; @@ -470,11 +475,13 @@ void FixNEB_spin::min_post_force(int /*vflag*/) if (mask[i] & groupbit) { // tangent vector + delspxn = spnext[i][0]- sp[i][0]; delspyn = spnext[i][1]- sp[i][1]; delspzn = spnext[i][2]- sp[i][2]; // project deln vector on tangent space + delndots = delspxn*sp[i][0]+delspyn*sp[i][1]+delspzn*sp[i][2]; delspxn -= delndots*sp[i][0]; delspyn -= delndots*sp[i][1]; @@ -484,6 +491,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) //domain->minimum_image(delspxn,delspyn,delspzn); // calc. geodesic length + spi[0]=sp[i][0]; spi[1]=sp[i][1]; spi[2]=sp[i][2]; @@ -492,7 +500,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) spj[2]=spnext[i][2]; templen = geodesic_distance(spi, spj); nlen += templen*templen; - dottangrad += delspxn*fm[i][0] + delspyn*fm[i][1] + delspzp*fm[i][2]; + dottangrad += delspxn*fm[i][0] + delspyn*fm[i][1] + delspzn*fm[i][2]; gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; if (FreeEndIni) { error->all(FLERR,"Free End option not yet active"); @@ -817,18 +825,19 @@ double FixNEB_spin::geodesic_distance(double spi[3], double spj[3]) double dist; double crossx,crossy,crossz; double dotx,doty,dotz; - double crosslen,dots; + double normcross,dots; crossx = spi[1]*spj[2]-spi[2]*spj[1]; crossy = spi[2]*spj[0]-spi[0]*spj[2]; crossz = spi[0]*spj[1]-spi[1]*spj[0]; - crosslen = sqrt(crossx*crossx + crossy*crossy + crossz*crossz); + normcross = sqrt(crossx*crossx + crossy*crossy + crossz*crossz); + dotx = spi[0]*spj[0]; doty = spi[1]*spj[1]; dotz = spi[2]*spj[2]; dots = dotx+doty+dotz; - dist = atan2(crosslen,dots); + dist = atan2(normcross,dots); return dist; } @@ -837,144 +846,144 @@ double FixNEB_spin::geodesic_distance(double spi[3], double spj[3]) geometric damped advance os spins ---------------------------------------------------------------------- */ -void FixNEB_spin::advance_spins(double dts) -{ - //int j=0; - //int *sametag = atom->sametag; - int nlocal = atom->nlocal; - int *mask = atom->mask; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx,tdampy,tdampz; - double msq,scale,fm2,energy,dts2; - double alpha; - double spi[3],fmi[3]; - double cp[3],g[3]; - - //cp[0] = cp[1] = cp[2] = 0.0; - //g[0] = g[1] = g[2] = 0.0; - dts2 = dts*dts; - - // fictitious Gilbert damping of 1 - alpha = 1.0; - - // loop on all spins on proc. - - if (ireplica != nreplica-1 && ireplica != 0) - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - - fmi[0] = fm[i][0]; - fmi[1] = fm[i][1]; - fmi[2] = fm[i][2]; - - // calc. damping torque - - tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); - tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); - tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); - - // apply advance algorithm (geometric, norm preserving) - - fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); - energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); - - cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; - cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; - cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; - - g[0] = sp[i][0]+cp[0]*dts; - g[1] = sp[i][1]+cp[1]*dts; - g[2] = sp[i][2]+cp[2]*dts; - - g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; - g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; - g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; - - g[0] /= (1+0.25*fm2*dts2); - g[1] /= (1+0.25*fm2*dts2); - g[2] /= (1+0.25*fm2*dts2); - - sp[i][0] = g[0]; - sp[i][1] = g[1]; - sp[i][2] = g[2]; - - // renormalization (check if necessary) - - msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; - scale = 1.0/sqrt(msq); - sp[i][0] *= scale; - sp[i][1] *= scale; - sp[i][2] *= scale; - - // comm. sp[i] to atoms with same tag (for serial algo) - - // no need for simplecticity - //if (sector_flag == 0) { - // if (sametag[i] >= 0) { - // j = sametag[i]; - // while (j >= 0) { - // sp[j][0] = sp[i][0]; - // sp[j][1] = sp[i][1]; - // sp[j][2] = sp[i][2]; - // j = sametag[j]; - // } - // } - //} - // - - } -} +//void FixNEB_spin::advance_spins(double dts) +//{ +// //int j=0; +// //int *sametag = atom->sametag; +// int nlocal = atom->nlocal; +// int *mask = atom->mask; +// double **sp = atom->sp; +// double **fm = atom->fm; +// double tdampx,tdampy,tdampz; +// double msq,scale,fm2,energy,dts2; +// double alpha; +// double spi[3],fmi[3]; +// double cp[3],g[3]; +// +// //cp[0] = cp[1] = cp[2] = 0.0; +// //g[0] = g[1] = g[2] = 0.0; +// dts2 = dts*dts; +// +// // fictitious Gilbert damping of 1 +// alpha = 1.0; +// +// // loop on all spins on proc. +// +// if (ireplica != nreplica-1 && ireplica != 0) +// for (int i = 0; i < nlocal; i++) +// if (mask[i] & groupbit) { +// +// spi[0] = sp[i][0]; +// spi[1] = sp[i][1]; +// spi[2] = sp[i][2]; +// +// fmi[0] = fm[i][0]; +// fmi[1] = fm[i][1]; +// fmi[2] = fm[i][2]; +// +// // calc. damping torque +// +// tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); +// tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); +// tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); +// +// // apply advance algorithm (geometric, norm preserving) +// +// fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); +// energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); +// +// cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; +// cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; +// cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; +// +// g[0] = sp[i][0]+cp[0]*dts; +// g[1] = sp[i][1]+cp[1]*dts; +// g[2] = sp[i][2]+cp[2]*dts; +// +// g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; +// g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; +// g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; +// +// g[0] /= (1+0.25*fm2*dts2); +// g[1] /= (1+0.25*fm2*dts2); +// g[2] /= (1+0.25*fm2*dts2); +// +// sp[i][0] = g[0]; +// sp[i][1] = g[1]; +// sp[i][2] = g[2]; +// +// // renormalization (check if necessary) +// +// msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; +// scale = 1.0/sqrt(msq); +// sp[i][0] *= scale; +// sp[i][1] *= scale; +// sp[i][2] *= scale; +// +// // comm. sp[i] to atoms with same tag (for serial algo) +// +// // no need for simplecticity +// //if (sector_flag == 0) { +// // if (sametag[i] >= 0) { +// // j = sametag[i]; +// // while (j >= 0) { +// // sp[j][0] = sp[i][0]; +// // sp[j][1] = sp[i][1]; +// // sp[j][2] = sp[i][2]; +// // j = sametag[j]; +// // } +// // } +// //} +// // +// +// } +//} /* ---------------------------------------------------------------------- evaluate max timestep ---------------------------------------------------------------------- */ -double FixNEB_spin::evaluate_dt() -{ - double dtmax; - double fmsq; - double fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - int *mask = atom->mask; - double **fm = atom->fm; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - if (fmaxsqall < fmaxsqloc) - error->all(FLERR,"Incorrect fmaxall calc."); - - // define max timestep - // dividing by 10 the inverse of max frequency - - dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); - - return dtmax; -} +//double FixNEB_spin::evaluate_dt() +//{ +// double dtmax; +// double fmsq; +// double fmaxsqone,fmaxsqloc,fmaxsqall; +// int nlocal = atom->nlocal; +// int *mask = atom->mask; +// double **fm = atom->fm; +// +// // finding max fm on this proc. +// +// fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; +// for (int i = 0; i < nlocal; i++) +// if (mask[i] & groupbit) { +// fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; +// fmaxsqone = MAX(fmaxsqone,fmsq); +// } +// +// // finding max fm on this replica +// +// fmaxsqloc = fmaxsqone; +// MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); +// +// // finding max fm over all replicas, if necessary +// // this communicator would be invalid for multiprocess replicas +// +// if (update->multireplica == 1) { +// fmaxsqall = fmaxsqloc; +// MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); +// } +// +// if (fmaxsqall < fmaxsqloc) +// error->all(FLERR,"Incorrect fmaxall calc."); +// +// // define max timestep +// // dividing by 10 the inverse of max frequency +// +// dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); +// +// return dtmax; +//} /* ---------------------------------------------------------------------- send/recv NEB atoms to/from adjacent replicas diff --git a/src/REPLICA/fix_neb_spin.h b/src/REPLICA/fix_neb_spin.h index 291341860e..c70f35ae2d 100644 --- a/src/REPLICA/fix_neb_spin.h +++ b/src/REPLICA/fix_neb_spin.h @@ -36,8 +36,8 @@ class FixNEB_spin : public Fix { void init(); void min_setup(int); void min_post_force(int); - void advance_spins(double); - double evaluate_dt(); + //void advance_spins(double); + //double evaluate_dt(); private: int me,nprocs,nprocs_universe; diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index 8780cb9a0a..6249797e95 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -24,6 +24,7 @@ // test spin #include "neb_spin.h" #include "compute.h" +#include "force.h" #include "universe.h" #include "atom.h" @@ -262,6 +263,8 @@ void NEB_spin::run() // setup regular NEB_spin minimization FILE *uscreen = universe->uscreen; FILE *ulogfile = universe->ulogfile; + + //printf("test before run 1 \n"); if (me_universe == 0 && uscreen) fprintf(uscreen,"Setting up regular NEB_spin ...\n"); @@ -272,8 +275,12 @@ void NEB_spin::run() update->max_eval = n1steps; if (update->laststep < 0) error->all(FLERR,"Too many timesteps for NEB_spin"); + + //printf("test before run 2 \n"); update->minimize->setup(); + + //printf("test before run 3 \n"); if (me_universe == 0) { if (uscreen) { @@ -304,7 +311,9 @@ void NEB_spin::run() } } } + //printf("test before run 4 \n"); print_status(); + //printf("test before run 5 \n"); // perform regular NEB_spin for n1steps or until replicas converge // retrieve PE values from fix NEB_spin and print every nevery iterations @@ -314,13 +323,23 @@ void NEB_spin::run() timer->init(); timer->barrier_start(); + // test import fix_nve scheme + + //printf("test 2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //error->all(FLERR,"end neb_spin test"); double dts; while (update->minimize->niter < n1steps) { //dts = evaluate_dt(); //advance_spins(dts); - dts = fneb->evaluate_dt(); - fneb->advance_spins(dts); + //fneb-> + //dts = fneb->evaluate_dt(); + //fneb->advance_spins(dts); + + // no minimizer for spins + update->minimize->run(nevery); + + // no minimizer for spins //update->minimize->run(nevery); // @@ -331,6 +350,9 @@ void NEB_spin::run() if (update->minimize->stop_condition) break; } + // test neb end + //error->all(FLERR,"end neb_spin test"); + timer->barrier_stop(); update->minimize->cleanup(); @@ -371,8 +393,11 @@ void NEB_spin::run() update->minimize->init(); fneb->rclimber = top; + printf("test print 6.2 \n"); update->minimize->setup(); + printf("test print 6.3 \n"); + if (me_universe == 0) { if (uscreen) { if (verbose) { @@ -418,9 +443,9 @@ void NEB_spin::run() while (update->minimize->niter < n2steps) { //dts = evaluate_dt(); //advance_spins(dts); - dts = fneb->evaluate_dt(); - fneb->advance_spins(dts); - //update->minimize->run(nevery); + //dts = fneb->evaluate_dt(); + //fneb->advance_spins(dts); + update->minimize->run(nevery); print_status(); if (update->minimize->stop_condition) break; } @@ -995,9 +1020,13 @@ void NEB_spin::print_status() double fmaxreplica; MPI_Allreduce(&fnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); - double fnorminf = update->minimize->fnorm_inf(); - double fmaxatom; - MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); + + // no minimize->fnorm_inf for spins + //double fnorminf = update->minimize->fnorm_inf(); + //double fmaxatom; + //MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); + double fnorminf = 0.0; + double fmaxatom = 0.0; if (verbose) { freplica = new double[nreplica]; diff --git a/src/SPIN/min_spinmin.cpp b/src/SPIN/min_spinmin.cpp new file mode 100644 index 0000000000..08f91abae7 --- /dev/null +++ b/src/SPIN/min_spinmin.cpp @@ -0,0 +1,428 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include "min_spinmin.h" +#include "universe.h" +#include "atom.h" +#include "force.h" +#include "update.h" +#include "output.h" +#include "timer.h" +#include "error.h" + +#include +#include +#include "modify.h" +#include "math_special.h" +#include "math_const.h" +#include "fix_neb_spin.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +// EPS_ENERGY = minimum normalization for energy tolerance + +#define EPS_ENERGY 1.0e-8 + +#define DELAYSTEP 5 + +/* ---------------------------------------------------------------------- */ + +MinSpinMin::MinSpinMin(LAMMPS *lmp) : Min(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void MinSpinMin::init() +{ + Min::init(); + + dt = update->dt; + last_negative = update->ntimestep; + + // test dts + dts = dt; + +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinMin::setup_style() +{ + double **v = atom->v; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) + v[i][0] = v[i][1] = v[i][2] = 0.0; +} + +/* ---------------------------------------------------------------------- + set current vector lengths and pointers + called after atoms have migrated +------------------------------------------------------------------------- */ + +void MinSpinMin::reset_vectors() +{ + // atomic dof + + // not really good size => sp is 4N vector + nvec = 4 * atom->nlocal; + if (nvec) spvec = atom->sp[0]; + + nvec = 3 * atom->nlocal; + if (nvec) fmvec = atom->fm[0]; + + if (nvec) xvec = atom->x[0]; + if (nvec) fvec = atom->f[0]; +} + +/* ---------------------------------------------------------------------- + minimization via QuickMin damped dynamics +------------------------------------------------------------------------- */ + +int MinSpinMin::iterate(int maxiter) +{ + bigint ntimestep; + //double vmax,vdotf,vdotfall,fdotf,fdotfall,scale; + //double dtvone,dtv,dtf,dtfm; + //int flag,flagall; + + //alpha_final = 0.0; + + // search for and allocate neb_spin fix + + //int ineb; + //for (ineb = 0; ineb < modify->nfix; ineb++) + // if (strcmp(modify->fix[ineb]->style,"neb/spin") == 0) break; + //if (ineb == modify->nfix) error->all(FLERR,"spinmin requires use of fix neb/spin"); + //fneb = (FixNEB_spin *) modify->fix[ineb]; + + for (int iter = 0; iter < maxiter; iter++) { + + if (timer->check_timeout(niter)) + return TIMEOUT; + + ntimestep = ++update->ntimestep; + niter++; + + // optimize timestep accross processes / replicas + + //dts = fneb->evaluate_dt(); + dts = evaluate_dt(); + + // apply damped precessional dynamics to the spins + + //fneb->advance_spins(dts); + advance_spins(dts); + + + //// zero velocity if anti-parallel to force + //// else project velocity in direction of force + + //double **v = atom->v; + //double **f = atom->f; + //int nlocal = atom->nlocal; + + //vdotf = 0.0; + //for (int i = 0; i < nlocal; i++) + // vdotf += v[i][0]*f[i][0] + v[i][1]*f[i][1] + v[i][2]*f[i][2]; + //MPI_Allreduce(&vdotf,&vdotfall,1,MPI_DOUBLE,MPI_SUM,world); + + // sum vdotf over replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + //if (update->multireplica == 1) { + // vdotf = vdotfall; + // MPI_Allreduce(&vdotf,&vdotfall,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + //} + + //if (vdotfall < 0.0) { + // last_negative = ntimestep; + // for (int i = 0; i < nlocal; i++) + // v[i][0] = v[i][1] = v[i][2] = 0.0; + + //} else { + // fdotf = 0.0; + // for (int i = 0; i < nlocal; i++) + // fdotf += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; + // MPI_Allreduce(&fdotf,&fdotfall,1,MPI_DOUBLE,MPI_SUM,world); + + // // sum fdotf over replicas, if necessary + // // this communicator would be invalid for multiprocess replicas + + // if (update->multireplica == 1) { + // fdotf = fdotfall; + // MPI_Allreduce(&fdotf,&fdotfall,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + // } + + // if (fdotfall == 0.0) scale = 0.0; + // else scale = vdotfall/fdotfall; + // for (int i = 0; i < nlocal; i++) { + // v[i][0] = scale * f[i][0]; + // v[i][1] = scale * f[i][1]; + // v[i][2] = scale * f[i][2]; + // } + //} + + //// limit timestep so no particle moves further than dmax + + //double *rmass = atom->rmass; + //double *mass = atom->mass; + //int *type = atom->type; + + //dtvone = dt; + + //for (int i = 0; i < nlocal; i++) { + // vmax = MAX(fabs(v[i][0]),fabs(v[i][1])); + // vmax = MAX(vmax,fabs(v[i][2])); + // if (dtvone*vmax > dmax) dtvone = dmax/vmax; + //} + //MPI_Allreduce(&dtvone,&dtv,1,MPI_DOUBLE,MPI_MIN,world); + + //// min dtv over replicas, if necessary + //// this communicator would be invalid for multiprocess replicas + + //if (update->multireplica == 1) { + // dtvone = dtv; + // MPI_Allreduce(&dtvone,&dtv,1,MPI_DOUBLE,MPI_MIN,universe->uworld); + //} + + //dtf = dtv * force->ftm2v; + + //// Euler integration step + + //double **x = atom->x; + + //if (rmass) { + // for (int i = 0; i < nlocal; i++) { + // dtfm = dtf / rmass[i]; + // x[i][0] += dtv * v[i][0]; + // x[i][1] += dtv * v[i][1]; + // x[i][2] += dtv * v[i][2]; + // v[i][0] += dtfm * f[i][0]; + // v[i][1] += dtfm * f[i][1]; + // v[i][2] += dtfm * f[i][2]; + // } + //} else { + // for (int i = 0; i < nlocal; i++) { + // dtfm = dtf / mass[type[i]]; + // x[i][0] += dtv * v[i][0]; + // x[i][1] += dtv * v[i][1]; + // x[i][2] += dtv * v[i][2]; + // v[i][0] += dtfm * f[i][0]; + // v[i][1] += dtfm * f[i][1]; + // v[i][2] += dtfm * f[i][2]; + // } + //} + + //eprevious = ecurrent; + //ecurrent = energy_force(0); + //neval++; + + //// energy tolerance criterion + //// only check after DELAYSTEP elapsed since velocties reset to 0 + //// sync across replicas if running multi-replica minimization + + //if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + // if (update->multireplica == 0) { + // if (fabs(ecurrent-eprevious) < + // update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + // return ETOL; + // } else { + // if (fabs(ecurrent-eprevious) < + // update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + // flag = 0; + // else flag = 1; + // MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + // if (flagall == 0) return ETOL; + // } + //} + + //// force tolerance criterion + //// sync across replicas if running multi-replica minimization + + //if (update->ftol > 0.0) { + // fdotf = fnorm_sqr(); + // if (update->multireplica == 0) { + // if (fdotf < update->ftol*update->ftol) return FTOL; + // } else { + // if (fdotf < update->ftol*update->ftol) flag = 0; + // else flag = 1; + // MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + // if (flagall == 0) return FTOL; + // } + //} + + //// output for thermo, dump, restart files + + //if (output->next == ntimestep) { + // timer->stamp(); + // output->write(ntimestep); + // timer->stamp(Timer::OUTPUT); + //} + } + + return MAXITER; +} + +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +double MinSpinMin::evaluate_dt() +{ + double dtmax; + double fmsq; + double fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + int *mask = atom->mask; + double **fm = atom->fm; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + //for (int i = 0; i < nlocal; i++) + // if (mask[i] & groupbit) { + // fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + // fmaxsqone = MAX(fmaxsqone,fmsq); + // } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + if (fmaxsqall < fmaxsqloc) + error->all(FLERR,"Incorrect fmaxall calc."); + + // define max timestep + // dividing by 10 the inverse of max frequency + + dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); + + return dtmax; +} + +/* ---------------------------------------------------------------------- + geometric damped advance of spins +---------------------------------------------------------------------- */ + +void MinSpinMin::advance_spins(double dts) +{ + //int j=0; + //int *sametag = atom->sametag; + int nlocal = atom->nlocal; + int *mask = atom->mask; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx,tdampy,tdampz; + double msq,scale,fm2,energy,dts2; + double alpha; + double spi[3],fmi[3]; + double cp[3],g[3]; + + //cp[0] = cp[1] = cp[2] = 0.0; + //g[0] = g[1] = g[2] = 0.0; + dts2 = dts*dts; + + // fictitious Gilbert damping of 1 + alpha = 1.0; + + // loop on all spins on proc. + + //if (ireplica != nreplica-1 && ireplica != 0) + // for (int i = 0; i < nlocal; i++) + // if (mask[i] & groupbit) { + for (int i = 0; i < nlocal; i++) { + + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + + fmi[0] = fm[i][0]; + fmi[1] = fm[i][1]; + fmi[2] = fm[i][2]; + + // calc. damping torque + + tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); + tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); + tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); + + // apply advance algorithm (geometric, norm preserving) + + fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); + energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); + + cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; + cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; + cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; + + g[0] = sp[i][0]+cp[0]*dts; + g[1] = sp[i][1]+cp[1]*dts; + g[2] = sp[i][2]+cp[2]*dts; + + g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; + g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; + g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; + + g[0] /= (1+0.25*fm2*dts2); + g[1] /= (1+0.25*fm2*dts2); + g[2] /= (1+0.25*fm2*dts2); + + sp[i][0] = g[0]; + sp[i][1] = g[1]; + sp[i][2] = g[2]; + + // renormalization (check if necessary) + + msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; + scale = 1.0/sqrt(msq); + sp[i][0] *= scale; + sp[i][1] *= scale; + sp[i][2] *= scale; + + // comm. sp[i] to atoms with same tag (for serial algo) + + // no need for simplecticity + //if (sector_flag == 0) { + // if (sametag[i] >= 0) { + // j = sametag[i]; + // while (j >= 0) { + // sp[j][0] = sp[i][0]; + // sp[j][1] = sp[i][1]; + // sp[j][2] = sp[i][2]; + // j = sametag[j]; + // } + // } + //} + // + } + + printf("test inside spinmin, dts = %g \n",dts); + printf("test inside spinmin, fmi i=%d, %g %g %g \n",1,fm[1][0],fm[1][1],fm[1][2]); + printf("test inside spinmin, spi i=%d, %g %g %g \n",1,sp[1][0],sp[1][1],sp[1][2]); +} diff --git a/src/SPIN/min_spinmin.h b/src/SPIN/min_spinmin.h new file mode 100644 index 0000000000..fe2cf7c51d --- /dev/null +++ b/src/SPIN/min_spinmin.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef MINIMIZE_CLASS + +MinimizeStyle(spinmin,MinSpinMin) + +#else + +#ifndef LMP_MIN_SPINMIN_H +#define LMP_MIN_SPINMIN_H + +#include "min.h" + +namespace LAMMPS_NS { + +class MinSpinMin : public Min { + public: + MinSpinMin(class LAMMPS *); + ~MinSpinMin() {} + void init(); + void setup_style(); + void reset_vectors(); + int iterate(int); + double evaluate_dt(); + void advance_spins(double); + + class FixNEB_spin *fneb; + + private: + + // spin timestep + double dts; + + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + + + double dt; + bigint last_negative; +}; + +} + +#endif +#endif From 146e2f283a7d717cff840f0b3696fc27c8826931 Mon Sep 17 00:00:00 2001 From: mkanski Date: Tue, 5 Mar 2019 19:11:33 +0100 Subject: [PATCH 010/372] Better error handling in reaxc_forces --- src/USER-REAXC/pair_reaxc.cpp | 11 ++++++----- src/USER-REAXC/reaxc_allocate.cpp | 12 ++++++++---- src/USER-REAXC/reaxc_allocate.h | 7 ++++++- src/USER-REAXC/reaxc_forces.cpp | 18 +++++++++++------- src/USER-REAXC/reaxc_forces.h | 2 +- src/USER-REAXC/reaxc_init_md.cpp | 12 +++++++----- src/USER-REAXC/reaxc_init_md.h | 5 ++++- src/USER-REAXC/reaxc_reset_tools.cpp | 12 +++++++----- src/USER-REAXC/reaxc_reset_tools.h | 8 ++++++-- 9 files changed, 56 insertions(+), 31 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index b68e0d0779..0f4b3a5b3d 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -394,7 +394,8 @@ void PairReaxC::init_style( ) "increased neighbor list skin."); for( int i = 0; i < LIST_N; ++i ) - lists[i].allocated = 0; + if (lists[i].allacated != 1) + lists[i].allocated = 0; if (fix_reax == NULL) { char **fixarg = new char*[3]; @@ -445,7 +446,7 @@ void PairReaxC::setup( ) error->all(FLERR,"Pair reax/c problem in far neighbor list"); write_reax_lists(); - Initialize( system, control, data, workspace, &lists, out_control, + Initialize( lmp, system, control, data, workspace, &lists, out_control, mpi_data, world ); for( int k = 0; k < system->N; ++k ) { num_bonds[k] = system->my_atoms[k].num_bonds; @@ -465,7 +466,7 @@ void PairReaxC::setup( ) // check if I need to shrink/extend my data-structs - ReAllocate( system, control, data, workspace, &lists, mpi_data ); + ReAllocate( lmp, system, control, data, workspace, &lists, mpi_data ); } bigint local_ngroup = list->inum; @@ -517,7 +518,7 @@ void PairReaxC::compute(int eflag, int vflag) setup(); - Reset( system, control, data, workspace, &lists, world ); + Reset( lmp, system, control, data, workspace, &lists, world ); workspace->realloc.num_far = write_reax_lists(); // timing for filling in the reax lists if (comm->me == 0) { @@ -527,7 +528,7 @@ void PairReaxC::compute(int eflag, int vflag) // forces - Compute_Forces(system,control,data,workspace,&lists,out_control,mpi_data); + Compute_Forces(lmp, system,control,data,workspace,&lists,out_control,mpi_data); read_reax_forces(vflag); for(int k = 0; k < system->N; ++k) { diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index 700e68514c..ebf0684389 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -35,6 +35,10 @@ #include #endif +#include "lammps.h" +#include "error.h" +using namespace LAMMPS_NS; + /* allocate space for my_atoms important: we cannot know the exact number of atoms that will fall into a process's box throughout the whole simulation. therefore @@ -353,7 +357,7 @@ static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, } -static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, +static int Reallocate_Bonds_List( LAMMPS *lmp, reax_system *system, reax_list *bonds, int *total_bonds, int *est_3body, MPI_Comm comm ) { @@ -379,7 +383,7 @@ static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, Delete_List( bonds, comm ); if(!Make_List(system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) { fprintf( stderr, "not enough space for bonds list. terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR, "Can't allocate space for hbonds."); } #ifdef LMP_USER_OMP @@ -399,7 +403,7 @@ static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, } -void ReAllocate( reax_system *system, control_params *control, +void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, mpi_datatypes *mpi_data ) { @@ -490,7 +494,7 @@ void ReAllocate( reax_system *system, control_params *control, /* bonds list */ num_bonds = est_3body = -1; if (Nflag || realloc->bonds) { - Reallocate_Bonds_List( system, (*lists)+BONDS, &num_bonds, + Reallocate_Bonds_List( lmp, system, (*lists)+BONDS, &num_bonds, &est_3body, comm ); realloc->bonds = 0; realloc->num_3body = MAX( realloc->num_3body, est_3body ) * 2; diff --git a/src/USER-REAXC/reaxc_allocate.h b/src/USER-REAXC/reaxc_allocate.h index f8814859af..786ee6ee8b 100644 --- a/src/USER-REAXC/reaxc_allocate.h +++ b/src/USER-REAXC/reaxc_allocate.h @@ -28,6 +28,11 @@ #define __ALLOCATE_H_ #include "reaxc_types.h" + +#include "lammps.h" +#include "error.h" +using namespace LAMMPS_NS; + int PreAllocate_Space( reax_system*, control_params*, storage*, MPI_Comm ); int Allocate_System( reax_system*, int, int, char* ); @@ -37,6 +42,6 @@ int Allocate_Workspace( reax_system*, control_params*, storage*, int, int, MPI_Comm, char* ); void DeAllocate_Workspace( control_params*, storage* ); -void ReAllocate( reax_system*, control_params*, simulation_data*, storage*, +void ReAllocate( LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, reax_list**, mpi_datatypes* ); #endif diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 19b3cc4975..848c03f5a1 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -39,7 +39,11 @@ #include "reaxc_valence_angles.h" #include "reaxc_vector.h" +#include "lammps.h" +#include "error.h" + interaction_function Interaction_Functions[NUM_INTRS]; +using namespace LAMMPS_NS; void Dummy_Interaction( reax_system * /*system*/, control_params * /*control*/, simulation_data * /*data*/, storage * /*workspace*/, @@ -114,7 +118,7 @@ void Compute_Total_Force( reax_system *system, control_params *control, } -void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **lists, +void Validate_Lists( LAMMPS *lmp, reax_system *system, storage * /*workspace*/, reax_list **lists, int step, int /*n*/, int N, int numH, MPI_Comm comm ) { int i, comp, Hindex; @@ -136,7 +140,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l if (End_Index(i, bonds) > comp) { fprintf( stderr, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", step, i, End_Index(i,bonds), comp ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR,"Failure in bond list."); } } } @@ -163,7 +167,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l if (End_Index(Hindex, hbonds) > comp) { fprintf(stderr,"step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", step, Hindex, End_Index(Hindex,hbonds), comp ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR, "Failure in hydrogen bonds."); } } } @@ -171,7 +175,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l } -void Init_Forces_noQEq( reax_system *system, control_params *control, +void Init_Forces_noQEq( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls * /*out_control*/, MPI_Comm comm ) { @@ -307,7 +311,7 @@ void Init_Forces_noQEq( reax_system *system, control_params *control, workspace->realloc.num_bonds = num_bonds; workspace->realloc.num_hbonds = num_hbonds; - Validate_Lists( system, workspace, lists, data->step, + Validate_Lists( lmp, system, workspace, lists, data->step, system->n, system->N, system->numH, comm ); } @@ -431,14 +435,14 @@ void Estimate_Storages( reax_system *system, control_params *control, } -void Compute_Forces( reax_system *system, control_params *control, +void Compute_Forces( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { MPI_Comm comm = mpi_data->world; - Init_Forces_noQEq( system, control, data, workspace, + Init_Forces_noQEq( lmp, system, control, data, workspace, lists, out_control, comm ); /********* bonded interactions ************/ diff --git a/src/USER-REAXC/reaxc_forces.h b/src/USER-REAXC/reaxc_forces.h index 6c839a7023..31cfc03a6b 100644 --- a/src/USER-REAXC/reaxc_forces.h +++ b/src/USER-REAXC/reaxc_forces.h @@ -33,7 +33,7 @@ extern interaction_function Interaction_Functions[NUM_INTRS]; void Init_Force_Functions( control_params* ); -void Compute_Forces( reax_system*, control_params*, simulation_data*, +void Compute_Forces( LAMMPS_NS::LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes* ); void Estimate_Storages( reax_system*, control_params*, reax_list**, int*, int*, int*, int*, MPI_Comm ); diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 5901b76326..4565fd067d 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -36,6 +36,8 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" +using namespace LAMMPS_NS; + int Init_System( reax_system *system, control_params *control, char * /*msg*/ ) { int i; @@ -150,7 +152,7 @@ int Init_MPI_Datatypes( reax_system *system, storage * /*workspace*/, return SUCCESS; } -int Init_Lists( reax_system *system, control_params *control, +int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data * /*data*/, storage * /*workspace*/, reax_list **lists, mpi_datatypes *mpi_data, char * /*msg*/ ) { @@ -180,7 +182,7 @@ int Init_Lists( reax_system *system, control_params *control, if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, *lists+HBONDS, comm ) ) { fprintf( stderr, "not enough space for hbonds list. terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR, "Can't allocate space for hbonds."); } } @@ -194,7 +196,7 @@ int Init_Lists( reax_system *system, control_params *control, if( !Make_List( system->total_cap, bond_cap, TYP_BOND, *lists+BONDS, comm ) ) { fprintf( stderr, "not enough space for bonds list. terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR, "Can't allocate space for hbonds."); } /* 3bodies list */ @@ -211,7 +213,7 @@ int Init_Lists( reax_system *system, control_params *control, return SUCCESS; } -void Initialize( reax_system *system, control_params *control, +void Initialize( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data, MPI_Comm comm ) @@ -250,7 +252,7 @@ void Initialize( reax_system *system, control_params *control, MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); } - if (Init_Lists( system, control, data, workspace, lists, mpi_data, msg ) == + if (Init_Lists( lmp, system, control, data, workspace, lists, mpi_data, msg ) == FAILURE) { fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); fprintf( stderr, "p%d: system could not be initialized! terminating.\n", diff --git a/src/USER-REAXC/reaxc_init_md.h b/src/USER-REAXC/reaxc_init_md.h index 25333c744f..2baa70245b 100644 --- a/src/USER-REAXC/reaxc_init_md.h +++ b/src/USER-REAXC/reaxc_init_md.h @@ -29,6 +29,9 @@ #include "reaxc_types.h" -void Initialize( reax_system*, control_params*, simulation_data*, storage*, +#include "lammps.h" +#include "error.h" + +void Initialize( LAMMPS_NS::LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes*, MPI_Comm ); #endif diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index 80faed1e9f..d9cb5f22fe 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -30,6 +30,8 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" +using namespace LAMMPS_NS; + void Reset_Atoms( reax_system* system, control_params *control ) { int i; @@ -119,7 +121,7 @@ void Reset_Workspace( reax_system *system, storage *workspace ) } -void Reset_Neighbor_Lists( reax_system *system, control_params *control, +void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system *system, control_params *control, storage *workspace, reax_list **lists, MPI_Comm comm ) { @@ -145,7 +147,7 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, fprintf(stderr, "p%d: not enough space for bonds! total=%d allocated=%d\n", system->my_rank, total_bonds, bonds->num_intrs ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR, "Can't allocate space for hbonds."); } } } @@ -171,14 +173,14 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, fprintf(stderr, "p%d: not enough space for hbonds! total=%d allocated=%d\n", system->my_rank, total_hbonds, hbonds->num_intrs ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->all(FLERR, "Can't allocate space for hbonds."); } } } } -void Reset( reax_system *system, control_params *control, simulation_data *data, +void Reset( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, MPI_Comm comm ) { Reset_Atoms( system, control ); @@ -187,6 +189,6 @@ void Reset( reax_system *system, control_params *control, simulation_data *data, Reset_Workspace( system, workspace ); - Reset_Neighbor_Lists( system, control, workspace, lists, comm ); + Reset_Neighbor_Lists( lmp, system, control, workspace, lists, comm ); } diff --git a/src/USER-REAXC/reaxc_reset_tools.h b/src/USER-REAXC/reaxc_reset_tools.h index c2a90072d5..9e2b9de980 100644 --- a/src/USER-REAXC/reaxc_reset_tools.h +++ b/src/USER-REAXC/reaxc_reset_tools.h @@ -29,12 +29,16 @@ #include "reaxc_types.h" +#include "lammps.h" +#include "error.h" +using namespace LAMMPS_NS; + void Reset_Pressures( simulation_data* ); void Reset_Simulation_Data( simulation_data*, int ); void Reset_Timing( reax_timing* ); void Reset_Workspace( reax_system*, storage* ); -void Reset_Neighbor_Lists( reax_system*, control_params*, storage*, +void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system*, control_params*, storage*, reax_list**, MPI_Comm ); -void Reset( reax_system*, control_params*, simulation_data*, storage*, +void Reset( LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, reax_list**, MPI_Comm ); #endif From 14a00662e6efc8795b82262d48a1b6b9d0605db4 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 11 Mar 2019 13:04:03 -0600 Subject: [PATCH 011/372] Commit JT 031119 - first working version of spinmin --- examples/SPIN/read_restart/in.spin.read_data | 2 +- src/SPIN/fix_precession_spin.cpp | 3 + src/SPIN/min_spinmin.cpp | 112 ++++++++++++------- src/SPIN/pair_spin_exchange.cpp | 5 +- 4 files changed, 80 insertions(+), 42 deletions(-) diff --git a/examples/SPIN/read_restart/in.spin.read_data b/examples/SPIN/read_restart/in.spin.read_data index 17343994b5..a450421699 100644 --- a/examples/SPIN/read_restart/in.spin.read_data +++ b/examples/SPIN/read_restart/in.spin.read_data @@ -40,6 +40,6 @@ thermo_style custom step time v_magnorm v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 10 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] +dump 1 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] run 100 diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index d3edb3ae8a..65d5e9120e 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -171,6 +171,9 @@ void FixPrecessionSpin::setup(int vflag) void FixPrecessionSpin::post_force(int /*vflag*/) { + + printf("test inside post force (precession) \n"); + // update mag field with time (potential improvement) if (varflag != CONSTANT) { diff --git a/src/SPIN/min_spinmin.cpp b/src/SPIN/min_spinmin.cpp index 08f91abae7..4b362fda87 100644 --- a/src/SPIN/min_spinmin.cpp +++ b/src/SPIN/min_spinmin.cpp @@ -96,7 +96,7 @@ int MinSpinMin::iterate(int maxiter) bigint ntimestep; //double vmax,vdotf,vdotfall,fdotf,fdotfall,scale; //double dtvone,dtv,dtf,dtfm; - //int flag,flagall; + int flag,flagall; //alpha_final = 0.0; @@ -226,29 +226,44 @@ int MinSpinMin::iterate(int maxiter) // } //} - //eprevious = ecurrent; - //ecurrent = energy_force(0); - //neval++; + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; //// energy tolerance criterion //// only check after DELAYSTEP elapsed since velocties reset to 0 //// sync across replicas if running multi-replica minimization - //if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + if (update->multireplica == 0) { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + return ETOL; + } else { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return ETOL; + } + } + + //// magnetic force tolerance criterion + //// sync across replicas if running multi-replica minimization + + //if (update->fmtol > 0.0) { + // fmdotfm = fmnorm_sqr(); // if (update->multireplica == 0) { - // if (fabs(ecurrent-eprevious) < - // update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) - // return ETOL; + // if (fmdotfm < update->fmtol*update->fmtol) return FTOL; // } else { - // if (fabs(ecurrent-eprevious) < - // update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) - // flag = 0; + // if (fmdotfm < update->fmtol*update->fmtol) flag = 0; // else flag = 1; - // MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); - // if (flagall == 0) return ETOL; + // MPI_Allreduce(&fmlag,&fmlagall,1,MPI_INT,MPI_SUM,universe->uworld); + // if (fmlagall == 0) return FTOL; // } //} - + //// force tolerance criterion //// sync across replicas if running multi-replica minimization @@ -266,11 +281,11 @@ int MinSpinMin::iterate(int maxiter) //// output for thermo, dump, restart files - //if (output->next == ntimestep) { - // timer->stamp(); - // output->write(ntimestep); - // timer->stamp(Timer::OUTPUT); - //} + if (output->next == ntimestep) { + timer->stamp(); + output->write(ntimestep); + timer->stamp(Timer::OUTPUT); + } } return MAXITER; @@ -296,6 +311,7 @@ double MinSpinMin::evaluate_dt() fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; fmaxsqone = MAX(fmaxsqone,fmsq); } + //printf("test inside evaluate dt, fmaxsqone = %g \n",fmaxsqone); //for (int i = 0; i < nlocal; i++) // if (mask[i] & groupbit) { // fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; @@ -310,18 +326,21 @@ double MinSpinMin::evaluate_dt() // finding max fm over all replicas, if necessary // this communicator would be invalid for multiprocess replicas + fmaxsqall = fmaxsqloc; if (update->multireplica == 1) { fmaxsqall = fmaxsqloc; MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); } - if (fmaxsqall < fmaxsqloc) - error->all(FLERR,"Incorrect fmaxall calc."); + //if (fmaxsqall < fmaxsqloc) + // error->all(FLERR,"Incorrect fmaxall calc."); // define max timestep // dividing by 10 the inverse of max frequency + //printf("test inside evaluate dt, fmaxsqall = %g \n",fmaxsqall); dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); + //printf("test inside evaluate dt, dtmax = %g \n",dtmax); return dtmax; } @@ -341,7 +360,7 @@ void MinSpinMin::advance_spins(double dts) double tdampx,tdampy,tdampz; double msq,scale,fm2,energy,dts2; double alpha; - double spi[3],fmi[3]; + //double spi[3],fmi[3]; double cp[3],g[3]; //cp[0] = cp[1] = cp[2] = 0.0; @@ -351,6 +370,9 @@ void MinSpinMin::advance_spins(double dts) // fictitious Gilbert damping of 1 alpha = 1.0; + //printf("test inside spinmin, dts %g \n",dts); + //printf("test inside spinmin, fmi i=%d, %g %g %g \n",1,fm[1][0],fm[1][1],fm[1][2]); + // loop on all spins on proc. //if (ireplica != nreplica-1 && ireplica != 0) @@ -358,19 +380,21 @@ void MinSpinMin::advance_spins(double dts) // if (mask[i] & groupbit) { for (int i = 0; i < nlocal; i++) { - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - - fmi[0] = fm[i][0]; - fmi[1] = fm[i][1]; - fmi[2] = fm[i][2]; + //spi[0] = sp[i][0]; + //spi[1] = sp[i][1]; + //spi[2] = sp[i][2]; + // + //fmi[0] = fm[i][0]; + //fmi[1] = fm[i][1]; + //fmi[2] = fm[i][2]; // calc. damping torque - tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); - tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); - tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); + tdampx = -alpha*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + //printf("for %d, test tdamp: %g %g %g \n",i,tdampx,tdampy,tdampz); // apply advance algorithm (geometric, norm preserving) @@ -381,18 +405,27 @@ void MinSpinMin::advance_spins(double dts) cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; + //printf("for %d, test cp: %g %g %g \n",i,cp[0],cp[1],cp[2]); + g[0] = sp[i][0]+cp[0]*dts; g[1] = sp[i][1]+cp[1]*dts; g[2] = sp[i][2]+cp[2]*dts; - g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; - g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; - g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; + //g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; + //g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; + //g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; + g[0] += (tdampx*energy-0.5*sp[i][0]*fm2)*0.5*dts2; + g[1] += (tdampy*energy-0.5*sp[i][1]*fm2)*0.5*dts2; + g[2] += (tdampz*energy-0.5*sp[i][2]*fm2)*0.5*dts2; g[0] /= (1+0.25*fm2*dts2); g[1] /= (1+0.25*fm2*dts2); g[2] /= (1+0.25*fm2*dts2); - + + //printf("test inside spinmin, spi i=%d, %g %g %g \n",i,sp[i][0],sp[i][1],sp[i][2]); + //printf("test inside spinmin, fmi i=%d, %g %g %g \n",i,fm[i][0],fm[i][1],fm[i][2]); + //printf("for %d, test g: %g %g %g \n",i,g[0],g[1],g[2]); + sp[i][0] = g[0]; sp[i][1] = g[1]; sp[i][2] = g[2]; @@ -422,7 +455,8 @@ void MinSpinMin::advance_spins(double dts) // } - printf("test inside spinmin, dts = %g \n",dts); - printf("test inside spinmin, fmi i=%d, %g %g %g \n",1,fm[1][0],fm[1][1],fm[1][2]); - printf("test inside spinmin, spi i=%d, %g %g %g \n",1,sp[1][0],sp[1][1],sp[1][2]); + //printf("test inside spinmin, dts = %g \n",dts); + //printf("test inside spinmin, fmi i=%d, %g %g %g \n",1,fm[1][0],fm[1][1],fm[1][2]); + //printf("test inside spinmin, spi i=%d, %g %g %g \n",1,sp[1][0],sp[1][1],sp[1][2]); } + diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index ec21fe8838..84e771a2ed 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -161,8 +161,9 @@ void PairSpinExchange::init_style() if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); + // test remove if test + //if (ifix == modify->nfix) + // error->all(FLERR,"pair/spin style requires nve/spin"); // get the lattice_flag from nve/spin From 5fff18932d446df46a48f284f2df251a360fce38 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 11 Mar 2019 13:23:55 -0600 Subject: [PATCH 012/372] Commit 2 JT 031119 - new input files gneb and spinmin --- examples/SPIN/gneb_bfo/Si.sw | 18 - examples/SPIN/gneb_bfo/final.hop1 | 2 - examples/SPIN/gneb_bfo/final.iron_spin_data | 82 -- .../{in.neb.spin_iron => in.gneb.iron} | 0 examples/SPIN/gneb_bfo/in.neb.hop1 | 67 -- examples/SPIN/gneb_bfo/in.neb.spin_iron_min | 42 - examples/SPIN/gneb_bfo/in.spin.bfo | 56 -- examples/SPIN/gneb_bfo/in.spin.dyna_iron | 53 -- examples/SPIN/gneb_bfo/in.spin.iron | 56 -- examples/SPIN/gneb_bfo/in.spin.single_spin | 57 -- examples/SPIN/gneb_bfo/in.spinmin.bfo | 83 ++ examples/SPIN/gneb_bfo/in.spinmin.iron | 71 ++ examples/SPIN/gneb_bfo/in.tad | 110 --- examples/SPIN/gneb_bfo/initial.hop1 | 860 ------------------ 14 files changed, 154 insertions(+), 1403 deletions(-) delete mode 100644 examples/SPIN/gneb_bfo/Si.sw delete mode 100644 examples/SPIN/gneb_bfo/final.hop1 delete mode 100644 examples/SPIN/gneb_bfo/final.iron_spin_data rename examples/SPIN/gneb_bfo/{in.neb.spin_iron => in.gneb.iron} (100%) delete mode 100644 examples/SPIN/gneb_bfo/in.neb.hop1 delete mode 100644 examples/SPIN/gneb_bfo/in.neb.spin_iron_min delete mode 100644 examples/SPIN/gneb_bfo/in.spin.bfo delete mode 100644 examples/SPIN/gneb_bfo/in.spin.dyna_iron delete mode 100644 examples/SPIN/gneb_bfo/in.spin.iron delete mode 100644 examples/SPIN/gneb_bfo/in.spin.single_spin create mode 100644 examples/SPIN/gneb_bfo/in.spinmin.bfo create mode 100644 examples/SPIN/gneb_bfo/in.spinmin.iron delete mode 100644 examples/SPIN/gneb_bfo/in.tad delete mode 100644 examples/SPIN/gneb_bfo/initial.hop1 diff --git a/examples/SPIN/gneb_bfo/Si.sw b/examples/SPIN/gneb_bfo/Si.sw deleted file mode 100644 index db4be100ef..0000000000 --- a/examples/SPIN/gneb_bfo/Si.sw +++ /dev/null @@ -1,18 +0,0 @@ -# DATE: 2007-06-11 CONTRIBUTOR: Aidan Thompson, athomps@sandia.gov CITATION: Stillinger and Weber, Phys Rev B, 31, 5262, (1985) -# Stillinger-Weber parameters for various elements and mixtures -# multiple entries can be added to this file, LAMMPS reads the ones it needs -# these entries are in LAMMPS "metal" units: -# epsilon = eV; sigma = Angstroms -# other quantities are unitless - -# format of a single entry (one or more lines): -# element 1, element 2, element 3, -# epsilon, sigma, a, lambda, gamma, costheta0, A, B, p, q, tol - -# Here are the original parameters in metal units, for Silicon from: -# -# Stillinger and Weber, Phys. Rev. B, v. 31, p. 5262, (1985) -# - -Si Si Si 2.1683 2.0951 1.80 21.0 1.20 -0.333333333333 - 7.049556277 0.6022245584 4.0 0.0 0.0 diff --git a/examples/SPIN/gneb_bfo/final.hop1 b/examples/SPIN/gneb_bfo/final.hop1 deleted file mode 100644 index 338e674a9c..0000000000 --- a/examples/SPIN/gneb_bfo/final.hop1 +++ /dev/null @@ -1,2 +0,0 @@ -1 -412 14.0 20.5 0 diff --git a/examples/SPIN/gneb_bfo/final.iron_spin_data b/examples/SPIN/gneb_bfo/final.iron_spin_data deleted file mode 100644 index b337bac188..0000000000 --- a/examples/SPIN/gneb_bfo/final.iron_spin_data +++ /dev/null @@ -1,82 +0,0 @@ -LAMMPS data file via write_data, version 4 Jan 2019, timestep = 0 - -32 atoms -1 atom types - -0.0000000000000000e+00 1.1465999999999999e+01 xlo xhi -0.0000000000000000e+00 1.1465999999999999e+01 ylo yhi -0.0000000000000000e+00 2.8664999999999998e+00 zlo zhi - -Masses - -1 55.845 - -Atoms # spin - -1 1 2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -2 1 2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -3 1 2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -4 1 2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -5 1 2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -6 1 2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -7 1 2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -8 1 2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -9 1 2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -11 1 2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -13 1 2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -15 1 2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -10 1 2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -12 1 2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -14 1 2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -16 1 2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -17 1 2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -18 1 2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -19 1 2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -20 1 2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -21 1 2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -22 1 2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -23 1 2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -24 1 2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -25 1 2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -27 1 2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -29 1 2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -31 1 2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -26 1 2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -28 1 2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -30 1 2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -32 1 2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 - -Velocities - -1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/SPIN/gneb_bfo/in.neb.spin_iron b/examples/SPIN/gneb_bfo/in.gneb.iron similarity index 100% rename from examples/SPIN/gneb_bfo/in.neb.spin_iron rename to examples/SPIN/gneb_bfo/in.gneb.iron diff --git a/examples/SPIN/gneb_bfo/in.neb.hop1 b/examples/SPIN/gneb_bfo/in.neb.hop1 deleted file mode 100644 index 6697330faa..0000000000 --- a/examples/SPIN/gneb_bfo/in.neb.hop1 +++ /dev/null @@ -1,67 +0,0 @@ -# 2d NEB surface simulation, hop from surface to become adatom -print "Test 1" - -dimension 2 -boundary p s p - -atom_style atomic -neighbor 0.3 bin -neigh_modify delay 5 -atom_modify map array sort 0 0.0 - -variable u uloop 20 - -# create geometry with flat surface - -lattice hex 0.9 -region box block 0 20 0 10 -0.25 0.25 - -#create_box 3 box -#create_atoms 1 box -#mass * 1.0 -#write_data initial.hop1 - -read_data ../examples/SPIN/gneb_bfo/initial.hop1 - -# LJ potentials - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_modify shift yes - -# initial minimization to relax surface - -minimize 1.0e-6 1.0e-4 1000 10000 -reset_timestep 0 - -# define groups - -region 1 block INF INF INF 1.25 INF INF -group lower region 1 -group mobile subtract all lower -set group lower type 2 - -timestep 0.05 - -# group of NEB atoms - either block or single atom ID 412 - -region surround block 10 18 17 20 0 0 units box -group nebatoms region surround -#group nebatoms id 412 -set group nebatoms type 3 -group nonneb subtract all nebatoms - -fix 1 lower setforce 0.0 0.0 0.0 -fix 2 nebatoms neb 1.0 parallel ideal -fix 3 all enforce2d - -thermo 100 - -#dump 1 nebatoms atom 10 dump.neb.$u -#dump 2 nonneb atom 10 dump.nonneb.$u - -# run NEB for 2000 steps or to force tolerance - -min_style quickmin - -neb 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.hop1 diff --git a/examples/SPIN/gneb_bfo/in.neb.spin_iron_min b/examples/SPIN/gneb_bfo/in.neb.spin_iron_min deleted file mode 100644 index a38a8fbde5..0000000000 --- a/examples/SPIN/gneb_bfo/in.neb.spin_iron_min +++ /dev/null @@ -1,42 +0,0 @@ -# bcc iron in a 3d periodic box - -units metal -dimension 3 -boundary p p f - -atom_style spin - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -region box block 0.0 4.0 0.0 4.0 0.0 1.0 -#create_box 1 box -#create_atoms 1 box - -read_data ../examples/SPIN/gneb_bfo/initial.iron_spin - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 -#set group all spin 2.2 -1.0 0.0 0.0 - -pair_style spin/exchange 3.5 -pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 -fix 2 all langevin/spin 0.1 0.0 21 -fix 3 all neb/spin 1.0 -fix 4 all nve/spin lattice no -#parallel ideal - -timestep 0.0001 -thermo 100 - - -min_style spinmin -neb/spin 0.0 0.1 10 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin -#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spin.bfo b/examples/SPIN/gneb_bfo/in.spin.bfo deleted file mode 100644 index e3c88b0f06..0000000000 --- a/examples/SPIN/gneb_bfo/in.spin.bfo +++ /dev/null @@ -1,56 +0,0 @@ -# layer sc iron atoms (in the [001] plane) in bismuth oxide - -clear -units metal -atom_style spin - -dimension 3 -boundary p p f - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice sc 3.96 -region box block 0.0 34.0 0.0 34.0 0.0 5.0 -create_box 1 box -create_atoms 1 box - -# setting mass, mag. moments, and interactions for bfo - -mass 1 1.0 - -set group all spin/random 11 2.50 - -#pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 -pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 -pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 -pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 -pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice no - -timestep 0.0002 - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -#thermo_style custom step time v_magnorm v_emag temp etotal -thermo_style custom step time v_magnorm pe ke v_emag temp etotal -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 2000 diff --git a/examples/SPIN/gneb_bfo/in.spin.dyna_iron b/examples/SPIN/gneb_bfo/in.spin.dyna_iron deleted file mode 100644 index 918819c816..0000000000 --- a/examples/SPIN/gneb_bfo/in.spin.dyna_iron +++ /dev/null @@ -1,53 +0,0 @@ -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary f f f - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -region box block 0.0 4.0 0.0 4.0 0.0 1.0 -create_box 1 box -create_atoms 1 box - -#read_data ../examples/SPIN/gneb_bfo/initial.iron_spin - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 -set group all spin 2.2 -1.0 0.0 0.0 - -pair_style spin/exchange 3.5 -pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 -fix 2 all langevin/spin 300.0 0.01 21 -#fix 3 all neb/spin 1.0 -fix 3 all nve/spin lattice no -timestep 0.0001 - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magx equal c_out_mag[1] -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magx v_magnorm v_tmag temp v_emag ke pe etotal -thermo 100 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -run 10000 diff --git a/examples/SPIN/gneb_bfo/in.spin.iron b/examples/SPIN/gneb_bfo/in.spin.iron deleted file mode 100644 index 0c84845f5f..0000000000 --- a/examples/SPIN/gneb_bfo/in.spin.iron +++ /dev/null @@ -1,56 +0,0 @@ -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -region box block 0.0 4.0 0.0 4.0 0.0 1.0 -create_box 1 box -create_atoms 1 box - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 - -set group all spin 2.2 1.0 0.0 0.0 -#velocity all create 100 4928459 rot yes dist gaussian - -pair_style spin/exchange 3.5 -pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice yes -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 0 -write_data initial.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spin.single_spin b/examples/SPIN/gneb_bfo/in.spin.single_spin deleted file mode 100644 index 3a63c87b8c..0000000000 --- a/examples/SPIN/gneb_bfo/in.spin.single_spin +++ /dev/null @@ -1,57 +0,0 @@ -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary f f f -#boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice sc 2.8665 -region box block 0.0 1.0 0.0 1.0 0.0 1.0 -create_box 1 box -create_atoms 1 box - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 - -set group all spin 2.2 0.0 0.0 1.0 -#velocity all create 100 4928459 rot yes dist gaussian - -pair_style spin/exchange 3.5 -pair_coeff * * exchange 3.4 0.0 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.01 0.0 1.0 0.0 anisotropy 0.005 0.0 0.0 1.0 -fix 2 all langevin/spin 50.0 0.1 21 - -fix 3 all nve/spin lattice no -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magz v_magnorm v_tmag temp v_emag ke pe etotal -thermo 100 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 50000 -write_data final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spinmin.bfo b/examples/SPIN/gneb_bfo/in.spinmin.bfo new file mode 100644 index 0000000000..c048ac32c6 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.spinmin.bfo @@ -0,0 +1,83 @@ +# bcc iron in a 3d periodic box + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 3.96 +region box block 0.0 68.0 0.0 68.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +#read_data ../examples/SPIN/gneb_bfo/initial.iron_spin + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 1.0 +set group all spin/random 11 2.50 +#set group all spin 2.5 -1.0 0.0 0.0 + +pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 +pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 +#pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 +pair_coeff * * spin/magelec magelec 4.5 0.00109 1.0 1.0 1.0 +pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +#fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 +fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 +fix 2 all langevin/spin 0.1 0.0 21 +fix 3 all nve/spin lattice no +#fix 3 all neb/spin 1.0 +#fix 4 all nve/spin lattice no +#parallel ideal + +timestep 0.0001 +#thermo 10 + +#compute outsp all property/atom spx spy spz sp fmx fmy fmz +#dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +#min_style spinmin +#minimize 1.0e-6 1.0e-6 1000 10000 +#minimize 1.0e-6 1.0e-6 10000 10000 +#minimize 1.0e-7 1.0e-7 10000 10000 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo 50 +thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 200 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +#timestep 0.0001 +#run 1 +min_style spinmin +#minimize 1.0e-6 1.0e-6 1000 10000 +#minimize 1.0e-6 1.0e-6 10000 10000 +minimize 1.0e-8 1.0e-8 10000 1000 + +#write_dump all custom dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +#compute outsp all property/atom spx spy spz sp fmx fmy fmz +#dump 1 all custom 1 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] +#thermo 1 + +#neb/spin 0.0 0.1 10 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin +#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spinmin.iron b/examples/SPIN/gneb_bfo/in.spinmin.iron new file mode 100644 index 0000000000..4439960390 --- /dev/null +++ b/examples/SPIN/gneb_bfo/in.spinmin.iron @@ -0,0 +1,71 @@ +# bcc iron in a 3d periodic box + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 4.0 0.0 4.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +#read_data ../examples/SPIN/gneb_bfo/initial.iron_spin + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin/random 31 2.2 +#set group all spin 2.2 -1.0 0.0 0.0 + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +#fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 +fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 +fix 2 all langevin/spin 0.1 0.0 21 +fix 3 all nve/spin lattice no +#fix 3 all neb/spin 1.0 +#fix 4 all nve/spin lattice no +#parallel ideal + +timestep 0.0001 + +#min_style spinmin +#minimize 1.0e-6 1.0e-6 1000 10000 +#minimize 1.0e-8 1.0e-6 1000 10000 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo 1 +thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +#timestep 0.0001 +#run 1 + +min_style spinmin +#minimize 1.0e-6 1.0e-6 1000 10000 +minimize 1.0e-8 1.0e-6 1000 10000 + + + +#neb/spin 0.0 0.1 10 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin +#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.tad b/examples/SPIN/gneb_bfo/in.tad deleted file mode 100644 index 674fdc8172..0000000000 --- a/examples/SPIN/gneb_bfo/in.tad +++ /dev/null @@ -1,110 +0,0 @@ -# temperature accelerated dynamics model for a single vacancy in bulk Si -# events occur when a neighboring atom diffuses to the vacant site -# run this on multiple partitions as -# mpirun -np 3 lmp_g++ -partition 3x1 -in in.tad - -units metal - -atom_style atomic -atom_modify map array -boundary p p p -atom_modify sort 0 0.0 - -# temperatures -variable tlo equal 1800.0 -variable thi equal 2400.0 - -# coordination number cutoff - -variable r equal 2.835 - -# minimization parameters - -variable etol equal 1.0e-5 -variable ftol equal 1.0e-5 -variable maxiter equal 100 -variable maxeval equal 100 -variable dmax equal 1.0e-1 - -# diamond unit cell - -variable a equal 5.431 -lattice custom $a & - a1 1.0 0.0 0.0 & - a2 0.0 1.0 0.0 & - a3 0.0 0.0 1.0 & - basis 0.0 0.0 0.0 & - basis 0.0 0.5 0.5 & - basis 0.5 0.0 0.5 & - basis 0.5 0.5 0.0 & - basis 0.25 0.25 0.25 & - basis 0.25 0.75 0.75 & - basis 0.75 0.25 0.75 & - basis 0.75 0.75 0.25 - -region myreg block 0 4 & - 0 4 & - 0 4 -create_box 1 myreg -create_atoms 1 region myreg - -mass 1 28.06 - -group Si type 1 - -velocity all create ${thi} 5287286 mom yes rot yes dist gaussian - -# make a vacancy - -group del id 300 -delete_atoms group del - -pair_style sw -pair_coeff * * ../examples/SPIN/gneb_bfo/Si.sw Si - -thermo 10 - -fix 1 all nve -fix 2 all langevin ${thi} ${thi} 0.1 48278 - -timestep 1.0e-3 -neighbor 1.0 bin -neigh_modify every 1 delay 10 check yes - -# equilibrate - -run 1000 - -# Eliminate COM motion -velocity all zero linear - -# only output atoms near vacancy - -compute coord all coord/atom cutoff $r - -#dump events all custom 1 dump.prd id type x y z -#dump_modify events thresh c_coord != 4 - -compute patom all pe/atom -compute pe all reduce sum c_patom -compute satom all stress/atom NULL -compute str all reduce sum c_satom[1] c_satom[2] c_satom[3] -variable press equal (c_str[1]+c_str[2]+c_str[3])/(3*vol) - -thermo_style custom step temp pe c_pe press v_press - -compute event all event/displace 1.0 - -unfix 1 -unfix 2 -fix 1 all nvt temp ${thi} ${thi} 0.1 - -# tad nsteps nevent tlo thi delta_conf tmax compute -# [min etol ftol niter neval] -# [neb etol_neb ftol_neb n1steps n2steps nevery] -# [neb_style min_style] -# [neb_log logfile] - -tad 2000 50 ${tlo} ${thi} 0.05 1.0 event & - min ${etol} ${ftol} ${maxiter} ${maxeval} & - neb 0.0 0.01 200 200 20 neb_style fire neb_log log.neb diff --git a/examples/SPIN/gneb_bfo/initial.hop1 b/examples/SPIN/gneb_bfo/initial.hop1 deleted file mode 100644 index 228708c314..0000000000 --- a/examples/SPIN/gneb_bfo/initial.hop1 +++ /dev/null @@ -1,860 +0,0 @@ -LAMMPS data file via write_data, version 27 Sep 2016, timestep = 0 - -420 atoms -3 atom types - -0.0000000000000000e+00 2.2653923264628304e+01 xlo xhi --1.9618873042551413e-03 1.9620834929855668e+01 ylo yhi --2.8317404080785380e-01 2.8317404080785380e-01 zlo zhi - -Masses - -1 1 -2 1 -3 1 - -Atoms # atomic - -1 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -2 1 5.6634808161570760e-01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -3 1 1.1326961632314152e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -4 1 1.6990442448471228e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -5 1 2.2653923264628304e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -6 1 2.8317404080785380e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -7 1 3.3980884896942456e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -8 1 3.9644365713099532e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -9 1 4.5307846529256608e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -10 1 5.0971327345413684e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -11 1 5.6634808161570760e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -12 1 6.2298288977727836e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -13 1 6.7961769793884912e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -14 1 7.3625250610041988e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -15 1 7.9288731426199064e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -16 1 8.4952212242356140e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -17 1 9.0615693058513216e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -18 1 9.6279173874670292e+00 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -19 1 1.0194265469082737e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -20 1 1.0760613550698444e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -21 1 1.1326961632314152e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -22 1 1.1893309713929860e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -23 1 1.2459657795545567e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -24 1 1.3026005877161275e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -25 1 1.3592353958776982e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -26 1 1.4158702040392690e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -27 1 1.4725050122008398e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -28 1 1.5291398203624105e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -29 1 1.5857746285239813e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -30 1 1.6424094366855520e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -31 1 1.6990442448471228e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -32 1 1.7556790530086936e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -33 1 1.8123138611702643e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -34 1 1.8689486693318351e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -35 1 1.9255834774934058e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -36 1 1.9822182856549766e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -37 1 2.0388530938165474e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -38 1 2.0954879019781181e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -39 1 2.1521227101396889e+01 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 -40 1 2.2087575183012596e+01 9.8094365212757073e-01 0.0000000000000000e+00 0 0 0 -41 1 0.0000000000000000e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -42 1 5.6634808161570760e-01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -43 1 1.1326961632314152e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -44 1 1.6990442448471228e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -45 1 2.2653923264628304e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -46 1 2.8317404080785380e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -47 1 3.3980884896942456e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -48 1 3.9644365713099532e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -49 1 4.5307846529256608e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -50 1 5.0971327345413684e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -51 1 5.6634808161570760e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -52 1 6.2298288977727836e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -53 1 6.7961769793884912e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -54 1 7.3625250610041988e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -55 1 7.9288731426199064e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -56 1 8.4952212242356140e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -57 1 9.0615693058513216e+00 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -58 1 9.6279173874670292e+00 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -59 1 1.0194265469082737e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -60 1 1.0760613550698444e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -61 1 1.1326961632314152e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -62 1 1.1893309713929860e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -63 1 1.2459657795545567e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -64 1 1.3026005877161275e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -65 1 1.3592353958776982e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -66 1 1.4158702040392690e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -67 1 1.4725050122008398e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -68 1 1.5291398203624105e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -69 1 1.5857746285239813e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -70 1 1.6424094366855520e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -71 1 1.6990442448471228e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -72 1 1.7556790530086936e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -73 1 1.8123138611702643e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -74 1 1.8689486693318351e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -75 1 1.9255834774934058e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -76 1 1.9822182856549766e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -77 1 2.0388530938165474e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -78 1 2.0954879019781181e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -79 1 2.1521227101396889e+01 1.9618873042551415e+00 0.0000000000000000e+00 0 0 0 -80 1 2.2087575183012596e+01 2.9428309563827124e+00 0.0000000000000000e+00 0 0 0 -81 1 0.0000000000000000e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -82 1 5.6634808161570760e-01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -83 1 1.1326961632314152e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -84 1 1.6990442448471228e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -85 1 2.2653923264628304e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -86 1 2.8317404080785380e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -87 1 3.3980884896942456e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -88 1 3.9644365713099532e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -89 1 4.5307846529256608e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -90 1 5.0971327345413684e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -91 1 5.6634808161570760e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -92 1 6.2298288977727836e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -93 1 6.7961769793884912e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -94 1 7.3625250610041988e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -95 1 7.9288731426199064e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -96 1 8.4952212242356140e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -97 1 9.0615693058513216e+00 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -98 1 9.6279173874670292e+00 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -99 1 1.0194265469082737e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -100 1 1.0760613550698444e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -101 1 1.1326961632314152e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -102 1 1.1893309713929860e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -103 1 1.2459657795545567e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -104 1 1.3026005877161275e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -105 1 1.3592353958776982e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -106 1 1.4158702040392690e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -107 1 1.4725050122008398e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -108 1 1.5291398203624105e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -109 1 1.5857746285239813e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -110 1 1.6424094366855520e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -111 1 1.6990442448471228e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -112 1 1.7556790530086936e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -113 1 1.8123138611702643e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -114 1 1.8689486693318351e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -115 1 1.9255834774934058e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -116 1 1.9822182856549766e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -117 1 2.0388530938165474e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -118 1 2.0954879019781181e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -119 1 2.1521227101396889e+01 3.9237746085102829e+00 0.0000000000000000e+00 0 0 0 -120 1 2.2087575183012596e+01 4.9047182606378534e+00 0.0000000000000000e+00 0 0 0 -121 1 0.0000000000000000e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -122 1 5.6634808161570760e-01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -123 1 1.1326961632314152e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -124 1 1.6990442448471228e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -125 1 2.2653923264628304e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -126 1 2.8317404080785380e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -127 1 3.3980884896942456e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -128 1 3.9644365713099532e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -129 1 4.5307846529256608e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -130 1 5.0971327345413684e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -131 1 5.6634808161570760e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -132 1 6.2298288977727836e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -133 1 6.7961769793884912e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -134 1 7.3625250610041988e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -135 1 7.9288731426199064e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -136 1 8.4952212242356140e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -137 1 9.0615693058513216e+00 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -138 1 9.6279173874670292e+00 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -139 1 1.0194265469082737e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -140 1 1.0760613550698444e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -141 1 1.1326961632314152e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -142 1 1.1893309713929860e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -143 1 1.2459657795545567e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -144 1 1.3026005877161275e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -145 1 1.3592353958776982e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -146 1 1.4158702040392690e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -147 1 1.4725050122008398e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -148 1 1.5291398203624105e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -149 1 1.5857746285239813e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -150 1 1.6424094366855520e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -151 1 1.6990442448471228e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -152 1 1.7556790530086936e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -153 1 1.8123138611702643e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -154 1 1.8689486693318351e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -155 1 1.9255834774934058e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -156 1 1.9822182856549766e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -157 1 2.0388530938165474e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -158 1 2.0954879019781181e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -159 1 2.1521227101396889e+01 5.8856619127654248e+00 0.0000000000000000e+00 0 0 0 -160 1 2.2087575183012596e+01 6.8666055648929953e+00 0.0000000000000000e+00 0 0 0 -161 1 0.0000000000000000e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -162 1 5.6634808161570760e-01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -163 1 1.1326961632314152e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -164 1 1.6990442448471228e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -165 1 2.2653923264628304e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -166 1 2.8317404080785380e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -167 1 3.3980884896942456e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -168 1 3.9644365713099532e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -169 1 4.5307846529256608e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -170 1 5.0971327345413684e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -171 1 5.6634808161570760e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -172 1 6.2298288977727836e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -173 1 6.7961769793884912e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -174 1 7.3625250610041988e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -175 1 7.9288731426199064e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -176 1 8.4952212242356140e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -177 1 9.0615693058513216e+00 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -178 1 9.6279173874670292e+00 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -179 1 1.0194265469082737e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -180 1 1.0760613550698444e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -181 1 1.1326961632314152e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -182 1 1.1893309713929860e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -183 1 1.2459657795545567e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -184 1 1.3026005877161275e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -185 1 1.3592353958776982e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -186 1 1.4158702040392690e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -187 1 1.4725050122008398e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -188 1 1.5291398203624105e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -189 1 1.5857746285239813e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -190 1 1.6424094366855520e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -191 1 1.6990442448471228e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -192 1 1.7556790530086936e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -193 1 1.8123138611702643e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -194 1 1.8689486693318351e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -195 1 1.9255834774934058e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -196 1 1.9822182856549766e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -197 1 2.0388530938165474e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -198 1 2.0954879019781181e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -199 1 2.1521227101396889e+01 7.8475492170205658e+00 0.0000000000000000e+00 0 0 0 -200 1 2.2087575183012596e+01 8.8284928691481355e+00 0.0000000000000000e+00 0 0 0 -201 1 0.0000000000000000e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -202 1 5.6634808161570760e-01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -203 1 1.1326961632314152e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -204 1 1.6990442448471228e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -205 1 2.2653923264628304e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -206 1 2.8317404080785380e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -207 1 3.3980884896942456e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -208 1 3.9644365713099532e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -209 1 4.5307846529256608e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -210 1 5.0971327345413684e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -211 1 5.6634808161570760e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -212 1 6.2298288977727836e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -213 1 6.7961769793884912e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -214 1 7.3625250610041988e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -215 1 7.9288731426199064e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -216 1 8.4952212242356140e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -217 1 9.0615693058513216e+00 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -218 1 9.6279173874670292e+00 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -219 1 1.0194265469082737e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -220 1 1.0760613550698444e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -221 1 1.1326961632314152e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -222 1 1.1893309713929860e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -223 1 1.2459657795545567e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -224 1 1.3026005877161275e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -225 1 1.3592353958776982e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -226 1 1.4158702040392690e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -227 1 1.4725050122008398e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -228 1 1.5291398203624105e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -229 1 1.5857746285239813e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -230 1 1.6424094366855520e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -231 1 1.6990442448471228e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -232 1 1.7556790530086936e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -233 1 1.8123138611702643e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -234 1 1.8689486693318351e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -235 1 1.9255834774934058e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -236 1 1.9822182856549766e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -237 1 2.0388530938165474e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -238 1 2.0954879019781181e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -239 1 2.1521227101396889e+01 9.8094365212757069e+00 0.0000000000000000e+00 0 0 0 -240 1 2.2087575183012596e+01 1.0790380173403278e+01 0.0000000000000000e+00 0 0 0 -241 1 0.0000000000000000e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -242 1 5.6634808161570760e-01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -243 1 1.1326961632314152e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -244 1 1.6990442448471228e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -245 1 2.2653923264628304e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -246 1 2.8317404080785380e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -247 1 3.3980884896942456e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -248 1 3.9644365713099532e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -249 1 4.5307846529256608e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -250 1 5.0971327345413684e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -251 1 5.6634808161570760e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -252 1 6.2298288977727836e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -253 1 6.7961769793884912e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -254 1 7.3625250610041988e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -255 1 7.9288731426199064e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -256 1 8.4952212242356140e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -257 1 9.0615693058513216e+00 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -258 1 9.6279173874670292e+00 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -259 1 1.0194265469082737e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -260 1 1.0760613550698444e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -261 1 1.1326961632314152e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -262 1 1.1893309713929860e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -263 1 1.2459657795545567e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -264 1 1.3026005877161275e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -265 1 1.3592353958776982e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -266 1 1.4158702040392690e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -267 1 1.4725050122008398e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -268 1 1.5291398203624105e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -269 1 1.5857746285239813e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -270 1 1.6424094366855520e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -271 1 1.6990442448471228e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -272 1 1.7556790530086936e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -273 1 1.8123138611702643e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -274 1 1.8689486693318351e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -275 1 1.9255834774934058e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -276 1 1.9822182856549766e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -277 1 2.0388530938165474e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -278 1 2.0954879019781181e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -279 1 2.1521227101396889e+01 1.1771323825530850e+01 0.0000000000000000e+00 0 0 0 -280 1 2.2087575183012596e+01 1.2752267477658419e+01 0.0000000000000000e+00 0 0 0 -281 1 0.0000000000000000e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -282 1 5.6634808161570760e-01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -283 1 1.1326961632314152e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -284 1 1.6990442448471228e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -285 1 2.2653923264628304e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -286 1 2.8317404080785380e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -287 1 3.3980884896942456e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -288 1 3.9644365713099532e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -289 1 4.5307846529256608e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -290 1 5.0971327345413684e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -291 1 5.6634808161570760e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -292 1 6.2298288977727836e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -293 1 6.7961769793884912e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -294 1 7.3625250610041988e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -295 1 7.9288731426199064e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -296 1 8.4952212242356140e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -297 1 9.0615693058513216e+00 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -298 1 9.6279173874670292e+00 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -299 1 1.0194265469082737e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -300 1 1.0760613550698444e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -301 1 1.1326961632314152e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -302 1 1.1893309713929860e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -303 1 1.2459657795545567e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -304 1 1.3026005877161275e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -305 1 1.3592353958776982e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -306 1 1.4158702040392690e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -307 1 1.4725050122008398e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -308 1 1.5291398203624105e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -309 1 1.5857746285239813e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -310 1 1.6424094366855520e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -311 1 1.6990442448471228e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -312 1 1.7556790530086936e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -313 1 1.8123138611702643e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -314 1 1.8689486693318351e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -315 1 1.9255834774934058e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -316 1 1.9822182856549766e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -317 1 2.0388530938165474e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -318 1 2.0954879019781181e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -319 1 2.1521227101396889e+01 1.3733211129785991e+01 0.0000000000000000e+00 0 0 0 -320 1 2.2087575183012596e+01 1.4714154781913560e+01 0.0000000000000000e+00 0 0 0 -321 1 0.0000000000000000e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -322 1 5.6634808161570760e-01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -323 1 1.1326961632314152e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -324 1 1.6990442448471228e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -325 1 2.2653923264628304e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -326 1 2.8317404080785380e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -327 1 3.3980884896942456e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -328 1 3.9644365713099532e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -329 1 4.5307846529256608e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -330 1 5.0971327345413684e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -331 1 5.6634808161570760e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -332 1 6.2298288977727836e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -333 1 6.7961769793884912e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -334 1 7.3625250610041988e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -335 1 7.9288731426199064e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -336 1 8.4952212242356140e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -337 1 9.0615693058513216e+00 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -338 1 9.6279173874670292e+00 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -339 1 1.0194265469082737e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -340 1 1.0760613550698444e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -341 1 1.1326961632314152e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -342 1 1.1893309713929860e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -343 1 1.2459657795545567e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -344 1 1.3026005877161275e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -345 1 1.3592353958776982e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -346 1 1.4158702040392690e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -347 1 1.4725050122008398e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -348 1 1.5291398203624105e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -349 1 1.5857746285239813e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -350 1 1.6424094366855520e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -351 1 1.6990442448471228e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -352 1 1.7556790530086936e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -353 1 1.8123138611702643e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -354 1 1.8689486693318351e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -355 1 1.9255834774934058e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -356 1 1.9822182856549766e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -357 1 2.0388530938165474e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -358 1 2.0954879019781181e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -359 1 2.1521227101396889e+01 1.5695098434041132e+01 0.0000000000000000e+00 0 0 0 -360 1 2.2087575183012596e+01 1.6676042086168703e+01 0.0000000000000000e+00 0 0 0 -361 1 0.0000000000000000e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -362 1 5.6634808161570760e-01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -363 1 1.1326961632314152e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -364 1 1.6990442448471228e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -365 1 2.2653923264628304e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -366 1 2.8317404080785380e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -367 1 3.3980884896942456e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -368 1 3.9644365713099532e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -369 1 4.5307846529256608e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -370 1 5.0971327345413684e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -371 1 5.6634808161570760e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -372 1 6.2298288977727836e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -373 1 6.7961769793884912e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -374 1 7.3625250610041988e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -375 1 7.9288731426199064e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -376 1 8.4952212242356140e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -377 1 9.0615693058513216e+00 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -378 1 9.6279173874670292e+00 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -379 1 1.0194265469082737e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -380 1 1.0760613550698444e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -381 1 1.1326961632314152e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -382 1 1.1893309713929860e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -383 1 1.2459657795545567e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -384 1 1.3026005877161275e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -385 1 1.3592353958776982e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -386 1 1.4158702040392690e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -387 1 1.4725050122008398e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -388 1 1.5291398203624105e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -389 1 1.5857746285239813e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -390 1 1.6424094366855520e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -391 1 1.6990442448471228e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -392 1 1.7556790530086936e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -393 1 1.8123138611702643e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -394 1 1.8689486693318351e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -395 1 1.9255834774934058e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -396 1 1.9822182856549766e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -397 1 2.0388530938165474e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -398 1 2.0954879019781181e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -399 1 2.1521227101396889e+01 1.7656985738296271e+01 0.0000000000000000e+00 0 0 0 -400 1 2.2087575183012596e+01 1.8637929390423842e+01 0.0000000000000000e+00 0 0 0 -401 1 0.0000000000000000e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -402 1 1.1326961632314152e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -403 1 2.2653923264628304e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -404 1 3.3980884896942456e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -405 1 4.5307846529256608e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -406 1 5.6634808161570760e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -407 1 6.7961769793884912e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -408 1 7.9288731426199064e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -409 1 9.0615693058513216e+00 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -410 1 1.0194265469082737e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -411 1 1.1326961632314152e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -412 1 1.2459657795545567e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -413 1 1.3592353958776982e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -414 1 1.4725050122008398e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -415 1 1.5857746285239813e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -416 1 1.6990442448471228e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -417 1 1.8123138611702643e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -418 1 1.9255834774934058e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -419 1 2.0388530938165474e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 -420 1 2.1521227101396889e+01 1.9618873042551414e+01 0.0000000000000000e+00 0 0 0 - -Velocities - -1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -281 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -282 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -283 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -284 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -285 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -286 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -287 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -288 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -289 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -290 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -291 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -292 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -293 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -294 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -296 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -297 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -298 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -299 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -300 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -301 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -302 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -303 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -305 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -306 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -307 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -308 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -309 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -310 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -311 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -312 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -313 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -314 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -315 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -317 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -318 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -319 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -320 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -321 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -322 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -323 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -324 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -325 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -326 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -327 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -328 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -329 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -330 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -331 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -332 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -333 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -336 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -337 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -338 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -339 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -340 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -341 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -342 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -343 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -344 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -345 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -346 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -349 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -350 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -353 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -354 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -355 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -356 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -357 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -360 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -361 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -362 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -363 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -364 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -366 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -367 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -368 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -369 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -370 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -372 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -373 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -374 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -375 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -376 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -377 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -378 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -380 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -381 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -384 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -385 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -386 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -389 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -390 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -392 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -393 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -396 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -397 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -398 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -399 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -400 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -401 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -402 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -403 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -404 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -405 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -406 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -407 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -408 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -409 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -410 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -411 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -412 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -413 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -414 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -415 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -416 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -417 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -418 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -419 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -420 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 From cc2b5fbb80d1087fbb4fe272f48cc08ef3c24967 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 11 Mar 2019 17:37:44 -0600 Subject: [PATCH 013/372] Commit JT 031119 - add min_post_force in precession --- examples/SPIN/gneb_bfo/in.gneb.iron | 1 - examples/SPIN/gneb_bfo/in.spinmin.bfo | 30 ++---------------- examples/SPIN/gneb_bfo/in.spinmin.iron | 21 ++---------- src/SPIN/fix_precession_spin.cpp | 8 +++++ src/SPIN/fix_precession_spin.h | 5 +-- src/SPIN/min_spinmin.cpp | 44 ++------------------------ src/SPIN/min_spinmin.h | 5 ++- 7 files changed, 19 insertions(+), 95 deletions(-) diff --git a/examples/SPIN/gneb_bfo/in.gneb.iron b/examples/SPIN/gneb_bfo/in.gneb.iron index 860db24a61..80ab698c16 100644 --- a/examples/SPIN/gneb_bfo/in.gneb.iron +++ b/examples/SPIN/gneb_bfo/in.gneb.iron @@ -1,5 +1,4 @@ # bcc iron in a 3d periodic box -print "Test 1" units metal dimension 3 diff --git a/examples/SPIN/gneb_bfo/in.spinmin.bfo b/examples/SPIN/gneb_bfo/in.spinmin.bfo index c048ac32c6..15a4d6e0f9 100644 --- a/examples/SPIN/gneb_bfo/in.spinmin.bfo +++ b/examples/SPIN/gneb_bfo/in.spinmin.bfo @@ -13,8 +13,6 @@ region box block 0.0 68.0 0.0 68.0 0.0 1.0 create_box 1 box create_atoms 1 box -#read_data ../examples/SPIN/gneb_bfo/initial.iron_spin - # setting mass, mag. moments, and interactions for bcc iron mass 1 1.0 @@ -34,20 +32,8 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 fix 2 all langevin/spin 0.1 0.0 21 fix 3 all nve/spin lattice no -#fix 3 all neb/spin 1.0 -#fix 4 all nve/spin lattice no -#parallel ideal timestep 0.0001 -#thermo 10 - -#compute outsp all property/atom spx spy spz sp fmx fmy fmz -#dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -#min_style spinmin -#minimize 1.0e-6 1.0e-6 1000 10000 -#minimize 1.0e-6 1.0e-6 10000 10000 -#minimize 1.0e-7 1.0e-7 10000 10000 compute out_mag all spin compute out_pe all pe @@ -66,18 +52,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 200 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -#timestep 0.0001 -#run 1 min_style spinmin -#minimize 1.0e-6 1.0e-6 1000 10000 -#minimize 1.0e-6 1.0e-6 10000 10000 -minimize 1.0e-8 1.0e-8 10000 1000 - -#write_dump all custom dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -#compute outsp all property/atom spx spy spz sp fmx fmy fmz -#dump 1 all custom 1 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -#thermo 1 - -#neb/spin 0.0 0.1 10 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin -#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin +minimize 1.0e-6 1.0e-6 10000 10000 +#minimize 1.0e-8 1.0e-8 10000 1000 diff --git a/examples/SPIN/gneb_bfo/in.spinmin.iron b/examples/SPIN/gneb_bfo/in.spinmin.iron index 4439960390..67d8095c06 100644 --- a/examples/SPIN/gneb_bfo/in.spinmin.iron +++ b/examples/SPIN/gneb_bfo/in.spinmin.iron @@ -13,8 +13,6 @@ region box block 0.0 4.0 0.0 4.0 0.0 1.0 create_box 1 box create_atoms 1 box -#read_data ../examples/SPIN/gneb_bfo/initial.iron_spin - # setting mass, mag. moments, and interactions for bcc iron mass 1 55.845 @@ -31,16 +29,9 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 fix 2 all langevin/spin 0.1 0.0 21 fix 3 all nve/spin lattice no -#fix 3 all neb/spin 1.0 -#fix 4 all nve/spin lattice no -#parallel ideal timestep 0.0001 -#min_style spinmin -#minimize 1.0e-6 1.0e-6 1000 10000 -#minimize 1.0e-8 1.0e-6 1000 10000 - compute out_mag all spin compute out_pe all pe compute out_ke all ke @@ -58,14 +49,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -#timestep 0.0001 -#run 1 - min_style spinmin -#minimize 1.0e-6 1.0e-6 1000 10000 -minimize 1.0e-8 1.0e-6 1000 10000 - - - -#neb/spin 0.0 0.1 10 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin -#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin +minimize 1.0e-6 1.0e-6 1000 10000 +#minimize 1.0e-8 1.0e-6 1000 10000 diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 65d5e9120e..08e4fd5a63 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -115,6 +115,7 @@ int FixPrecessionSpin::setmask() { int mask = 0; mask |= POST_FORCE; + mask |= MIN_POST_FORCE; mask |= THERMO_ENERGY; mask |= POST_FORCE_RESPA; return mask; @@ -283,3 +284,10 @@ double FixPrecessionSpin::compute_scalar() } return emag_all; } + +/* ---------------------------------------------------------------------- */ + +void FixPrecessionSpin::min_post_force(int vflag) +{ + post_force(vflag); +} diff --git a/src/SPIN/fix_precession_spin.h b/src/SPIN/fix_precession_spin.h index 53ae4ba124..2fe6b5a673 100644 --- a/src/SPIN/fix_precession_spin.h +++ b/src/SPIN/fix_precession_spin.h @@ -33,8 +33,9 @@ class FixPrecessionSpin : public Fix { int setmask(); void init(); void setup(int); - virtual void post_force(int); - virtual void post_force_respa(int, int, int); + void post_force(int); + void post_force_respa(int, int, int); + void min_post_force(int); double compute_scalar(); int zeeman_flag, aniso_flag; diff --git a/src/SPIN/min_spinmin.cpp b/src/SPIN/min_spinmin.cpp index 4b362fda87..2e03086bf0 100644 --- a/src/SPIN/min_spinmin.cpp +++ b/src/SPIN/min_spinmin.cpp @@ -88,7 +88,7 @@ void MinSpinMin::reset_vectors() } /* ---------------------------------------------------------------------- - minimization via QuickMin damped dynamics + minimization via damped spin dynamics ------------------------------------------------------------------------- */ int MinSpinMin::iterate(int maxiter) @@ -98,16 +98,6 @@ int MinSpinMin::iterate(int maxiter) //double dtvone,dtv,dtf,dtfm; int flag,flagall; - //alpha_final = 0.0; - - // search for and allocate neb_spin fix - - //int ineb; - //for (ineb = 0; ineb < modify->nfix; ineb++) - // if (strcmp(modify->fix[ineb]->style,"neb/spin") == 0) break; - //if (ineb == modify->nfix) error->all(FLERR,"spinmin requires use of fix neb/spin"); - //fneb = (FixNEB_spin *) modify->fix[ineb]; - for (int iter = 0; iter < maxiter; iter++) { if (timer->check_timeout(niter)) @@ -118,12 +108,10 @@ int MinSpinMin::iterate(int maxiter) // optimize timestep accross processes / replicas - //dts = fneb->evaluate_dt(); dts = evaluate_dt(); // apply damped precessional dynamics to the spins - //fneb->advance_spins(dts); advance_spins(dts); @@ -351,8 +339,6 @@ double MinSpinMin::evaluate_dt() void MinSpinMin::advance_spins(double dts) { - //int j=0; - //int *sametag = atom->sametag; int nlocal = atom->nlocal; int *mask = atom->mask; double **sp = atom->sp; @@ -360,18 +346,14 @@ void MinSpinMin::advance_spins(double dts) double tdampx,tdampy,tdampz; double msq,scale,fm2,energy,dts2; double alpha; - //double spi[3],fmi[3]; double cp[3],g[3]; - //cp[0] = cp[1] = cp[2] = 0.0; - //g[0] = g[1] = g[2] = 0.0; dts2 = dts*dts; // fictitious Gilbert damping of 1 + alpha = 1.0; - //printf("test inside spinmin, dts %g \n",dts); - //printf("test inside spinmin, fmi i=%d, %g %g %g \n",1,fm[1][0],fm[1][1],fm[1][2]); // loop on all spins on proc. @@ -379,14 +361,6 @@ void MinSpinMin::advance_spins(double dts) // for (int i = 0; i < nlocal; i++) // if (mask[i] & groupbit) { for (int i = 0; i < nlocal; i++) { - - //spi[0] = sp[i][0]; - //spi[1] = sp[i][1]; - //spi[2] = sp[i][2]; - // - //fmi[0] = fm[i][0]; - //fmi[1] = fm[i][1]; - //fmi[2] = fm[i][2]; // calc. damping torque @@ -394,8 +368,6 @@ void MinSpinMin::advance_spins(double dts) tdampy = -alpha*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); tdampz = -alpha*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - //printf("for %d, test tdamp: %g %g %g \n",i,tdampx,tdampy,tdampz); - // apply advance algorithm (geometric, norm preserving) fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); @@ -405,15 +377,10 @@ void MinSpinMin::advance_spins(double dts) cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; - //printf("for %d, test cp: %g %g %g \n",i,cp[0],cp[1],cp[2]); - g[0] = sp[i][0]+cp[0]*dts; g[1] = sp[i][1]+cp[1]*dts; g[2] = sp[i][2]+cp[2]*dts; - //g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; - //g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; - //g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; g[0] += (tdampx*energy-0.5*sp[i][0]*fm2)*0.5*dts2; g[1] += (tdampy*energy-0.5*sp[i][1]*fm2)*0.5*dts2; g[2] += (tdampz*energy-0.5*sp[i][2]*fm2)*0.5*dts2; @@ -421,10 +388,6 @@ void MinSpinMin::advance_spins(double dts) g[0] /= (1+0.25*fm2*dts2); g[1] /= (1+0.25*fm2*dts2); g[2] /= (1+0.25*fm2*dts2); - - //printf("test inside spinmin, spi i=%d, %g %g %g \n",i,sp[i][0],sp[i][1],sp[i][2]); - //printf("test inside spinmin, fmi i=%d, %g %g %g \n",i,fm[i][0],fm[i][1],fm[i][2]); - //printf("for %d, test g: %g %g %g \n",i,g[0],g[1],g[2]); sp[i][0] = g[0]; sp[i][1] = g[1]; @@ -455,8 +418,5 @@ void MinSpinMin::advance_spins(double dts) // } - //printf("test inside spinmin, dts = %g \n",dts); - //printf("test inside spinmin, fmi i=%d, %g %g %g \n",1,fm[1][0],fm[1][1],fm[1][2]); - //printf("test inside spinmin, spi i=%d, %g %g %g \n",1,sp[1][0],sp[1][1],sp[1][2]); } diff --git a/src/SPIN/min_spinmin.h b/src/SPIN/min_spinmin.h index fe2cf7c51d..943b2d2749 100644 --- a/src/SPIN/min_spinmin.h +++ b/src/SPIN/min_spinmin.h @@ -39,14 +39,13 @@ class MinSpinMin : public Min { private: - // spin timestep + // global and spin timesteps + double dt; double dts; double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector - - double dt; bigint last_negative; }; From 3a4bb6f9802b33d29fa510af7e90f3f0907a63cd Mon Sep 17 00:00:00 2001 From: mkanski Date: Tue, 12 Mar 2019 20:19:56 +0100 Subject: [PATCH 014/372] All errors and warning are now printed through LAMMPS --- src/USER-REAXC/pair_reaxc.cpp | 28 +- src/USER-REAXC/reaxc_allocate.cpp | 326 ++++++++++++------------ src/USER-REAXC/reaxc_allocate.h | 8 +- src/USER-REAXC/reaxc_bond_orders.cpp | 3 +- src/USER-REAXC/reaxc_bond_orders.h | 2 +- src/USER-REAXC/reaxc_bonds.cpp | 2 +- src/USER-REAXC/reaxc_bonds.h | 2 +- src/USER-REAXC/reaxc_control.cpp | 12 +- src/USER-REAXC/reaxc_control.h | 5 +- src/USER-REAXC/reaxc_ffield.cpp | 149 +++++------ src/USER-REAXC/reaxc_ffield.h | 2 +- src/USER-REAXC/reaxc_forces.cpp | 23 +- src/USER-REAXC/reaxc_hydrogen_bonds.cpp | 2 +- src/USER-REAXC/reaxc_hydrogen_bonds.h | 2 +- src/USER-REAXC/reaxc_init_md.cpp | 94 ++++--- src/USER-REAXC/reaxc_io_tools.cpp | 8 +- src/USER-REAXC/reaxc_io_tools.h | 4 +- src/USER-REAXC/reaxc_list.cpp | 68 ++--- src/USER-REAXC/reaxc_list.h | 4 +- src/USER-REAXC/reaxc_lookup.cpp | 102 ++++---- src/USER-REAXC/reaxc_lookup.h | 8 +- src/USER-REAXC/reaxc_multi_body.cpp | 2 +- src/USER-REAXC/reaxc_multi_body.h | 2 +- src/USER-REAXC/reaxc_reset_tools.cpp | 16 +- src/USER-REAXC/reaxc_tool_box.cpp | 44 ++-- src/USER-REAXC/reaxc_tool_box.h | 6 +- src/USER-REAXC/reaxc_torsion_angles.cpp | 3 +- src/USER-REAXC/reaxc_torsion_angles.h | 3 +- src/USER-REAXC/reaxc_traj.cpp | 56 ++-- src/USER-REAXC/reaxc_traj.h | 4 +- src/USER-REAXC/reaxc_types.h | 7 +- src/USER-REAXC/reaxc_valence_angles.cpp | 9 +- src/USER-REAXC/reaxc_valence_angles.h | 2 +- 33 files changed, 506 insertions(+), 502 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 0f4b3a5b3d..24612a3a40 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -137,15 +137,15 @@ PairReaxC::~PairReaxC() // deallocate reax data-structures - if (control->tabulate ) Deallocate_Lookup_Tables( system); + if (control->tabulate ) Deallocate_Lookup_Tables( lmp, system); - if (control->hbond_cut > 0 ) Delete_List( lists+HBONDS, world); - Delete_List( lists+BONDS, world ); - Delete_List( lists+THREE_BODIES, world ); - Delete_List( lists+FAR_NBRS, world ); + if (control->hbond_cut > 0 ) Delete_List( lmp, lists+HBONDS, world); + Delete_List( lmp, lists+BONDS, world ); + Delete_List( lmp, lists+THREE_BODIES, world ); + Delete_List( lmp, lists+FAR_NBRS, world ); - DeAllocate_Workspace( control, workspace ); - DeAllocate_System( system ); + DeAllocate_Workspace( lmp, control, workspace ); + DeAllocate_System( lmp, system ); } memory->destroy( system ); @@ -223,7 +223,7 @@ void PairReaxC::settings(int narg, char **arg) out_control->atom_info = 0; out_control->bond_info = 0; out_control->angle_info = 0; - } else Read_Control_File(arg[0], control, out_control); + } else Read_Control_File(lmp, arg[0], control, out_control); // default values @@ -298,7 +298,7 @@ void PairReaxC::coeff( int nargs, char **args ) FILE *fp; fp = force->open_potential(file); if (fp != NULL) - Read_Force_Field(fp, &(system->reax_param), control); + Read_Force_Field(lmp, fp, &(system->reax_param), control); else { char str[128]; snprintf(str,128,"Cannot open ReaxFF potential file %s",file); @@ -394,7 +394,7 @@ void PairReaxC::init_style( ) "increased neighbor list skin."); for( int i = 0; i < LIST_N; ++i ) - if (lists[i].allacated != 1) + if (lists[i].allocated != 1) lists[i].allocated = 0; if (fix_reax == NULL) { @@ -437,13 +437,13 @@ void PairReaxC::setup( ) // initialize my data structures - PreAllocate_Space( system, control, workspace, world ); + PreAllocate_Space( lmp, system, control, workspace, world ); write_reax_atoms(); int num_nbrs = estimate_reax_lists(); - if(!Make_List(system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, + if(!Make_List(lmp, system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, lists+FAR_NBRS, world)) - error->all(FLERR,"Pair reax/c problem in far neighbor list"); + error->one(FLERR,"Pair reax/c problem in far neighbor list"); write_reax_lists(); Initialize( lmp, system, control, data, workspace, &lists, out_control, @@ -582,7 +582,7 @@ void PairReaxC::compute(int eflag, int vflag) data->step = update->ntimestep; - Output_Results( system, control, data, &lists, out_control, mpi_data ); + Output_Results( lmp, system, control, data, &lists, out_control, mpi_data ); // populate tmpid and tmpbo arrays for fix reax/c/species int i, j; diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index ebf0684389..2f970399f2 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -43,7 +43,7 @@ using namespace LAMMPS_NS; important: we cannot know the exact number of atoms that will fall into a process's box throughout the whole simulation. therefore we need to make upper bound estimates for various data structures */ -int PreAllocate_Space( reax_system *system, control_params * /*control*/, +int PreAllocate_Space( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * /*control*/, storage * workspace, MPI_Comm comm ) { int mincap = system->mincap; @@ -55,7 +55,7 @@ int PreAllocate_Space( reax_system *system, control_params * /*control*/, system->total_cap = MAX( (int)(system->N * safezone), mincap ); system->my_atoms = (reax_atom*) - scalloc( system->total_cap, sizeof(reax_atom), "my_atoms", comm ); + scalloc(lmp, system->total_cap, sizeof(reax_atom), "my_atoms", comm ); // Nullify some arrays only used in omp styles // Should be safe to do here since called in pair->setup(); @@ -84,45 +84,45 @@ int Allocate_System( reax_system *system, int /*local_cap*/, int total_cap, } -void DeAllocate_System( reax_system *system ) +void DeAllocate_System( LAMMPS_NS::LAMMPS *lmp, reax_system *system ) { int i, j, k; int ntypes; reax_interaction *ff_params; // dealloocate the atom list - sfree( system->my_atoms, "system->my_atoms" ); + sfree(lmp, system->my_atoms, "system->my_atoms" ); // deallocate the ffield parameters storage ff_params = &(system->reax_param); ntypes = ff_params->num_atom_types; - sfree( ff_params->gp.l, "ff:globals" ); + sfree(lmp, ff_params->gp.l, "ff:globals" ); for( i = 0; i < ntypes; ++i ) { for( j = 0; j < ntypes; ++j ) { for( k = 0; k < ntypes; ++k ) { - sfree( ff_params->fbp[i][j][k], "ff:fbp[i,j,k]" ); + sfree(lmp, ff_params->fbp[i][j][k], "ff:fbp[i,j,k]" ); } - sfree( ff_params->fbp[i][j], "ff:fbp[i,j]" ); - sfree( ff_params->thbp[i][j], "ff:thbp[i,j]" ); - sfree( ff_params->hbp[i][j], "ff:hbp[i,j]" ); + sfree(lmp, ff_params->fbp[i][j], "ff:fbp[i,j]" ); + sfree(lmp, ff_params->thbp[i][j], "ff:thbp[i,j]" ); + sfree(lmp, ff_params->hbp[i][j], "ff:hbp[i,j]" ); } - sfree( ff_params->fbp[i], "ff:fbp[i]" ); - sfree( ff_params->thbp[i], "ff:thbp[i]" ); - sfree( ff_params->hbp[i], "ff:hbp[i]" ); - sfree( ff_params->tbp[i], "ff:tbp[i]" ); + sfree(lmp, ff_params->fbp[i], "ff:fbp[i]" ); + sfree(lmp, ff_params->thbp[i], "ff:thbp[i]" ); + sfree(lmp, ff_params->hbp[i], "ff:hbp[i]" ); + sfree(lmp, ff_params->tbp[i], "ff:tbp[i]" ); } - sfree( ff_params->fbp, "ff:fbp" ); - sfree( ff_params->thbp, "ff:thbp" ); - sfree( ff_params->hbp, "ff:hbp" ); - sfree( ff_params->tbp, "ff:tbp" ); - sfree( ff_params->sbp, "ff:sbp" ); + sfree(lmp, ff_params->fbp, "ff:fbp" ); + sfree(lmp, ff_params->thbp, "ff:thbp" ); + sfree(lmp, ff_params->hbp, "ff:hbp" ); + sfree(lmp, ff_params->tbp, "ff:tbp" ); + sfree(lmp, ff_params->sbp, "ff:sbp" ); } /************* workspace *************/ -void DeAllocate_Workspace( control_params * /*control*/, storage *workspace ) +void DeAllocate_Workspace( LAMMPS_NS::LAMMPS* lmp, control_params * /*control*/, storage *workspace ) { int i; @@ -133,84 +133,84 @@ void DeAllocate_Workspace( control_params * /*control*/, storage *workspace ) /* communication storage */ for( i = 0; i < MAX_NBRS; ++i ) { - sfree( workspace->tmp_dbl[i], "tmp_dbl[i]" ); - sfree( workspace->tmp_rvec[i], "tmp_rvec[i]" ); - sfree( workspace->tmp_rvec2[i], "tmp_rvec2[i]" ); + sfree(lmp, workspace->tmp_dbl[i], "tmp_dbl[i]" ); + sfree(lmp, workspace->tmp_rvec[i], "tmp_rvec[i]" ); + sfree(lmp, workspace->tmp_rvec2[i], "tmp_rvec2[i]" ); } /* bond order storage */ - sfree( workspace->within_bond_box, "skin" ); - sfree( workspace->total_bond_order, "total_bo" ); - sfree( workspace->Deltap, "Deltap" ); - sfree( workspace->Deltap_boc, "Deltap_boc" ); - sfree( workspace->dDeltap_self, "dDeltap_self" ); - sfree( workspace->Delta, "Delta" ); - sfree( workspace->Delta_lp, "Delta_lp" ); - sfree( workspace->Delta_lp_temp, "Delta_lp_temp" ); - sfree( workspace->dDelta_lp, "dDelta_lp" ); - sfree( workspace->dDelta_lp_temp, "dDelta_lp_temp" ); - sfree( workspace->Delta_e, "Delta_e" ); - sfree( workspace->Delta_boc, "Delta_boc" ); - sfree( workspace->Delta_val, "Delta_val" ); - sfree( workspace->nlp, "nlp" ); - sfree( workspace->nlp_temp, "nlp_temp" ); - sfree( workspace->Clp, "Clp" ); - sfree( workspace->vlpex, "vlpex" ); - sfree( workspace->bond_mark, "bond_mark" ); - sfree( workspace->done_after, "done_after" ); + sfree(lmp, workspace->within_bond_box, "skin" ); + sfree(lmp, workspace->total_bond_order, "total_bo" ); + sfree(lmp, workspace->Deltap, "Deltap" ); + sfree(lmp, workspace->Deltap_boc, "Deltap_boc" ); + sfree(lmp, workspace->dDeltap_self, "dDeltap_self" ); + sfree(lmp, workspace->Delta, "Delta" ); + sfree(lmp, workspace->Delta_lp, "Delta_lp" ); + sfree(lmp, workspace->Delta_lp_temp, "Delta_lp_temp" ); + sfree(lmp, workspace->dDelta_lp, "dDelta_lp" ); + sfree(lmp, workspace->dDelta_lp_temp, "dDelta_lp_temp" ); + sfree(lmp, workspace->Delta_e, "Delta_e" ); + sfree(lmp, workspace->Delta_boc, "Delta_boc" ); + sfree(lmp, workspace->Delta_val, "Delta_val" ); + sfree(lmp, workspace->nlp, "nlp" ); + sfree(lmp, workspace->nlp_temp, "nlp_temp" ); + sfree(lmp, workspace->Clp, "Clp" ); + sfree(lmp, workspace->vlpex, "vlpex" ); + sfree(lmp, workspace->bond_mark, "bond_mark" ); + sfree(lmp, workspace->done_after, "done_after" ); /* QEq storage */ - sfree( workspace->Hdia_inv, "Hdia_inv" ); - sfree( workspace->b_s, "b_s" ); - sfree( workspace->b_t, "b_t" ); - sfree( workspace->b_prc, "b_prc" ); - sfree( workspace->b_prm, "b_prm" ); - sfree( workspace->s, "s" ); - sfree( workspace->t, "t" ); - sfree( workspace->droptol, "droptol" ); - sfree( workspace->b, "b" ); - sfree( workspace->x, "x" ); + sfree(lmp, workspace->Hdia_inv, "Hdia_inv" ); + sfree(lmp, workspace->b_s, "b_s" ); + sfree(lmp, workspace->b_t, "b_t" ); + sfree(lmp, workspace->b_prc, "b_prc" ); + sfree(lmp, workspace->b_prm, "b_prm" ); + sfree(lmp, workspace->s, "s" ); + sfree(lmp, workspace->t, "t" ); + sfree(lmp, workspace->droptol, "droptol" ); + sfree(lmp, workspace->b, "b" ); + sfree(lmp, workspace->x, "x" ); /* GMRES storage */ for( i = 0; i < RESTART+1; ++i ) { - sfree( workspace->h[i], "h[i]" ); - sfree( workspace->v[i], "v[i]" ); + sfree(lmp, workspace->h[i], "h[i]" ); + sfree(lmp, workspace->v[i], "v[i]" ); } - sfree( workspace->h, "h" ); - sfree( workspace->v, "v" ); - sfree( workspace->y, "y" ); - sfree( workspace->z, "z" ); - sfree( workspace->g, "g" ); - sfree( workspace->hs, "hs" ); - sfree( workspace->hc, "hc" ); + sfree(lmp, workspace->h, "h" ); + sfree(lmp, workspace->v, "v" ); + sfree(lmp, workspace->y, "y" ); + sfree(lmp, workspace->z, "z" ); + sfree(lmp, workspace->g, "g" ); + sfree(lmp, workspace->hs, "hs" ); + sfree(lmp, workspace->hc, "hc" ); /* CG storage */ - sfree( workspace->r, "r" ); - sfree( workspace->d, "d" ); - sfree( workspace->q, "q" ); - sfree( workspace->p, "p" ); - sfree( workspace->r2, "r2" ); - sfree( workspace->d2, "d2" ); - sfree( workspace->q2, "q2" ); - sfree( workspace->p2, "p2" ); + sfree(lmp, workspace->r, "r" ); + sfree(lmp, workspace->d, "d" ); + sfree(lmp, workspace->q, "q" ); + sfree(lmp, workspace->p, "p" ); + sfree(lmp, workspace->r2, "r2" ); + sfree(lmp, workspace->d2, "d2" ); + sfree(lmp, workspace->q2, "q2" ); + sfree(lmp, workspace->p2, "p2" ); /* integrator storage */ - sfree( workspace->v_const, "v_const" ); + sfree(lmp, workspace->v_const, "v_const" ); /* force related storage */ - sfree( workspace->f, "f" ); - sfree( workspace->CdDelta, "CdDelta" ); + sfree(lmp, workspace->f, "f" ); + sfree(lmp, workspace->CdDelta, "CdDelta" ); /* reductions */ #ifdef LMP_USER_OMP - if (workspace->CdDeltaReduction) sfree( workspace->CdDeltaReduction, "cddelta_reduce" ); - if (workspace->forceReduction) sfree( workspace->forceReduction, "f_reduce" ); - if (workspace->valence_angle_atom_myoffset) sfree( workspace->valence_angle_atom_myoffset, "valence_angle_atom_myoffset"); - if (workspace->my_ext_pressReduction) sfree( workspace->my_ext_pressReduction, "ext_press_reduce"); + if (workspace->CdDeltaReduction) sfree(lmp, workspace->CdDeltaReduction, "cddelta_reduce" ); + if (workspace->forceReduction) sfree(lmp, workspace->forceReduction, "f_reduce" ); + if (workspace->valence_angle_atom_myoffset) sfree(lmp, workspace->valence_angle_atom_myoffset, "valence_angle_atom_myoffset"); + if (workspace->my_ext_pressReduction) sfree(lmp, workspace->my_ext_pressReduction, "ext_press_reduce"); #endif } -int Allocate_Workspace( reax_system * /*system*/, control_params * control, +int Allocate_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system * /*system*/, control_params * control, storage *workspace, int local_cap, int total_cap, MPI_Comm comm, char * /*msg*/ ) { @@ -224,94 +224,94 @@ int Allocate_Workspace( reax_system * /*system*/, control_params * control, /* communication storage */ for( i = 0; i < MAX_NBRS; ++i ) { workspace->tmp_dbl[i] = (double*) - scalloc( total_cap, sizeof(double), "tmp_dbl", comm ); + scalloc(lmp, total_cap, sizeof(double), "tmp_dbl", comm ); workspace->tmp_rvec[i] = (rvec*) - scalloc( total_cap, sizeof(rvec), "tmp_rvec", comm ); + scalloc(lmp, total_cap, sizeof(rvec), "tmp_rvec", comm ); workspace->tmp_rvec2[i] = (rvec2*) - scalloc( total_cap, sizeof(rvec2), "tmp_rvec2", comm ); + scalloc(lmp, total_cap, sizeof(rvec2), "tmp_rvec2", comm ); } /* bond order related storage */ workspace->within_bond_box = (int*) - scalloc( total_cap, sizeof(int), "skin", comm ); - workspace->total_bond_order = (double*) smalloc( total_real, "total_bo", comm ); - workspace->Deltap = (double*) smalloc( total_real, "Deltap", comm ); - workspace->Deltap_boc = (double*) smalloc( total_real, "Deltap_boc", comm ); - workspace->dDeltap_self = (rvec*) smalloc( total_rvec, "dDeltap_self", comm ); - workspace->Delta = (double*) smalloc( total_real, "Delta", comm ); - workspace->Delta_lp = (double*) smalloc( total_real, "Delta_lp", comm ); + scalloc(lmp, total_cap, sizeof(int), "skin", comm ); + workspace->total_bond_order = (double*) smalloc(lmp, total_real, "total_bo", comm ); + workspace->Deltap = (double*) smalloc(lmp, total_real, "Deltap", comm ); + workspace->Deltap_boc = (double*) smalloc(lmp, total_real, "Deltap_boc", comm ); + workspace->dDeltap_self = (rvec*) smalloc(lmp, total_rvec, "dDeltap_self", comm ); + workspace->Delta = (double*) smalloc(lmp, total_real, "Delta", comm ); + workspace->Delta_lp = (double*) smalloc(lmp, total_real, "Delta_lp", comm ); workspace->Delta_lp_temp = (double*) - smalloc( total_real, "Delta_lp_temp", comm ); - workspace->dDelta_lp = (double*) smalloc( total_real, "dDelta_lp", comm ); + smalloc(lmp, total_real, "Delta_lp_temp", comm ); + workspace->dDelta_lp = (double*) smalloc(lmp, total_real, "dDelta_lp", comm ); workspace->dDelta_lp_temp = (double*) - smalloc( total_real, "dDelta_lp_temp", comm ); - workspace->Delta_e = (double*) smalloc( total_real, "Delta_e", comm ); - workspace->Delta_boc = (double*) smalloc( total_real, "Delta_boc", comm ); - workspace->Delta_val = (double*) smalloc( total_real, "Delta_val", comm ); - workspace->nlp = (double*) smalloc( total_real, "nlp", comm ); - workspace->nlp_temp = (double*) smalloc( total_real, "nlp_temp", comm ); - workspace->Clp = (double*) smalloc( total_real, "Clp", comm ); - workspace->vlpex = (double*) smalloc( total_real, "vlpex", comm ); + smalloc(lmp, total_real, "dDelta_lp_temp", comm ); + workspace->Delta_e = (double*) smalloc(lmp, total_real, "Delta_e", comm ); + workspace->Delta_boc = (double*) smalloc(lmp, total_real, "Delta_boc", comm ); + workspace->Delta_val = (double*) smalloc(lmp, total_real, "Delta_val", comm ); + workspace->nlp = (double*) smalloc(lmp, total_real, "nlp", comm ); + workspace->nlp_temp = (double*) smalloc(lmp, total_real, "nlp_temp", comm ); + workspace->Clp = (double*) smalloc(lmp, total_real, "Clp", comm ); + workspace->vlpex = (double*) smalloc(lmp, total_real, "vlpex", comm ); workspace->bond_mark = (int*) - scalloc( total_cap, sizeof(int), "bond_mark", comm ); + scalloc(lmp, total_cap, sizeof(int), "bond_mark", comm ); workspace->done_after = (int*) - scalloc( total_cap, sizeof(int), "done_after", comm ); + scalloc(lmp, total_cap, sizeof(int), "done_after", comm ); /* QEq storage */ workspace->Hdia_inv = (double*) - scalloc( total_cap, sizeof(double), "Hdia_inv", comm ); - workspace->b_s = (double*) scalloc( total_cap, sizeof(double), "b_s", comm ); - workspace->b_t = (double*) scalloc( total_cap, sizeof(double), "b_t", comm ); - workspace->b_prc = (double*) scalloc( total_cap, sizeof(double), "b_prc", comm ); - workspace->b_prm = (double*) scalloc( total_cap, sizeof(double), "b_prm", comm ); - workspace->s = (double*) scalloc( total_cap, sizeof(double), "s", comm ); - workspace->t = (double*) scalloc( total_cap, sizeof(double), "t", comm ); + scalloc(lmp, total_cap, sizeof(double), "Hdia_inv", comm ); + workspace->b_s = (double*) scalloc(lmp, total_cap, sizeof(double), "b_s", comm ); + workspace->b_t = (double*) scalloc(lmp, total_cap, sizeof(double), "b_t", comm ); + workspace->b_prc = (double*) scalloc(lmp, total_cap, sizeof(double), "b_prc", comm ); + workspace->b_prm = (double*) scalloc(lmp, total_cap, sizeof(double), "b_prm", comm ); + workspace->s = (double*) scalloc(lmp, total_cap, sizeof(double), "s", comm ); + workspace->t = (double*) scalloc(lmp, total_cap, sizeof(double), "t", comm ); workspace->droptol = (double*) - scalloc( total_cap, sizeof(double), "droptol", comm ); - workspace->b = (rvec2*) scalloc( total_cap, sizeof(rvec2), "b", comm ); - workspace->x = (rvec2*) scalloc( total_cap, sizeof(rvec2), "x", comm ); + scalloc(lmp, total_cap, sizeof(double), "droptol", comm ); + workspace->b = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "b", comm ); + workspace->x = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "x", comm ); /* GMRES storage */ - workspace->y = (double*) scalloc( RESTART+1, sizeof(double), "y", comm ); - workspace->z = (double*) scalloc( RESTART+1, sizeof(double), "z", comm ); - workspace->g = (double*) scalloc( RESTART+1, sizeof(double), "g", comm ); - workspace->h = (double**) scalloc( RESTART+1, sizeof(double*), "h", comm ); - workspace->hs = (double*) scalloc( RESTART+1, sizeof(double), "hs", comm ); - workspace->hc = (double*) scalloc( RESTART+1, sizeof(double), "hc", comm ); - workspace->v = (double**) scalloc( RESTART+1, sizeof(double*), "v", comm ); + workspace->y = (double*) scalloc(lmp, RESTART+1, sizeof(double), "y", comm ); + workspace->z = (double*) scalloc(lmp, RESTART+1, sizeof(double), "z", comm ); + workspace->g = (double*) scalloc(lmp, RESTART+1, sizeof(double), "g", comm ); + workspace->h = (double**) scalloc(lmp, RESTART+1, sizeof(double*), "h", comm ); + workspace->hs = (double*) scalloc(lmp, RESTART+1, sizeof(double), "hs", comm ); + workspace->hc = (double*) scalloc(lmp, RESTART+1, sizeof(double), "hc", comm ); + workspace->v = (double**) scalloc(lmp, RESTART+1, sizeof(double*), "v", comm ); for( i = 0; i < RESTART+1; ++i ) { - workspace->h[i] = (double*) scalloc( RESTART+1, sizeof(double), "h[i]", comm ); - workspace->v[i] = (double*) scalloc( total_cap, sizeof(double), "v[i]", comm ); + workspace->h[i] = (double*) scalloc(lmp, RESTART+1, sizeof(double), "h[i]", comm ); + workspace->v[i] = (double*) scalloc(lmp, total_cap, sizeof(double), "v[i]", comm ); } /* CG storage */ - workspace->r = (double*) scalloc( total_cap, sizeof(double), "r", comm ); - workspace->d = (double*) scalloc( total_cap, sizeof(double), "d", comm ); - workspace->q = (double*) scalloc( total_cap, sizeof(double), "q", comm ); - workspace->p = (double*) scalloc( total_cap, sizeof(double), "p", comm ); - workspace->r2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "r2", comm ); - workspace->d2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "d2", comm ); - workspace->q2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "q2", comm ); - workspace->p2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "p2", comm ); + workspace->r = (double*) scalloc(lmp, total_cap, sizeof(double), "r", comm ); + workspace->d = (double*) scalloc(lmp, total_cap, sizeof(double), "d", comm ); + workspace->q = (double*) scalloc(lmp, total_cap, sizeof(double), "q", comm ); + workspace->p = (double*) scalloc(lmp, total_cap, sizeof(double), "p", comm ); + workspace->r2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "r2", comm ); + workspace->d2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "d2", comm ); + workspace->q2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "q2", comm ); + workspace->p2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "p2", comm ); /* integrator storage */ - workspace->v_const = (rvec*) smalloc( local_rvec, "v_const", comm ); + workspace->v_const = (rvec*) smalloc(lmp, local_rvec, "v_const", comm ); /* force related storage */ - workspace->f = (rvec*) scalloc( total_cap, sizeof(rvec), "f", comm ); + workspace->f = (rvec*) scalloc(lmp, total_cap, sizeof(rvec), "f", comm ); workspace->CdDelta = (double*) - scalloc( total_cap, sizeof(double), "CdDelta", comm ); + scalloc(lmp, total_cap, sizeof(double), "CdDelta", comm ); // storage for reductions with multiple threads #ifdef LMP_USER_OMP - workspace->CdDeltaReduction = (double *) scalloc(sizeof(double), total_cap*control->nthreads, + workspace->CdDeltaReduction = (double *) scalloc(lmp, sizeof(double), total_cap*control->nthreads, "cddelta_reduce", comm); - workspace->forceReduction = (rvec *) scalloc(sizeof(rvec), total_cap*control->nthreads, + workspace->forceReduction = (rvec *) scalloc(lmp, sizeof(rvec), total_cap*control->nthreads, "forceReduction", comm); - workspace->valence_angle_atom_myoffset = (int *) scalloc(sizeof(int), total_cap, "valence_angle_atom_myoffset", comm); + workspace->valence_angle_atom_myoffset = (int *) scalloc(lmp, sizeof(int), total_cap, "valence_angle_atom_myoffset", comm); workspace->my_ext_pressReduction = (rvec *) calloc(sizeof(rvec), control->nthreads); #else LMP_UNUSED_PARAM(control); @@ -321,18 +321,17 @@ int Allocate_Workspace( reax_system * /*system*/, control_params * control, } -static void Reallocate_Neighbor_List( reax_list *far_nbrs, int n, +static void Reallocate_Neighbor_List( LAMMPS* lmp, reax_list *far_nbrs, int n, int num_intrs, MPI_Comm comm ) { - Delete_List( far_nbrs, comm ); - if(!Make_List( n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs, comm )){ - fprintf(stderr, "Problem in initializing far nbrs list. Terminating!\n"); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + Delete_List( lmp, far_nbrs, comm ); + if(!Make_List( lmp, n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs, comm )){ + lmp->error->one(FLERR,"Problem in initializing far neighbors list"); } } -static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, +static int Reallocate_HBonds_List( LAMMPS *lmp, reax_system *system, reax_list *hbonds, MPI_Comm comm ) { int i, total_hbonds; @@ -347,10 +346,9 @@ static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, } total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); - Delete_List( hbonds, comm ); - if (!Make_List( system->Hcap, total_hbonds, TYP_HBOND, hbonds, comm )) { - fprintf( stderr, "not enough space for hbonds list. terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + Delete_List( lmp, hbonds, comm ); + if (!Make_List( lmp, system->Hcap, total_hbonds, TYP_HBOND, hbonds, comm )) { + lmp->error->one(FLERR, "Not enough space for hydrogen bonds list"); } return total_hbonds; @@ -377,13 +375,12 @@ static int Reallocate_Bonds_List( LAMMPS *lmp, reax_system *system, reax_list *b #ifdef LMP_USER_OMP if (system->omp_active) for (i = 0; i < bonds->num_intrs; ++i) - sfree(bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); + sfree(lmp, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); #endif - Delete_List( bonds, comm ); - if(!Make_List(system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) { - fprintf( stderr, "not enough space for bonds list. terminating!\n" ); - lmp->error->all(FLERR, "Can't allocate space for hbonds."); + Delete_List( lmp, bonds, comm ); + if(!Make_List(lmp, system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) { + lmp->error->one(FLERR, "Not enough space for bonds list"); } #ifdef LMP_USER_OMP @@ -396,7 +393,7 @@ static int Reallocate_Bonds_List( LAMMPS *lmp, reax_system *system, reax_list *b if (system->omp_active) for (i = 0; i < bonds->num_intrs; ++i) bonds->select.bond_list[i].bo_data.CdboReduction = - (double*) smalloc(sizeof(double)*nthreads, "CdboReduction", comm); + (double*) smalloc(lmp, sizeof(double)*nthreads, "CdboReduction", comm); #endif return SUCCESS; @@ -437,21 +434,19 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, /* system */ ret = Allocate_System( system, system->local_cap, system->total_cap, msg ); if (ret != SUCCESS) { - fprintf( stderr, "not enough space for atom_list: total_cap=%d", - system->total_cap ); - fprintf( stderr, "terminating...\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + char errmsg[128]; + snprintf(errmsg, 128, "Not enough space for atom_list: total_cap=%d", system->total_cap); + lmp->error->one(FLERR, errmsg); } /* workspace */ - DeAllocate_Workspace( control, workspace ); - ret = Allocate_Workspace( system, control, workspace, system->local_cap, + DeAllocate_Workspace( lmp, control, workspace ); + ret = Allocate_Workspace( lmp, system, control, workspace, system->local_cap, system->total_cap, comm, msg ); if (ret != SUCCESS) { - fprintf( stderr, "no space for workspace: local_cap=%d total_cap=%d", - system->local_cap, system->total_cap ); - fprintf( stderr, "terminating...\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + char errmsg[128]; + snprintf(errmsg, 128, "Not enough space for workspace: local_cap=%d total_cap=%d", system->local_cap, system->total_cap); + lmp->error->one(FLERR, errmsg); } } @@ -463,15 +458,15 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, if (Nflag || realloc->num_far >= far_nbrs->num_intrs * DANGER_ZONE) { if (realloc->num_far > far_nbrs->num_intrs) { - fprintf( stderr, "step%d-ran out of space on far_nbrs: top=%d, max=%d", - data->step, realloc->num_far, far_nbrs->num_intrs ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + char errmsg[128]; + snprintf(errmsg, 128, "step%d-ran out of space on far_nbrs: top=%d, max=%d", data->step, realloc->num_far, far_nbrs->num_intrs); + lmp->error->one(FLERR, errmsg); } newsize = static_cast (MAX( realloc->num_far*safezone, mincap*MIN_NBRS )); - Reallocate_Neighbor_List( far_nbrs, system->total_cap, newsize, comm ); + Reallocate_Neighbor_List( lmp, far_nbrs, system->total_cap, newsize, comm ); realloc->num_far = 0; } } @@ -486,7 +481,7 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, } if (Hflag || realloc->hbonds) { - ret = Reallocate_HBonds_List( system, (*lists)+HBONDS, comm ); + ret = Reallocate_HBonds_List( lmp, system, (*lists)+HBONDS, comm ); realloc->hbonds = 0; } } @@ -502,17 +497,16 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, /* 3-body list */ if (realloc->num_3body > 0) { - Delete_List( (*lists)+THREE_BODIES, comm ); + Delete_List( lmp, (*lists)+THREE_BODIES, comm ); if (num_bonds == -1) num_bonds = ((*lists)+BONDS)->num_intrs; realloc->num_3body = (int)(MAX(realloc->num_3body*safezone, MIN_3BODIES)); - if( !Make_List( num_bonds, realloc->num_3body, TYP_THREE_BODY, + if( !Make_List( lmp, num_bonds, realloc->num_3body, TYP_THREE_BODY, (*lists)+THREE_BODIES, comm ) ) { - fprintf( stderr, "Problem in initializing angles list. Terminating!\n" ); - MPI_Abort( comm, CANNOT_INITIALIZE ); + lmp->error->one(FLERR, "Problem in initializing angles list"); } realloc->num_3body = -1; } diff --git a/src/USER-REAXC/reaxc_allocate.h b/src/USER-REAXC/reaxc_allocate.h index 786ee6ee8b..9f009b0916 100644 --- a/src/USER-REAXC/reaxc_allocate.h +++ b/src/USER-REAXC/reaxc_allocate.h @@ -33,14 +33,14 @@ #include "error.h" using namespace LAMMPS_NS; -int PreAllocate_Space( reax_system*, control_params*, storage*, MPI_Comm ); +int PreAllocate_Space( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, storage*, MPI_Comm ); int Allocate_System( reax_system*, int, int, char* ); -void DeAllocate_System( reax_system* ); +void DeAllocate_System( LAMMPS_NS::LAMMPS*, reax_system* ); -int Allocate_Workspace( reax_system*, control_params*, storage*, +int Allocate_Workspace( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, storage*, int, int, MPI_Comm, char* ); -void DeAllocate_Workspace( control_params*, storage* ); +void DeAllocate_Workspace( LAMMPS_NS::LAMMPS*, control_params*, storage* ); void ReAllocate( LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, reax_list**, mpi_datatypes* ); diff --git a/src/USER-REAXC/reaxc_bond_orders.cpp b/src/USER-REAXC/reaxc_bond_orders.cpp index 1ed58a0bfd..924be8809d 100644 --- a/src/USER-REAXC/reaxc_bond_orders.cpp +++ b/src/USER-REAXC/reaxc_bond_orders.cpp @@ -360,7 +360,8 @@ int BOp( storage *workspace, reax_list *bonds, double bo_cut, void BO( reax_system *system, control_params * /*control*/, simulation_data * /*data*/, - storage *workspace, reax_list **lists, output_controls * /*out_control*/ ) + storage *workspace, reax_list **lists, output_controls * /*out_control*/, + LAMMPS_NS::LAMMPS* lmp ) { int i, j, pj, type_i, type_j; int start_i, end_i, sym_index; diff --git a/src/USER-REAXC/reaxc_bond_orders.h b/src/USER-REAXC/reaxc_bond_orders.h index 3631d90c89..8de60ba2f2 100644 --- a/src/USER-REAXC/reaxc_bond_orders.h +++ b/src/USER-REAXC/reaxc_bond_orders.h @@ -42,5 +42,5 @@ void Add_dBond_to_Forces_NPT( int, int, simulation_data*, int BOp(storage*, reax_list*, double, int, int, far_neighbor_data*, single_body_parameters*, single_body_parameters*, two_body_parameters*); void BO( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls* ); + storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); #endif diff --git a/src/USER-REAXC/reaxc_bonds.cpp b/src/USER-REAXC/reaxc_bonds.cpp index 48fb872324..d5ac4f1ed4 100644 --- a/src/USER-REAXC/reaxc_bonds.cpp +++ b/src/USER-REAXC/reaxc_bonds.cpp @@ -33,7 +33,7 @@ void Bonds( reax_system *system, control_params * /*control*/, simulation_data *data, storage *workspace, reax_list **lists, - output_controls * /*out_control*/ ) + output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp ) { int i, j, pj, natoms; int start_i, end_i; diff --git a/src/USER-REAXC/reaxc_bonds.h b/src/USER-REAXC/reaxc_bonds.h index a4a1fb0b44..b425598b42 100644 --- a/src/USER-REAXC/reaxc_bonds.h +++ b/src/USER-REAXC/reaxc_bonds.h @@ -30,5 +30,5 @@ #include "reaxc_types.h" void Bonds( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls* ); + storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); #endif diff --git a/src/USER-REAXC/reaxc_control.cpp b/src/USER-REAXC/reaxc_control.cpp index dd2b5a32ad..bf221a6266 100644 --- a/src/USER-REAXC/reaxc_control.cpp +++ b/src/USER-REAXC/reaxc_control.cpp @@ -28,7 +28,9 @@ #include "reaxc_control.h" #include "reaxc_tool_box.h" -char Read_Control_File( char *control_file, control_params* control, +using namespace LAMMPS_NS; + +char Read_Control_File( LAMMPS *lmp, char *control_file, control_params* control, output_controls *out_control ) { FILE *fp; @@ -38,8 +40,7 @@ char Read_Control_File( char *control_file, control_params* control, /* open control file */ if ( (fp = fopen( control_file, "r" ) ) == NULL ) { - fprintf( stderr, "error opening the control file! terminating...\n" ); - MPI_Abort( MPI_COMM_WORLD, FILE_NOT_FOUND ); + lmp->error->all(FLERR, "The control file cannot be opened"); } /* assign default values */ @@ -364,8 +365,9 @@ char Read_Control_File( char *control_file, control_params* control, control->restrict_type = ival; } else { - fprintf( stderr, "WARNING: unknown parameter %s\n", tmp[0] ); - MPI_Abort( MPI_COMM_WORLD, 15 ); + char errmsg[128]; + snprintf(errmsg,128,"Unknown parameter %s in the control file", tmp[0]); + lmp->error->all(FLERR, errmsg); } } diff --git a/src/USER-REAXC/reaxc_control.h b/src/USER-REAXC/reaxc_control.h index b2b455d6b8..4546a894f6 100644 --- a/src/USER-REAXC/reaxc_control.h +++ b/src/USER-REAXC/reaxc_control.h @@ -29,6 +29,9 @@ #include "reaxc_types.h" -char Read_Control_File( char*, control_params*, output_controls* ); +#include "lammps.h" +#include "error.h" + +char Read_Control_File( LAMMPS_NS::LAMMPS *lmp, char*, control_params*, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index dd8f12f9d2..6096e3e614 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -29,7 +29,10 @@ #include "reaxc_ffield.h" #include "reaxc_tool_box.h" -char Read_Force_Field( FILE *fp, reax_interaction *reax, +#include "lammps.h" +#include "error.h" + +char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, control_params *control ) { char *s; @@ -41,7 +44,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, double val; MPI_Comm comm; int me; - + comm = MPI_COMM_WORLD; MPI_Comm_rank(comm, &me); @@ -61,7 +64,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, n = atoi(tmp[0]); if (n < 1) { if (me == 0) - fprintf( stderr, "WARNING: number of globals in ffield file is 0!\n" ); + lmp->error->warning( FLERR, "Number of globals in ffield file is 0" ); fclose(fp); free(s); free(tmp); @@ -96,54 +99,54 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Allocating structures in reax_interaction */ reax->sbp = (single_body_parameters*) - scalloc( reax->num_atom_types, sizeof(single_body_parameters), "sbp", + scalloc(lmp, reax->num_atom_types, sizeof(single_body_parameters), "sbp", comm ); reax->tbp = (two_body_parameters**) - scalloc( reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); reax->thbp= (three_body_header***) - scalloc( reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); reax->hbp = (hbond_parameters***) - scalloc( reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); reax->fbp = (four_body_header****) - scalloc( reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); tor_flag = (char****) - scalloc( reax->num_atom_types, sizeof(char***), "tor_flag", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(char***), "tor_flag", comm ); for( i = 0; i < reax->num_atom_types; i++ ) { reax->tbp[i] = (two_body_parameters*) - scalloc( reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", + scalloc(lmp, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", comm ); reax->thbp[i]= (three_body_header**) - scalloc( reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", + scalloc(lmp, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", comm ); reax->hbp[i] = (hbond_parameters**) - scalloc( reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", + scalloc(lmp, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", comm ); reax->fbp[i] = (four_body_header***) - scalloc( reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", + scalloc(lmp, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", comm ); tor_flag[i] = (char***) - scalloc( reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); for( j = 0; j < reax->num_atom_types; j++ ) { reax->thbp[i][j]= (three_body_header*) - scalloc( reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", + scalloc(lmp, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", comm ); reax->hbp[i][j] = (hbond_parameters*) - scalloc( reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", + scalloc(lmp, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", comm ); reax->fbp[i][j] = (four_body_header**) - scalloc( reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", + scalloc(lmp, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", comm ); tor_flag[i][j] = (char**) - scalloc( reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); + scalloc(lmp, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); for (k=0; k < reax->num_atom_types; k++) { reax->fbp[i][j][k] = (four_body_header*) - scalloc( reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", + scalloc(lmp, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", comm ); tor_flag[i][j][k] = (char*) - scalloc( reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", + scalloc(lmp, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", comm ); } } @@ -158,15 +161,9 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, c = Tokenize( s, &tmp ); /* Sanity checks */ - if (c == 2 && !lgflag) { - if (me == 0) - fprintf(stderr, "Force field file requires using 'lgvdw yes'\n"); - MPI_Abort( comm, FILE_NOT_FOUND ); - } + if (c < 9) { - if (me == 0) - fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n"); - MPI_Abort( comm, FILE_NOT_FOUND ); + lmp->error->one(FLERR,"Inconsistent ffield file"); } for( j = 0; j < (int)(strlen(tmp[0])); ++j ) @@ -188,9 +185,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - if (me == 0) - fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n"); - MPI_Abort( comm, FILE_NOT_FOUND ); + lmp->error->one(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].alpha = val; @@ -208,9 +203,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - if (me == 0) - fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n"); - MPI_Abort( comm, FILE_NOT_FOUND ); + lmp->error->one(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].r_pi_pi = val; @@ -228,9 +221,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - if (me == 0) - fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n"); - MPI_Abort( comm, FILE_NOT_FOUND ); + lmp->error->one(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].p_ovun2 = val; @@ -249,9 +240,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c > 2) { - if (me == 0) - fprintf(stderr, "Force field file incompatible with 'lgvdw yes'\n"); - MPI_Abort( comm, FILE_NOT_FOUND ); + lmp->error->one(FLERR,"Force field file incompatible with 'lgvdw yes'"); } val = atof(tmp[0]); reax->sbp[i].lgcij = val; @@ -261,28 +250,32 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, if (reax->sbp[i].rcore2>0.01 && reax->sbp[i].acore2>0.01) { // Inner-wall if (reax->sbp[i].gamma_w>0.5) { // Shielding vdWaals if (reax->gp.vdw_type != 0 && reax->gp.vdw_type != 3) { - if (errorflag && (me == 0)) - fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \ - "Force field parameters for element %s\n" \ - "indicate inner wall+shielding, but earlier\n" \ - "atoms indicate different vdWaals-method.\n" \ - "This may cause division-by-zero errors.\n" \ - "Keeping vdWaals-setting for earlier atoms.\n", - reax->sbp[i].name ); + if (errorflag && (me == 0)) { + char errmsg[512]; + snprintf(errmsg, 512, "VdWaals-parameters for element %s " + "indicate inner wall+shielding, but earlier " + "atoms indicate different vdWaals-method. " + "This may cause division-by-zero errors. " + "Keeping vdWaals-setting for earlier atoms.", + reax->sbp[i].name); + lmp->error->warning(FLERR,errmsg); + } errorflag = 0; } else { reax->gp.vdw_type = 3; } } else { // No shielding vdWaals parameters present if (reax->gp.vdw_type != 0 && reax->gp.vdw_type != 2) { - if (me == 0) - fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \ - "Force field parameters for element %s\n" \ - "indicate inner wall without shielding, but earlier\n" \ - "atoms indicate different vdWaals-method.\n" \ - "This may cause division-by-zero errors.\n" \ - "Keeping vdWaals-setting for earlier atoms.\n", - reax->sbp[i].name ); + if (me == 0) { + char errmsg[512]; + snprintf(errmsg, 512, "VdWaals-parameters for element %s " + "indicate inner wall without shielding, but earlier " + "atoms indicate different vdWaals-method. " + "This may cause division-by-zero errors. " + "Keeping vdWaals-setting for earlier atoms.", + reax->sbp[i].name); + lmp->error->warning(FLERR,errmsg); + } } else { reax->gp.vdw_type = 2; } @@ -290,23 +283,25 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, } else { // No Inner wall parameters present if (reax->sbp[i].gamma_w>0.5) { // Shielding vdWaals if (reax->gp.vdw_type != 0 && reax->gp.vdw_type != 1) { - if (me == 0) - fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \ - "Force field parameters for element %s\n" \ - "indicate shielding without inner wall, but earlier\n" \ - "atoms indicate different vdWaals-method.\n" \ - "This may cause division-by-zero errors.\n" \ - "Keeping vdWaals-setting for earlier atoms.\n", - reax->sbp[i].name ); + if (me == 0) { + char errmsg[512]; + snprintf(errmsg, 512, "VdWaals parameters for element %s " + "indicate shielding without inner wall, but earlier " + "elements indicate different vdWaals-method. " + "This may cause division-by-zero errors. " + "Keeping vdWaals-setting for earlier atoms.", + reax->sbp[i].name); + lmp->error->warning(FLERR,errmsg); + } } else { reax->gp.vdw_type = 1; } } else { - if (me == 0) - fprintf( stderr, "Error: inconsistent vdWaals-parameters\n" \ - "No shielding or inner-wall set for element %s\n", - reax->sbp[i].name ); - MPI_Abort( comm, INVALID_INPUT ); + char errmsg[256]; + snprintf(errmsg, 256, "Inconsistent vdWaals-parameters " + "No shielding or inner-wall set for element %s", + reax->sbp[i].name); + lmp->error->all(FLERR, errmsg); } } } @@ -315,15 +310,23 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, for( i = 0; i < reax->num_atom_types; i++ ) if( reax->sbp[i].mass < 21 && reax->sbp[i].valency_val != reax->sbp[i].valency_boc ) { - if (me == 0) - fprintf(stderr,"Warning: changed valency_val to valency_boc for %s\n", - reax->sbp[i].name ); + if (me == 0) { + char errmsg[256]; + snprintf(errmsg, 256, "Changed valency_val to valency_boc for %s", + reax->sbp[i].name); + lmp->error->warning(FLERR,errmsg); + } reax->sbp[i].valency_val = reax->sbp[i].valency_boc; } /* next line is number of two body combination and some comments */ fgets(s,MAX_LINE,fp); c=Tokenize(s,&tmp); + + if (c == 2 && !lgflag) { + lmp->error->all(FLERR, "Force field file requires using 'lgvdw yes'"); + } + l = atoi(tmp[0]); /* a line of comments */ @@ -334,6 +337,8 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, fgets(s,MAX_LINE,fp); c=Tokenize(s,&tmp); + + j = atoi(tmp[0]) - 1; k = atoi(tmp[1]) - 1; diff --git a/src/USER-REAXC/reaxc_ffield.h b/src/USER-REAXC/reaxc_ffield.h index 7cef730f91..225f207de9 100644 --- a/src/USER-REAXC/reaxc_ffield.h +++ b/src/USER-REAXC/reaxc_ffield.h @@ -29,6 +29,6 @@ #include "reaxc_types.h" -char Read_Force_Field( FILE*, reax_interaction*, control_params* ); +char Read_Force_Field( LAMMPS_NS::LAMMPS*, FILE*, reax_interaction*, control_params* ); #endif diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 848c03f5a1..4adec04f0c 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -39,15 +39,12 @@ #include "reaxc_valence_angles.h" #include "reaxc_vector.h" -#include "lammps.h" -#include "error.h" interaction_function Interaction_Functions[NUM_INTRS]; -using namespace LAMMPS_NS; void Dummy_Interaction( reax_system * /*system*/, control_params * /*control*/, simulation_data * /*data*/, storage * /*workspace*/, - reax_list **/*lists*/, output_controls * /*out_control*/ ) + reax_list ** /*lists*/, output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* = NULL ) { } @@ -79,7 +76,7 @@ void Compute_Bonded_Forces( reax_system *system, control_params *control, /* Implement all force calls as function pointers */ for( i = 0; i < NUM_INTRS; i++ ) { (Interaction_Functions[i])( system, control, data, workspace, - lists, out_control ); + lists, out_control, NULL ); } } @@ -118,7 +115,7 @@ void Compute_Total_Force( reax_system *system, control_params *control, } -void Validate_Lists( LAMMPS *lmp, reax_system *system, storage * /*workspace*/, reax_list **lists, +void Validate_Lists( LAMMPS_NS::LAMMPS *lmp, reax_system *system, storage * /*workspace*/, reax_list **lists, int step, int /*n*/, int N, int numH, MPI_Comm comm ) { int i, comp, Hindex; @@ -138,9 +135,10 @@ void Validate_Lists( LAMMPS *lmp, reax_system *system, storage * /*workspace*/, else comp = bonds->num_intrs; if (End_Index(i, bonds) > comp) { - fprintf( stderr, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", + char errmsg[256]; + snprintf(errmsg, 256, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", step, i, End_Index(i,bonds), comp ); - lmp->error->all(FLERR,"Failure in bond list."); + lmp->error->all(FLERR,errmsg); } } } @@ -165,9 +163,10 @@ void Validate_Lists( LAMMPS *lmp, reax_system *system, storage * /*workspace*/, else comp = hbonds->num_intrs; if (End_Index(Hindex, hbonds) > comp) { - fprintf(stderr,"step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", + char errmsg[256]; + snprintf(errmsg, 256, "step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", step, Hindex, End_Index(Hindex,hbonds), comp ); - lmp->error->all(FLERR, "Failure in hydrogen bonds."); + lmp->error->all(FLERR, errmsg); } } } @@ -175,7 +174,7 @@ void Validate_Lists( LAMMPS *lmp, reax_system *system, storage * /*workspace*/, } -void Init_Forces_noQEq( LAMMPS *lmp, reax_system *system, control_params *control, +void Init_Forces_noQEq( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls * /*out_control*/, MPI_Comm comm ) { @@ -435,7 +434,7 @@ void Estimate_Storages( reax_system *system, control_params *control, } -void Compute_Forces( LAMMPS *lmp, reax_system *system, control_params *control, +void Compute_Forces( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp index be34df7571..489a43cfc1 100644 --- a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp +++ b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp @@ -33,7 +33,7 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls * /*out_control*/ ) + reax_list **lists, output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp ) { int i, j, k, pi, pk; int type_i, type_j, type_k; diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.h b/src/USER-REAXC/reaxc_hydrogen_bonds.h index 04d3d26d5c..2a448439ea 100644 --- a/src/USER-REAXC/reaxc_hydrogen_bonds.h +++ b/src/USER-REAXC/reaxc_hydrogen_bonds.h @@ -30,6 +30,6 @@ #include "reaxc_types.h" void Hydrogen_Bonds( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls* ); + storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); #endif diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 4565fd067d..6ee68d6c46 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -82,7 +82,7 @@ int Init_Simulation_Data( reax_system *system, control_params *control, return SUCCESS; } -void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm ) +void Init_Taper( LAMMPS_NS::LAMMPS* lmp, control_params *control, storage *workspace, MPI_Comm comm ) { double d1, d7; double swa, swa2, swa3; @@ -92,14 +92,16 @@ void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm ) swb = control->nonb_cut; if (fabs( swa ) > 0.01) - fprintf( stderr, "Warning: non-zero lower Taper-radius cutoff\n" ); + lmp->error->warning( FLERR, "Non-zero lower Taper-radius cutoff" ); if (swb < 0) { - fprintf( stderr, "Negative upper Taper-radius cutoff\n" ); - MPI_Abort( comm, INVALID_INPUT ); + lmp->error->all(FLERR,"Negative upper Taper-radius cutoff"); + } + else if( swb < 5 ) { + char errmsg[256]; + snprintf(errmsg, 256, "Very low Taper-radius cutoff: %f", swb ); + lmp->error->warning( FLERR, errmsg ); } - else if( swb < 5 ) - fprintf( stderr, "Warning: very low Taper-radius cutoff: %f\n", swb ); d1 = swb - swa; d7 = pow( d1, 7.0 ); @@ -120,12 +122,12 @@ void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm ) } -int Init_Workspace( reax_system *system, control_params *control, +int Init_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, storage *workspace, MPI_Comm comm, char *msg ) { int ret; - ret = Allocate_Workspace( system, control, workspace, + ret = Allocate_Workspace( lmp, system, control, workspace, system->local_cap, system->total_cap, comm, msg ); if (ret != SUCCESS) return ret; @@ -134,7 +136,7 @@ int Init_Workspace( reax_system *system, control_params *control, Reset_Workspace( system, workspace ); /* Initialize the Taper function */ - Init_Taper( control, workspace, comm ); + Init_Taper( lmp, control, workspace, comm ); return SUCCESS; } @@ -179,10 +181,9 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, } total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); - if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, + if( !Make_List( lmp, system->Hcap, total_hbonds, TYP_HBOND, *lists+HBONDS, comm ) ) { - fprintf( stderr, "not enough space for hbonds list. terminating!\n" ); - lmp->error->all(FLERR, "Can't allocate space for hbonds."); + lmp->error->one(FLERR, "Not enough space for hbonds list."); } } @@ -193,18 +194,16 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, } bond_cap = (int)(MAX( total_bonds*safezone, mincap*MIN_BONDS )); - if( !Make_List( system->total_cap, bond_cap, TYP_BOND, + if( !Make_List( lmp, system->total_cap, bond_cap, TYP_BOND, *lists+BONDS, comm ) ) { - fprintf( stderr, "not enough space for bonds list. terminating!\n" ); - lmp->error->all(FLERR, "Can't allocate space for hbonds."); + lmp->error->one(FLERR, "Not enough space for bonds list."); } /* 3bodies list */ cap_3body = (int)(MAX( num_3body*safezone, MIN_3BODIES )); - if( !Make_List( bond_cap, cap_3body, TYP_THREE_BODY, + if( !Make_List( lmp, bond_cap, cap_3body, TYP_THREE_BODY, *lists+THREE_BODIES, comm ) ){ - fprintf( stderr, "Problem in initializing angles list. Terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + lmp->error->one(FLERR,"Problem in initializing angles list."); } free( hb_top ); @@ -219,60 +218,53 @@ void Initialize( LAMMPS *lmp, reax_system *system, control_params *control, mpi_datatypes *mpi_data, MPI_Comm comm ) { char msg[MAX_STR]; + char errmsg[128]; if (Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE) { - fprintf( stderr, "p%d: init_mpi_datatypes: could not create datatypes\n", - system->my_rank ); - fprintf( stderr, "p%d: mpi_data couldn't be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + + snprintf(errmsg, 128, "Could not create datatypes on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } if (Init_System(system, control, msg) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: system could not be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf(errmsg, 128, "System could not be initialized on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } if (Init_Simulation_Data( system, control, data, msg ) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: sim_data couldn't be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf(errmsg, 128, "Sim_data could not be initialized on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } - if (Init_Workspace( system, control, workspace, mpi_data->world, msg ) == + if (Init_Workspace( lmp, system, control, workspace, mpi_data->world, msg ) == FAILURE) { - fprintf( stderr, "p%d:init_workspace: not enough memory\n", - system->my_rank ); - fprintf( stderr, "p%d:workspace couldn't be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf(errmsg, 128, "Workspace could not be initialized on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } if (Init_Lists( lmp, system, control, data, workspace, lists, mpi_data, msg ) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: system could not be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf(errmsg, 128, "System could not be initialized on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } - if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: could not open output files! terminating...\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + if (Init_Output_Files(lmp, system,control,out_control,mpi_data,msg)== FAILURE) { + snprintf(errmsg, 128, "Could not open output files on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } if (control->tabulate) { - if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: couldn't create lookup table! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + if (Init_Lookup_Tables( lmp, system, control, workspace, mpi_data, msg ) == FAILURE) { + snprintf(errmsg, 128, "Lookup table could not be created on thread %d", + system->my_rank); + lmp->error->one(FLERR,errmsg); } } diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp index f71fcbec8e..aa7e7fcea7 100644 --- a/src/USER-REAXC/reaxc_io_tools.cpp +++ b/src/USER-REAXC/reaxc_io_tools.cpp @@ -34,7 +34,7 @@ #include "reaxc_traj.h" #include "reaxc_vector.h" -int Init_Output_Files( reax_system *system, control_params *control, +int Init_Output_Files( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, output_controls *out_control, mpi_datatypes *mpi_data, char *msg ) { @@ -42,7 +42,7 @@ int Init_Output_Files( reax_system *system, control_params *control, int ret; if (out_control->write_steps > 0) { - ret = Init_Traj( system, control, out_control, mpi_data, msg ); + ret = Init_Traj( lmp, system, control, out_control, mpi_data, msg ); if (ret == FAILURE) return ret; } @@ -107,7 +107,7 @@ int Close_Output_Files( reax_system *system, control_params *control, } -void Output_Results( reax_system *system, control_params *control, +void Output_Results( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, simulation_data *data, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { @@ -146,7 +146,7 @@ void Output_Results( reax_system *system, control_params *control, /* write current frame */ if( out_control->write_steps > 0 && (data->step-data->prev_steps) % out_control->write_steps == 0 ) { - Append_Frame( system, control, data, lists, out_control, mpi_data ); + Append_Frame( lmp, system, control, data, lists, out_control, mpi_data ); } } diff --git a/src/USER-REAXC/reaxc_io_tools.h b/src/USER-REAXC/reaxc_io_tools.h index a3f22fccc2..80202d5c83 100644 --- a/src/USER-REAXC/reaxc_io_tools.h +++ b/src/USER-REAXC/reaxc_io_tools.h @@ -29,10 +29,10 @@ #include "reaxc_types.h" -int Init_Output_Files( reax_system*, control_params*, +int Init_Output_Files( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, output_controls*, mpi_datatypes*, char* ); int Close_Output_Files( reax_system*, control_params*, output_controls*, mpi_datatypes* ); -void Output_Results( reax_system*, control_params*, simulation_data*, +void Output_Results( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, simulation_data*, reax_list**, output_controls*, mpi_datatypes* ); #endif diff --git a/src/USER-REAXC/reaxc_list.cpp b/src/USER-REAXC/reaxc_list.cpp index 8a3bb9d322..5d4ab2f3c8 100644 --- a/src/USER-REAXC/reaxc_list.cpp +++ b/src/USER-REAXC/reaxc_list.cpp @@ -29,116 +29,118 @@ #include "reaxc_tool_box.h" /************* allocate list space ******************/ -int Make_List(int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) +int Make_List( LAMMPS_NS::LAMMPS *lmp, int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) { l->allocated = 1; l->n = n; l->num_intrs = num_intrs; - if (l->index) sfree(l->index, "list:index"); - if (l->end_index) sfree(l->end_index, "list:end_index"); - l->index = (int*) smalloc( n * sizeof(int), "list:index", comm ); - l->end_index = (int*) smalloc( n * sizeof(int), "list:end_index", comm ); + if (l->index) sfree(lmp, l->index, "list:index"); + if (l->end_index) sfree(lmp, l->end_index, "list:end_index"); + l->index = (int*) smalloc(lmp, n * sizeof(int), "list:index", comm ); + l->end_index = (int*) smalloc(lmp, n * sizeof(int), "list:end_index", comm ); l->type = type; switch(l->type) { case TYP_VOID: - if (l->select.v) sfree(l->select.v, "list:v"); - l->select.v = (void*) smalloc(l->num_intrs * sizeof(void*), "list:v", comm); + if (l->select.v) sfree(lmp, l->select.v, "list:v"); + l->select.v = (void*) smalloc(lmp, l->num_intrs * sizeof(void*), "list:v", comm); break; case TYP_THREE_BODY: - if (l->select.three_body_list) sfree(l->select.three_body_list,"list:three_bodies"); + if (l->select.three_body_list) sfree(lmp, l->select.three_body_list,"list:three_bodies"); l->select.three_body_list = (three_body_interaction_data*) - smalloc( l->num_intrs * sizeof(three_body_interaction_data), + smalloc(lmp, l->num_intrs * sizeof(three_body_interaction_data), "list:three_bodies", comm ); break; case TYP_BOND: - if (l->select.bond_list) sfree(l->select.bond_list,"list:bonds"); + if (l->select.bond_list) sfree(lmp, l->select.bond_list,"list:bonds"); l->select.bond_list = (bond_data*) - smalloc( l->num_intrs * sizeof(bond_data), "list:bonds", comm ); + smalloc(lmp, l->num_intrs * sizeof(bond_data), "list:bonds", comm ); break; case TYP_DBO: - if (l->select.dbo_list) sfree(l->select.dbo_list,"list:dbonds"); + if (l->select.dbo_list) sfree(lmp, l->select.dbo_list,"list:dbonds"); l->select.dbo_list = (dbond_data*) - smalloc( l->num_intrs * sizeof(dbond_data), "list:dbonds", comm ); + smalloc(lmp, l->num_intrs * sizeof(dbond_data), "list:dbonds", comm ); break; case TYP_DDELTA: - if (l->select.dDelta_list) sfree(l->select.dDelta_list,"list:dDeltas"); + if (l->select.dDelta_list) sfree(lmp, l->select.dDelta_list,"list:dDeltas"); l->select.dDelta_list = (dDelta_data*) - smalloc( l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm ); + smalloc(lmp, l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm ); break; case TYP_FAR_NEIGHBOR: - if (l->select.far_nbr_list) sfree(l->select.far_nbr_list,"list:far_nbrs"); + if (l->select.far_nbr_list) sfree(lmp, l->select.far_nbr_list,"list:far_nbrs"); l->select.far_nbr_list = (far_neighbor_data*) - smalloc(l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm); + smalloc(lmp, l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm); break; case TYP_HBOND: - if (l->select.hbond_list) sfree(l->select.hbond_list,"list:hbonds"); + if (l->select.hbond_list) sfree(lmp, l->select.hbond_list,"list:hbonds"); l->select.hbond_list = (hbond_data*) - smalloc( l->num_intrs * sizeof(hbond_data), "list:hbonds", comm ); + smalloc(lmp, l->num_intrs * sizeof(hbond_data), "list:hbonds", comm ); break; default: - fprintf( stderr, "ERROR: no %d list type defined!\n", l->type ); - MPI_Abort( comm, INVALID_INPUT ); + char errmsg[128]; + snprintf(errmsg, 128, "No %d list type defined", l->type); + lmp->error->all(FLERR,errmsg); } return SUCCESS; } -void Delete_List( reax_list *l, MPI_Comm comm ) +void Delete_List( LAMMPS_NS::LAMMPS *lmp, reax_list *l, MPI_Comm comm ) { if (l->allocated == 0) return; l->allocated = 0; - sfree( l->index, "list:index" ); - sfree( l->end_index, "list:end_index" ); + sfree(lmp, l->index, "list:index" ); + sfree(lmp, l->end_index, "list:end_index" ); l->index = NULL; l->end_index = NULL; switch(l->type) { case TYP_VOID: - sfree( l->select.v, "list:v" ); + sfree(lmp, l->select.v, "list:v" ); l->select.v = NULL; break; case TYP_HBOND: - sfree( l->select.hbond_list, "list:hbonds" ); + sfree(lmp, l->select.hbond_list, "list:hbonds" ); l->select.hbond_list = NULL; break; case TYP_FAR_NEIGHBOR: - sfree( l->select.far_nbr_list, "list:far_nbrs" ); + sfree(lmp, l->select.far_nbr_list, "list:far_nbrs" ); l->select.far_nbr_list = NULL; break; case TYP_BOND: - sfree( l->select.bond_list, "list:bonds" ); + sfree(lmp, l->select.bond_list, "list:bonds" ); l->select.bond_list = NULL; break; case TYP_DBO: - sfree( l->select.dbo_list, "list:dbos" ); + sfree(lmp, l->select.dbo_list, "list:dbos" ); l->select.dbo_list = NULL; break; case TYP_DDELTA: - sfree( l->select.dDelta_list, "list:dDeltas" ); + sfree(lmp, l->select.dDelta_list, "list:dDeltas" ); l->select.dDelta_list = NULL; break; case TYP_THREE_BODY: - sfree( l->select.three_body_list, "list:three_bodies" ); + sfree(lmp, l->select.three_body_list, "list:three_bodies" ); l->select.three_body_list = NULL; break; default: - fprintf( stderr, "ERROR: no %d list type defined!\n", l->type ); - MPI_Abort( comm, INVALID_INPUT ); + char errmsg[128]; + snprintf(errmsg, 128, "No %d list type defined", l->type); + lmp->error->all(FLERR,errmsg); } } diff --git a/src/USER-REAXC/reaxc_list.h b/src/USER-REAXC/reaxc_list.h index ab7fbce19c..1df2338b0f 100644 --- a/src/USER-REAXC/reaxc_list.h +++ b/src/USER-REAXC/reaxc_list.h @@ -29,8 +29,8 @@ #include "reaxc_types.h" -int Make_List( int, int, int, reax_list*, MPI_Comm ); -void Delete_List( reax_list*, MPI_Comm ); +int Make_List( LAMMPS_NS::LAMMPS*, int, int, int, reax_list*, MPI_Comm ); +void Delete_List( LAMMPS_NS::LAMMPS*, reax_list*, MPI_Comm ); inline int Num_Entries(int,reax_list*); inline int Start_Index( int, reax_list* ); diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp index 92945ebdb5..41ad5e99d4 100644 --- a/src/USER-REAXC/reaxc_lookup.cpp +++ b/src/USER-REAXC/reaxc_lookup.cpp @@ -50,7 +50,7 @@ void Tridiagonal_Solve( const double *a, const double *b, } -void Natural_Cubic_Spline( const double *h, const double *f, +void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double *f, cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ) { @@ -58,11 +58,11 @@ void Natural_Cubic_Spline( const double *h, const double *f, double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + b = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + c = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + d = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + v = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); /* build the linear system */ a[0] = a[1] = a[n-1] = 0; @@ -92,16 +92,16 @@ void Natural_Cubic_Spline( const double *h, const double *f, coef[i-1].a = f[i]; } - sfree( a, "cubic_spline:a" ); - sfree( b, "cubic_spline:b" ); - sfree( c, "cubic_spline:c" ); - sfree( d, "cubic_spline:d" ); - sfree( v, "cubic_spline:v" ); + sfree(lmp, a, "cubic_spline:a" ); + sfree(lmp, b, "cubic_spline:b" ); + sfree(lmp, c, "cubic_spline:c" ); + sfree(lmp, d, "cubic_spline:d" ); + sfree(lmp, v, "cubic_spline:v" ); } -void Complete_Cubic_Spline( const double *h, const double *f, double v0, double vlast, +void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double *f, double v0, double vlast, cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ) { @@ -109,11 +109,11 @@ void Complete_Cubic_Spline( const double *h, const double *f, double v0, double double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc( n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + b = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + c = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + d = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + v = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); /* build the linear system */ a[0] = 0; @@ -142,15 +142,15 @@ void Complete_Cubic_Spline( const double *h, const double *f, double v0, double coef[i-1].a = f[i]; } - sfree( a, "cubic_spline:a" ); - sfree( b, "cubic_spline:b" ); - sfree( c, "cubic_spline:c" ); - sfree( d, "cubic_spline:d" ); - sfree( v, "cubic_spline:v" ); + sfree(lmp, a, "cubic_spline:a" ); + sfree(lmp, b, "cubic_spline:b" ); + sfree(lmp, c, "cubic_spline:c" ); + sfree(lmp, d, "cubic_spline:d" ); + sfree(lmp, v, "cubic_spline:v" ); } -int Init_Lookup_Tables( reax_system *system, control_params *control, +int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, storage *workspace, mpi_datatypes *mpi_data, char * /*msg*/ ) { int i, j, r; @@ -171,23 +171,23 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, num_atom_types = system->reax_param.num_atom_types; dr = control->nonb_cut / control->tabulate; h = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:h", comm ); + smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:h", comm ); fh = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); + smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); fvdw = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); + smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); fCEvd = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); + smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); fele = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); + smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); fCEclmb = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); + smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); LR = (LR_lookup_table**) - scalloc( num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); + scalloc(lmp, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); for( i = 0; i < num_atom_types; ++i ) LR[i] = (LR_lookup_table*) - scalloc( num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); + scalloc(lmp, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); for( i = 0; i < MAX_ATOM_TYPES; ++i ) existing_types[i] = 0; @@ -207,21 +207,21 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, LR[i][j].dx = dr; LR[i][j].inv_dx = control->tabulate / control->nonb_cut; LR[i][j].y = (LR_data*) - smalloc( LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); + smalloc(lmp, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); LR[i][j].H = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , + smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , comm ); LR[i][j].vdW = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", + smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", comm); LR[i][j].CEvd = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", + smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", comm); LR[i][j].ele = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", + smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", comm ); LR[i][j].CEclmb = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef), + smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef), "lookup:LR[i,j].CEclmb", comm ); for( r = 1; r <= control->tabulate; ++r ) { @@ -246,22 +246,22 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, vlast_vdw = fCEvd[r-1]; vlast_ele = fele[r-1]; - Natural_Cubic_Spline( &h[1], &fh[1], + Natural_Cubic_Spline( lmp, &h[1], &fh[1], &(LR[i][j].H[1]), control->tabulate+1, comm ); - Complete_Cubic_Spline( &h[1], &fvdw[1], v0_vdw, vlast_vdw, + Complete_Cubic_Spline( lmp, &h[1], &fvdw[1], v0_vdw, vlast_vdw, &(LR[i][j].vdW[1]), control->tabulate+1, comm ); - Natural_Cubic_Spline( &h[1], &fCEvd[1], + Natural_Cubic_Spline( lmp, &h[1], &fCEvd[1], &(LR[i][j].CEvd[1]), control->tabulate+1, comm ); - Complete_Cubic_Spline( &h[1], &fele[1], v0_ele, vlast_ele, + Complete_Cubic_Spline( lmp, &h[1], &fele[1], v0_ele, vlast_ele, &(LR[i][j].ele[1]), control->tabulate+1, comm ); - Natural_Cubic_Spline( &h[1], &fCEclmb[1], + Natural_Cubic_Spline( lmp, &h[1], &fCEclmb[1], &(LR[i][j].CEclmb[1]), control->tabulate+1, comm ); } else { @@ -281,7 +281,7 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, } -void Deallocate_Lookup_Tables( reax_system *system ) +void Deallocate_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system ) { int i, j; int ntypes; @@ -291,14 +291,14 @@ void Deallocate_Lookup_Tables( reax_system *system ) for( i = 0; i < ntypes; ++i ) { for( j = i; j < ntypes; ++j ) if (LR[i][j].n) { - sfree( LR[i][j].y, "LR[i,j].y" ); - sfree( LR[i][j].H, "LR[i,j].H" ); - sfree( LR[i][j].vdW, "LR[i,j].vdW" ); - sfree( LR[i][j].CEvd, "LR[i,j].CEvd" ); - sfree( LR[i][j].ele, "LR[i,j].ele" ); - sfree( LR[i][j].CEclmb, "LR[i,j].CEclmb" ); + sfree(lmp, LR[i][j].y, "LR[i,j].y" ); + sfree(lmp, LR[i][j].H, "LR[i,j].H" ); + sfree(lmp, LR[i][j].vdW, "LR[i,j].vdW" ); + sfree(lmp, LR[i][j].CEvd, "LR[i,j].CEvd" ); + sfree(lmp, LR[i][j].ele, "LR[i,j].ele" ); + sfree(lmp, LR[i][j].CEclmb, "LR[i,j].CEclmb" ); } - sfree( LR[i], "LR[i]" ); + sfree(lmp, LR[i], "LR[i]" ); } - sfree( LR, "LR" ); + sfree(lmp, LR, "LR" ); } diff --git a/src/USER-REAXC/reaxc_lookup.h b/src/USER-REAXC/reaxc_lookup.h index 66fa3c407c..2d33ad82de 100644 --- a/src/USER-REAXC/reaxc_lookup.h +++ b/src/USER-REAXC/reaxc_lookup.h @@ -32,17 +32,17 @@ void Tridiagonal_Solve( const double *a, const double *b, double *c, double *d, double *x, unsigned int n); -void Natural_Cubic_Spline( const double *h, const double *f, +void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f, cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ); -void Complete_Cubic_Spline( const double *h, const double *f, double v0, double vlast, +void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f, double v0, double vlast, cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ); -int Init_Lookup_Tables( reax_system*, control_params*, storage*, +int Init_Lookup_Tables( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, storage*, mpi_datatypes*, char* ); -void Deallocate_Lookup_Tables( reax_system* ); +void Deallocate_Lookup_Tables( LAMMPS_NS::LAMMPS*, reax_system* ); #endif diff --git a/src/USER-REAXC/reaxc_multi_body.cpp b/src/USER-REAXC/reaxc_multi_body.cpp index f7d72a2678..a16c4eb42b 100644 --- a/src/USER-REAXC/reaxc_multi_body.cpp +++ b/src/USER-REAXC/reaxc_multi_body.cpp @@ -32,7 +32,7 @@ void Atom_Energy( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, - output_controls * /*out_control*/ ) + output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp ) { int i, j, pj, type_i, type_j; double Delta_lpcorr, dfvl; diff --git a/src/USER-REAXC/reaxc_multi_body.h b/src/USER-REAXC/reaxc_multi_body.h index a17c9f484e..dc2c1040eb 100644 --- a/src/USER-REAXC/reaxc_multi_body.h +++ b/src/USER-REAXC/reaxc_multi_body.h @@ -30,6 +30,6 @@ #include "reaxc_types.h" void Atom_Energy( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls* ); + storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); #endif diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index d9cb5f22fe..49a9f096dd 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -144,10 +144,10 @@ void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system *system, control_params *con if (total_bonds >= bonds->num_intrs * DANGER_ZONE) { workspace->realloc.bonds = 1; if (total_bonds >= bonds->num_intrs) { - fprintf(stderr, - "p%d: not enough space for bonds! total=%d allocated=%d\n", - system->my_rank, total_bonds, bonds->num_intrs ); - lmp->error->all(FLERR, "Can't allocate space for hbonds."); + char errmsg[256]; + snprintf(errmsg, 256, "p%d: not enough space for bonds! total=%d allocated=%d\n", + system->my_rank, total_bonds, bonds->num_intrs); + lmp->error->one(FLERR, errmsg); } } } @@ -170,10 +170,10 @@ void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system *system, control_params *con if (total_hbonds >= hbonds->num_intrs * 0.90/*DANGER_ZONE*/) { workspace->realloc.hbonds = 1; if (total_hbonds >= hbonds->num_intrs) { - fprintf(stderr, - "p%d: not enough space for hbonds! total=%d allocated=%d\n", - system->my_rank, total_hbonds, hbonds->num_intrs ); - lmp->error->all(FLERR, "Can't allocate space for hbonds."); + char errmsg[256]; + snprintf(errmsg, 256, "p%d: not enough space for hbonds! total=%d allocated=%d\n", + system->my_rank, total_hbonds, hbonds->num_intrs); + lmp->error->one(FLERR, errmsg); } } } diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index 9e662e7a45..eaa6765f36 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -53,23 +53,25 @@ int Tokenize( char* s, char*** tok ) return count; } + + /* safe malloc */ -void *smalloc( rc_bigint n, const char *name, MPI_Comm comm ) +void *smalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, const char *name, MPI_Comm comm ) { void *ptr; + char errmsg[256]; if (n <= 0) { - fprintf( stderr, "WARNING: trying to allocate %ld bytes for array %s. ", - n, name ); - fprintf( stderr, "returning NULL.\n" ); + snprintf(errmsg, 256, "Trying to allocate %ld bytes for array %s. " + "returning NULL.", n, name); + lmp->error->warning(FLERR,errmsg); return NULL; } ptr = malloc( n ); if (ptr == NULL) { - fprintf( stderr, "ERROR: failed to allocate %ld bytes for array %s", - n, name ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + snprintf(errmsg, 256, "Failed to allocate %ld bytes for array %s", n, name); + lmp->error->one(FLERR,errmsg); } return ptr; @@ -77,29 +79,30 @@ void *smalloc( rc_bigint n, const char *name, MPI_Comm comm ) /* safe calloc */ -void *scalloc( rc_bigint n, rc_bigint size, const char *name, MPI_Comm comm ) +void *scalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, rc_bigint size, const char *name, MPI_Comm comm ) { void *ptr; + char errmsg[256]; if (n <= 0) { - fprintf( stderr, "WARNING: trying to allocate %ld elements for array %s. ", - n, name ); - fprintf( stderr, "returning NULL.\n" ); + snprintf(errmsg, 256, "Trying to allocate %ld elements for array %s. " + "returning NULL.\n", n, name ); + lmp->error->warning(FLERR,errmsg); return NULL; } if (size <= 0) { - fprintf( stderr, "WARNING: elements size for array %s is %ld. ", - name, size ); - fprintf( stderr, "returning NULL.\n" ); + snprintf(errmsg, 256, "Elements size for array %s is %ld. " + "returning NULL", name, size ); + lmp->error->warning(FLERR,errmsg); return NULL; } ptr = calloc( n, size ); if (ptr == NULL) { - fprintf( stderr, "ERROR: failed to allocate %ld bytes for array %s", - n*size, name ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + char errmsg[256]; + snprintf(errmsg, 256, "Failed to allocate %ld bytes for array %s", n*size, name); + lmp->error->one(FLERR,errmsg); } return ptr; @@ -107,11 +110,12 @@ void *scalloc( rc_bigint n, rc_bigint size, const char *name, MPI_Comm comm ) /* safe free */ -void sfree( void *ptr, const char *name ) +void sfree( LAMMPS_NS::LAMMPS* lmp, void *ptr, const char *name ) { if (ptr == NULL) { - fprintf( stderr, "WARNING: trying to free the already NULL pointer %s!\n", - name ); + char errmsg[256]; + snprintf(errmsg, 256, "Trying to free the already NULL pointer %s", name ); + lmp->error->one(FLERR,errmsg); return; } diff --git a/src/USER-REAXC/reaxc_tool_box.h b/src/USER-REAXC/reaxc_tool_box.h index 7f8dd455ca..7c5ab12587 100644 --- a/src/USER-REAXC/reaxc_tool_box.h +++ b/src/USER-REAXC/reaxc_tool_box.h @@ -37,7 +37,7 @@ double Get_Time( ); int Tokenize( char*, char*** ); /* from lammps */ -void *smalloc( rc_bigint, const char*, MPI_Comm ); -void *scalloc( rc_bigint, rc_bigint, const char*, MPI_Comm ); -void sfree( void*, const char* ); +void *smalloc( LAMMPS_NS::LAMMPS*, rc_bigint, const char*, MPI_Comm ); +void *scalloc( LAMMPS_NS::LAMMPS*, rc_bigint, rc_bigint, const char*, MPI_Comm ); +void sfree( LAMMPS_NS::LAMMPS*, void*, const char* ); #endif diff --git a/src/USER-REAXC/reaxc_torsion_angles.cpp b/src/USER-REAXC/reaxc_torsion_angles.cpp index ed76368d68..50c3412928 100644 --- a/src/USER-REAXC/reaxc_torsion_angles.cpp +++ b/src/USER-REAXC/reaxc_torsion_angles.cpp @@ -120,7 +120,8 @@ double Calculate_Omega( rvec dvec_ij, double r_ij, void Torsion_Angles( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control ) + reax_list **lists, output_controls *out_control, + LAMMPS_NS::LAMMPS* lmp ) { int i, j, k, l, pi, pj, pk, pl, pij, plk, natoms; int type_i, type_j, type_k, type_l; diff --git a/src/USER-REAXC/reaxc_torsion_angles.h b/src/USER-REAXC/reaxc_torsion_angles.h index 755e8c6532..38236cb7dc 100644 --- a/src/USER-REAXC/reaxc_torsion_angles.h +++ b/src/USER-REAXC/reaxc_torsion_angles.h @@ -30,6 +30,7 @@ #include "reaxc_types.h" void Torsion_Angles( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls* ); + storage*, reax_list**, output_controls*, + LAMMPS_NS::LAMMPS* = NULL ); #endif diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index 54d8b3219c..ee2939d662 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -29,7 +29,7 @@ #include "reaxc_list.h" #include "reaxc_tool_box.h" -int Reallocate_Output_Buffer( output_controls *out_control, int req_space, +int Reallocate_Output_Buffer( LAMMPS_NS::LAMMPS *lmp, output_controls *out_control, int req_space, MPI_Comm comm ) { if (out_control->buffer_len > 0) @@ -38,10 +38,9 @@ int Reallocate_Output_Buffer( output_controls *out_control, int req_space, out_control->buffer_len = (int)(req_space*SAFE_ZONE); out_control->buffer = (char*) malloc(out_control->buffer_len*sizeof(char)); if (out_control->buffer == NULL) { - fprintf( stderr, - "insufficient memory for required buffer size %d. terminating!\n", - (int) (req_space*SAFE_ZONE) ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + char errmsg[256]; + snprintf(errmsg, 256, "Insufficient memory for required buffer size %d", (int) (req_space*SAFE_ZONE)); + lmp->error->one(FLERR,errmsg); } return SUCCESS; @@ -57,7 +56,7 @@ void Write_Skip_Line( output_controls *out_control, mpi_datatypes * /*mpi_data*/ } -int Write_Header( reax_system *system, control_params *control, +int Write_Header( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, output_controls *out_control, mpi_datatypes *mpi_data ) { int num_hdr_lines, my_hdr_lines, buffer_req; @@ -83,7 +82,7 @@ int Write_Header( reax_system *system, control_params *control, my_hdr_lines = num_hdr_lines * ( system->my_rank == MASTER_NODE ); buffer_req = my_hdr_lines * HEADER_LINE_LEN; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); /* only the master node writes into trajectory header */ if (system->my_rank == MASTER_NODE) { @@ -259,7 +258,7 @@ int Write_Header( reax_system *system, control_params *control, } -int Write_Init_Desc( reax_system *system, control_params * /*control*/, +int Write_Init_Desc( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params * /*control*/, output_controls *out_control, mpi_datatypes *mpi_data ) { int i, me, np, cnt, buffer_len, buffer_req; @@ -278,7 +277,7 @@ int Write_Init_Desc( reax_system *system, control_params * /*control*/, else buffer_req = system->n * INIT_DESC_LEN + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); out_control->line[0] = 0; out_control->buffer[0] = 0; @@ -311,7 +310,7 @@ int Write_Init_Desc( reax_system *system, control_params * /*control*/, } -int Init_Traj( reax_system *system, control_params *control, +int Init_Traj( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, output_controls *out_control, mpi_datatypes *mpi_data, char *msg ) { @@ -348,14 +347,14 @@ int Init_Traj( reax_system *system, control_params *control, strcpy( msg, "init_traj: unknown trajectory option" ); return FAILURE; } - Write_Header( system, control, out_control, mpi_data ); - Write_Init_Desc( system, control, out_control, mpi_data ); + Write_Header( lmp, system, control, out_control, mpi_data ); + Write_Init_Desc( lmp, system, control, out_control, mpi_data ); return SUCCESS; } -int Write_Frame_Header( reax_system *system, control_params *control, +int Write_Frame_Header( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, output_controls *out_control, mpi_datatypes *mpi_data ) { @@ -367,7 +366,7 @@ int Write_Frame_Header( reax_system *system, control_params *control, my_frm_hdr_lines = num_frm_hdr_lines * ( me == MASTER_NODE ); buffer_req = my_frm_hdr_lines * HEADER_LINE_LEN; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); /* only the master node writes into trajectory header */ if (me == MASTER_NODE) { @@ -481,7 +480,7 @@ int Write_Frame_Header( reax_system *system, control_params *control, -int Write_Atoms( reax_system *system, control_params * /*control*/, +int Write_Atoms( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * /*control*/, output_controls *out_control, mpi_datatypes *mpi_data ) { int i, me, np, line_len, buffer_len, buffer_req, cnt; @@ -500,7 +499,7 @@ int Write_Atoms( reax_system *system, control_params * /*control*/, else buffer_req = system->n * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); /* fill in buffer */ out_control->line[0] = 0; @@ -531,9 +530,7 @@ int Write_Atoms( reax_system *system, control_params * /*control*/, p_atom->f[0], p_atom->f[1], p_atom->f[2], p_atom->q ); break; default: - fprintf( stderr, - "write_traj_atoms: unknown atom trajectroy format!\n"); - MPI_Abort( mpi_data->world, UNKNOWN_OPTION ); + lmp->error->all(FLERR,"Write_traj_atoms: unknown atom trajectory format"); } strncpy( out_control->buffer + i*line_len, out_control->line, line_len+1 ); @@ -559,7 +556,7 @@ int Write_Atoms( reax_system *system, control_params * /*control*/, } -int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, +int Write_Bonds( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, reax_list *bonds, output_controls *out_control, mpi_datatypes *mpi_data) { int i, j, pj, me, np; @@ -592,7 +589,7 @@ int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, else buffer_req = my_bonds * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); /* fill in the buffer */ out_control->line[0] = 0; @@ -619,8 +616,7 @@ int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, bo_ij->bo_data.BO_pi, bo_ij->bo_data.BO_pi2 ); break; default: - fprintf(stderr, "write_traj_bonds: FATAL! invalid bond_info option"); - MPI_Abort( mpi_data->world, UNKNOWN_OPTION ); + lmp->error->all(FLERR, "Write_traj_bonds: FATAL! invalid bond_info option"); } strncpy( out_control->buffer + my_bonds*line_len, out_control->line, line_len+1 ); @@ -649,7 +645,7 @@ int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, } -int Write_Angles( reax_system *system, control_params *control, +int Write_Angles( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, reax_list *bonds, reax_list *thb_intrs, output_controls *out_control, mpi_datatypes *mpi_data ) { @@ -693,7 +689,7 @@ int Write_Angles( reax_system *system, control_params *control, else buffer_req = my_angles * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); /* fill in the buffer */ my_angles = 0; @@ -744,20 +740,20 @@ int Write_Angles( reax_system *system, control_params *control, } -int Append_Frame( reax_system *system, control_params *control, +int Append_Frame( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, simulation_data *data, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { - Write_Frame_Header( system, control, data, out_control, mpi_data ); + Write_Frame_Header( lmp, system, control, data, out_control, mpi_data ); if (out_control->write_atoms) - Write_Atoms( system, control, out_control, mpi_data ); + Write_Atoms( lmp, system, control, out_control, mpi_data ); if (out_control->write_bonds) - Write_Bonds( system, control, (*lists + BONDS), out_control, mpi_data ); + Write_Bonds( lmp, system, control, (*lists + BONDS), out_control, mpi_data ); if (out_control->write_angles) - Write_Angles( system, control, (*lists + BONDS), (*lists + THREE_BODIES), + Write_Angles( lmp, system, control, (*lists + BONDS), (*lists + THREE_BODIES), out_control, mpi_data ); return SUCCESS; diff --git a/src/USER-REAXC/reaxc_traj.h b/src/USER-REAXC/reaxc_traj.h index 72c56637eb..5508d27cdb 100644 --- a/src/USER-REAXC/reaxc_traj.h +++ b/src/USER-REAXC/reaxc_traj.h @@ -73,11 +73,11 @@ enum BOND_LINE_OPTS { OPT_NOBOND, OPT_BOND_BASIC, OPT_BOND_FULL, NR_OPT_BOND }; enum ANGLE_LINE_OPTS { OPT_NOANGLE, OPT_ANGLE_BASIC, NR_OPT_ANGLE }; -int Init_Traj( reax_system*, control_params*, output_controls*, +int Init_Traj( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, output_controls*, mpi_datatypes*, char* ); int End_Traj( int, output_controls* ); -int Append_Frame( reax_system*, control_params*, simulation_data*, +int Append_Frame( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, simulation_data*, reax_list**, output_controls*, mpi_datatypes* ); #endif diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index 2666fcf85c..cf6d5dcddc 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -39,6 +39,9 @@ #include #include "accelerator_kokkos.h" +#include "lammps.h" +#include "error.h" + #if defined LMP_USER_OMP #define OMP_TIMING 0 @@ -899,9 +902,9 @@ typedef void (*evolve_function)(reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes* ); -typedef void (*interaction_function) (reax_system*, control_params*, +typedef void (*interaction_function) ( reax_system*, control_params*, simulation_data*, storage*, - reax_list**, output_controls*); + reax_list**, output_controls*, LAMMPS_NS::LAMMPS*); typedef void (*print_interaction)(reax_system*, control_params*, simulation_data*, storage*, diff --git a/src/USER-REAXC/reaxc_valence_angles.cpp b/src/USER-REAXC/reaxc_valence_angles.cpp index af1f1f8003..d762dc1611 100644 --- a/src/USER-REAXC/reaxc_valence_angles.cpp +++ b/src/USER-REAXC/reaxc_valence_angles.cpp @@ -76,7 +76,7 @@ void Calculate_dCos_Theta( rvec dvec_ji, double d_ji, rvec dvec_jk, double d_jk, void Valence_Angles( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls * /*out_control*/ ) + reax_list **lists, output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp) { int i, j, pi, k, pk, t; int type_i, type_j, type_k; @@ -405,9 +405,10 @@ void Valence_Angles( reax_system *system, control_params *control, if (num_thb_intrs >= thb_intrs->num_intrs * DANGER_ZONE) { workspace->realloc.num_3body = num_thb_intrs; if (num_thb_intrs > thb_intrs->num_intrs) { - fprintf( stderr, "step%d-ran out of space on angle_list: top=%d, max=%d", - data->step, num_thb_intrs, thb_intrs->num_intrs ); - MPI_Abort( MPI_COMM_WORLD, INSUFFICIENT_MEMORY ); + char errmsg[128]; + snprintf(errmsg, 128, "step%d-ran out of space on angle_list: top=%d, max=%d", + data->step, num_thb_intrs, thb_intrs->num_intrs); + lmp->error->one(FLERR, errmsg); } } diff --git a/src/USER-REAXC/reaxc_valence_angles.h b/src/USER-REAXC/reaxc_valence_angles.h index 31936ba190..27bda3ba09 100644 --- a/src/USER-REAXC/reaxc_valence_angles.h +++ b/src/USER-REAXC/reaxc_valence_angles.h @@ -30,7 +30,7 @@ #include "reaxc_types.h" void Valence_Angles( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls* ); + storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL); void Calculate_Theta( rvec, double, rvec, double, double*, double* ); From 75ddde438c13cf32564a9271c03d6867c5db92bc Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 12 Mar 2019 14:38:49 -0600 Subject: [PATCH 015/372] Commit JT 031219 - correct errors in fix_prec_spin - clean version of spinmin --- src/REPLICA/fix_neb_spin.cpp | 3 +- src/SPIN/fix_precession_spin.cpp | 10 +- src/SPIN/min_spinmin.cpp | 242 +++++++++---------------------- src/SPIN/min_spinmin.h | 4 +- src/min.cpp | 8 + src/min.h | 5 + 6 files changed, 86 insertions(+), 186 deletions(-) diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index 42450c2f0f..7a72936200 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -337,7 +337,8 @@ void FixNEB_spin::min_post_force(int /*vflag*/) //printf("test veng: %g / %g / %g \n",veng,vprev,vnext); //error->universe_all(FLERR,"End test"); - if (FreeEndFinal && ireplica == nreplica-1 && (update->ntimestep == 0)) EFinalIni = veng; + if (FreeEndFinal && ireplica == nreplica-1 && (update->ntimestep == 0)) + EFinalIni = veng; if (ireplica == 0) vIni=veng; diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 08e4fd5a63..433a260e83 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -173,8 +173,6 @@ void FixPrecessionSpin::setup(int vflag) void FixPrecessionSpin::post_force(int /*vflag*/) { - printf("test inside post force (precession) \n"); - // update mag field with time (potential improvement) if (varflag != CONSTANT) { @@ -204,7 +202,7 @@ void FixPrecessionSpin::post_force(int /*vflag*/) if (aniso_flag) { // compute magnetic anisotropy compute_anisotropy(spi,fmi); - emag -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + emag -= 0.5*(spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); } fm[i][0] += fmi[0]; @@ -232,9 +230,9 @@ void FixPrecessionSpin::compute_single_precession(int i, double spi[3], double f void FixPrecessionSpin::compute_zeeman(int i, double fmi[3]) { double **sp = atom->sp; - fmi[0] -= sp[i][3]*hx; - fmi[1] -= sp[i][3]*hy; - fmi[2] -= sp[i][3]*hz; + fmi[0] += sp[i][0]*hx; + fmi[1] += sp[i][1]*hy; + fmi[2] += sp[i][3]*hz; } /* ---------------------------------------------------------------------- */ diff --git a/src/SPIN/min_spinmin.cpp b/src/SPIN/min_spinmin.cpp index 2e03086bf0..cdd0d45287 100644 --- a/src/SPIN/min_spinmin.cpp +++ b/src/SPIN/min_spinmin.cpp @@ -46,14 +46,13 @@ MinSpinMin::MinSpinMin(LAMMPS *lmp) : Min(lmp) {} void MinSpinMin::init() { + alpha_damp = 1.0; + discret_factor = 10.0; + Min::init(); - dt = update->dt; + dts = dt = update->dt; last_negative = update->ntimestep; - - // test dts - dts = dt; - } /* ---------------------------------------------------------------------- */ @@ -94,8 +93,7 @@ void MinSpinMin::reset_vectors() int MinSpinMin::iterate(int maxiter) { bigint ntimestep; - //double vmax,vdotf,vdotfall,fdotf,fdotfall,scale; - //double dtvone,dtv,dtf,dtfm; + double fmdotfm,fmdotfmall; int flag,flagall; for (int iter = 0; iter < maxiter; iter++) { @@ -114,106 +112,6 @@ int MinSpinMin::iterate(int maxiter) advance_spins(dts); - - //// zero velocity if anti-parallel to force - //// else project velocity in direction of force - - //double **v = atom->v; - //double **f = atom->f; - //int nlocal = atom->nlocal; - - //vdotf = 0.0; - //for (int i = 0; i < nlocal; i++) - // vdotf += v[i][0]*f[i][0] + v[i][1]*f[i][1] + v[i][2]*f[i][2]; - //MPI_Allreduce(&vdotf,&vdotfall,1,MPI_DOUBLE,MPI_SUM,world); - - // sum vdotf over replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - //if (update->multireplica == 1) { - // vdotf = vdotfall; - // MPI_Allreduce(&vdotf,&vdotfall,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - //} - - //if (vdotfall < 0.0) { - // last_negative = ntimestep; - // for (int i = 0; i < nlocal; i++) - // v[i][0] = v[i][1] = v[i][2] = 0.0; - - //} else { - // fdotf = 0.0; - // for (int i = 0; i < nlocal; i++) - // fdotf += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; - // MPI_Allreduce(&fdotf,&fdotfall,1,MPI_DOUBLE,MPI_SUM,world); - - // // sum fdotf over replicas, if necessary - // // this communicator would be invalid for multiprocess replicas - - // if (update->multireplica == 1) { - // fdotf = fdotfall; - // MPI_Allreduce(&fdotf,&fdotfall,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - // } - - // if (fdotfall == 0.0) scale = 0.0; - // else scale = vdotfall/fdotfall; - // for (int i = 0; i < nlocal; i++) { - // v[i][0] = scale * f[i][0]; - // v[i][1] = scale * f[i][1]; - // v[i][2] = scale * f[i][2]; - // } - //} - - //// limit timestep so no particle moves further than dmax - - //double *rmass = atom->rmass; - //double *mass = atom->mass; - //int *type = atom->type; - - //dtvone = dt; - - //for (int i = 0; i < nlocal; i++) { - // vmax = MAX(fabs(v[i][0]),fabs(v[i][1])); - // vmax = MAX(vmax,fabs(v[i][2])); - // if (dtvone*vmax > dmax) dtvone = dmax/vmax; - //} - //MPI_Allreduce(&dtvone,&dtv,1,MPI_DOUBLE,MPI_MIN,world); - - //// min dtv over replicas, if necessary - //// this communicator would be invalid for multiprocess replicas - - //if (update->multireplica == 1) { - // dtvone = dtv; - // MPI_Allreduce(&dtvone,&dtv,1,MPI_DOUBLE,MPI_MIN,universe->uworld); - //} - - //dtf = dtv * force->ftm2v; - - //// Euler integration step - - //double **x = atom->x; - - //if (rmass) { - // for (int i = 0; i < nlocal; i++) { - // dtfm = dtf / rmass[i]; - // x[i][0] += dtv * v[i][0]; - // x[i][1] += dtv * v[i][1]; - // x[i][2] += dtv * v[i][2]; - // v[i][0] += dtfm * f[i][0]; - // v[i][1] += dtfm * f[i][1]; - // v[i][2] += dtfm * f[i][2]; - // } - //} else { - // for (int i = 0; i < nlocal; i++) { - // dtfm = dtf / mass[type[i]]; - // x[i][0] += dtv * v[i][0]; - // x[i][1] += dtv * v[i][1]; - // x[i][2] += dtv * v[i][2]; - // v[i][0] += dtfm * f[i][0]; - // v[i][1] += dtfm * f[i][1]; - // v[i][2] += dtfm * f[i][2]; - // } - //} - eprevious = ecurrent; ecurrent = energy_force(0); neval++; @@ -237,37 +135,22 @@ int MinSpinMin::iterate(int maxiter) } } - //// magnetic force tolerance criterion - //// sync across replicas if running multi-replica minimization + // magnetic torque tolerance criterion + // sync across replicas if running multi-replica minimization - //if (update->fmtol > 0.0) { - // fmdotfm = fmnorm_sqr(); - // if (update->multireplica == 0) { - // if (fmdotfm < update->fmtol*update->fmtol) return FTOL; - // } else { - // if (fmdotfm < update->fmtol*update->fmtol) flag = 0; - // else flag = 1; - // MPI_Allreduce(&fmlag,&fmlagall,1,MPI_INT,MPI_SUM,universe->uworld); - // if (fmlagall == 0) return FTOL; - // } - //} - - //// force tolerance criterion - //// sync across replicas if running multi-replica minimization + if (update->ftol > 0.0) { + fmdotfm = fmnorm_sqr(); + if (update->multireplica == 0) { + if (fmdotfm < update->ftol*update->ftol) return FTOL; + } else { + if (fmdotfm < update->ftol*update->ftol) flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return FTOL; + } + } - //if (update->ftol > 0.0) { - // fdotf = fnorm_sqr(); - // if (update->multireplica == 0) { - // if (fdotf < update->ftol*update->ftol) return FTOL; - // } else { - // if (fdotf < update->ftol*update->ftol) flag = 0; - // else flag = 1; - // MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); - // if (flagall == 0) return FTOL; - // } - //} - - //// output for thermo, dump, restart files + // output for thermo, dump, restart files if (output->next == ntimestep) { timer->stamp(); @@ -299,12 +182,6 @@ double MinSpinMin::evaluate_dt() fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; fmaxsqone = MAX(fmaxsqone,fmsq); } - //printf("test inside evaluate dt, fmaxsqone = %g \n",fmaxsqone); - //for (int i = 0; i < nlocal; i++) - // if (mask[i] & groupbit) { - // fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; - // fmaxsqone = MAX(fmaxsqone,fmsq); - // } // finding max fm on this replica @@ -320,15 +197,13 @@ double MinSpinMin::evaluate_dt() MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); } - //if (fmaxsqall < fmaxsqloc) - // error->all(FLERR,"Incorrect fmaxall calc."); + if (fmaxsqall == 0.0) + error->all(FLERR,"Incorrect fmaxsqall calculation"); - // define max timestep - // dividing by 10 the inverse of max frequency - //printf("test inside evaluate dt, fmaxsqall = %g \n",fmaxsqall); + // define max timestep by dividing by the + // inverse of max frequency by discret_factor - dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); - //printf("test inside evaluate dt, dtmax = %g \n",dtmax); + dtmax = MY_2PI/(discret_factor*sqrt(fmaxsqall)); return dtmax; } @@ -345,28 +220,19 @@ void MinSpinMin::advance_spins(double dts) double **fm = atom->fm; double tdampx,tdampy,tdampz; double msq,scale,fm2,energy,dts2; - double alpha; double cp[3],g[3]; dts2 = dts*dts; - // fictitious Gilbert damping of 1 - - alpha = 1.0; - - // loop on all spins on proc. - //if (ireplica != nreplica-1 && ireplica != 0) - // for (int i = 0; i < nlocal; i++) - // if (mask[i] & groupbit) { for (int i = 0; i < nlocal; i++) { // calc. damping torque - tdampx = -alpha*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); // apply advance algorithm (geometric, norm preserving) @@ -401,22 +267,44 @@ void MinSpinMin::advance_spins(double dts) sp[i][1] *= scale; sp[i][2] *= scale; - // comm. sp[i] to atoms with same tag (for serial algo) - - // no need for simplecticity - //if (sector_flag == 0) { - // if (sametag[i] >= 0) { - // j = sametag[i]; - // while (j >= 0) { - // sp[j][0] = sp[i][0]; - // sp[j][1] = sp[i][1]; - // sp[j][2] = sp[i][2]; - // j = sametag[j]; - // } - // } - //} - // + // no comm. to atoms with same tag + // because no need for simplecticity } - +} + +/* ---------------------------------------------------------------------- + compute and return ||mag. torque||_2^2 +------------------------------------------------------------------------- */ + +double MinSpinMin::fmnorm_sqr() +{ + int i,n; + double *fmatom; + + int nlocal = atom->nlocal; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + // calc. magnetic torques + + double local_norm2_sqr = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + local_norm2_sqr += tx*tx + ty*ty + tz*tz; + } + + // no extra atom calc. for spins + + if (nextra_atom) + error->all(FLERR,"extra atom option not available yet"); + + double norm2_sqr = 0.0; + MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); + + return norm2_sqr; } diff --git a/src/SPIN/min_spinmin.h b/src/SPIN/min_spinmin.h index 943b2d2749..abc532a3d5 100644 --- a/src/SPIN/min_spinmin.h +++ b/src/SPIN/min_spinmin.h @@ -34,12 +34,12 @@ class MinSpinMin : public Min { int iterate(int); double evaluate_dt(); void advance_spins(double); - - class FixNEB_spin *fneb; + double fmnorm_sqr(); private: // global and spin timesteps + double dt; double dts; diff --git a/src/min.cpp b/src/min.cpp index cd9253f8d3..c75db6e2b0 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -655,6 +655,14 @@ void Min::modify_params(int narg, char **arg) else if (strcmp(arg[iarg+1],"forcezero") == 0) linestyle = 2; else error->all(FLERR,"Illegal min_modify command"); iarg += 2; + } else if (strcmp(arg[iarg],"alpha_damp") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); + alpha_damp = force->numeric(FLERR,arg[iarg+1]); + iarg += 2; + } else if (strcmp(arg[iarg],"discret_factor") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); + discret_factor = force->numeric(FLERR,arg[iarg+1]); + iarg += 2; } else error->all(FLERR,"Illegal min_modify command"); } } diff --git a/src/min.h b/src/min.h index 92da97c664..ba1885671e 100644 --- a/src/min.h +++ b/src/min.h @@ -58,6 +58,11 @@ class Min : protected Pointers { double dmax; // max dist to move any atom in one step int linestyle; // 0 = backtrack, 1 = quadratic, 2 = forcezero + // spinmin quantities + + double alpha_damp; // damping for spin minimization + double discret_factor; // factor for spin timestep evaluation + int nelist_global,nelist_atom; // # of PE,virial computes to check int nvlist_global,nvlist_atom; class Compute **elist_global; // lists of PE,virial Computes From b51d06b3ea598eab8114337e136b3591a2e01582 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 12 Mar 2019 15:33:28 -0600 Subject: [PATCH 016/372] Change default binsize for Kokkos if running on GPUs --- src/KOKKOS/neighbor_kokkos.cpp | 9 +++++++++ src/KOKKOS/neighbor_kokkos.h | 1 + src/neighbor.cpp | 3 +++ src/neighbor.h | 1 + 4 files changed, 14 insertions(+) diff --git a/src/KOKKOS/neighbor_kokkos.cpp b/src/KOKKOS/neighbor_kokkos.cpp index 6cd5c4e6e5..7aaeda4b37 100644 --- a/src/KOKKOS/neighbor_kokkos.cpp +++ b/src/KOKKOS/neighbor_kokkos.cpp @@ -30,6 +30,7 @@ #include "style_nstencil.h" #include "style_npair.h" #include "style_ntopo.h" +#include "comm.h" using namespace LAMMPS_NS; @@ -359,6 +360,14 @@ void NeighborKokkos::modify_mol_intra_grow_kokkos(){ k_ex_mol_intra.modify(); } +/* ---------------------------------------------------------------------- */ +void NeighborKokkos::set_binsize_kokkos() { + if (!binsizeflag && lmp->kokkos->ngpu > 0) { + binsize_user = cutneighmax; + binsizeflag = 1; + } +} + /* ---------------------------------------------------------------------- */ void NeighborKokkos::init_topology() { diff --git a/src/KOKKOS/neighbor_kokkos.h b/src/KOKKOS/neighbor_kokkos.h index 5c98c4d26d..3829502c0d 100644 --- a/src/KOKKOS/neighbor_kokkos.h +++ b/src/KOKKOS/neighbor_kokkos.h @@ -87,6 +87,7 @@ class NeighborKokkos : public Neighbor { void modify_ex_group_grow_kokkos(); void modify_mol_group_grow_kokkos(); void modify_mol_intra_grow_kokkos(); + void set_binsize_kokkos(); }; } diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 84494bfbc5..2dc65541e4 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -471,6 +471,9 @@ void Neighbor::init() error->warning(FLERR,"Neighbor exclusions used with KSpace solver " "may give inconsistent Coulombic energies"); + if (lmp->kokkos) + set_binsize_kokkos(); + // ------------------------------------------------------------------ // create pairwise lists // one-time call to init_styles() to scan style files and setup diff --git a/src/neighbor.h b/src/neighbor.h index 751beeae4b..ffe181313b 100644 --- a/src/neighbor.h +++ b/src/neighbor.h @@ -233,6 +233,7 @@ class Neighbor : protected Pointers { virtual void init_ex_bit_kokkos() {} virtual void init_ex_mol_bit_kokkos() {} virtual void grow_ex_mol_intra_kokkos() {} + virtual void set_binsize_kokkos() {} }; namespace NeighConst { From 0d73fe99fd94c35a3c894c4ab1d4c26ec51aea5b Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 12 Mar 2019 15:34:12 -0600 Subject: [PATCH 017/372] Update Kokkos docs --- doc/src/Speed_kokkos.txt | 4 ++-- doc/src/package.txt | 44 ++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index ef193d7401..d04f8ac6f1 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -242,13 +242,13 @@ pairwise and bonded interactions, along with threaded communication. When running on Maxwell or Kepler GPUs, this will typically be best. For Pascal GPUs, using "half" neighbor lists and setting the Newton flag to "on" may be faster. For many pair styles, setting the -neighbor binsize equal to the ghost atom cutoff will give speedup. +neighbor binsize equal to twice the CPU default value will give speedup, +which is the default when running on GPUs. Use the "-pk kokkos" "command-line switch"_Run_options.html to change the default "package kokkos"_package.html options. See its doc page for details and default settings. Experimenting with its options can provide a speed-up for specific calculations. For example: -mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos binsize 2.8 -in in.lj # Set binsize = neighbor ghost cutoff mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff :pre NOTE: For good performance of the KOKKOS package on GPUs, you must diff --git a/doc/src/package.txt b/doc/src/package.txt index c226d7942f..89cfd03f5f 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -450,20 +450,20 @@ computation is done, but less communication. However, when running in MPI-only mode with 1 thread per MPI task, a value of {on} will typically be faster, just as it is for non-accelerated pair styles. -The {binsize} keyword sets the size of bins used to bin atoms in -neighbor list builds. The same value can be set by the "neigh_modify -binsize"_neigh_modify.html command. Making it an option in the -package kokkos command allows it to be set from the command line. The -default value is 0.0, which means the LAMMPS default will be used, -which is bins = 1/2 the size of the pairwise cutoff + neighbor skin -distance. This is fine when neighbor lists are built on the CPU. For -GPU builds, a 2x larger binsize equal to the pairwise cutoff + -neighbor skin, is often faster, which can be set by this keyword. -Note that if you use a longer-than-usual pairwise cutoff, e.g. to -allow for a smaller fraction of KSpace work with a "long-range -Coulombic solver"_kspace_style.html because the GPU is faster at -performing pairwise interactions, then this rule of thumb may give too -large a binsize. +The {binsize} keyword sets the size of bins used to bin atoms in +neighbor list builds. The same value can be set by the "neigh_modify +binsize"_neigh_modify.html command. Making it an option in the package +kokkos command allows it to be set from the command line. The default +value for CPUs is 0.0, which means the LAMMPS default will be used, +which is bins = 1/2 the size of the pairwise cutoff + neighbor skin +distance. This is fine when neighbor lists are built on the CPU. For GPU +builds, a 2x larger binsize equal to the pairwise cutoff + neighbor skin +is often faster, which is the default. Note that if you use a +longer-than-usual pairwise cutoff, e.g. to allow for a smaller fraction +of KSpace work with a "long-range Coulombic solver"_kspace_style.html +because the GPU is faster at performing pairwise interactions, then this +rule of thumb may give too large a binsize and the default should be +overridden with a smaller value. The {comm} and {comm/exchange} and {comm/forward} and {comm/reverse} keywords determine whether the host or device performs the packing and unpacking of data @@ -623,14 +623,14 @@ not used, you must invoke the package intel command in your input script or or via the "-pk intel" "command-line switch"_Run_options.html. -For the KOKKOS package, the option defaults neigh = full, neigh/qeq = -full, newton = off, binsize = 0.0, and comm = device, gpu/direct = on. -When LAMMPS can safely detect, that GPU-direct is not available, the -default value of gpu/direct becomes "off". -These settings are made automatically by the required "-k on" -"command-line switch"_Run_options.html. You can change them by -using the package kokkos command in your input script or via the -"-pk kokkos command-line switch"_Run_options.html. +For the KOKKOS package, the option defaults neigh = full, neigh/qeq = +full, newton = off, binsize for CPUs = 0.0, binsize for GPUs = 2x LAMMPS +default value, and comm = device, gpu/direct = on. When LAMMPS can +safely detect, that GPU-direct is not available, the default value of +gpu/direct becomes "off". These settings are made automatically by the +required "-k on" "command-line switch"_Run_options.html. You can change +them by using the package kokkos command in your input script or via the +"-pk kokkos command-line switch"_Run_options.html. For the OMP package, the default is Nthreads = 0 and the option defaults are neigh = yes. These settings are made automatically if From f6fb8b220d3b436d8ae003a62aa094f80f166d2e Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 12 Mar 2019 16:59:13 -0600 Subject: [PATCH 018/372] Commit 2 JT 031219 - modified examples (gneb and spinmin now distinct) - started documention for spinmin --- doc/src/min_modify.txt | 11 +- doc/src/min_style.txt | 15 +- examples/SPIN/{gneb_bfo => gneb}/README | 0 .../SPIN/{gneb_bfo => gneb}/final.iron_spin | 0 examples/SPIN/{gneb_bfo => gneb}/in.gneb.iron | 0 .../SPIN/{gneb_bfo => gneb}/initial.iron_spin | 0 .../SPIN/{gneb_bfo => spinmin}/in.spinmin.bfo | 14 +- .../{gneb_bfo => spinmin}/in.spinmin.iron | 21 +-- src/REPLICA/fix_neb_spin.cpp | 144 ------------------ 9 files changed, 42 insertions(+), 163 deletions(-) rename examples/SPIN/{gneb_bfo => gneb}/README (100%) rename examples/SPIN/{gneb_bfo => gneb}/final.iron_spin (100%) rename examples/SPIN/{gneb_bfo => gneb}/in.gneb.iron (100%) rename examples/SPIN/{gneb_bfo => gneb}/initial.iron_spin (100%) rename examples/SPIN/{gneb_bfo => spinmin}/in.spinmin.bfo (78%) rename examples/SPIN/{gneb_bfo => spinmin}/in.spinmin.iron (62%) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 9408eea167..bb5ad513c1 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -13,11 +13,15 @@ min_modify command :h3 min_modify keyword values ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {dmax} or {line} +keyword = {dmax} or {line} or {alpha_damp} or {discret_factor} {dmax} value = max max = maximum distance for line search to move (distance units) {line} value = {backtrack} or {quadratic} or {forcezero} - backtrack,quadratic,forcezero = style of linesearch to use :pre + backtrack,quadratic,forcezero = style of linesearch to use + {alpha_damp} value = damping + damping = fictitious Gilbert damping for spin minimization (adim) + {discret_factor} value = factor + factor = defines a dividing factor for adaptive spin timestep (adim) :pre :ule [Examples:] @@ -65,6 +69,9 @@ difference of two large values (energy before and energy after) and that difference may be smaller than machine epsilon even if atoms could move in the gradient direction to reduce forces further. +Keywords {alpha_damp} and {discret_factor} only make sense when +a {spinmin} minimization style is declared. + [Restrictions:] none [Related commands:] diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index 4948a34864..b1a9da997d 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -11,11 +11,12 @@ min_style command :h3 min_style style :pre -style = {cg} or {hftn} or {sd} or {quickmin} or {fire} :ul +style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spinmin} :ul [Examples:] min_style cg +min_style spinmin min_style fire :pre [Description:] @@ -61,9 +62,21 @@ the velocity non-parallel to the current force vector. The velocity of each atom is initialized to 0.0 by this style, at the beginning of a minimization. +Style {spinmin} is a damped spin dynamics with a variable +timestep as described in "(Tranchida)"_#Tranchida. +The value of the fictitious Gilbert damping and of the dividing +factor for the adaptive timestep can be modified by the +{alpha_damp} and {discret_factor} options respectively. +Those options can be defined using the "min_modify"_min_modify.html +command. + Either the {quickmin} and {fire} styles are useful in the context of nudged elastic band (NEB) calculations via the "neb"_neb.html command. +The {spinmin} style is useful in the context of geodesic nudged +elastic band (GNEB) calculations via the "neb/spin"_neb_spin.html +command. + NOTE: The damped dynamic minimizers use whatever timestep you have defined via the "timestep"_timestep.html command. Often they will converge more quickly if you use a timestep about 10x larger than you diff --git a/examples/SPIN/gneb_bfo/README b/examples/SPIN/gneb/README similarity index 100% rename from examples/SPIN/gneb_bfo/README rename to examples/SPIN/gneb/README diff --git a/examples/SPIN/gneb_bfo/final.iron_spin b/examples/SPIN/gneb/final.iron_spin similarity index 100% rename from examples/SPIN/gneb_bfo/final.iron_spin rename to examples/SPIN/gneb/final.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.gneb.iron b/examples/SPIN/gneb/in.gneb.iron similarity index 100% rename from examples/SPIN/gneb_bfo/in.gneb.iron rename to examples/SPIN/gneb/in.gneb.iron diff --git a/examples/SPIN/gneb_bfo/initial.iron_spin b/examples/SPIN/gneb/initial.iron_spin similarity index 100% rename from examples/SPIN/gneb_bfo/initial.iron_spin rename to examples/SPIN/gneb/initial.iron_spin diff --git a/examples/SPIN/gneb_bfo/in.spinmin.bfo b/examples/SPIN/spinmin/in.spinmin.bfo similarity index 78% rename from examples/SPIN/gneb_bfo/in.spinmin.bfo rename to examples/SPIN/spinmin/in.spinmin.bfo index 15a4d6e0f9..a00af8833c 100644 --- a/examples/SPIN/gneb_bfo/in.spinmin.bfo +++ b/examples/SPIN/spinmin/in.spinmin.bfo @@ -1,4 +1,4 @@ -# bcc iron in a 3d periodic box +# bfo in a 3d periodic box units metal dimension 3 @@ -9,7 +9,7 @@ atom_style spin atom_modify map array lattice sc 3.96 -region box block 0.0 68.0 0.0 68.0 0.0 1.0 +region box block 0.0 34.0 0.0 34.0 0.0 1.0 create_box 1 box create_atoms 1 box @@ -17,7 +17,6 @@ create_atoms 1 box mass 1 1.0 set group all spin/random 11 2.50 -#set group all spin 2.5 -1.0 0.0 0.0 pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 @@ -30,7 +29,8 @@ neigh_modify every 10 check yes delay 20 #fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 -fix 2 all langevin/spin 0.1 0.0 21 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.1 21 fix 3 all nve/spin lattice no timestep 0.0001 @@ -50,8 +50,8 @@ thermo_style custom step time v_magnorm v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 200 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] +dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] min_style spinmin -minimize 1.0e-6 1.0e-6 10000 10000 -#minimize 1.0e-8 1.0e-8 10000 1000 +min_modify alpha_damp 1.0 discret_factor 10.0 +minimize 0.0 0.0 10000 1000 diff --git a/examples/SPIN/gneb_bfo/in.spinmin.iron b/examples/SPIN/spinmin/in.spinmin.iron similarity index 62% rename from examples/SPIN/gneb_bfo/in.spinmin.iron rename to examples/SPIN/spinmin/in.spinmin.iron index 67d8095c06..5a15082122 100644 --- a/examples/SPIN/gneb_bfo/in.spinmin.iron +++ b/examples/SPIN/spinmin/in.spinmin.iron @@ -9,7 +9,7 @@ atom_style spin atom_modify map array lattice bcc 2.8665 -region box block 0.0 4.0 0.0 4.0 0.0 1.0 +region box block 0.0 4.0 0.0 4.0 0.0 4.0 create_box 1 box create_atoms 1 box @@ -17,7 +17,7 @@ create_atoms 1 box mass 1 55.845 set group all spin/random 31 2.2 -#set group all spin 2.2 -1.0 0.0 0.0 +#set group all spin 2.2 1.0 1.0 -1.0 pair_style spin/exchange 3.5 pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 @@ -26,8 +26,9 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 #fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 -fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 -fix 2 all langevin/spin 0.1 0.0 21 +fix 1 all precession/spin anisotropy 0.0001 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.1 21 fix 3 all nve/spin lattice no timestep 0.0001 @@ -37,18 +38,20 @@ compute out_pe all pe compute out_ke all ke compute out_temp all temp +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] variable magz equal c_out_mag[3] variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 1 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 100 +thermo_style custom step time v_magx v_magz v_magnorm v_tmag etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] +dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] min_style spinmin -minimize 1.0e-6 1.0e-6 1000 10000 -#minimize 1.0e-8 1.0e-6 1000 10000 +min_modify alpha_damp 1.0 discret_factor 10.0 +minimize 1.0e-10 1.0e-10 100000 1000 diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index 7a72936200..d8f9e655fd 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -843,156 +843,12 @@ double FixNEB_spin::geodesic_distance(double spi[3], double spj[3]) return dist; } -/* ---------------------------------------------------------------------- - geometric damped advance os spins ----------------------------------------------------------------------- */ - -//void FixNEB_spin::advance_spins(double dts) -//{ -// //int j=0; -// //int *sametag = atom->sametag; -// int nlocal = atom->nlocal; -// int *mask = atom->mask; -// double **sp = atom->sp; -// double **fm = atom->fm; -// double tdampx,tdampy,tdampz; -// double msq,scale,fm2,energy,dts2; -// double alpha; -// double spi[3],fmi[3]; -// double cp[3],g[3]; -// -// //cp[0] = cp[1] = cp[2] = 0.0; -// //g[0] = g[1] = g[2] = 0.0; -// dts2 = dts*dts; -// -// // fictitious Gilbert damping of 1 -// alpha = 1.0; -// -// // loop on all spins on proc. -// -// if (ireplica != nreplica-1 && ireplica != 0) -// for (int i = 0; i < nlocal; i++) -// if (mask[i] & groupbit) { -// -// spi[0] = sp[i][0]; -// spi[1] = sp[i][1]; -// spi[2] = sp[i][2]; -// -// fmi[0] = fm[i][0]; -// fmi[1] = fm[i][1]; -// fmi[2] = fm[i][2]; -// -// // calc. damping torque -// -// tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); -// tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); -// tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); -// -// // apply advance algorithm (geometric, norm preserving) -// -// fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); -// energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); -// -// cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; -// cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; -// cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; -// -// g[0] = sp[i][0]+cp[0]*dts; -// g[1] = sp[i][1]+cp[1]*dts; -// g[2] = sp[i][2]+cp[2]*dts; -// -// g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; -// g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; -// g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; -// -// g[0] /= (1+0.25*fm2*dts2); -// g[1] /= (1+0.25*fm2*dts2); -// g[2] /= (1+0.25*fm2*dts2); -// -// sp[i][0] = g[0]; -// sp[i][1] = g[1]; -// sp[i][2] = g[2]; -// -// // renormalization (check if necessary) -// -// msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; -// scale = 1.0/sqrt(msq); -// sp[i][0] *= scale; -// sp[i][1] *= scale; -// sp[i][2] *= scale; -// -// // comm. sp[i] to atoms with same tag (for serial algo) -// -// // no need for simplecticity -// //if (sector_flag == 0) { -// // if (sametag[i] >= 0) { -// // j = sametag[i]; -// // while (j >= 0) { -// // sp[j][0] = sp[i][0]; -// // sp[j][1] = sp[i][1]; -// // sp[j][2] = sp[i][2]; -// // j = sametag[j]; -// // } -// // } -// //} -// // -// -// } -//} - -/* ---------------------------------------------------------------------- - evaluate max timestep ----------------------------------------------------------------------- */ - -//double FixNEB_spin::evaluate_dt() -//{ -// double dtmax; -// double fmsq; -// double fmaxsqone,fmaxsqloc,fmaxsqall; -// int nlocal = atom->nlocal; -// int *mask = atom->mask; -// double **fm = atom->fm; -// -// // finding max fm on this proc. -// -// fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; -// for (int i = 0; i < nlocal; i++) -// if (mask[i] & groupbit) { -// fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; -// fmaxsqone = MAX(fmaxsqone,fmsq); -// } -// -// // finding max fm on this replica -// -// fmaxsqloc = fmaxsqone; -// MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); -// -// // finding max fm over all replicas, if necessary -// // this communicator would be invalid for multiprocess replicas -// -// if (update->multireplica == 1) { -// fmaxsqall = fmaxsqloc; -// MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); -// } -// -// if (fmaxsqall < fmaxsqloc) -// error->all(FLERR,"Incorrect fmaxall calc."); -// -// // define max timestep -// // dividing by 10 the inverse of max frequency -// -// dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); -// -// return dtmax; -//} - /* ---------------------------------------------------------------------- send/recv NEB atoms to/from adjacent replicas received atoms matching my local atoms are stored in xprev,xnext replicas 0 and N-1 send but do not receive any atoms ------------------------------------------------------------------------- */ - void FixNEB_spin::inter_replica_comm() { int i,m; From 8c50c3d7c87be57f356b9ad454fbe66799c3c7ef Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 13 Mar 2019 17:02:40 -0600 Subject: [PATCH 019/372] Commit JT 031319 - improved gneb functions - correct name in fix_neb (Weinan) --- doc/src/fix_neb.txt | 6 +- doc/src/min_modify.txt | 1 + src/REPLICA/fix_neb_spin.cpp | 72 ++---- src/REPLICA/neb_spin.cpp | 417 ++++++----------------------------- src/REPLICA/neb_spin.h | 6 +- 5 files changed, 82 insertions(+), 420 deletions(-) diff --git a/doc/src/fix_neb.txt b/doc/src/fix_neb.txt index 410ab3d4d1..87292bb5cd 100644 --- a/doc/src/fix_neb.txt +++ b/doc/src/fix_neb.txt @@ -97,7 +97,7 @@ Note that in this case the specified {Kspring} is in force/distance units. With a value of {ideal}, the spring force is computed as suggested in -"(WeinenE)"_#WeinenE : +"(WeinanE)"_#WeinanE : Fnudge_parallel = -{Kspring} * (RD-RDideal) / (2 * meanDist) :pre @@ -224,8 +224,8 @@ specified (no inter-replica force on the end replicas). [(Henkelman2)] Henkelman, Uberuaga, Jonsson, J Chem Phys, 113, 9901-9904 (2000). -:link(WeinenE) -[(WeinenE)] E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). +:link(WeinanE) +[(WeinanE)] E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). :link(Jonsson) [(Jonsson)] Jonsson, Mills and Jacobsen, in Classical and Quantum diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index bb5ad513c1..701f579af4 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -71,6 +71,7 @@ could move in the gradient direction to reduce forces further. Keywords {alpha_damp} and {discret_factor} only make sense when a {spinmin} minimization style is declared. +Default values are alpha_damp = 1.0 and discret_factor = 10.0. [Restrictions:] none diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index d8f9e655fd..015ff1a313 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -69,65 +69,25 @@ FixNEB_spin::FixNEB_spin(LAMMPS *lmp, int narg, char **arg) : kspringPerp = 0.0; kspringIni = 1.0; kspringFinal = 1.0; - // only regular neb for now - SpinLattice = false; - + SpinLattice = false; // no spin-lattice neb for now + // no available fix neb/spin options for now int iarg = 4; while (iarg < narg) { - if (strcmp(arg[iarg],"lattice") == 0) - error->all(FLERR,"Illegal fix neb command"); - } - - /* if (strcmp(arg[iarg],"parallel") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix neb command"); - if (strcmp(arg[iarg+1],"ideal") == 0) { - NEBLongRange = true; - StandardNEB = false; - } else if (strcmp(arg[iarg+1],"neigh") == 0) { - NEBLongRange = false; - StandardNEB = true; - } else error->all(FLERR,"Illegal fix neb command"); + error->all(FLERR,"Illegal fix neb command"); iarg += 2; - } else if (strcmp(arg[iarg],"perp") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix neb command"); - PerpSpring = true; - kspringPerp = force->numeric(FLERR,arg[iarg+1]); - if (kspringPerp == 0.0) PerpSpring = false; - if (kspringPerp < 0.0) error->all(FLERR,"Illegal fix neb command"); + error->all(FLERR,"Illegal fix neb command"); iarg += 2; - } else if (strcmp (arg[iarg],"end") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal fix neb command"); - if (strcmp(arg[iarg+1],"first") == 0) { - FreeEndIni = true; - kspringIni = force->numeric(FLERR,arg[iarg+2]); - } else if (strcmp(arg[iarg+1],"last") == 0) { - FreeEndFinal = true; - FinalAndInterWithRespToEIni = false; - FreeEndFinalWithRespToEIni = false; - kspringFinal = force->numeric(FLERR,arg[iarg+2]); - } else if (strcmp(arg[iarg+1],"last/efirst") == 0) { - FreeEndFinal = false; - FinalAndInterWithRespToEIni = false; - FreeEndFinalWithRespToEIni = true; - kspringFinal = force->numeric(FLERR,arg[iarg+2]); - } else if (strcmp(arg[iarg+1],"last/efirst/middle") == 0) { - FreeEndFinal = false; - FinalAndInterWithRespToEIni = true; - FreeEndFinalWithRespToEIni = true; - kspringFinal = force->numeric(FLERR,arg[iarg+2]); - } else error->all(FLERR,"Illegal fix neb command"); - iarg += 3; - + } else if (strcmp (arg[iarg],"lattice") == 0) { + iarg += 2; } else error->all(FLERR,"Illegal fix neb command"); } - */ - + // nreplica = number of partitions // ireplica = which world I am in universe // nprocs_universe = # of procs in all replicase @@ -172,10 +132,6 @@ FixNEB_spin::FixNEB_spin(LAMMPS *lmp, int narg, char **arg) : modify->add_compute(3,newarg); delete [] newarg; - // might need a test - // => check if pe does not compute mech potentials - - // initialize local storage maxlocal = -1; @@ -374,14 +330,12 @@ void FixNEB_spin::min_post_force(int /*vflag*/) pe->addstep(update->ntimestep+1); double **x = atom->x; - // spin quantities double **sp = atom->sp; int *mask = atom->mask; double dot = 0.0; double prefactor = 0.0; - double **f = atom->f; - // spin quantities + //double **f = atom->f; double **fm = atom->fm; int nlocal = atom->nlocal; @@ -397,9 +351,10 @@ void FixNEB_spin::min_post_force(int /*vflag*/) // computation of the tangent vector - // final replica if (ireplica == nreplica-1) { + // final replica + for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -470,8 +425,10 @@ void FixNEB_spin::min_post_force(int /*vflag*/) //} } - // initial replica } else if (ireplica == 0) { + + // initial replica + for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -537,7 +494,6 @@ void FixNEB_spin::min_post_force(int /*vflag*/) //} } - // in-between replica } else { // not the first or last replica @@ -770,7 +726,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) //prefactor = -2.0*dot; } else { if (NEBLongRange) { - error->all(FLERR,"NEB_spin climber option not yet active"); + error->all(FLERR,"Long Range NEB_spin climber option not yet active"); //prefactor = -dot - kspring*(lenuntilIm-idealPos)/(2*meanDist); } else if (StandardNEB) { prefactor = -dot + kspring*(nlen-plen); diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index 6249797e95..e82b08e354 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -72,7 +72,8 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, double delspx,delspy,delspz; etol = etol_in; - ftol = ftol_in; + //ftol = ftol_in; + ttol = ftol_in; n1steps = n1steps_in; n2steps = n2steps_in; nevery = nevery_in; @@ -85,12 +86,10 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, uworld = universe->uworld; MPI_Comm_rank(world,&me); - // generate linear interpolate replica + // fraction to interpolate intermediate replica double fraction = ireplica/(nreplica-1.0); - double **x = atom->x; - // spin quantitites double **sp = atom->sp; int nlocal = atom->nlocal; @@ -111,19 +110,11 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, sp[i][1] = spfinal[1]; sp[i][2] = spfinal[2]; - //delx = buf_final[ii] - buf_init[ii]; - //dely = buf_final[ii+1] - buf_init[ii+1]; - //delz = buf_final[ii+2] - buf_init[ii+2]; - // adjust distance if pbc - // not implemented yet //domain->minimum_image(delx,dely,delz); - // need to define a procedure for circular initialization - - //x[i][0] = buf_init[ii] + fraction*delx; - //x[i][1] = buf_init[ii+1] + fraction*dely; - //x[i][2] = buf_init[ii+2] + fraction*delz; + // need to define a better procedure for circular initialization + ii += 3; } } @@ -143,22 +134,14 @@ NEB_spin::~NEB_spin() void NEB_spin::command(int narg, char **arg) { - - //printf("test 1 \n"); - - // test 1 - double **sp1 = atom->sp; - //printf("test 1 atom: i=%d,%g,%g,%g \n",1,sp1[1][0],sp1[1][1],sp1[1][2]); - //error->all(FLERR,"end neb_spin test"); - - if (domain->box_exist == 0) error->all(FLERR,"NEB_spin command before simulation box is defined"); if (narg < 6) error->universe_all(FLERR,"Illegal NEB_spin command"); etol = force->numeric(FLERR,arg[0]); - ftol = force->numeric(FLERR,arg[1]); + //ftol = force->numeric(FLERR,arg[1]); + ttol = force->numeric(FLERR,arg[1]); n1steps = force->inumeric(FLERR,arg[2]); n2steps = force->inumeric(FLERR,arg[3]); nevery = force->inumeric(FLERR,arg[4]); @@ -166,7 +149,8 @@ void NEB_spin::command(int narg, char **arg) // error checks if (etol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); - if (ftol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); + //if (ftol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); + if (ttol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); if (nevery <= 0) error->universe_all(FLERR,"Illegal NEB_spin command"); if (n1steps % nevery || n2steps % nevery) error->universe_all(FLERR,"Illegal NEB_spin command"); @@ -209,14 +193,6 @@ void NEB_spin::command(int narg, char **arg) verbose=false; if (strcmp(arg[narg-1],"verbose") == 0) verbose=true; - - - // test 1 - double **sp = atom->sp; - //printf("test 2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); - //error->all(FLERR,"end neb_spin test"); - - // run the NEB_spin calculation run(); } @@ -250,22 +226,24 @@ void NEB_spin::run() update->whichflag = 2; update->etol = etol; - update->ftol = ftol; + //update->ftol = ftol; + update->ftol = ttol; // update->ftol is a torque tolerance update->multireplica = 1; lmp->init(); - // put flag to check gilbert damping procedure is set + // check if correct minimizer is setup - //if (update->minimize->searchflag) - // error->all(FLERR,"NEB_spin requires damped dynamics minimizer"); + if (update->minimize->searchflag) + error->all(FLERR,"NEB_spin requires damped dynamics minimizer"); + if (strcmp(update->minimize_style,"spinmin") != 0) + error->all(FLERR,"NEB_spin requires spinmin minimizer"); // setup regular NEB_spin minimization + FILE *uscreen = universe->uscreen; FILE *ulogfile = universe->ulogfile; - //printf("test before run 1 \n"); - if (me_universe == 0 && uscreen) fprintf(uscreen,"Setting up regular NEB_spin ...\n"); @@ -276,22 +254,23 @@ void NEB_spin::run() if (update->laststep < 0) error->all(FLERR,"Too many timesteps for NEB_spin"); - //printf("test before run 2 \n"); - update->minimize->setup(); - //printf("test before run 3 \n"); - if (me_universe == 0) { if (uscreen) { if (verbose) { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); + "... ReplicaTorqueN MaxAtomTorqueN\n"); + //fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + // "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + // "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " + // "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " + // "... ReplicaForceN MaxAtomForceN\n"); } else { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " "RDN PEN\n"); } @@ -299,21 +278,19 @@ void NEB_spin::run() if (ulogfile) { if (verbose) { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); + "... ReplicaTorqueN MaxAtomTorqueN\n"); } else { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " "RDN PEN\n"); } } } - //printf("test before run 4 \n"); print_status(); - //printf("test before run 5 \n"); // perform regular NEB_spin for n1steps or until replicas converge // retrieve PE values from fix NEB_spin and print every nevery iterations @@ -323,35 +300,11 @@ void NEB_spin::run() timer->init(); timer->barrier_start(); - // test import fix_nve scheme - - //printf("test 2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); - //error->all(FLERR,"end neb_spin test"); - double dts; while (update->minimize->niter < n1steps) { - //dts = evaluate_dt(); - //advance_spins(dts); - //fneb-> - - //dts = fneb->evaluate_dt(); - //fneb->advance_spins(dts); - - // no minimizer for spins update->minimize->run(nevery); - - - // no minimizer for spins - //update->minimize->run(nevery); - // - // evaluate dts - // loop on spins, damped advance - // print_status(); if (update->minimize->stop_condition) break; } - - // test neb end - //error->all(FLERR,"end neb_spin test"); timer->barrier_stop(); @@ -393,22 +346,19 @@ void NEB_spin::run() update->minimize->init(); fneb->rclimber = top; - printf("test print 6.2 \n"); update->minimize->setup(); - printf("test print 6.3 \n"); - if (me_universe == 0) { if (uscreen) { if (verbose) { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " "pathangle1 angletangrad1 anglegrad1 gradV1 " "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " "... ReplicaForceN MaxAtomForceN\n"); } else { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " "EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN\n"); @@ -416,14 +366,14 @@ void NEB_spin::run() } if (ulogfile) { if (verbose) { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " "pathangle1 angletangrad1 anglegrad1 gradV1 " "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " "... ReplicaForceN MaxAtomForceN\n"); } else { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " "EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN\n"); @@ -441,10 +391,6 @@ void NEB_spin::run() timer->barrier_start(); while (update->minimize->niter < n2steps) { - //dts = evaluate_dt(); - //advance_spins(dts); - //dts = fneb->evaluate_dt(); - //fneb->advance_spins(dts); update->minimize->run(nevery); print_status(); if (update->minimize->stop_condition) break; @@ -462,174 +408,6 @@ void NEB_spin::run() update->beginstep = update->endstep = 0; } -/* ---------------------------------------------------------------------- - geodesic distance calculation (Vincenty's formula) -------------------------------------------------------------------------- */ - -//double NEB_spin::geodesic_distance2(double spi[3], double spj[3]) -//{ -// double dist; -// double crossx,crossy,crossz; -// double dotx,doty,dotz; -// double crosslen,dots; -// -// crossx = spi[1]*spj[2]-spi[2]*spj[1]; -// crossy = spi[2]*spj[0]-spi[0]*spj[2]; -// crossz = spi[0]*spj[1]-spi[1]*spj[0]; -// crosslen = sqrt(crossx*crossx + crossy*crossy + crossz*crossz); -// dotx = spi[0]*spj[0]; -// doty = spi[1]*spj[1]; -// dotz = spi[2]*spj[2]; -// dots = dotx+doty+dotz; -// -// dist = atan2(crosslen,dots); -// -// return dist; -//} - -/* ---------------------------------------------------------------------- - evaluate max timestep ----------------------------------------------------------------------- */ - -//double NEB_spin::evaluate_dt() -//{ -// double dtmax; -// double fmsq; -// double fmaxsqone,fmaxsqloc,fmaxsqall; -// int nlocal = atom->nlocal; -// int *mask = atom->mask; -// double **fm = atom->fm; -// -// // finding max fm on this proc. -// -// fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; -// for (int i = 0; i < nlocal; i++) -// if (mask[i] & groupbit) { -// fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; -// fmaxsqone = MAX(fmaxsqone,fmsq); -// } -// -// // finding max fm on this replica -// -// fmaxsqloc = fmaxsqone; -// MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); -// -// // finding max fm over all replicas, if necessary -// // this communicator would be invalid for multiprocess replicas -// -// if (update->multireplica == 1) { -// fmaxsqall = fmaxsqloc; -// MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); -// } -// -// if (fmaxsqall < fmaxsqloc) -// error->all(FLERR,"Incorrect fmaxall calc."); -// -// // define max timestep -// // dividing by 10 the inverse of max frequency -// -// dtmax = MY_2PI/(10.0*sqrt(fmaxsqall)); -// -// return dtmax; -//} - -/* ---------------------------------------------------------------------- - geometric damped advance os spins ----------------------------------------------------------------------- */ - -//void NEB_spin::advance_spins(double dts) -//{ -// //int j=0; -// //int *sametag = atom->sametag; -// int nlocal = atom->nlocal; -// int *mask = atom->mask; -// double **sp = atom->sp; -// double **fm = atom->fm; -// double tdampx,tdampy,tdampz; -// double msq,scale,fm2,energy,dts2; -// double alpha; -// double spi[3],fmi[3]; -// double cp[3],g[3]; -// -// //cp[0] = cp[1] = cp[2] = 0.0; -// //g[0] = g[1] = g[2] = 0.0; -// dts2 = dts*dts; -// -// // fictitious Gilbert damping of 1 -// alpha = 1.0; -// -// // loop on all spins on proc. -// -// if (ireplica != nreplica-1 && ireplica != 0) -// for (int i = 0; i < nlocal; i++) -// if (mask[i] & groupbit) { -// -// spi[0] = sp[i][0]; -// spi[1] = sp[i][1]; -// spi[2] = sp[i][2]; -// -// fmi[0] = fm[i][0]; -// fmi[1] = fm[i][1]; -// fmi[2] = fm[i][2]; -// -// // calc. damping torque -// -// tdampx = -alpha*(fmi[1]*spi[2] - fmi[2]*spi[1]); -// tdampy = -alpha*(fmi[2]*spi[0] - fmi[0]*spi[2]); -// tdampz = -alpha*(fmi[0]*spi[1] - fmi[1]*spi[0]); -// -// // apply advance algorithm (geometric, norm preserving) -// -// fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); -// energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); -// -// cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; -// cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; -// cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; -// -// g[0] = sp[i][0]+cp[0]*dts; -// g[1] = sp[i][1]+cp[1]*dts; -// g[2] = sp[i][2]+cp[2]*dts; -// -// g[0] += (fm[i][0]*energy-0.5*sp[i][0]*fm2)*0.5*dts2; -// g[1] += (fm[i][1]*energy-0.5*sp[i][1]*fm2)*0.5*dts2; -// g[2] += (fm[i][2]*energy-0.5*sp[i][2]*fm2)*0.5*dts2; -// -// g[0] /= (1+0.25*fm2*dts2); -// g[1] /= (1+0.25*fm2*dts2); -// g[2] /= (1+0.25*fm2*dts2); -// -// sp[i][0] = g[0]; -// sp[i][1] = g[1]; -// sp[i][2] = g[2]; -// -// // renormalization (check if necessary) -// -// msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; -// scale = 1.0/sqrt(msq); -// sp[i][0] *= scale; -// sp[i][1] *= scale; -// sp[i][2] *= scale; -// -// // comm. sp[i] to atoms with same tag (for serial algo) -// -// // no need for simplecticity -// //if (sector_flag == 0) { -// // if (sametag[i] >= 0) { -// // j = sametag[i]; -// // while (j >= 0) { -// // sp[j][0] = sp[i][0]; -// // sp[j][1] = sp[i][1]; -// // sp[j][2] = sp[i][2]; -// // j = sametag[j]; -// // } -// // } -// //} -// // -// -// } -//} - /* ---------------------------------------------------------------------- read initial config atom coords from file flag = 0 @@ -654,7 +432,6 @@ void NEB_spin::readfile(char *file, int flag) double xx,yy,zz,delx,dely,delz; // spin quantities double musp,spx,spy,spz; - //,delx,dely,delz; if (me_universe == 0 && screen) fprintf(screen,"Reading NEB_spin coordinate file(s) ...\n"); @@ -703,12 +480,6 @@ void NEB_spin::readfile(char *file, int flag) double spinit[3],spfinal[3]; int nlocal = atom->nlocal; - // test 1.2 - //double **sp = atom->sp; - //printf("test 1.2 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); - //error->all(FLERR,"end neb_spin test"); - - // loop over chunks of lines read from file // two versions of read_lines_from_file() for world vs universe bcast // count # of atom coords changed so can check for invalid atom IDs in file @@ -765,44 +536,27 @@ void NEB_spin::readfile(char *file, int flag) spx = atof(values[5]); spy = atof(values[6]); spz = atof(values[7]); - //xx = atof(values[1]); - //yy = atof(values[2]); - //zz = atof(values[3]); if (flag == 0) { - // here, function interp. spin states - - //spinit[0] = x[m][0]; - //spinit[1] = x[m][1]; - //spinit[2] = x[m][2]; spinit[0] = sp[m][0]; spinit[1] = sp[m][1]; spinit[2] = sp[m][2]; spfinal[0] = spx; spfinal[1] = spy; spfinal[2] = spz; - //domain->minimum_image(delx,dely,delz); + + // to be used it atomic displacements with pbc + //domain->minimum_image(delx,dely,delz); - // test - //printf("spinit: %g %g %g \n",spinit[0],spinit[1],spinit[2]); - //printf("spfinal bef: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); + // interpolate intermediate spin states initial_rotation(spinit,spfinal,fraction); - - // test - //printf("spfinal aft: %g %g %g \n",spfinal[0],spfinal[1],spfinal[2]); sp[m][0] = spfinal[0]; sp[m][1] = spfinal[1]; sp[m][2] = spfinal[2]; sp[m][3] = musp; - //delx = xx - x[m][0]; - //dely = yy - x[m][1]; - //delz = zz - x[m][2]; - //x[m][0] += fraction*delx; - //x[m][1] += fraction*dely; - //x[m][2] += fraction*delz; } else { sp[m][3] = musp; x[m][0] = xx; @@ -820,12 +574,6 @@ void NEB_spin::readfile(char *file, int flag) nread += nchunk; } - // test 1.3 - //double **sp = atom->sp; - //printf("test 1.3 atom: i=%d,%g,%g,%g \n",1,sp[1][0],sp[1][1],sp[1][2]); - //error->all(FLERR,"end neb_spin test"); - - // check that all atom IDs in file were found by a proc if (flag == 0) { @@ -867,13 +615,11 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) { // implementing initial rotation using atan2 - //atan2(crosslen,dots); - // this is not a sufficient routine, // we need more accurate verifications - // initial and final and inter ang. values + // initial, final and inter ang. values double itheta,iphi,ftheta,fphi,ktheta,kphi; double spix,spiy,spiz,spfx,spfy,spfz; double spkx,spky,spkz,iknorm; @@ -909,58 +655,6 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) sploc[1] = spky; sploc[2] = spkz; - //double theta,spdot; - //double inormdot,ispinorm; - //double kix,kiy,kiz; - //double kinorm, ikinorm; - //double crossx,crossy,crossz; - - ////printf("inside rot, spi %g, spf %g \n",spi[0],sploc[0]); - - //spdot = spi[0]*sploc[0]+spi[1]*sploc[1]+spi[2]*sploc[2]; - //theta = fraction*acos(spdot); - - //printf("inside rot, theta %g \n",theta); - - //kix = spi[1]*sploc[2]-spi[2]*sploc[1]; - //kiy = spi[2]*sploc[0]-spi[0]*sploc[2]; - //kiz = spi[0]*sploc[1]-spi[1]*sploc[0]; - // - ////printf("inside rot1.1, ki %g %g %g \n",kix,kiy,kiz); - - //inormdot = 1.0/sqrt(spdot); - //kinorm = kix*kix+kiy*kiy+kiz*kiz; - //if (kinorm == 0.0) { - // kix = 0.0; - // kiy = 0.0; - // kiz = 0.0; - //} else { - // ikinorm = 1.0/kinorm; - // kix *= ikinorm; - // kiy *= ikinorm; - // kiz *= ikinorm; - //} - - ////printf("inside rot1.2, kin %g %g %g \n",kix,kiy,kiz); - - //crossx = kiy*spi[2]-kiz*spi[1]; - //crossy = kiz*spi[0]-kix*spi[2]; - //crossz = kix*spi[1]-kiy*spi[0]; - // - ////printf("inside rot1.3, cross %g %g %g \n",crossx,crossy,crossz); - - //sploc[0] = spi[0]*cos(theta)+crossx*sin(theta); - //sploc[1] = spi[1]*cos(theta)+crossy*sin(theta); - //sploc[2] = spi[2]*cos(theta)+crossz*sin(theta); - // - ////printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); - - //ispinorm = 1.0/sqrt(sploc[0]*sploc[0]+sploc[1]*sploc[1]+sploc[2]*sploc[2]); - - //sploc[0] *= ispinorm; - //sploc[1] *= ispinorm; - //sploc[2] *= ispinorm; - //printf("inside rot2, spf %g %g %g \n",sploc[0],sploc[1],sploc[2]); } /* ---------------------------------------------------------------------- @@ -1007,30 +701,43 @@ void NEB_spin::print_status() //double fnorm2 = sqrt(update->minimize->fnorm_sqr()); - // test fmax spin int nlocal = atom->nlocal; + double tx,ty,tz; + double tnorm2,local_norm_inf,temp_inf; + double **sp = atom->sp; double **fm = atom->fm; - double fnorm2; - for (int i = 0; i < nlocal; i++) - fnorm2 += (fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]); - //for (int i = 0; i < nlocal; i++) - // if (mask[i] & groupbit) { - // fnorm2 += (fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]); - // } + + // calc. magnetic torques + tnorm2 = local_norm_inf = temp_inf = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + tnorm2 += tx*tx + ty*ty + tz*tz; + + temp_inf = MAX(fabs(tx),fabs(ty)); + temp_inf = MAX(fabs(tz),temp_inf); + local_norm_inf = MAX(temp_inf,local_norm_inf); + + } + double fmaxreplica; - MPI_Allreduce(&fnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); + //MPI_Allreduce(&fnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); + MPI_Allreduce(&tnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); - // no minimize->fnorm_inf for spins //double fnorminf = update->minimize->fnorm_inf(); //double fmaxatom; //MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); double fnorminf = 0.0; - double fmaxatom = 0.0; + MPI_Allreduce(&local_norm_inf,&fnorminf,1,MPI_DOUBLE,MPI_MAX,world); + double fmaxatom; + MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); if (verbose) { freplica = new double[nreplica]; - MPI_Allgather(&fnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); + //MPI_Allgather(&fnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); + MPI_Allgather(&tnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); fmaxatomInRepl = new double[nreplica]; MPI_Allgather(&fnorminf,1,MPI_DOUBLE,&fmaxatomInRepl[0],1,MPI_DOUBLE,roots); } diff --git a/src/REPLICA/neb_spin.h b/src/REPLICA/neb_spin.h index 6541658fd7..f6d742c46c 100644 --- a/src/REPLICA/neb_spin.h +++ b/src/REPLICA/neb_spin.h @@ -45,7 +45,8 @@ class NEB_spin : protected Pointers { FILE *fp; int compressed; double etol; // energy tolerance convergence criterion - double ftol; // force tolerance convergence criterion + //double ftol; // force tolerance convergence criterion + double ttol; // torque tolerance convergence criterion int n1steps, n2steps; // number of steps in stage 1 and 2 int nevery; // output interval char *infile; // name of file containing final state @@ -57,9 +58,6 @@ class NEB_spin : protected Pointers { double *freplica; // force on an image double *fmaxatomInRepl; // force on an image - //double geodesic_distance2(double *, double *); - //double evaluate_dt(); - //void advance_spins(double); void readfile(char *, int); void initial_rotation(double *, double *, double); void open(char *); From 033a5c27210d5bfd443a9e5c42fbfdb4e0c4f61b Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 14 Mar 2019 11:07:24 -0600 Subject: [PATCH 020/372] Commit JT 031419 - cleaned fix_neb_spin - first working version --- examples/SPIN/gneb/in.gneb.iron | 35 +++- src/REPLICA/fix_neb_spin.cpp | 334 ++++++++------------------------ src/REPLICA/neb_spin.cpp | 6 - src/REPLICA/neb_spin.h | 1 - 4 files changed, 110 insertions(+), 266 deletions(-) diff --git a/examples/SPIN/gneb/in.gneb.iron b/examples/SPIN/gneb/in.gneb.iron index 80ab698c16..7aab0c04c3 100644 --- a/examples/SPIN/gneb/in.gneb.iron +++ b/examples/SPIN/gneb/in.gneb.iron @@ -3,7 +3,6 @@ units metal dimension 3 boundary p p f - atom_style spin # necessary for the serial algorithm (sametag) @@ -14,7 +13,7 @@ region box block 0.0 4.0 0.0 4.0 0.0 1.0 #create_box 1 box #create_atoms 1 box -read_data ../examples/SPIN/gneb_bfo/initial.iron_spin +read_data initial.iron_spin # setting mass, mag. moments, and interactions for bcc iron @@ -27,16 +26,36 @@ pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 -fix 1 all precession/spin zeeman 0.001 0.0 0.0 1.0 anisotropy 0.01 1.0 0.0 0.0 -fix 2 all langevin/spin 0.1 0.0 21 -fix 3 all neb/spin 1.0 +fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.0001 1.0 0.0 0.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all neb/spin 1.0 #fix 4 all nve/spin lattice no -#parallel ideal timestep 0.0001 thermo 100 +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] + +thermo 100 +thermo_style custom step time v_magx v_magz v_magnorm etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +variable u universe 1 2 3 4 +#dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] +dump 1 all custom 200 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] min_style spinmin -neb/spin 0.0 0.1 100 10 10 final ../examples/SPIN/gneb_bfo/final.iron_spin -#neb/spin 0.0 0.1 1000 1000 100 final ../examples/SPIN/gneb_bfo/final.iron_spin +min_modify alpha_damp 1.0 discret_factor 10.0 +neb/spin 1.0e-12 1.0e-12 50000 50000 10 final final.iron_spin +#neb/spin 1.0e-6 1.0e-6 1000 10 10 final final.iron_spin diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index 015ff1a313..95d5e19f25 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -15,7 +15,6 @@ #include #include #include -//#include "fix_neb.h" #include "fix_neb_spin.h" #include "universe.h" #include "update.h" @@ -41,18 +40,13 @@ enum{SINGLE_PROC_DIRECT,SINGLE_PROC_MAP,MULTI_PROC}; /* ---------------------------------------------------------------------- */ FixNEB_spin::FixNEB_spin(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - id_pe(NULL), pe(NULL), nlenall(NULL), xprev(NULL), xnext(NULL), - fnext(NULL), - spprev(NULL), spnext(NULL), fmnext(NULL), - springF(NULL), tangent(NULL), - xsend(NULL), xrecv(NULL), fsend(NULL), frecv(NULL), - spsend(NULL), sprecv(NULL), fmsend(NULL), fmrecv(NULL), - tagsend(NULL), tagrecv(NULL), - xsendall(NULL), xrecvall(NULL), fsendall(NULL), frecvall(NULL), - spsendall(NULL), sprecvall(NULL), fmsendall(NULL), fmrecvall(NULL), - tagsendall(NULL), tagrecvall(NULL), counts(NULL), - displacements(NULL) + Fix(lmp, narg, arg), id_pe(NULL), pe(NULL), nlenall(NULL), xprev(NULL), + xnext(NULL), fnext(NULL), spprev(NULL), spnext(NULL), fmnext(NULL), springF(NULL), + tangent(NULL), xsend(NULL), xrecv(NULL), fsend(NULL), frecv(NULL), spsend(NULL), + sprecv(NULL), fmsend(NULL), fmrecv(NULL), tagsend(NULL), tagrecv(NULL), + xsendall(NULL), xrecvall(NULL), fsendall(NULL), frecvall(NULL), spsendall(NULL), + sprecvall(NULL), fmsendall(NULL), fmrecvall(NULL), tagsendall(NULL), tagrecvall(NULL), + counts(NULL), displacements(NULL) { if (narg < 4) error->all(FLERR,"Illegal fix neb_spin command"); @@ -145,11 +139,12 @@ FixNEB_spin::~FixNEB_spin() modify->delete_compute(id_pe); delete [] id_pe; + // memory destroy of all spin and lattice arrays + memory->destroy(xprev); memory->destroy(xnext); memory->destroy(tangent); memory->destroy(fnext); - // spin quantities memory->destroy(spprev); memory->destroy(spnext); memory->destroy(fmnext); @@ -158,7 +153,6 @@ FixNEB_spin::~FixNEB_spin() memory->destroy(xrecv); memory->destroy(fsend); memory->destroy(frecv); - // spin quantities memory->destroy(spsend); memory->destroy(sprecv); memory->destroy(fmsend); @@ -170,7 +164,6 @@ FixNEB_spin::~FixNEB_spin() memory->destroy(xrecvall); memory->destroy(fsendall); memory->destroy(frecvall); - // spin quantities memory->destroy(spsendall); memory->destroy(sprecvall); memory->destroy(fmsendall); @@ -237,7 +230,6 @@ void FixNEB_spin::init() memory->create(frecvall,ntotal,3,"neb:frecvall"); memory->create(tagsendall,ntotal,"neb:tagsendall"); memory->create(tagrecvall,ntotal,"neb:tagrecvall"); - // spin quantities memory->create(spsendall,ntotal,3,"neb:xsendall"); memory->create(sprecvall,ntotal,3,"neb:xrecvall"); memory->create(fmsendall,ntotal,3,"neb:fsendall"); @@ -263,14 +255,10 @@ void FixNEB_spin::min_setup(int vflag) void FixNEB_spin::min_post_force(int /*vflag*/) { double vprev,vnext; - //double delxp,delyp,delzp,delxn,delyn,delzn; - // spin quantities double delspxp,delspyp,delspzp; double delspxn,delspyn,delspzn; double templen; double vIni=0.0; - - // local spin values for geo. dist. calc. double spi[3],spj[3]; vprev = vnext = veng = pe->compute_scalar(); @@ -290,36 +278,17 @@ void FixNEB_spin::min_post_force(int /*vflag*/) MPI_Bcast(&vnext,1,MPI_DOUBLE,0,world); } - //printf("test veng: %g / %g / %g \n",veng,vprev,vnext); - //error->universe_all(FLERR,"End test"); - if (FreeEndFinal && ireplica == nreplica-1 && (update->ntimestep == 0)) - EFinalIni = veng; + error->all(FLERR,"NEB_spin Free End option not yet active"); if (ireplica == 0) vIni=veng; - if (FreeEndFinalWithRespToEIni) { - if (cmode == SINGLE_PROC_DIRECT || cmode == SINGLE_PROC_MAP) { - int procFirst; - procFirst=universe->root_proc[0]; - MPI_Bcast(&vIni,1,MPI_DOUBLE,procFirst,uworld); - } else { - if (me == 0) - MPI_Bcast(&vIni,1,MPI_DOUBLE,0,rootworld); + if (FreeEndFinalWithRespToEIni) + error->all(FLERR,"NEB_spin Free End option not yet active"); - MPI_Bcast(&vIni,1,MPI_DOUBLE,0,world); - } - } + if (FreeEndIni && ireplica == 0 && (update->ntimestep == 0)) + error->all(FLERR,"NEB_spin Free End option not yet active"); - if (FreeEndIni && ireplica == 0 && (update->ntimestep == 0)) EIniIni = veng; - /* if (FreeEndIni && ireplica == 0) { - // if (me == 0 ) - if (update->ntimestep == 0) { - EIniIni = veng; - // if (cmode == MULTI_PROC) - // MPI_Bcast(&EIniIni,1,MPI_DOUBLE,0,world); - } - }*/ // communicate atoms to/from adjacent replicas to fill xprev,xnext @@ -329,15 +298,13 @@ void FixNEB_spin::min_post_force(int /*vflag*/) pe->addstep(update->ntimestep+1); + int nlocal = atom->nlocal; + int *mask = atom->mask; double **x = atom->x; double **sp = atom->sp; - int *mask = atom->mask; double dot = 0.0; double prefactor = 0.0; - - //double **f = atom->f; double **fm = atom->fm; - int nlocal = atom->nlocal; //calculating separation between images @@ -351,10 +318,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) // computation of the tangent vector - if (ireplica == nreplica-1) { - - // final replica - + if (ireplica == nreplica-1) { // final replica for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -371,64 +335,26 @@ void FixNEB_spin::min_post_force(int /*vflag*/) delspyp -= delpdots*sp[i][1]; delspzp -= delpdots*sp[i][2]; - // adjust distance if pbc - //domain->minimum_image(delspxp,delspyp,delspzp); - // calc. geodesic length - spi[0]=sp[i][0]; - spi[1]=sp[i][1]; - spi[2]=sp[i][2]; - spj[0]=spprev[i][0]; - spj[1]=spprev[i][1]; - spj[2]=spprev[i][2]; - templen = geodesic_distance(spi, spj); + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spj[0] = spprev[i][0]; + spj[1] = spprev[i][1]; + spj[2] = spprev[i][2]; + templen = geodesic_distance(spi,spj); plen += templen*templen; dottangrad += delspxp*fm[i][0]+ delspyp*fm[i][1]+delspzp*fm[i][2]; gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; - - //plen += delxp*delxp + delyp*delyp + delzp*delzp; - //dottangrad += delxp* f[i][0]+ delyp*f[i][1]+delzp*f[i][2]; - //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; - // final replica, no need for the tangent vector - // (unless FreeEnd option) - if (FreeEndFinal||FreeEndFinalWithRespToEIni) { - error->all(FLERR,"Free End option not yet active"); - //tangent[i][0]=delspxp; - //tangent[i][1]=delspyp; - //tangent[i][2]=delspzp; - //// if needed, tlen has to be modified - //tlen += tangent[i][0]*tangent[i][0] + - // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - //dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + - // fm[i][2]*tangent[i][2]; - } - - - //delxp = x[i][0] - xprev[i][0]; - //delyp = x[i][1] - xprev[i][1]; - //delzp = x[i][2] - xprev[i][2]; - //domain->minimum_image(delxp,delyp,delzp); + // no free end option for now - //plen += delxp*delxp + delyp*delyp + delzp*delzp; - //dottangrad += delxp* f[i][0]+ delyp*f[i][1]+delzp*f[i][2]; - //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; - //if (FreeEndFinal||FreeEndFinalWithRespToEIni) { - // tangent[i][0]=delxp; - // tangent[i][1]=delyp; - // tangent[i][2]=delzp; - // tlen += tangent[i][0]*tangent[i][0] + - // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - // dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + - // f[i][2]*tangent[i][2]; - //} + if (FreeEndFinal||FreeEndFinalWithRespToEIni) + error->all(FLERR,"Free End option not yet active"); + } - - } else if (ireplica == 0) { - - // initial replica - + } else if (ireplica == 0) { // initial replica for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -444,9 +370,6 @@ void FixNEB_spin::min_post_force(int /*vflag*/) delspxn -= delndots*sp[i][0]; delspyn -= delndots*sp[i][1]; delspzn -= delndots*sp[i][2]; - - // adjust del. if pbc - //domain->minimum_image(delspxn,delspyn,delspzn); // calc. geodesic length @@ -456,70 +379,40 @@ void FixNEB_spin::min_post_force(int /*vflag*/) spj[0]=spnext[i][0]; spj[1]=spnext[i][1]; spj[2]=spnext[i][2]; - templen = geodesic_distance(spi, spj); + templen = geodesic_distance(spi,spj); nlen += templen*templen; dottangrad += delspxn*fm[i][0] + delspyn*fm[i][1] + delspzn*fm[i][2]; gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; - if (FreeEndIni) { + + // no free end option for now + + if (FreeEndIni) error->all(FLERR,"Free End option not yet active"); - //tangent[i][0]=delxn; - //tangent[i][1]=delyn; - //tangent[i][2]=delzn; - //// if needed, tlen has to be modified - //tlen += tangent[i][0]*tangent[i][0] + - // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - //dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + - // f[i][2]*tangent[i][2]; - } - //delxn = xnext[i][0] - x[i][0]; - //delyn = xnext[i][1] - x[i][1]; - //delzn = xnext[i][2] - x[i][2]; - //domain->minimum_image(delxn,delyn,delzn); - //nlen += delxn*delxn + delyn*delyn + delzn*delzn; - //gradnextlen += fnext[i][0]*fnext[i][0] - // + fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2]; - //dotgrad += f[i][0]*fnext[i][0] - // + f[i][1]*fnext[i][1] + f[i][2]*fnext[i][2]; - //dottangrad += delxn*f[i][0]+ delyn*f[i][1] + delzn*f[i][2]; - //gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2]; - //if (FreeEndIni) { - // tangent[i][0]=delxn; - // tangent[i][1]=delyn; - // tangent[i][2]=delzn; - // tlen += tangent[i][0]*tangent[i][0] + - // tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; - // dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + - // f[i][2]*tangent[i][2]; - //} } - - } else { - - // not the first or last replica + } else { // intermediate replica double vmax = MAX(fabs(vnext-veng),fabs(vprev-veng)); double vmin = MIN(fabs(vnext-veng),fabs(vprev-veng)); - for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { // calc. delp vector + delspxp = sp[i][0] - spprev[i][0]; delspyp = sp[i][1] - spprev[i][1]; delspzp = sp[i][2] - spprev[i][2]; // project delp vector on tangent space + delndots = delspxp*sp[i][0]+delspyp*sp[i][1]+delspzp*sp[i][2]; delspxp -= delpdots*sp[i][0]; delspyp -= delpdots*sp[i][1]; delspzp -= delpdots*sp[i][2]; - - // adjust distance if pbc - //domain->minimum_image(delspxp,delspyp,delspzp); - // calc. geodesic length + // calc. prev. geodesic length + spi[0]=sp[i][0]; spi[1]=sp[i][1]; spi[2]=sp[i][2]; @@ -530,18 +423,19 @@ void FixNEB_spin::min_post_force(int /*vflag*/) plen += templen*templen; // calc. deln vector - delspxn = spnext[i][0] - sp[i][0]; + + delspxn = spnext[i][0] - sp[i][0]; delspyn = spnext[i][1] - sp[i][1]; delspzn = spnext[i][2] - sp[i][2]; // project deln vector on tangent space + delndots = delspxn*sp[i][0]+delspyn*sp[i][1]+delspzn*sp[i][2]; delspxn -= delndots*sp[i][0]; delspyn -= delndots*sp[i][1]; delspzn -= delndots*sp[i][2]; - - // adjust distance if pbc - //domain->minimum_image(delspxn,delspyn,delspzn); + + // evaluate best path tangent if (vnext > veng && veng > vprev) { tangent[i][0] = delspxn; @@ -567,7 +461,8 @@ void FixNEB_spin::min_post_force(int /*vflag*/) } } - // calc. geodesic length + // calc. next geodesic length + spi[0]=sp[i][0]; spi[1]=sp[i][1]; spi[2]=sp[i][2]; @@ -576,27 +471,26 @@ void FixNEB_spin::min_post_force(int /*vflag*/) spj[2]=spnext[i][2]; templen = geodesic_distance(spi, spj); nlen += templen*templen; - //nlen += delxn*delxn + delyn*delyn + delzn*delzn; - tlen += tangent[i][0]*tangent[i][0] + - tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2]; + + tlen += tangent[i][0]*tangent[i][0] + tangent[i][1]*tangent[i][1] + + tangent[i][2]*tangent[i][2]; gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; dotpath += delspxp*delspxn + delspyp*delspyn + delspzp*delspzn; - dottangrad += tangent[i][0]*fm[i][0] + - tangent[i][1]*fm[i][1] + tangent[i][2]*fm[i][2]; - gradnextlen += fnext[i][0]*fnext[i][0] + - fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2]; + dottangrad += tangent[i][0]*fm[i][0] + tangent[i][1]*fm[i][1] + + tangent[i][2]*fm[i][2]; + gradnextlen += fnext[i][0]*fnext[i][0] + fnext[i][1]*fnext[i][1] + + fnext[i][2]*fnext[i][2]; dotgrad += fm[i][0]*fnext[i][0] + fm[i][1]*fnext[i][1] + fm[i][2]*fnext[i][2]; // no Perpendicular nudging force option active yet - // see fix_neb for example - if (kspringPerp != 0.0) + + if (kspringPerp != 0.0) error->all(FLERR,"NEB_spin Perpendicular nudging force not yet active"); } } - // MPI reduce if more than one proc for world double bufin[BUFSIZE], bufout[BUFSIZE]; @@ -618,8 +512,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) dottangrad = bufout[6]; dotgrad = bufout[7]; - - // project tangent vector on tangent space + // project tangent vector on tangent space and normalize it double buftan[3]; double tandots; @@ -633,20 +526,14 @@ void FixNEB_spin::min_post_force(int /*vflag*/) tangent[i][0] = buftan[0]; tangent[i][1] = buftan[1]; tangent[i][2] = buftan[2]; - } - - // normalize tangent vector - - if (tlen > 0.0) { - double tleninv = 1.0/tlen; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { + if (tlen > 0.0) { + double tleninv = 1.0/tlen; tangent[i][0] *= tleninv; tangent[i][1] *= tleninv; tangent[i][2] *= tleninv; } - } + } // first or last replica has no change to forces, just return @@ -659,32 +546,21 @@ void FixNEB_spin::min_post_force(int /*vflag*/) if (ireplica < nreplica-1) dotgrad = dotgrad /(gradlen*gradnextlen); - // no Free End option active yet - // see fix_neb for example - if (FreeEndIni && ireplica == 0) { + // no Free End options active yet + + if (FreeEndIni && ireplica == 0) error->all(FLERR,"NEB_spin Free End option not yet active"); - } - - // no Free End option active yet - // see fix_neb for example - if (FreeEndFinal && ireplica == nreplica -1) { + if (FreeEndFinal && ireplica == nreplica -1) error->all(FLERR,"NEB_spin Free End option not yet active"); - } - - // no Free End option active yet - // see fix_neb for example - if (FreeEndFinalWithRespToEIni&&ireplica == nreplica -1) { + if (FreeEndFinalWithRespToEIni&&ireplica == nreplica -1) error->all(FLERR,"NEB_spin Free End option not yet active"); - } // no NEB_spin long range option - // see fix_neb for example - double lentot = 0; - double meanDist,idealPos,lenuntilIm,lenuntilClimber; - lenuntilClimber=0; - if (NEBLongRange) { + + if (NEBLongRange) error->all(FLERR,"NEB_spin long range option not yet active"); - } + + // exit calc. if first or last replica (no gneb force) if (ireplica == 0 || ireplica == nreplica-1) return ; @@ -692,47 +568,30 @@ void FixNEB_spin::min_post_force(int /*vflag*/) dotpath = dotpath/(plen*nlen); AngularContr = 0.5 *(1+cos(MY_PI * dotpath)); - double dotSpringTangent; - dotSpringTangent=0; - for (int i = 0; i < nlocal; i++) { + for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + fm[i][2]*tangent[i][2]; - // springF defined for perp. spring option - // not defined here - //dotSpringTangent += springF[i][0]*tangent[i][0] + - springF[i][1]*tangent[i][1] + springF[i][2]*tangent[i][2];} - //dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] + - // f[i][2]*tangent[i][2]; - //dotSpringTangent += springF[i][0]*tangent[i][0] + - // springF[i][1]*tangent[i][1] + springF[i][2]*tangent[i][2];} - } + } - // gather all dot and dotSpring for this replica (world) - double dotSpringTangentall; - MPI_Allreduce(&dotSpringTangent,&dotSpringTangentall,1, - MPI_DOUBLE,MPI_SUM,world); - dotSpringTangent=dotSpringTangentall; + // gather all dot for this replica + double dotall; MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); dot=dotall; + // calc. GNEB force prefactor - // implement climbing image here - - if (ireplica == rclimber) { - error->all(FLERR,"NEB_spin climber option not yet active"); - //prefactor = -2.0*dot; - } else { - if (NEBLongRange) { + if (ireplica == rclimber) prefactor = -2.0*dot; // for climbing replica + else { + if (NEBLongRange) { // for intermediate replica error->all(FLERR,"Long Range NEB_spin climber option not yet active"); - //prefactor = -dot - kspring*(lenuntilIm-idealPos)/(2*meanDist); } else if (StandardNEB) { prefactor = -dot + kspring*(nlen-plen); } - if (FinalAndInterWithRespToEIni&& vengall(FLERR,"Incorrect calc. of geodesic_distance in Fix NEB/spin"); + + dist = atan2(normcross,dots); return dist; } @@ -818,7 +672,6 @@ void FixNEB_spin::inter_replica_comm() double **x = atom->x; double **f = atom->f; - // spin quantities double **sp = atom->sp; double **fm = atom->fm; tagint *tag = atom->tag; @@ -880,7 +733,6 @@ void FixNEB_spin::inter_replica_comm() fsend[m][0] = f[i][0]; fsend[m][1] = f[i][1]; fsend[m][2] = f[i][2]; - // spin quantities spsend[m][0] = sp[i][0]; spsend[m][1] = sp[i][1]; spsend[m][2] = sp[i][2]; @@ -892,13 +744,11 @@ void FixNEB_spin::inter_replica_comm() if (ireplica > 0) { MPI_Irecv(xrecv[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); - // spin quantities MPI_Irecv(sprecv[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); MPI_Irecv(tagrecv,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld,&requests[1]); } if (ireplica < nreplica-1) { MPI_Send(xsend[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); - // spin quantities MPI_Send(spsend[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); MPI_Send(tagsend,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld); } @@ -910,7 +760,6 @@ void FixNEB_spin::inter_replica_comm() xprev[m][0] = xrecv[i][0]; xprev[m][1] = xrecv[i][1]; xprev[m][2] = xrecv[i][2]; - // spin quantities spprev[m][0] = sprecv[i][0]; spprev[m][1] = sprecv[i][1]; spprev[m][2] = sprecv[i][2]; @@ -919,7 +768,6 @@ void FixNEB_spin::inter_replica_comm() if (ireplica < nreplica-1) { MPI_Irecv(xrecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); MPI_Irecv(frecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); - // spin quantities MPI_Irecv(sprecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); MPI_Irecv(fmrecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); MPI_Irecv(tagrecv,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld,&requests[1]); @@ -927,7 +775,6 @@ void FixNEB_spin::inter_replica_comm() if (ireplica > 0) { MPI_Send(xsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); MPI_Send(fsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); - // spin quantities MPI_Send(spsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); MPI_Send(fmsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); MPI_Send(tagsend,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld); @@ -943,7 +790,6 @@ void FixNEB_spin::inter_replica_comm() fnext[m][0] = frecv[i][0]; fnext[m][1] = frecv[i][1]; fnext[m][2] = frecv[i][2]; - // spin quantities spnext[m][0] = sprecv[i][0]; spnext[m][1] = sprecv[i][1]; spnext[m][2] = sprecv[i][2]; @@ -972,7 +818,6 @@ void FixNEB_spin::inter_replica_comm() fsend[m][0] = f[i][0]; fsend[m][1] = f[i][1]; fsend[m][2] = f[i][2]; - // spin quantities spsend[m][0] = sp[i][0]; spsend[m][1] = sp[i][1]; spsend[m][2] = sp[i][2]; @@ -1002,7 +847,6 @@ void FixNEB_spin::inter_replica_comm() MPI_Gatherv(NULL,3*m,MPI_DOUBLE, fsendall[0],counts,displacements,MPI_DOUBLE,0,world); } - // spin quantities if (spsend) { MPI_Gatherv(spsend[0],3*m,MPI_DOUBLE, spsendall[0],counts,displacements,MPI_DOUBLE,0,world); @@ -1017,14 +861,12 @@ void FixNEB_spin::inter_replica_comm() if (ireplica > 0 && me == 0) { MPI_Irecv(xrecvall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); - // spin quantities MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); MPI_Irecv(tagrecvall,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld, &requests[1]); } if (ireplica < nreplica-1 && me == 0) { MPI_Send(xsendall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); - // spin quantities MPI_Send(spsendall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); MPI_Send(tagsendall,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld); } @@ -1034,7 +876,6 @@ void FixNEB_spin::inter_replica_comm() MPI_Bcast(tagrecvall,nebatoms,MPI_INT,0,world); MPI_Bcast(xrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); - // spin quantities MPI_Bcast(sprecvall[0],3*nebatoms,MPI_DOUBLE,0,world); for (i = 0; i < nebatoms; i++) { @@ -1043,7 +884,6 @@ void FixNEB_spin::inter_replica_comm() xprev[m][0] = xrecvall[i][0]; xprev[m][1] = xrecvall[i][1]; xprev[m][2] = xrecvall[i][2]; - // spin quantities spprev[m][0] = sprecvall[i][0]; spprev[m][1] = sprecvall[i][1]; spprev[m][2] = sprecvall[i][2]; @@ -1053,7 +893,6 @@ void FixNEB_spin::inter_replica_comm() if (ireplica < nreplica-1 && me == 0) { MPI_Irecv(xrecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); MPI_Irecv(frecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); - // spin quantities MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); MPI_Irecv(tagrecvall,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld, @@ -1062,7 +901,6 @@ void FixNEB_spin::inter_replica_comm() if (ireplica > 0 && me == 0) { MPI_Send(xsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); MPI_Send(fsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); - // spin quantities MPI_Send(spsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); MPI_Send(fmsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); MPI_Send(tagsendall,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld); @@ -1074,7 +912,6 @@ void FixNEB_spin::inter_replica_comm() MPI_Bcast(tagrecvall,nebatoms,MPI_INT,0,world); MPI_Bcast(xrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); MPI_Bcast(frecvall[0],3*nebatoms,MPI_DOUBLE,0,world); - // spin quantities MPI_Bcast(sprecvall[0],3*nebatoms,MPI_DOUBLE,0,world); MPI_Bcast(fmrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); @@ -1087,7 +924,6 @@ void FixNEB_spin::inter_replica_comm() fnext[m][0] = frecvall[i][0]; fnext[m][1] = frecvall[i][1]; fnext[m][2] = frecvall[i][2]; - // spin quantities spnext[m][0] = sprecvall[i][0]; spnext[m][1] = sprecvall[i][1]; spnext[m][2] = sprecvall[i][2]; @@ -1112,7 +948,6 @@ void FixNEB_spin::reallocate() memory->destroy(tangent); memory->destroy(fnext); memory->destroy(springF); - // spin quantities memory->destroy(spprev); memory->destroy(spnext); memory->destroy(fmnext); @@ -1122,7 +957,6 @@ void FixNEB_spin::reallocate() memory->create(tangent,maxlocal,3,"neb:tangent"); memory->create(fnext,maxlocal,3,"neb:fnext"); memory->create(springF,maxlocal,3,"neb:springF"); - // spin quantities memory->create(spprev,maxlocal,3,"neb:xprev"); memory->create(spnext,maxlocal,3,"neb:xnext"); memory->create(fmnext,maxlocal,3,"neb:fnext"); @@ -1132,7 +966,6 @@ void FixNEB_spin::reallocate() memory->destroy(fsend); memory->destroy(xrecv); memory->destroy(frecv); - // spin quantities memory->destroy(spsend); memory->destroy(fmsend); memory->destroy(sprecv); @@ -1143,7 +976,6 @@ void FixNEB_spin::reallocate() memory->create(fsend,maxlocal,3,"neb:fsend"); memory->create(xrecv,maxlocal,3,"neb:xrecv"); memory->create(frecv,maxlocal,3,"neb:frecv"); - // spin quantities memory->create(spsend,maxlocal,3,"neb:xsend"); memory->create(fmsend,maxlocal,3,"neb:fsend"); memory->create(sprecv,maxlocal,3,"neb:xrecv"); diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index e82b08e354..680d4a373b 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -20,12 +20,9 @@ #include #include #include -//#include "neb.h" -// test spin #include "neb_spin.h" #include "compute.h" #include "force.h" - #include "universe.h" #include "atom.h" #include "update.h" @@ -34,10 +31,7 @@ #include "min.h" #include "modify.h" #include "fix.h" -//#include "fix_neb.h" -// test spin #include "fix_neb_spin.h" - #include "output.h" #include "thermo.h" #include "finish.h" diff --git a/src/REPLICA/neb_spin.h b/src/REPLICA/neb_spin.h index f6d742c46c..b579793fe6 100644 --- a/src/REPLICA/neb_spin.h +++ b/src/REPLICA/neb_spin.h @@ -45,7 +45,6 @@ class NEB_spin : protected Pointers { FILE *fp; int compressed; double etol; // energy tolerance convergence criterion - //double ftol; // force tolerance convergence criterion double ttol; // torque tolerance convergence criterion int n1steps, n2steps; // number of steps in stage 1 and 2 int nevery; // output interval From d66b07dabeb0d4804826b8e396e298b95eba1ddb Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 14 Mar 2019 15:39:45 -0600 Subject: [PATCH 021/372] Commit2 JT 031419 - commit before solo tests --- src/REPLICA/neb_spin.cpp | 42 ++++++---------------------------------- src/REPLICA/neb_spin.h | 1 - 2 files changed, 6 insertions(+), 37 deletions(-) diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index 680d4a373b..6681bf56ad 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -46,7 +46,6 @@ using namespace MathConst; #define MAXLINE 256 #define CHUNK 1024 -//#define ATTRIBUTE_PERLINE 4 // 8 attributes: tag, spin norm, position (3), spin direction (3) #define ATTRIBUTE_PERLINE 8 @@ -62,11 +61,9 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, int n2steps_in, int nevery_in, double *buf_init, double *buf_final) : Pointers(lmp) { - //double delx,dely,delz; double delspx,delspy,delspz; etol = etol_in; - //ftol = ftol_in; ttol = ftol_in; n1steps = n1steps_in; n2steps = n2steps_in; @@ -98,16 +95,14 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, spfinal[1] = buf_final[ii+1]; spfinal[2] = buf_final[ii+2]; + // circular initialization + // a better procedure may be developed + initial_rotation(spinit,spfinal,fraction); sp[i][0] = spfinal[0]; sp[i][1] = spfinal[1]; sp[i][2] = spfinal[2]; - - // adjust distance if pbc - //domain->minimum_image(delx,dely,delz); - - // need to define a better procedure for circular initialization ii += 3; } @@ -134,7 +129,6 @@ void NEB_spin::command(int narg, char **arg) if (narg < 6) error->universe_all(FLERR,"Illegal NEB_spin command"); etol = force->numeric(FLERR,arg[0]); - //ftol = force->numeric(FLERR,arg[1]); ttol = force->numeric(FLERR,arg[1]); n1steps = force->inumeric(FLERR,arg[2]); n2steps = force->inumeric(FLERR,arg[3]); @@ -143,7 +137,6 @@ void NEB_spin::command(int narg, char **arg) // error checks if (etol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); - //if (ftol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); if (ttol < 0.0) error->all(FLERR,"Illegal NEB_spin command"); if (nevery <= 0) error->universe_all(FLERR,"Illegal NEB_spin command"); if (n1steps % nevery || n2steps % nevery) @@ -172,7 +165,6 @@ void NEB_spin::command(int narg, char **arg) // process file-style setting to setup initial configs for all replicas - // check what options are available if (strcmp(arg[5],"final") == 0) { if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB_spin command"); infile = arg[6]; @@ -205,6 +197,7 @@ void NEB_spin::run() MPI_Comm_split(uworld,color,0,&roots); // search for neb_spin fix, allocate it + int ineb; for (ineb = 0; ineb < modify->nfix; ineb++) if (strcmp(modify->fix[ineb]->style,"neb/spin") == 0) break; @@ -220,7 +213,6 @@ void NEB_spin::run() update->whichflag = 2; update->etol = etol; - //update->ftol = ftol; update->ftol = ttol; // update->ftol is a torque tolerance update->multireplica = 1; @@ -258,11 +250,6 @@ void NEB_spin::run() "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " "... ReplicaTorqueN MaxAtomTorqueN\n"); - //fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " - // "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - // "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " - // "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - // "... ReplicaForceN MaxAtomForceN\n"); } else { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " @@ -424,7 +411,6 @@ void NEB_spin::readfile(char *file, int flag) char *eof,*start,*next,*buf; char line[MAXLINE]; double xx,yy,zz,delx,dely,delz; - // spin quantities double musp,spx,spy,spz; if (me_universe == 0 && screen) @@ -469,7 +455,6 @@ void NEB_spin::readfile(char *file, int flag) double fraction = ireplica/(nreplica-1.0); double **x = atom->x; - // spin quantities double **sp = atom->sp; double spinit[3],spfinal[3]; int nlocal = atom->nlocal; @@ -539,9 +524,6 @@ void NEB_spin::readfile(char *file, int flag) spfinal[0] = spx; spfinal[1] = spy; spfinal[2] = spz; - - // to be used it atomic displacements with pbc - //domain->minimum_image(delx,dely,delz); // interpolate intermediate spin states @@ -609,11 +591,10 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) { // implementing initial rotation using atan2 - // this is not a sufficient routine, - // we need more accurate verifications - + // this may not be a sufficient routine, need more accurate verifications // initial, final and inter ang. values + double itheta,iphi,ftheta,fphi,ktheta,kphi; double spix,spiy,spiz,spfx,spfy,spfz; double spkx,spky,spkz,iknorm; @@ -648,7 +629,6 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) sploc[0] = spkx; sploc[1] = spky; sploc[2] = spkz; - } /* ---------------------------------------------------------------------- @@ -692,9 +672,6 @@ void NEB_spin::open(char *file) void NEB_spin::print_status() { - - //double fnorm2 = sqrt(update->minimize->fnorm_sqr()); - int nlocal = atom->nlocal; double tx,ty,tz; double tnorm2,local_norm_inf,temp_inf; @@ -709,20 +686,14 @@ void NEB_spin::print_status() ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); tnorm2 += tx*tx + ty*ty + tz*tz; - temp_inf = MAX(fabs(tx),fabs(ty)); temp_inf = MAX(fabs(tz),temp_inf); local_norm_inf = MAX(temp_inf,local_norm_inf); - } double fmaxreplica; - //MPI_Allreduce(&fnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); MPI_Allreduce(&tnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); - //double fnorminf = update->minimize->fnorm_inf(); - //double fmaxatom; - //MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); double fnorminf = 0.0; MPI_Allreduce(&local_norm_inf,&fnorminf,1,MPI_DOUBLE,MPI_MAX,world); double fmaxatom; @@ -730,7 +701,6 @@ void NEB_spin::print_status() if (verbose) { freplica = new double[nreplica]; - //MPI_Allgather(&fnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); MPI_Allgather(&tnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); fmaxatomInRepl = new double[nreplica]; MPI_Allgather(&fnorminf,1,MPI_DOUBLE,&fmaxatomInRepl[0],1,MPI_DOUBLE,roots); diff --git a/src/REPLICA/neb_spin.h b/src/REPLICA/neb_spin.h index b579793fe6..5988c04a3a 100644 --- a/src/REPLICA/neb_spin.h +++ b/src/REPLICA/neb_spin.h @@ -14,7 +14,6 @@ #ifdef COMMAND_CLASS CommandStyle(neb/spin,NEB_spin) -//CommandStyle(neb,NEB_spin) #else From 194e11c3297d6238b2ae164fa09dfab1f3eab4ea Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 19 Mar 2019 08:12:49 -0600 Subject: [PATCH 022/372] Commit JT 031919 - bug with sk sim - commit/push before pull up-to-date SPIN from master --- src/REPLICA/fix_neb_spin.cpp | 6 ++++++ src/REPLICA/fix_neb_spin.h | 6 ------ src/REPLICA/neb_spin.cpp | 6 ++++++ src/SPIN/min_spinmin.cpp | 6 ++++++ src/SPIN/pair_spin_dmi.cpp | 5 +++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/REPLICA/fix_neb_spin.cpp index 95d5e19f25..610e6d2fe5 100644 --- a/src/REPLICA/fix_neb_spin.cpp +++ b/src/REPLICA/fix_neb_spin.cpp @@ -11,6 +11,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ + Contributing authors: Julien Tranchida (SNL) + + Please cite the related publication: +------------------------------------------------------------------------- */ + #include #include #include diff --git a/src/REPLICA/fix_neb_spin.h b/src/REPLICA/fix_neb_spin.h index c70f35ae2d..9bbacc8bf0 100644 --- a/src/REPLICA/fix_neb_spin.h +++ b/src/REPLICA/fix_neb_spin.h @@ -13,7 +13,6 @@ #ifdef FIX_CLASS -//FixStyle(neb,FixNEB) FixStyle(neb/spin,FixNEB_spin) #else @@ -36,8 +35,6 @@ class FixNEB_spin : public Fix { void init(); void min_setup(int); void min_post_force(int); - //void advance_spins(double); - //double evaluate_dt(); private: int me,nprocs,nprocs_universe; @@ -60,13 +57,11 @@ class FixNEB_spin : public Fix { int maxlocal; // size of xprev,xnext,tangent arrays double *nlenall; double **xprev,**xnext,**fnext; - // spin quantities double **spprev,**spnext,**fmnext; double **springF; double **tangent; double **xsend,**xrecv; // coords to send/recv to/from other replica double **fsend,**frecv; // coords to send/recv to/from other replica - // spin quantities double **spsend,**sprecv; // sp to send/recv to/from other replica double **fmsend,**fmrecv; // fm to send/recv to/from other replica tagint *tagsend,*tagrecv; // ditto for atom IDs @@ -74,7 +69,6 @@ class FixNEB_spin : public Fix { // info gathered from all procs in my replica double **xsendall,**xrecvall; // coords to send/recv to/from other replica double **fsendall,**frecvall; // force to send/recv to/from other replica - // spin quantities double **spsendall,**sprecvall; // sp to send/recv to/from other replica double **fmsendall,**fmrecvall; // fm to send/recv to/from other replica tagint *tagsendall,*tagrecvall; // ditto for atom IDs diff --git a/src/REPLICA/neb_spin.cpp b/src/REPLICA/neb_spin.cpp index 6681bf56ad..38f5b530da 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/REPLICA/neb_spin.cpp @@ -11,6 +11,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ + Contributing authors: Julien Tranchida (SNL) + + Please cite the related publication: +------------------------------------------------------------------------- */ + // lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h // due to OpenMPI bug which sets INT64_MAX via its mpi.h // before lmptype.h can set flags to insure it is done correctly diff --git a/src/SPIN/min_spinmin.cpp b/src/SPIN/min_spinmin.cpp index cdd0d45287..808a5359bc 100644 --- a/src/SPIN/min_spinmin.cpp +++ b/src/SPIN/min_spinmin.cpp @@ -11,6 +11,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ + Contributing authors: Julien Tranchida (SNL) + + Please cite the related publication: +------------------------------------------------------------------------- */ + #include #include #include "min_spinmin.h" diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 18682fdb9f..0862e5c618 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -173,8 +173,9 @@ void PairSpinDmi::init_style() if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; ifix++; } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); + // test remove if test + //if (ifix == modify->nfix) + // error->all(FLERR,"pair/spin style requires nve/spin"); // get the lattice_flag from nve/spin From 2cbf56846a28fe7ffc751b0fd270d17a80c73653 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 20 Mar 2019 10:41:36 -0600 Subject: [PATCH 023/372] Commit JT 032019 - moved gneb files from src/REPLICA to src/SPIN - changed name of min/spin - implemented read_param in min.cpp and min_spin.cpp - set sp_flag tests in min_spin.cpp and neb_spin.cpp --- doc/src/min_style.txt | 12 ++-- examples/SPIN/gneb/in.gneb.iron | 2 +- examples/SPIN/spinmin/in.spinmin.bfo | 2 +- examples/SPIN/spinmin/in.spinmin.iron | 2 +- src/SPIN/README | 5 +- src/{REPLICA => SPIN}/fix_neb_spin.cpp | 0 src/{REPLICA => SPIN}/fix_neb_spin.h | 0 src/SPIN/fix_precession_spin.cpp | 4 +- src/SPIN/{min_spinmin.cpp => min_spin.cpp} | 41 ++++++++--- src/SPIN/{min_spinmin.h => min_spin.h} | 16 +++-- src/{REPLICA => SPIN}/neb_spin.cpp | 79 ++++++++++++++++++++-- src/{REPLICA => SPIN}/neb_spin.h | 0 src/min.cpp | 14 ++-- src/min.h | 6 +- 14 files changed, 133 insertions(+), 50 deletions(-) rename src/{REPLICA => SPIN}/fix_neb_spin.cpp (100%) rename src/{REPLICA => SPIN}/fix_neb_spin.h (100%) rename src/SPIN/{min_spinmin.cpp => min_spin.cpp} (90%) rename src/SPIN/{min_spinmin.h => min_spin.h} (78%) rename src/{REPLICA => SPIN}/neb_spin.cpp (93%) rename src/{REPLICA => SPIN}/neb_spin.h (100%) diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index b1a9da997d..f8c05d5483 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -11,7 +11,7 @@ min_style command :h3 min_style style :pre -style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spinmin} :ul +style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} :ul [Examples:] @@ -62,18 +62,14 @@ the velocity non-parallel to the current force vector. The velocity of each atom is initialized to 0.0 by this style, at the beginning of a minimization. -Style {spinmin} is a damped spin dynamics with a variable +Style {spin} is a damped spin dynamics with a variable timestep as described in "(Tranchida)"_#Tranchida. -The value of the fictitious Gilbert damping and of the dividing -factor for the adaptive timestep can be modified by the -{alpha_damp} and {discret_factor} options respectively. -Those options can be defined using the "min_modify"_min_modify.html -command. +See the "min/spin"_min_spin.html doc page for more information. Either the {quickmin} and {fire} styles are useful in the context of nudged elastic band (NEB) calculations via the "neb"_neb.html command. -The {spinmin} style is useful in the context of geodesic nudged +The {spin} style is useful in the context of geodesic nudged elastic band (GNEB) calculations via the "neb/spin"_neb_spin.html command. diff --git a/examples/SPIN/gneb/in.gneb.iron b/examples/SPIN/gneb/in.gneb.iron index 7aab0c04c3..a8028392a1 100644 --- a/examples/SPIN/gneb/in.gneb.iron +++ b/examples/SPIN/gneb/in.gneb.iron @@ -55,7 +55,7 @@ variable u universe 1 2 3 4 #dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] dump 1 all custom 200 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] -min_style spinmin +min_style spin min_modify alpha_damp 1.0 discret_factor 10.0 neb/spin 1.0e-12 1.0e-12 50000 50000 10 final final.iron_spin #neb/spin 1.0e-6 1.0e-6 1000 10 10 final final.iron_spin diff --git a/examples/SPIN/spinmin/in.spinmin.bfo b/examples/SPIN/spinmin/in.spinmin.bfo index a00af8833c..5b678c8a4d 100644 --- a/examples/SPIN/spinmin/in.spinmin.bfo +++ b/examples/SPIN/spinmin/in.spinmin.bfo @@ -52,6 +52,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -min_style spinmin +min_style spin min_modify alpha_damp 1.0 discret_factor 10.0 minimize 0.0 0.0 10000 1000 diff --git a/examples/SPIN/spinmin/in.spinmin.iron b/examples/SPIN/spinmin/in.spinmin.iron index 5a15082122..b87a811cc7 100644 --- a/examples/SPIN/spinmin/in.spinmin.iron +++ b/examples/SPIN/spinmin/in.spinmin.iron @@ -52,6 +52,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -min_style spinmin +min_style spin min_modify alpha_damp 1.0 discret_factor 10.0 minimize 1.0e-10 1.0e-10 100000 1000 diff --git a/src/SPIN/README b/src/SPIN/README index e371e39767..c3c02b1445 100644 --- a/src/SPIN/README +++ b/src/SPIN/README @@ -8,13 +8,16 @@ atom in the system * integrating the equations of motion for the coupled spin-lattice system * implementing magnetic pair interactions and magnetic forces * thermostating and applying a transverse damping to the magnetic spins +* minimizing spin configurations with an adaptive timestep scheme +* performing geodesic NEB calculations * computing and outputing magnetic quantities The different options provided by this package are explained in the LAMMPS documentation. Once you have successfully built LAMMPS with this package, you can test -it using one of the input files provided from the examples/SPIN dir: +it using one of the input files provided from the examples/SPIN dir. +For example: ./lmp_serial < lammps/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp diff --git a/src/REPLICA/fix_neb_spin.cpp b/src/SPIN/fix_neb_spin.cpp similarity index 100% rename from src/REPLICA/fix_neb_spin.cpp rename to src/SPIN/fix_neb_spin.cpp diff --git a/src/REPLICA/fix_neb_spin.h b/src/SPIN/fix_neb_spin.h similarity index 100% rename from src/REPLICA/fix_neb_spin.h rename to src/SPIN/fix_neb_spin.h diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 433a260e83..6ccb692033 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -230,8 +230,8 @@ void FixPrecessionSpin::compute_single_precession(int i, double spi[3], double f void FixPrecessionSpin::compute_zeeman(int i, double fmi[3]) { double **sp = atom->sp; - fmi[0] += sp[i][0]*hx; - fmi[1] += sp[i][1]*hy; + fmi[0] += sp[i][3]*hx; + fmi[1] += sp[i][3]*hy; fmi[2] += sp[i][3]*hz; } diff --git a/src/SPIN/min_spinmin.cpp b/src/SPIN/min_spin.cpp similarity index 90% rename from src/SPIN/min_spinmin.cpp rename to src/SPIN/min_spin.cpp index 808a5359bc..ac8f22186e 100644 --- a/src/SPIN/min_spinmin.cpp +++ b/src/SPIN/min_spin.cpp @@ -19,7 +19,7 @@ #include #include -#include "min_spinmin.h" +#include "min_spin.h" #include "universe.h" #include "atom.h" #include "force.h" @@ -27,7 +27,6 @@ #include "output.h" #include "timer.h" #include "error.h" - #include #include #include "modify.h" @@ -46,11 +45,11 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -MinSpinMin::MinSpinMin(LAMMPS *lmp) : Min(lmp) {} +MinSpin::MinSpin(LAMMPS *lmp) : Min(lmp) {} /* ---------------------------------------------------------------------- */ -void MinSpinMin::init() +void MinSpin::init() { alpha_damp = 1.0; discret_factor = 10.0; @@ -63,21 +62,43 @@ void MinSpinMin::init() /* ---------------------------------------------------------------------- */ -void MinSpinMin::setup_style() +void MinSpin::setup_style() { double **v = atom->v; int nlocal = atom->nlocal; + // check if the atom/spin style is defined + + if (!atom->sp_flag) + error->all(FLERR,"min/spin requires atom/spin style"); + for (int i = 0; i < nlocal; i++) v[i][0] = v[i][1] = v[i][2] = 0.0; } +/* ---------------------------------------------------------------------- */ + +int MinSpin::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"alpha_damp") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + alpha_damp = force->numeric(FLERR,arg[1]); + return 2; + } + if (strcmp(arg[0],"discret_factor") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + discret_factor = force->numeric(FLERR,arg[1]); + return 2; + } + return 0; +} + /* ---------------------------------------------------------------------- set current vector lengths and pointers called after atoms have migrated ------------------------------------------------------------------------- */ -void MinSpinMin::reset_vectors() +void MinSpin::reset_vectors() { // atomic dof @@ -96,7 +117,7 @@ void MinSpinMin::reset_vectors() minimization via damped spin dynamics ------------------------------------------------------------------------- */ -int MinSpinMin::iterate(int maxiter) +int MinSpin::iterate(int maxiter) { bigint ntimestep; double fmdotfm,fmdotfmall; @@ -172,7 +193,7 @@ int MinSpinMin::iterate(int maxiter) evaluate max timestep ---------------------------------------------------------------------- */ -double MinSpinMin::evaluate_dt() +double MinSpin::evaluate_dt() { double dtmax; double fmsq; @@ -218,7 +239,7 @@ double MinSpinMin::evaluate_dt() geometric damped advance of spins ---------------------------------------------------------------------- */ -void MinSpinMin::advance_spins(double dts) +void MinSpin::advance_spins(double dts) { int nlocal = atom->nlocal; int *mask = atom->mask; @@ -282,7 +303,7 @@ void MinSpinMin::advance_spins(double dts) compute and return ||mag. torque||_2^2 ------------------------------------------------------------------------- */ -double MinSpinMin::fmnorm_sqr() +double MinSpin::fmnorm_sqr() { int i,n; double *fmatom; diff --git a/src/SPIN/min_spinmin.h b/src/SPIN/min_spin.h similarity index 78% rename from src/SPIN/min_spinmin.h rename to src/SPIN/min_spin.h index abc532a3d5..569bcbaab2 100644 --- a/src/SPIN/min_spinmin.h +++ b/src/SPIN/min_spin.h @@ -13,23 +13,24 @@ #ifdef MINIMIZE_CLASS -MinimizeStyle(spinmin,MinSpinMin) +MinimizeStyle(spin,MinSpin) #else -#ifndef LMP_MIN_SPINMIN_H -#define LMP_MIN_SPINMIN_H +#ifndef LMP_MIN_SPIN_H +#define LMP_MIN_SPIN_H #include "min.h" namespace LAMMPS_NS { -class MinSpinMin : public Min { +class MinSpin : public Min { public: - MinSpinMin(class LAMMPS *); - ~MinSpinMin() {} + MinSpin(class LAMMPS *); + ~MinSpin() {} void init(); void setup_style(); + int modify_param(int, char **); void reset_vectors(); int iterate(int); double evaluate_dt(); @@ -43,6 +44,9 @@ class MinSpinMin : public Min { double dt; double dts; + double alpha_damp; // damping for spin minimization + double discret_factor; // factor for spin timestep evaluation + double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector diff --git a/src/REPLICA/neb_spin.cpp b/src/SPIN/neb_spin.cpp similarity index 93% rename from src/REPLICA/neb_spin.cpp rename to src/SPIN/neb_spin.cpp index 38f5b530da..f5d9a75020 100644 --- a/src/REPLICA/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -109,7 +109,7 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, sp[i][0] = spfinal[0]; sp[i][1] = spfinal[1]; sp[i][2] = spfinal[2]; - + ii += 3; } } @@ -228,8 +228,8 @@ void NEB_spin::run() if (update->minimize->searchflag) error->all(FLERR,"NEB_spin requires damped dynamics minimizer"); - if (strcmp(update->minimize_style,"spinmin") != 0) - error->all(FLERR,"NEB_spin requires spinmin minimizer"); + if (strcmp(update->minimize_style,"spin") != 0) + error->all(FLERR,"NEB_spin requires spin minimizer"); // setup regular NEB_spin minimization @@ -530,10 +530,14 @@ void NEB_spin::readfile(char *file, int flag) spfinal[0] = spx; spfinal[1] = spy; spfinal[2] = spz; + + printf("test spinit[0]:%g \n",sp[m][0]); // interpolate intermediate spin states initial_rotation(spinit,spfinal,fraction); + + printf("test spfinal[0]:%g \n",spfinal[0]); sp[m][0] = spfinal[0]; sp[m][1] = spfinal[1]; @@ -556,6 +560,8 @@ void NEB_spin::readfile(char *file, int flag) nread += nchunk; } + printf("test sp[1][2]:%g \n",sp[1][2]); + // check that all atom IDs in file were found by a proc if (flag == 0) { @@ -613,11 +619,15 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) spfy = sploc[1]; spfz = sploc[2]; + iphi = itheta = fphi = ftheta = 0.0; + iphi = acos(spiz); - itheta = acos(spix/sin(iphi)); + if (sin(iphi) != 0.0) + itheta = acos(spix/sin(iphi)); fphi = acos(spfz); - ftheta = acos(spfx/sin(fphi)); + if (sin(fphi) != 0.0) + ftheta = acos(spfx/sin(fphi)); kphi = iphi + fraction*(fphi-iphi); ktheta = itheta + fraction*(ftheta-itheta); @@ -626,12 +636,69 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) spky = sin(ktheta)*sin(kphi); spkz = cos(kphi); - iknorm = spkx*spkx+spky*spky+spkz*spkz; + double knormsq = spkx*spkx+spky*spky+spkz*spkz; + if (knormsq != 0.0) + iknorm = 1.0/sqrt(knormsq); spkx *= iknorm; spky *= iknorm; spkz *= iknorm; + //sploc[0] = spkx; + //sploc[1] = spky; + //sploc[2] = spkz; + + //double kx,ky,kz; + //double spix,spiy,spiz,spfx,spfy,spfz; + //double kcrossx,kcrossy,kcrossz,knormsq; + //double spkx,spky,spkz; + //double sdot,omega,iknorm; + + //spix = spi[0]; + //spiy = spi[1]; + //spiz = spi[2]; + + //spfx = sploc[0]; + //spfy = sploc[1]; + //spfz = sploc[2]; + // + //kx = spiy*spfz - spiz*spfy; + //ky = spiz*spfx - spix*spfz; + //kz = spix*spfy - spiy*spfx; + + //knormsq = kx*kx+ky*ky+kz*kz; + // + //if (knormsq != 0.0) { + // iknorm = 1.0/sqrt(knormsq); + // kx *= iknorm; + // ky *= iknorm; + // kz *= iknorm; + //} + // + //kcrossx = ky*spiz - kz*spiy; + //kcrossy = kz*spix - kx*spiz; + //kcrossz = kx*spiy - ky*spix; + + //sdot = spix*spfx + spiy*spfy + spiz*spfz; + + //omega = acos(sdot); + //omega *= fraction; + + //spkx = spix*cos(omega) + kcrossx*sin(omega); + //spky = spiy*cos(omega) + kcrossy*sin(omega); + //spkz = spiz*cos(omega) + kcrossz*sin(omega); + // + //iknorm = 1.0/sqrt(spkx*spkx+spky*spky+spkz*spkz); + //if (iknorm == 0.0) + // error->all(FLERR,"Incorrect rotation operation"); + + //spkx *= iknorm; + //spky *= iknorm; + //spkz *= iknorm; + + printf("init: %g %g %g \n",spix,spiy,spiz); + printf("fina: %g %g %g \n",spkx,spky,spkz); + sploc[0] = spkx; sploc[1] = spky; sploc[2] = spkz; diff --git a/src/REPLICA/neb_spin.h b/src/SPIN/neb_spin.h similarity index 100% rename from src/REPLICA/neb_spin.h rename to src/SPIN/neb_spin.h diff --git a/src/min.cpp b/src/min.cpp index c75db6e2b0..2a42a444a0 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -655,15 +655,11 @@ void Min::modify_params(int narg, char **arg) else if (strcmp(arg[iarg+1],"forcezero") == 0) linestyle = 2; else error->all(FLERR,"Illegal min_modify command"); iarg += 2; - } else if (strcmp(arg[iarg],"alpha_damp") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); - alpha_damp = force->numeric(FLERR,arg[iarg+1]); - iarg += 2; - } else if (strcmp(arg[iarg],"discret_factor") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); - discret_factor = force->numeric(FLERR,arg[iarg+1]); - iarg += 2; - } else error->all(FLERR,"Illegal min_modify command"); + } else { + int n = modify_param(narg-iarg,&arg[iarg]); + if (n == 0) error->all(FLERR,"Illegal fix_modify command"); + iarg += n; + } } } diff --git a/src/min.h b/src/min.h index ba1885671e..a63254231c 100644 --- a/src/min.h +++ b/src/min.h @@ -38,6 +38,7 @@ class Min : protected Pointers { int request(class Pair *, int, double); virtual bigint memory_usage() {return 0;} void modify_params(int, char **); + virtual int modify_param(int, char **) {return 0;} double fnorm_sqr(); double fnorm_inf(); @@ -58,11 +59,6 @@ class Min : protected Pointers { double dmax; // max dist to move any atom in one step int linestyle; // 0 = backtrack, 1 = quadratic, 2 = forcezero - // spinmin quantities - - double alpha_damp; // damping for spin minimization - double discret_factor; // factor for spin timestep evaluation - int nelist_global,nelist_atom; // # of PE,virial computes to check int nvlist_global,nvlist_atom; class Compute **elist_global; // lists of PE,virial Computes From c23ace9c972a47f3cd733f093662d14ac46fbe20 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 22 Mar 2019 11:52:09 -0600 Subject: [PATCH 024/372] Commit JT 032219 - fixed bug 1: precession_spin had no min_setup - fixed bug 2: incorrect init of spins in neb/spin - improved doc min_spin.txt (added eqs, and connected to related files). --- doc/src/Eqs/min_spin_damping.jpg | Bin 0 -> 7035 bytes doc/src/Eqs/min_spin_damping.tex | 13 ++++++ doc/src/Eqs/min_spin_timestep.jpg | Bin 0 -> 5984 bytes doc/src/Eqs/min_spin_timestep.tex | 14 +++++++ doc/src/fix_precession_spin.txt | 2 +- doc/src/lammps.book | 1 + doc/src/min_modify.txt | 11 +++++- doc/src/min_spin.txt | 63 ++++++++++++++++++++++++++++++ doc/src/min_style.txt | 10 ++--- doc/src/minimize.txt | 7 ++++ src/SPIN/atom_vec_spin.cpp | 4 ++ src/SPIN/fix_precession_spin.cpp | 9 ++++- src/SPIN/fix_precession_spin.h | 1 + src/SPIN/min_spin.cpp | 6 ++- src/SPIN/neb_spin.cpp | 63 ++++++++++++++++++------------ src/SPIN/pair_spin_dmi.cpp | 6 +-- 16 files changed, 168 insertions(+), 42 deletions(-) create mode 100644 doc/src/Eqs/min_spin_damping.jpg create mode 100644 doc/src/Eqs/min_spin_damping.tex create mode 100644 doc/src/Eqs/min_spin_timestep.jpg create mode 100644 doc/src/Eqs/min_spin_timestep.tex create mode 100644 doc/src/min_spin.txt diff --git a/doc/src/Eqs/min_spin_damping.jpg b/doc/src/Eqs/min_spin_damping.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c700cc67863762a99f9b9e3df0cb945612a2e38 GIT binary patch literal 7035 zcmb7o2UJu`v+kaOVMqfrFhoHKLk=Pm1tf<7B}vXXgMcIhl0l-wkb_9hQKAHqFhoH> zGJ@m`5*39b5B>jh|9j6{>%R4B)!JQMRlRrb)m>Hn_2u;CA^=xaLMs8FE8+$50>I@Q zAP?Yy!N2*6@UIv`2!Y_^Lx`bJ0zy(^Qc@CP5)v301sq0(AR{4xQ^OIINGd8SQgRwv zY9uWMk_!3zB_O=3G58Q72!sd;BY`3Rzv;3QKo9~(pa?t=0stdGcnHvCH^2aZfUBv2 zfd3Ey6dwY{Bm8Yeg8sYVkIUsOKzij4hU38j0CcLt8e#cHAWmuVKjZ&McuTqoltvEd zw{8D0K*2FW5&0UD)Ld+$+5fObA*@)`hf#hD$qs*8+@S)0#4U*+G6^D34hn}fmjM8= z#2~*A19?KwrX~PTmDnP3B^9DS006$jO9aa?Pi}_<05GV_;8?OL5_pkZK6E{yFDXM> z!S!rC)hVfK78!W{@3Ak9B_}5Ve~TF96_U;%RLdz%KR-s)6rsg5U7m z9?SQ`1~ci{=XNl%hIfBO;cI?mW7?8zdh%=la#x9D^Sx*ozbQbUps6MU#WMocND!yi zsk%20#LQAyQ5XYN{f>ET8)&^7D%Jepdj4t|^bCj>{$TxNG?@+~r^X59R3=>V3;g|; z1cBXbG62XVnYj<#z>5I@FzrK?$5yXp71OnkIq}8_u737kL>@8nM>z9`YAG@*Mk%Vf z_x)}AyS=U^%C`Ub#?wTd-ue<@%drA<_=mpjiXLx1q3~-j zMY-Qz5Nout3=Tn`E=H|2QdZP$MmjS@D|aw|VXNM3Su^@*>^Py2hE0AM_}@CQhMw8# z4a=qvkG`$UccuY#`NP|&29Dkp@1?ibh3H~2VR`IyM5K{hITnq(X5vw1nu2zu zN>GBf;D@Z**Y7!;+l5uWvB||Fiz}kJp(~*ukk+3|S$6zMIIJ74>Kc_G{K%e^%$}87-DQDt2c$wt%sbA4di`(nZF(82TTC#+tsJy2Y1`ak(^Ia@9Lduk0*zFd?P5OgDqXdC(i|={Yz{v$Gd{#;)2V0t@f&KDf&DqyUfq~mdFAHCM(Ee@gM6akgi<1Ry@o!gsF~iEXz!MTVEv5pH{E{dzOXci3ROaq4L$ z@Fi|oM7FM6SLYgU_w+#b zr;;jt+4I{H_qCBk7(AlF3uAxXIzq49bX#Wgq4p`;*3%iXQeo}Hpaxv37K^-5U)h!o z1!X(={R9e1qe3Nr)S7ik?NN~K5Y>>5LqzIwt8nc3o2~i|A4L_%60&dd zha;SE%Kqv?-9lzj?Tog!wbFQNjR~h;Gp(;*KV`k`-4an_6kUDx8RAM`laIdH zN(TzH>N4F3Jm)`E6Xs7H)`YdrnXU<~tr)#jXLX)DBq5Fl3pm#A?`&_(N^Pc+_-{d& zoBHPlX0~fRzmnA5x;5FEtX<9{TiB^I>ox0Vyf)ZYqV97$YGL|obNjh-Ax{je?qfD* zd8_6gEJQA8s>@en5?No&#zn;~0SU&+VHIVs{mO17Q9WSb?)14%uNOYHOPH$ zGOsOZWF_z0&TpxHclGJ9V|YIJQlC*?5SdRfk#h5<=*U~&y%x6%Zmj5?t@XTO*Sq&& z7sk{=L0@(jIEzZ>KeV)QneA24Ofc5?@T|`pnQ|-Du)G#EHy>#{bTJr%22}awW|jF0 z?w=GqZD=*u@xe`3Wq3P!mC$!bJ)8G`LixN}oNtuUSYwa=p!w5ZWi}O13M4n-m!m^X ztCfO>@0Ja1!KFq+K%@84FV6ow-rR`UzG3@p>Y6b0{`_<08`8e-i0*PpuV+2I#g(U* zCF3EbtkgDAge(ZpaAeq^_CXm8x3VfY2|nJsht<1Nn$CG*Y!oPN!C<1?N8^96UXwEQ z6ZKP*=gfJr>Z>gpTgqXjojG3brmA#oU$Edb!S$1RsmPjW$#i=qr#ETHl})+dZOB)& z=CiO#8nsRyk4jmfzB@S2TUw4)5 zOW#!50ykW_)_M+mk%x`8P>i)@Zw0QutEb`KBvG`du;w(^n%Z3&IX}mk0V6>>RXqaM z{7=+J&P`+@F%Q|78$Rt5gcls?AfFH`Di&iX#9-t-k5Z3FoVHn#U!=fH;&d6!$2?E9 z`)MBS_CBR{dfaMF{b<$zuPpN|KK`qQjaGb( ztYxW%u@ACK6xdh=@8`c67{~Qs@}c2MYOk&{-F+(UBb}J>c5D>=S$ctab(D5~jN-%D zLn7F+IHiNHeHTeuij|5N8+njcv`1gORRKH{Wv4D3H1aQKA7 znC@AuE_XqhyT<+OvL%ta5|s{Lv7=7R=mFJ*>H{g!LdLeJy}MiW6B_g9_bdBKhe&h! z6A#0YMVEm6kmK0&Ur!K9M^&8ZD;34HDUN1-eJ?1 zxK8WgbYAg^ZN%2B;+?F0k#wKWF=qAsR51C*RQ^KaJF0$J79lVCM#j4n*F}6#4Iv-I zIJI3)(3O!|v#d4w3CB?ykdrux6TbTOq!{+$`O06-U$Lv+3oAEpMUFgzG#U&KZfdmcCL{(e151hm~H-@uuyW<^0ob+}sokCH!RWTRZh@ zT!G0(5I~Y_Ct5 zBfYNE+pk0mT93WzDIw%C(r?Jv7WrCdJZ8-p^#N6^WT`-v#N(87FWk67tfZwA`<2k%br)0uD$c}l|p@SBd)aC zp|)c_Bab6SxX)ZsU0BTL)%-_}L%#jhCkAjQvd+88)}<;wv{+kwi`>cPaVz2Btd0|X zuTaTrPe^80p_GxtJ8uqe8XcES-dW>{G{-=({ms|**e7YkhkDY&n}>hlRgTla1eYMi zCcZxE1q81!8+gmBo}2aaWME3f*4M&28Mb2D%TJVLyEbYySC!>Q=L(TGy&;gQAC+>B zeO5|^cepTkM;XlF*I+_H3ON$cNe96jnuDqbHqEw5F3Rvm2oj_l{xn8_@ zDNaQ!@62VZ2o&#$Kdc{Kl^&&;RxhGt2vOBbGc2rkoS@CNDAeidoU-O`Dl&A8K!#5` zC1Og!(3#g)M<6cv6*l+{Yav%~_YaP^f|krzCmTz+M-Wqdj*Mna$AQ4;;omSqntAiN zAXz_mvSjPnM|oeB)D*4!{gJ@e!hF;AqhUwO!81K{X00Lidw~Oi1E18GJ<-TDPKw>v zX(c~Oyvi%6GHk9bhcj|Q8x#hP(#!qJMavU`K_hM;cR!DmDsC{flT1zv5+*(gYgQ~c zVeW$Er#UIOIgJW_z_Q7Bp}}bCb3ll;i+S zF4;wQ)H=g=5}bx*2)g?~Zj-oD={Emdev~C#q5FaGIUDQ^8Kv@1#o+e@#8HoSQxhMF zY|gmk(R@6k=mRI3QBvi#xD85v(mL{%s$e(Bm~N&Lmdr-7%UOB4MqdIkz>gP$Z>J|h z#xxB2!}9U6!Yug$+YZ4#LDXqqE>Nd2sYWv5n|c(}Bwyeh4hY9rTS@mG@K8VMJJ4j~ zVPLrXPEau=u7)zGcVOx`p!wIs@8(0lHdPZt0;tuMD=#43x1ra*A~GZT6N?F4c$4ED`*L-$L|hDeBi~}D^`43(W~L3 zbzMk&P8BdJX!;q>Eo^@S7R}E1M1j8Qg?>JK@Y&C6;`PX@knc}$BHm&!D6(RCBU_q7 zfz{~$$Y_>?W~ZR0`Vw}x{nU;yrf{>*(U6>1!0qG~sut5ORGxetbg1cV``Dr%XkF{A zB&8Lw=s4~q+)ujWm68uYJr`mdrqQQq=xD`SDe}I4nQQgo@0rS_B3E66rNn2si>eRq z5G5G|#V(Cw`RGTI3q^fVkKDtlXLUx-nxM;hC{CMOj#l2=7QJ}vy@QfUw+l$Dr?}k$ zH8^hJNy*YZi%J;#xbS_*%u6}UKeG+@6s0qHTH_@89v~qynn`E#F`+!W%Q>&|QUPH$ z6|_Bw&4xD*C$65c7!{I*f3?vDI{K9+9Vh$9@G1Q=?in(~xhg;9>f^$0^&677HnqgK zY!`V`z3cLIp38ol^cToZ_4p^Lu~2>2i_Yj4DfZE9PY$PFUrx>EewCdEOc)GlM#M$G zM@kBJ1zb>8jWQV!XS{>QcH9oi3fV!r3}AxbFbpjYJwEUvSVvsX(1XC~`zLI|Qxe!W zE|<@8Y#?Y*7NcI4!&=r(cU1>iH7+twxlyep!!#iw=ju2d3A-gan%eNqqmX+jUg~Xx zyjVV0t}|nei|e6t$Riow_g{s{&qDgll*yv^hj%Bltb!hjNuK(CzhUE|!R{b~M<_7M zZT_6qDr@f*4~O=8&f+x`#a6gUf%wX?7l&pb$k!UF>elW!LuJMdL%*@O1bhkwkQ%H= z5~hI<-6ycA=bSNjx6P`>*_5TrX_?i|&wm9^q&j-XILBzyODdayvHA9Ld;un{(JUuF zL)IKd2!wJKPRu!e$e6yjm}a}rdlooEEq1jpJ5{ge3Qm8IQs}9i?STu94fmdDVk)s+RFrfrBiBegfU} zbHyN)^-Wx{dC2a{FXbV7YW3T+e&4kU41bnn-b6fvkG`uM?yDz+Z8ap>NI*5c&mEIU zEKHes^x9%gR1*2PdxcuQ-5N4;h;o=%cY%Z=69O6nu5#g@`!nG8#S0t*ps?tFF#bO@ z81z3iSXlu4_o(1M0!9TtkO+k(VxmB!FoeJT!GF4d3hGM65Hev2QNc1-7j{elA$}kT zg_XspkVRpxe9$NgG}CVx4P1TbH~(`=_!LCImD?X?`j#7(hcS4P`^=9kDZ*+eqPp8Bm=w+;v}rf+ex|;rpB`t;yv<|4)FHv7 z$(FJTC1Y33$p-1Jz&z8bG#wF$3j)3|Z3tq7&5a`~a|NcCIY;D1_ogLKgN_6QcFOqT zen(F;6lZAxl0}fR+&)ON{|?$0BVaFqTL1w4?MO0ZpU+B!-c|##LZ8nGh?Wp6+4`Xh zdr{@dJT_T66|zVvLKXpmdLt^Lb`FKX)0k*R4JwxD#pgX$BLUrG;-Lx%Ld!?0>{!*% z`Ui1$*jYQb#Y$3?Yn!`vqtms7usUp|nI5CJuG47Y?lnujnq;JUAjo{@qI#XnkX7x) zmK?bU;^!q0cP)MJLtFE{ZzYQ^pmXBr(@))k!8v^t#JzZSx-YA>-C2q6>td#a|l^y^_O|5#<8F+fp|^}(HlCx z1o#!v{6zdRs8Y;P>CY;8+6!brH#JvLmsdN{Geco_4TEM>!xH6_pXCNMR=AMwYP94J zCT-%^Pt0#EWzA`6etDfUW%@u-4y!*4%4B&odW_V>X^jA-OL^N`AAQKxKQG!U(v>{9 z1l}_eO*RFo+7Pm^aiT`O5QI}C?^UuN+(*FYbOXsQXk~RpWiv-gOWURHIV5q6>;}2# zS*YxfloH{|%y8pxyK>2FMEqJNOlbenQtP(1_m;z7I`jzMi*S+`>y|54Qa?kVSos?Exv%{h#TMBwvJPI>IIjb*{Z@%&RuzqTU2gjQ4!6iH8(_kFby#aSx!aalVgw zWh;=U214d{fIIobzXynGo*Ct-)7DyO(lSYgJo8A2N~5W+fLh!Egc8@ zK5>XHIAbPoA@^1!Cls~uvOv# zr|hOgAdApI8%~;cGPAh|xH6)YNqy0p(-a&mCFQ}xdjmH-m)>_%kGM(R#3Jlts1k9D zCU*zEnO!E4w(p`ygMg(Z@#E3>Tv>A;2-68qY%|&ZTdYlLL=`zg+e~k5TPrK+Brwyd zx)gx&gFsAT=#uUpLVI<79`BP(xmWtQj&mbD9I+gNmwo#sp}bFShosYYL;k4E;aWgk4M`ba|!}QyEo2>TY)_SV+6mfG>(EZGGF}?kh8qa3wl9Z z(08-W{aqw7xDS+zato9B%O%}(bEK4*qAVM!*5!-#q4n)%0KI37tA663@QE;=R83aE zDYpH!xKa|H72})VN;;#3f zDp|wpEPb68Uc)IHB!RH``pl7kK;$}vX_z7^Tw&=e?kTX*x;JZJUyyi_oa$Rw=%^v}ws(16g5mRX%51NHTRhfbi+fCj%~L{tt~b B|8W2S literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/min_spin_damping.tex b/doc/src/Eqs/min_spin_damping.tex new file mode 100644 index 0000000000..88b05447d3 --- /dev/null +++ b/doc/src/Eqs/min_spin_damping.tex @@ -0,0 +1,13 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \frac{d \vec{s}_{i}}{dt} = \lambda\, \vec{s}_{i} \times\left( \vec{\omega}_{i} \times\vec{s}_{i} \right) + \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Eqs/min_spin_timestep.jpg b/doc/src/Eqs/min_spin_timestep.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d8f8d07f9ff6ef23a0b8a136b05bf36a1952bb6 GIT binary patch literal 5984 zcmb7I2UJtr(mn}E=#XGSmyS{+AcCMEB}h{Qr1vTvsfvIYia?}y2w3Q#(gh*(Dj-Oc zDk?~CUaBA%Z1p?|*OBtdl9<%sKn)J(Io9@!0Vc09U)JdKCZ>NeCna0LLEy zMSuhhK4Bt3hzuozLLm?+1t}?vjEaJaijsnolA4ANPECWLp`?V z=9QKH^;^@9WSC2}tLDG)Q?jP< z)1UTxeoo1OkX@;1)hS7`XQNUo!1!ou{<;Qzv(oZW2wJy>`TE(}A_oV+8NM1@-*w3{ zEc#vTICaLJ&?tqXd3Id4kW^4m7j_J+W3>%sx{jDfk_QYG@||igtf@kC z4ZJG!BVrt#j9tw8OSid~vO7~>e~9=Z;lIHm>l5{qqgXLcR9#Jcwjv|hGya{2;X8Gy zE;}iq1>TH*YYO+K@fZ5KrI*62pjTz0r291@V3LcCMFU9GT}rMMO!Bc2Dv@V>ajK+= z-b~6}OSl9<%SuosEtz;FvF3Fcyk^thFlm0O!VWiH(Y87c?V@RGQOIJ9>0kN&8;}1c z|8DAqaXw~a z(fjQJ2ac+Fj``1=T#}5-FlEtO{L+Urg68plQbMmL!`rC1jE6b``~pk5OJ=VlAdeCu zRx^u`TXC5bA(D(>iSwVpl85aqbd;j<)Iqy(0$t3);ln|U^dOcPOQyt_Ya6%lg2^pz zAh|%%a*;-v<{!qBBHy|Eg2Vvq8Zf5K@tK`-s`*3|- zino>QC{+NpZ!5X8dGHUroo?m42%B@7alCibHaI<0Cp*pA@Y3Gn9!{Lj19LG&5y|DC z{(3`{A;;SDT*g=3aYj=P*=Z-K=D3IaUHiimQUXHMnoTRV-s(;(a{Lf$q_>zD)?mV~ zhhTjNXma_Mt-jJOf7(o2I;{O;g`M`K#UOrbJwFR4_U8&F_M|Hy=!5@&0RKWNCrQA>b_pP$bf-8)I7wnz!^Uiv7z1F0Inj}=_!focCBn=L$>ZTo7Z(KbMHMtE@&xy#CR z3}AiV?lkTWFqzjzi5X#>I=L2gS1P%=i|V8$Joes5JP<(d_;L76_4K<+TyZ(nViF*G zWUA}SZ!3R6BKAFln4#AFo&3Y(r)VMXT|Snpd=cxzVr$FG`B|i84(>@Cdas_-pw*Wf z>8rVNs6sQ5gk`lfoQ5+#CA{-&;&q{{OHje_%XVXKhWt*PuXTKQ@yEa|a}*2I#k*%( zMQ77ML$XBk+xrZrVVyuJe~OaL``I6#G|4)IHAiBLxYl(>J}(UK!y}U*O6ceHsIyGo zC>qDShYVeo7oXJI9_U<*ApcsxdMSGHv20NTAx2ogH9z>CbdOtLywKC% z;J4?Lmg&E{K4dHW%t~P+-FYkP&Mq1g^u%{g(YHqPQ?ZWZizMph|6Zv+!@FoU>&&Qr zEn|1#bU^ zl_3+Y&*C#Ac??|Mjwxnbz1Wt*U@AK8dur|LMJ+tTXUvp@T@pi8P4wBmMru#i8&3n6 z=Py2$Jro~Tv$5_pJ8yAs;F2Gn{3Rsxb~@*3z2`NTiTTtImA#^`o$%JKqv9POiyfkB zO@>(R)Z|I5{TFVxXRWRRH3dnpK1>=`@Lp3Ed&W^^ov0;Uec}5E=Rwm!(w{$xAz~XK zo{>k-|t1`BM|D{jiw^AX&Sv}=z1Lxa7En`o29MyISrK(YjsJuu`q!SV;$Ze zKK?M$;i2;o@s-mlH?GP^h?TgwQ>nHqr|BcYUt~L9(buaqn`q&}k9EDC)NRO=zcaBL z|G2Hx6tRo9kF0RBGt|;8GQ06KZ+kNQZPFbU!479aO2?N*{;qwm=eYEq#}|$!o;G~` zl&>q2R_)nVAbdGzV*QUo;rn+BHhHe{-L96DptUav5BU5&b-#auOM6;5QL#XGK6Y&- zZzlOPJk`aOT971BzbCOQfhIieeZ>nSPp zXQ*|}-=qX>cT?f=g%vZxnQWz7m#)6%aCn6@>sGe5+^{C3Q|DoHFJHUNB;T6ETj}v7 z1A%GytUVybgVQCIjVkNWTiL$1R5+kHkaEt2%g|f6HnpVNBjB-e>t=d98`v`lkG+{w z>wTA{ZQ-in>D2&AzK@s`eOu+k;q4n$XzKl>b6?o^=4D^WY(@38T2npQ!Gwokp3oL) zF*vTP=jT0cF|)$>t2Xznc(x-yZ+*N#r&%>dX(1h}B!ru654f4Iy#j9=HSF?FM=iTl zYGRHk>MKbpZOhK|2H)Q@%}R%Tti(}fMRS(R1=aHq9?IM)D7$G*O&O5$I{d*5@eS^_ z7IPF9P$X+jyz<}$K?+L}=0lUsO13^2poJEhn;a6HGXU*QJ>jbD_h~WQQP~Sqcu(zM z`{e7U3?udRJ^FJ}S2S`h&jxn2DY2h_v?5tXPVbt#l2;$68eTD??)X0Z+JjNbNiBiP zI5%3#7OUh$BfsbaT)Vk~%S&bqe~iTK9vCX}h^%BJF*V1bTtgildY?OmR7>B8Z&jl^ zB|PUlNqG6E6cP4dr9CML;~_0xL+G0^2I2lk*}h(9t$7UgI0X_JCf$_$)2r}}$(ddE zTBEmGTQ067x$+dg7}n0T>Qifj>88;7O&9mFr&jjYgj?P2jn8fY^9;mf>u=;ANyQY= z2K-!p4;EYe`e;1l6q6^jJypgsxx9Gay72J%IOS}OU#qw{!F|UxqUFP4AtJTq(;sPa zMT@wOL-xn|lG`Ot+sdJRWQD9MJ^CSm&Yf8=UhEASXih6LYfENJB7>FFbKibi8P&>? z0wx))7Wqh`_B_s_c_d9$aOo~p??*-VFm3U=WNVZ`M)3Cq&kE|Cw!ae!3##9-SuHyL z@yfeWK_jyBq2JIk!1`t+tkK;(arVa*#$(`(=uY#;pPN6&My z5_T26^Im3KEWzYgh0V2S(EE%LMls3{H|I&Er&62z{Xww!OVp17wZKua4uCy|M~%l^UM_rMax z>s!<~xwW)0Z_HJHv*Fu5FCxyKB&jnH@pXKo{6UBCbZyv?b&G`!C&Tt>OFiwhGvB^m zTl}#vqFT&6O#vP|Mc6z{r_2wVXWHv?vzuhvh27xuq}dKy_S(A_Ph(eEF)_a8{H@B* zSf=R7NT1WcF_eeqr(L0b7`u`EZGx>~OhgYLVMoz$++!Vg=T~wpnccc%_4m>b z_~eRA%6scb?j;mByyOGzo9nXT?vfl{ZFgE_QG|NG$Na3TtS!>GNz8$znmz6`{F}>5 z#(AZ&Z~}Q_2W)nAP&ka)M-r)|Q?twxbCz`4J0#Ojr0>lh*CQUh)Pk?7x3oV1Wpuvy z;KR}71*sdUQtv!77Np)O0-IS}8s`?KMnzZ#!B3p}1UK4o8J)-&|Lbf)aEwrL3T{UH z%tBd+&~k}TQd=x1gX;|*UfgL%%NDEy%$04-dE%O%RTA`6Hm%u^-cFLe7)9Cm;I`X} zjt3tK2`S>6sy;pE6A^#(8K3fEa>rWyS-xcG1}SxirGEA)FAOCEt%MiH+)v!n1S>@$7(dRAdt^ua~Pe9)O|;W`sLRj- z*UIqWoVwgbxOrc{rJQ%(stWx8sh;HSDJDW1ItswTun1+6Qg#Lza!IN>^u5_+gPU=Z z?-tbguV-ymZ;8S(hu$2@29g=S63DciYnKh5v5LtKqc3Yi=fdm~c;qIq&ufG)FJF>H zQ?{sOK)(ua&*bTO(k=6uNfdY2e}xlkyP515@L=6`x!VV#z5K^5W#g+sZdLn`E_W>e zp?ppwVy=%C)p979RN)$$6(pA>y+3nTR8(y4#!MTVS?@F+{-K@PMN{>5lb5HfC1}@me6@GevO$)?@`A--uA+ehoLQWciz)dTSoL?D z?+U8!$ea-eg+@ZV)M1ch9{f`Bwv7*RpILIBB8o9CCqizq%*4JUhO#D=nbn1g(v0(WOZslqcD9~*AH?ZL~7!;-@` zKOVfl{|wgrQ0ForFy)RiB%r(56IvAy_|~uinV24Rrbr-vZ1IuSkX6fV14acthZz?# zl4KipK7|Yb`Z9481){%stLG#BKy8FT@#1>P5&m4%}j0PMzF(yWObeVvB3(YZaH?+qZ2jGMludfh9cTnG%0U#5q(( z^|;vdgO}o{p)b?mO)OB!FHvjyBk65o17Px&a12NtvDSF#QX3Y4%nFuJl7i`zgIfNA zkKe5PuN)C7iFn|?k62qhXZ*3zUB<`EgAN0n1{Gp^gLQ#g1g3rJ_27ZT$X-@8W34wg zzx=!{mGLw3aU_F6CZWkjHFxg}=%%%)`(R~srY8$&A#{YQ%%JC`Do`F8hmP36WWFs0 zsb$4=D%+Y@lxePUjM&VVdu%l;#ORsTz!>nDfqq_2g;0}>Cl+)gYFI#xd;6B>F+jes z^>dJPs@$JzYdBa_(TJNK)hO*&I_0)2OHZYC`!Ws|-re6?klk}<$$Q%1zwlYs^N-){ z-?yInfA9Op(U!#BdoZ`I$Bc9tFyCEdbaLz=rSPpoWG@Y6o-Mp%PZuIzJw|#zJe+QW z+47pDLgV9*1xFp=Is{mLWiPKO~>i=&|FU1mqj2Nb{~Db#9oS-rO3g>`2;)q zx7q;gRywY8Gj>v4;FJM39o?FMmkkvFCHejsRjIt%-Cf`~tb*=uhq31ByP!0MKb?w0 z#!^ROwJaC_w&d91b&4vTxo*Vg;!Jo0;J@Lm2OFeAGAo&xoGQ3K&5uNmk;14RNVbs# zBIU=w>Bvb(#-1_=E-hcsu`kE_KGrK8hh}q11Dve2$gTam=4=d(QOaZVINWI`lq*;*D$;-JGro*Q4Wbiag+p0|_K@Q>IM-oAMB0Z)1-2 z{9)L=#73c;+1Ad_kSfygmpUIu?XSC;dhpz)(q{@GKLjdHf5urvm14c!9wmqo|xnjcMn6m7NUms&PmUJ5K3e<2C7brPBpe zD>JHJy3zUA!bxKBvtgeM0^xQrPYoE_RTvkKx6yl1>1a93@9dLoc^F1HLWjWRQI@XS z&`}Ix!e^L#GoNdby)JFi1|QXFVabqV%g$lD>UYiA*Nw)Y!3Pd*EWQR8t)9QmNs%s& z7ap_cs4IBb-i<7k5h^vJY)O>fIedg%y30cr(>ZL)D@*`9$?rX|l?RRHV1YRI@P;OU QPIn^d(7|c_7&spP7aqDz-T(jq literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/min_spin_timestep.tex b/doc/src/Eqs/min_spin_timestep.tex new file mode 100644 index 0000000000..b0f6e68e4d --- /dev/null +++ b/doc/src/Eqs/min_spin_timestep.tex @@ -0,0 +1,14 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + {\Delta t}_{\rm max} = \frac{2\pi}{\kappa + \left|\vec{\omega}_{\rm max} \right|} + \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/fix_precession_spin.txt b/doc/src/fix_precession_spin.txt index f16522c7b6..05814931ea 100644 --- a/doc/src/fix_precession_spin.txt +++ b/doc/src/fix_precession_spin.txt @@ -31,7 +31,7 @@ fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.001 0.0 0.0 1.0 :p [Description:] -Impose a force torque to each magnetic spin in the group. +This fix applies a precession torque to each magnetic spin in the group. Style {zeeman} is used for the simulation of the interaction between the magnetic spins in the defined group and an external diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 198e234f0c..88625e0b73 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -174,6 +174,7 @@ mass.html message.html min_modify.html min_style.html +min_spin.html minimize.html molecule.html neb.html diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 701f579af4..525d6716d8 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -21,7 +21,7 @@ keyword = {dmax} or {line} or {alpha_damp} or {discret_factor} {alpha_damp} value = damping damping = fictitious Gilbert damping for spin minimization (adim) {discret_factor} value = factor - factor = defines a dividing factor for adaptive spin timestep (adim) :pre + factor = discretization factor for adaptive spin timestep (adim) :pre :ule [Examples:] @@ -70,7 +70,14 @@ that difference may be smaller than machine epsilon even if atoms could move in the gradient direction to reduce forces further. Keywords {alpha_damp} and {discret_factor} only make sense when -a {spinmin} minimization style is declared. +a "min_spin"_min_spin.html command is declared. +Keyword {alpha_damp} defines an analog of a magnetic Gilbert +damping. It defines a relaxation rate toward an equilibrium for +a given magnetic system. +Keyword {discret_factor} defines a discretization factor for the +adaptive timestep used in the {spin} minimization. +See "min_spin"_min_spin.html for more information about those +quantities. Default values are alpha_damp = 1.0 and discret_factor = 10.0. [Restrictions:] none diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt new file mode 100644 index 0000000000..468cde0fec --- /dev/null +++ b/doc/src/min_spin.txt @@ -0,0 +1,63 @@ +"LAMMPS WWW Page"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +min_style spin command :h3 + +[Syntax:] + +min_style spin :pre + +[Examples:] + +min_style spin +min_modify alpha_damp 1.0 discret_factor 10.0 :pre + +[Description:] + +Apply a minimization algorithm to use when a "minimize"_minimize.html +command is performed. + +Style {spin} defines a damped spin dynamics with an adaptive +timestep, according to: + +:c,image(Eqs/min_spin_damping.jpg) + +with lambda a damping coefficient (similar to a Gilbert damping) +Lambda can be defined by setting the {alpha_damp} keyword with the +"min_modify"_min_modify.html command. + +The minimization procedure solves this equation using an +adaptive timestep. The value of this timestep is conditionned +by the largest precession frequency that has to be solved in the +system: + +:c,image(Eqs/min_spin_timestep.jpg) + +with |omega|_{max} the norm of the largest precession frequency +in the system (across all processes, and across all replicas if a +spin/neb calculation is performed). + +Kappa defines a discretization factor {discret_factor} for the +definition of this timestep. +{discret_factor} can be defined with the "min_modify"_min_modify.html +command. + +NOTE: The {spin} style replaces the force tolerance by a torque +tolerance. See "minimize"_minimize.html for more explanation. + +[Restrictions:] none + +[Related commands:] + +"min_style"_min_style.html, "minimize"_minimize.html, +"min_modify"_min_modify.html + +[Default:] + +The option defaults are alpha_damp = 1.0 and discret_factor = +10.0. diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index f8c05d5483..c46c1492b4 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -16,7 +16,7 @@ style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} :ul [Examples:] min_style cg -min_style spinmin +min_style spin min_style fire :pre [Description:] @@ -62,17 +62,13 @@ the velocity non-parallel to the current force vector. The velocity of each atom is initialized to 0.0 by this style, at the beginning of a minimization. -Style {spin} is a damped spin dynamics with a variable -timestep as described in "(Tranchida)"_#Tranchida. +Style {spin} is a damped spin dynamics with an adaptive +timestep. See the "min/spin"_min_spin.html doc page for more information. Either the {quickmin} and {fire} styles are useful in the context of nudged elastic band (NEB) calculations via the "neb"_neb.html command. -The {spin} style is useful in the context of geodesic nudged -elastic band (GNEB) calculations via the "neb/spin"_neb_spin.html -command. - NOTE: The damped dynamic minimizers use whatever timestep you have defined via the "timestep"_timestep.html command. Often they will converge more quickly if you use a timestep about 10x larger than you diff --git a/doc/src/minimize.txt b/doc/src/minimize.txt index 00de86c5f5..ecf1ad0fcf 100644 --- a/doc/src/minimize.txt +++ b/doc/src/minimize.txt @@ -103,6 +103,13 @@ the line search fails because the step distance backtracks to 0.0 the number of outer iterations or timesteps exceeds {maxiter} the number of total force evaluations exceeds {maxeval} :ul +NOTE: the "minimization style"_min_style.html {spin} replaces +the force tolerance {ftol} by a torque tolerance. +The minimization procedure stops if the 2-norm (length) of the +global torque vector (defined as the cross product between the +spins and their precession vectors omega) is less than {ftol}, +or if any of the other criteria are met. + NOTE: You can also use the "fix halt"_fix_halt.html command to specify a general criterion for exiting a minimization, that is a calculation performed on the state of the current system, as defined by an diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 24c4480e04..a6c0430940 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -943,6 +943,10 @@ bigint AtomVecSpin::memory_usage() return bytes; } +/* ---------------------------------------------------------------------- + clear all forces (mech and mag) +------------------------------------------------------------------------- */ + void AtomVecSpin::force_clear(int /*n*/, size_t nbytes) { memset(&atom->f[0][0],0,3*nbytes); diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 6ccb692033..d065f38d16 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -170,7 +170,14 @@ void FixPrecessionSpin::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixPrecessionSpin::post_force(int /*vflag*/) +void FixPrecessionSpin::min_setup(int vflag) +{ + post_force(vflag); +} + +/* ---------------------------------------------------------------------- */ + +void FixPrecessionSpin::post_force(int vflag) { // update mag field with time (potential improvement) diff --git a/src/SPIN/fix_precession_spin.h b/src/SPIN/fix_precession_spin.h index 2fe6b5a673..1db4d32ae9 100644 --- a/src/SPIN/fix_precession_spin.h +++ b/src/SPIN/fix_precession_spin.h @@ -33,6 +33,7 @@ class FixPrecessionSpin : public Fix { int setmask(); void init(); void setup(int); + void min_setup(int); void post_force(int); void post_force_respa(int, int, int); void min_post_force(int); diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index ac8f22186e..99aa4ac3b7 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -102,7 +102,7 @@ void MinSpin::reset_vectors() { // atomic dof - // not really good size => sp is 4N vector + // size sp is 4N vector nvec = 4 * atom->nlocal; if (nvec) spvec = atom->sp[0]; @@ -132,7 +132,9 @@ int MinSpin::iterate(int maxiter) niter++; // optimize timestep accross processes / replicas - + // need a force calculation for timestep optimization + + energy_force(0); dts = evaluate_dt(); // apply damped precessional dynamics to the spins diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index f5d9a75020..728532a187 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -44,7 +44,6 @@ #include "timer.h" #include "memory.h" #include "error.h" -#include "force.h" #include "math_const.h" using namespace LAMMPS_NS; @@ -101,14 +100,22 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, spfinal[1] = buf_final[ii+1]; spfinal[2] = buf_final[ii+2]; - // circular initialization - // a better procedure may be developed - - initial_rotation(spinit,spfinal,fraction); - - sp[i][0] = spfinal[0]; - sp[i][1] = spfinal[1]; - sp[i][2] = spfinal[2]; + // interpolate intermediate spin states + + if (fraction == 0.0) { + sp[i][0] = spinit[0]; + sp[i][1] = spinit[1]; + sp[i][2] = spinit[2]; + } else if (fraction == 1.0) { + sp[i][0] = spfinal[0]; + sp[i][1] = spfinal[1]; + sp[i][2] = spfinal[2]; + } else { + initial_rotation(spinit,spfinal,fraction); + sp[i][0] = spfinal[0]; + sp[i][1] = spfinal[1]; + sp[i][2] = spfinal[2]; + } ii += 3; } @@ -499,7 +506,7 @@ void NEB_spin::readfile(char *file, int flag) for (j = 1; j < nwords; j++) values[j] = strtok(NULL," \t\n\r\f"); - // adjust atom coord based on replica fraction + // adjust spin coord based on replica fraction // for flag = 0, interpolate for intermediate and final replicas // for flag = 1, replace existing coord with new coord // ignore image flags of final x @@ -530,19 +537,24 @@ void NEB_spin::readfile(char *file, int flag) spfinal[0] = spx; spfinal[1] = spy; spfinal[2] = spz; - - printf("test spinit[0]:%g \n",sp[m][0]); - + // interpolate intermediate spin states - initial_rotation(spinit,spfinal,fraction); - - printf("test spfinal[0]:%g \n",spfinal[0]); - - sp[m][0] = spfinal[0]; - sp[m][1] = spfinal[1]; - sp[m][2] = spfinal[2]; sp[m][3] = musp; + if (fraction == 0.0) { + sp[m][0] = spinit[0]; + sp[m][1] = spinit[1]; + sp[m][2] = spinit[2]; + } else if (fraction == 1.0) { + sp[m][0] = spfinal[0]; + sp[m][1] = spfinal[1]; + sp[m][2] = spfinal[2]; + } else { + initial_rotation(spinit,spfinal,fraction); + sp[m][0] = spfinal[0]; + sp[m][1] = spfinal[1]; + sp[m][2] = spfinal[2]; + } } else { sp[m][3] = musp; x[m][0] = xx; @@ -560,8 +572,6 @@ void NEB_spin::readfile(char *file, int flag) nread += nchunk; } - printf("test sp[1][2]:%g \n",sp[1][2]); - // check that all atom IDs in file were found by a proc if (flag == 0) { @@ -605,6 +615,10 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) // implementing initial rotation using atan2 // this may not be a sufficient routine, need more accurate verifications + // interpolation only for intermediate replica + + if (fraction == 0.0 || fraction == 1.0) return; + // initial, final and inter ang. values double itheta,iphi,ftheta,fphi,ktheta,kphi; @@ -636,7 +650,7 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) spky = sin(ktheta)*sin(kphi); spkz = cos(kphi); - double knormsq = spkx*spkx+spky*spky+spkz*spkz; + double knormsq = spkx*spkx + spky*spky + spkz*spkz; if (knormsq != 0.0) iknorm = 1.0/sqrt(knormsq); @@ -696,9 +710,6 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) //spky *= iknorm; //spkz *= iknorm; - printf("init: %g %g %g \n",spix,spiy,spiz); - printf("fina: %g %g %g \n",spkx,spky,spkz); - sploc[0] = spkx; sploc[1] = spky; sploc[2] = spkz; diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 9b193f7e08..e54864e126 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -432,9 +432,9 @@ void PairSpinDmi::compute_dmi(int i, int j, double eij[3], double fmi[3], double dmiy = eij[2]*v_dmx[itype][jtype] - eij[0]*v_dmz[itype][jtype]; dmiz = eij[0]*v_dmy[itype][jtype] - eij[1]*v_dmx[itype][jtype]; - fmi[0] -= (spj[1]*dmiz - spj[2]*dmiy); - fmi[1] -= (spj[2]*dmix - spj[0]*dmiz); - fmi[2] -= (spj[0]*dmiy - spj[1]*dmix); + fmi[0] -= (dmiy*spj[2] - dmiz*spj[1]); + fmi[1] -= (dmiz*spj[0] - dmix*spj[2]); + fmi[2] -= (dmix*spj[1] - dmiy*spj[0]); } /* ---------------------------------------------------------------------- From 111ff4475e86419e21698fe7f950c2e589ba3ebe Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 25 Mar 2019 14:18:55 +0100 Subject: [PATCH 025/372] Pointer moved to reax lists --- src/USER-REAXC/pair_reaxc.cpp | 21 +- src/USER-REAXC/reaxc_allocate.cpp | 316 +++++++++++++++--------------- src/USER-REAXC/reaxc_allocate.h | 10 +- src/USER-REAXC/reaxc_ffield.cpp | 34 ++-- src/USER-REAXC/reaxc_init_md.cpp | 11 +- src/USER-REAXC/reaxc_list.cpp | 62 +++--- src/USER-REAXC/reaxc_list.h | 4 +- src/USER-REAXC/reaxc_lookup.cpp | 84 ++++---- src/USER-REAXC/reaxc_tool_box.cpp | 18 +- src/USER-REAXC/reaxc_tool_box.h | 6 +- src/USER-REAXC/reaxc_types.h | 4 + 11 files changed, 290 insertions(+), 280 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 24612a3a40..58142b122a 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -108,6 +108,8 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) system->bndry_cuts.ghost_cutoff = 0; system->my_atoms = NULL; system->pair_ptr = this; + system->error_ptr = this->lmp->error; + control->error_ptr = this->lmp->error; system->omp_active = 0; @@ -139,13 +141,13 @@ PairReaxC::~PairReaxC() if (control->tabulate ) Deallocate_Lookup_Tables( lmp, system); - if (control->hbond_cut > 0 ) Delete_List( lmp, lists+HBONDS, world); - Delete_List( lmp, lists+BONDS, world ); - Delete_List( lmp, lists+THREE_BODIES, world ); - Delete_List( lmp, lists+FAR_NBRS, world ); + if (control->hbond_cut > 0 ) Delete_List( lists+HBONDS, world); + Delete_List( lists+BONDS, world ); + Delete_List( lists+THREE_BODIES, world ); + Delete_List( lists+FAR_NBRS, world ); - DeAllocate_Workspace( lmp, control, workspace ); - DeAllocate_System( lmp, system ); + DeAllocate_Workspace( control, workspace ); + DeAllocate_System( system ); } memory->destroy( system ); @@ -437,13 +439,14 @@ void PairReaxC::setup( ) // initialize my data structures - PreAllocate_Space( lmp, system, control, workspace, world ); + PreAllocate_Space( system, control, workspace, world ); write_reax_atoms(); int num_nbrs = estimate_reax_lists(); - if(!Make_List(lmp, system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, + if(!Make_List(system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, lists+FAR_NBRS, world)) error->one(FLERR,"Pair reax/c problem in far neighbor list"); + (lists+FAR_NBRS)->error_ptr=lmp->error; write_reax_lists(); Initialize( lmp, system, control, data, workspace, &lists, out_control, @@ -466,7 +469,7 @@ void PairReaxC::setup( ) // check if I need to shrink/extend my data-structs - ReAllocate( lmp, system, control, data, workspace, &lists, mpi_data ); + ReAllocate( system, control, data, workspace, &lists, mpi_data ); } bigint local_ngroup = list->inum; diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index 2f970399f2..8784c854b5 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -43,7 +43,7 @@ using namespace LAMMPS_NS; important: we cannot know the exact number of atoms that will fall into a process's box throughout the whole simulation. therefore we need to make upper bound estimates for various data structures */ -int PreAllocate_Space( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * /*control*/, +int PreAllocate_Space( reax_system *system, control_params * /*control*/, storage * workspace, MPI_Comm comm ) { int mincap = system->mincap; @@ -55,7 +55,7 @@ int PreAllocate_Space( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_para system->total_cap = MAX( (int)(system->N * safezone), mincap ); system->my_atoms = (reax_atom*) - scalloc(lmp, system->total_cap, sizeof(reax_atom), "my_atoms", comm ); + scalloc(system->error_ptr, system->total_cap, sizeof(reax_atom), "my_atoms", comm ); // Nullify some arrays only used in omp styles // Should be safe to do here since called in pair->setup(); @@ -84,45 +84,45 @@ int Allocate_System( reax_system *system, int /*local_cap*/, int total_cap, } -void DeAllocate_System( LAMMPS_NS::LAMMPS *lmp, reax_system *system ) +void DeAllocate_System( reax_system *system ) { int i, j, k; int ntypes; reax_interaction *ff_params; - // dealloocate the atom list - sfree(lmp, system->my_atoms, "system->my_atoms" ); + // deallocate the atom list + sfree(system->error_ptr, system->my_atoms, "system->my_atoms" ); // deallocate the ffield parameters storage ff_params = &(system->reax_param); ntypes = ff_params->num_atom_types; - sfree(lmp, ff_params->gp.l, "ff:globals" ); + sfree(system->error_ptr, ff_params->gp.l, "ff:globals" ); for( i = 0; i < ntypes; ++i ) { for( j = 0; j < ntypes; ++j ) { for( k = 0; k < ntypes; ++k ) { - sfree(lmp, ff_params->fbp[i][j][k], "ff:fbp[i,j,k]" ); + sfree(system->error_ptr, ff_params->fbp[i][j][k], "ff:fbp[i,j,k]" ); } - sfree(lmp, ff_params->fbp[i][j], "ff:fbp[i,j]" ); - sfree(lmp, ff_params->thbp[i][j], "ff:thbp[i,j]" ); - sfree(lmp, ff_params->hbp[i][j], "ff:hbp[i,j]" ); + sfree(system->error_ptr, ff_params->fbp[i][j], "ff:fbp[i,j]" ); + sfree(system->error_ptr, ff_params->thbp[i][j], "ff:thbp[i,j]" ); + sfree(system->error_ptr, ff_params->hbp[i][j], "ff:hbp[i,j]" ); } - sfree(lmp, ff_params->fbp[i], "ff:fbp[i]" ); - sfree(lmp, ff_params->thbp[i], "ff:thbp[i]" ); - sfree(lmp, ff_params->hbp[i], "ff:hbp[i]" ); - sfree(lmp, ff_params->tbp[i], "ff:tbp[i]" ); + sfree(system->error_ptr, ff_params->fbp[i], "ff:fbp[i]" ); + sfree(system->error_ptr, ff_params->thbp[i], "ff:thbp[i]" ); + sfree(system->error_ptr, ff_params->hbp[i], "ff:hbp[i]" ); + sfree(system->error_ptr, ff_params->tbp[i], "ff:tbp[i]" ); } - sfree(lmp, ff_params->fbp, "ff:fbp" ); - sfree(lmp, ff_params->thbp, "ff:thbp" ); - sfree(lmp, ff_params->hbp, "ff:hbp" ); - sfree(lmp, ff_params->tbp, "ff:tbp" ); - sfree(lmp, ff_params->sbp, "ff:sbp" ); + sfree(system->error_ptr, ff_params->fbp, "ff:fbp" ); + sfree(system->error_ptr, ff_params->thbp, "ff:thbp" ); + sfree(system->error_ptr, ff_params->hbp, "ff:hbp" ); + sfree(system->error_ptr, ff_params->tbp, "ff:tbp" ); + sfree(system->error_ptr, ff_params->sbp, "ff:sbp" ); } /************* workspace *************/ -void DeAllocate_Workspace( LAMMPS_NS::LAMMPS* lmp, control_params * /*control*/, storage *workspace ) +void DeAllocate_Workspace( control_params * control, storage *workspace ) { int i; @@ -133,84 +133,84 @@ void DeAllocate_Workspace( LAMMPS_NS::LAMMPS* lmp, control_params * /*control*/, /* communication storage */ for( i = 0; i < MAX_NBRS; ++i ) { - sfree(lmp, workspace->tmp_dbl[i], "tmp_dbl[i]" ); - sfree(lmp, workspace->tmp_rvec[i], "tmp_rvec[i]" ); - sfree(lmp, workspace->tmp_rvec2[i], "tmp_rvec2[i]" ); + sfree(control->error_ptr, workspace->tmp_dbl[i], "tmp_dbl[i]" ); + sfree(control->error_ptr, workspace->tmp_rvec[i], "tmp_rvec[i]" ); + sfree(control->error_ptr, workspace->tmp_rvec2[i], "tmp_rvec2[i]" ); } /* bond order storage */ - sfree(lmp, workspace->within_bond_box, "skin" ); - sfree(lmp, workspace->total_bond_order, "total_bo" ); - sfree(lmp, workspace->Deltap, "Deltap" ); - sfree(lmp, workspace->Deltap_boc, "Deltap_boc" ); - sfree(lmp, workspace->dDeltap_self, "dDeltap_self" ); - sfree(lmp, workspace->Delta, "Delta" ); - sfree(lmp, workspace->Delta_lp, "Delta_lp" ); - sfree(lmp, workspace->Delta_lp_temp, "Delta_lp_temp" ); - sfree(lmp, workspace->dDelta_lp, "dDelta_lp" ); - sfree(lmp, workspace->dDelta_lp_temp, "dDelta_lp_temp" ); - sfree(lmp, workspace->Delta_e, "Delta_e" ); - sfree(lmp, workspace->Delta_boc, "Delta_boc" ); - sfree(lmp, workspace->Delta_val, "Delta_val" ); - sfree(lmp, workspace->nlp, "nlp" ); - sfree(lmp, workspace->nlp_temp, "nlp_temp" ); - sfree(lmp, workspace->Clp, "Clp" ); - sfree(lmp, workspace->vlpex, "vlpex" ); - sfree(lmp, workspace->bond_mark, "bond_mark" ); - sfree(lmp, workspace->done_after, "done_after" ); + sfree(control->error_ptr, workspace->within_bond_box, "skin" ); + sfree(control->error_ptr, workspace->total_bond_order, "total_bo" ); + sfree(control->error_ptr, workspace->Deltap, "Deltap" ); + sfree(control->error_ptr, workspace->Deltap_boc, "Deltap_boc" ); + sfree(control->error_ptr, workspace->dDeltap_self, "dDeltap_self" ); + sfree(control->error_ptr, workspace->Delta, "Delta" ); + sfree(control->error_ptr, workspace->Delta_lp, "Delta_lp" ); + sfree(control->error_ptr, workspace->Delta_lp_temp, "Delta_lp_temp" ); + sfree(control->error_ptr, workspace->dDelta_lp, "dDelta_lp" ); + sfree(control->error_ptr, workspace->dDelta_lp_temp, "dDelta_lp_temp" ); + sfree(control->error_ptr, workspace->Delta_e, "Delta_e" ); + sfree(control->error_ptr, workspace->Delta_boc, "Delta_boc" ); + sfree(control->error_ptr, workspace->Delta_val, "Delta_val" ); + sfree(control->error_ptr, workspace->nlp, "nlp" ); + sfree(control->error_ptr, workspace->nlp_temp, "nlp_temp" ); + sfree(control->error_ptr, workspace->Clp, "Clp" ); + sfree(control->error_ptr, workspace->vlpex, "vlpex" ); + sfree(control->error_ptr, workspace->bond_mark, "bond_mark" ); + sfree(control->error_ptr, workspace->done_after, "done_after" ); /* QEq storage */ - sfree(lmp, workspace->Hdia_inv, "Hdia_inv" ); - sfree(lmp, workspace->b_s, "b_s" ); - sfree(lmp, workspace->b_t, "b_t" ); - sfree(lmp, workspace->b_prc, "b_prc" ); - sfree(lmp, workspace->b_prm, "b_prm" ); - sfree(lmp, workspace->s, "s" ); - sfree(lmp, workspace->t, "t" ); - sfree(lmp, workspace->droptol, "droptol" ); - sfree(lmp, workspace->b, "b" ); - sfree(lmp, workspace->x, "x" ); + sfree(control->error_ptr, workspace->Hdia_inv, "Hdia_inv" ); + sfree(control->error_ptr, workspace->b_s, "b_s" ); + sfree(control->error_ptr, workspace->b_t, "b_t" ); + sfree(control->error_ptr, workspace->b_prc, "b_prc" ); + sfree(control->error_ptr, workspace->b_prm, "b_prm" ); + sfree(control->error_ptr, workspace->s, "s" ); + sfree(control->error_ptr, workspace->t, "t" ); + sfree(control->error_ptr, workspace->droptol, "droptol" ); + sfree(control->error_ptr, workspace->b, "b" ); + sfree(control->error_ptr, workspace->x, "x" ); /* GMRES storage */ for( i = 0; i < RESTART+1; ++i ) { - sfree(lmp, workspace->h[i], "h[i]" ); - sfree(lmp, workspace->v[i], "v[i]" ); + sfree(control->error_ptr, workspace->h[i], "h[i]" ); + sfree(control->error_ptr, workspace->v[i], "v[i]" ); } - sfree(lmp, workspace->h, "h" ); - sfree(lmp, workspace->v, "v" ); - sfree(lmp, workspace->y, "y" ); - sfree(lmp, workspace->z, "z" ); - sfree(lmp, workspace->g, "g" ); - sfree(lmp, workspace->hs, "hs" ); - sfree(lmp, workspace->hc, "hc" ); + sfree(control->error_ptr, workspace->h, "h" ); + sfree(control->error_ptr, workspace->v, "v" ); + sfree(control->error_ptr, workspace->y, "y" ); + sfree(control->error_ptr, workspace->z, "z" ); + sfree(control->error_ptr, workspace->g, "g" ); + sfree(control->error_ptr, workspace->hs, "hs" ); + sfree(control->error_ptr, workspace->hc, "hc" ); /* CG storage */ - sfree(lmp, workspace->r, "r" ); - sfree(lmp, workspace->d, "d" ); - sfree(lmp, workspace->q, "q" ); - sfree(lmp, workspace->p, "p" ); - sfree(lmp, workspace->r2, "r2" ); - sfree(lmp, workspace->d2, "d2" ); - sfree(lmp, workspace->q2, "q2" ); - sfree(lmp, workspace->p2, "p2" ); + sfree(control->error_ptr, workspace->r, "r" ); + sfree(control->error_ptr, workspace->d, "d" ); + sfree(control->error_ptr, workspace->q, "q" ); + sfree(control->error_ptr, workspace->p, "p" ); + sfree(control->error_ptr, workspace->r2, "r2" ); + sfree(control->error_ptr, workspace->d2, "d2" ); + sfree(control->error_ptr, workspace->q2, "q2" ); + sfree(control->error_ptr, workspace->p2, "p2" ); /* integrator storage */ - sfree(lmp, workspace->v_const, "v_const" ); + sfree(control->error_ptr, workspace->v_const, "v_const" ); /* force related storage */ - sfree(lmp, workspace->f, "f" ); - sfree(lmp, workspace->CdDelta, "CdDelta" ); + sfree(control->error_ptr, workspace->f, "f" ); + sfree(control->error_ptr, workspace->CdDelta, "CdDelta" ); /* reductions */ #ifdef LMP_USER_OMP - if (workspace->CdDeltaReduction) sfree(lmp, workspace->CdDeltaReduction, "cddelta_reduce" ); - if (workspace->forceReduction) sfree(lmp, workspace->forceReduction, "f_reduce" ); - if (workspace->valence_angle_atom_myoffset) sfree(lmp, workspace->valence_angle_atom_myoffset, "valence_angle_atom_myoffset"); - if (workspace->my_ext_pressReduction) sfree(lmp, workspace->my_ext_pressReduction, "ext_press_reduce"); + if (workspace->CdDeltaReduction) sfree(control->error_ptr, workspace->CdDeltaReduction, "cddelta_reduce" ); + if (workspace->forceReduction) sfree(control->error_ptr, workspace->forceReduction, "f_reduce" ); + if (workspace->valence_angle_atom_myoffset) sfree(control->error_ptr, workspace->valence_angle_atom_myoffset, "valence_angle_atom_myoffset"); + if (workspace->my_ext_pressReduction) sfree(control->error_ptr, workspace->my_ext_pressReduction, "ext_press_reduce"); #endif } -int Allocate_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system * /*system*/, control_params * control, +int Allocate_Workspace( reax_system * /*system*/, control_params * control, storage *workspace, int local_cap, int total_cap, MPI_Comm comm, char * /*msg*/ ) { @@ -224,94 +224,94 @@ int Allocate_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system * /*system*/, contro /* communication storage */ for( i = 0; i < MAX_NBRS; ++i ) { workspace->tmp_dbl[i] = (double*) - scalloc(lmp, total_cap, sizeof(double), "tmp_dbl", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "tmp_dbl", comm ); workspace->tmp_rvec[i] = (rvec*) - scalloc(lmp, total_cap, sizeof(rvec), "tmp_rvec", comm ); + scalloc(control->error_ptr, total_cap, sizeof(rvec), "tmp_rvec", comm ); workspace->tmp_rvec2[i] = (rvec2*) - scalloc(lmp, total_cap, sizeof(rvec2), "tmp_rvec2", comm ); + scalloc(control->error_ptr, total_cap, sizeof(rvec2), "tmp_rvec2", comm ); } /* bond order related storage */ workspace->within_bond_box = (int*) - scalloc(lmp, total_cap, sizeof(int), "skin", comm ); - workspace->total_bond_order = (double*) smalloc(lmp, total_real, "total_bo", comm ); - workspace->Deltap = (double*) smalloc(lmp, total_real, "Deltap", comm ); - workspace->Deltap_boc = (double*) smalloc(lmp, total_real, "Deltap_boc", comm ); - workspace->dDeltap_self = (rvec*) smalloc(lmp, total_rvec, "dDeltap_self", comm ); - workspace->Delta = (double*) smalloc(lmp, total_real, "Delta", comm ); - workspace->Delta_lp = (double*) smalloc(lmp, total_real, "Delta_lp", comm ); + scalloc(control->error_ptr, total_cap, sizeof(int), "skin", comm ); + workspace->total_bond_order = (double*) smalloc(control->error_ptr, total_real, "total_bo", comm ); + workspace->Deltap = (double*) smalloc(control->error_ptr, total_real, "Deltap", comm ); + workspace->Deltap_boc = (double*) smalloc(control->error_ptr, total_real, "Deltap_boc", comm ); + workspace->dDeltap_self = (rvec*) smalloc(control->error_ptr, total_rvec, "dDeltap_self", comm ); + workspace->Delta = (double*) smalloc(control->error_ptr, total_real, "Delta", comm ); + workspace->Delta_lp = (double*) smalloc(control->error_ptr, total_real, "Delta_lp", comm ); workspace->Delta_lp_temp = (double*) - smalloc(lmp, total_real, "Delta_lp_temp", comm ); - workspace->dDelta_lp = (double*) smalloc(lmp, total_real, "dDelta_lp", comm ); + smalloc(control->error_ptr, total_real, "Delta_lp_temp", comm ); + workspace->dDelta_lp = (double*) smalloc(control->error_ptr, total_real, "dDelta_lp", comm ); workspace->dDelta_lp_temp = (double*) - smalloc(lmp, total_real, "dDelta_lp_temp", comm ); - workspace->Delta_e = (double*) smalloc(lmp, total_real, "Delta_e", comm ); - workspace->Delta_boc = (double*) smalloc(lmp, total_real, "Delta_boc", comm ); - workspace->Delta_val = (double*) smalloc(lmp, total_real, "Delta_val", comm ); - workspace->nlp = (double*) smalloc(lmp, total_real, "nlp", comm ); - workspace->nlp_temp = (double*) smalloc(lmp, total_real, "nlp_temp", comm ); - workspace->Clp = (double*) smalloc(lmp, total_real, "Clp", comm ); - workspace->vlpex = (double*) smalloc(lmp, total_real, "vlpex", comm ); + smalloc(control->error_ptr, total_real, "dDelta_lp_temp", comm ); + workspace->Delta_e = (double*) smalloc(control->error_ptr, total_real, "Delta_e", comm ); + workspace->Delta_boc = (double*) smalloc(control->error_ptr, total_real, "Delta_boc", comm ); + workspace->Delta_val = (double*) smalloc(control->error_ptr, total_real, "Delta_val", comm ); + workspace->nlp = (double*) smalloc(control->error_ptr, total_real, "nlp", comm ); + workspace->nlp_temp = (double*) smalloc(control->error_ptr, total_real, "nlp_temp", comm ); + workspace->Clp = (double*) smalloc(control->error_ptr, total_real, "Clp", comm ); + workspace->vlpex = (double*) smalloc(control->error_ptr, total_real, "vlpex", comm ); workspace->bond_mark = (int*) - scalloc(lmp, total_cap, sizeof(int), "bond_mark", comm ); + scalloc(control->error_ptr, total_cap, sizeof(int), "bond_mark", comm ); workspace->done_after = (int*) - scalloc(lmp, total_cap, sizeof(int), "done_after", comm ); + scalloc(control->error_ptr, total_cap, sizeof(int), "done_after", comm ); /* QEq storage */ workspace->Hdia_inv = (double*) - scalloc(lmp, total_cap, sizeof(double), "Hdia_inv", comm ); - workspace->b_s = (double*) scalloc(lmp, total_cap, sizeof(double), "b_s", comm ); - workspace->b_t = (double*) scalloc(lmp, total_cap, sizeof(double), "b_t", comm ); - workspace->b_prc = (double*) scalloc(lmp, total_cap, sizeof(double), "b_prc", comm ); - workspace->b_prm = (double*) scalloc(lmp, total_cap, sizeof(double), "b_prm", comm ); - workspace->s = (double*) scalloc(lmp, total_cap, sizeof(double), "s", comm ); - workspace->t = (double*) scalloc(lmp, total_cap, sizeof(double), "t", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "Hdia_inv", comm ); + workspace->b_s = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_s", comm ); + workspace->b_t = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_t", comm ); + workspace->b_prc = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_prc", comm ); + workspace->b_prm = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_prm", comm ); + workspace->s = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "s", comm ); + workspace->t = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "t", comm ); workspace->droptol = (double*) - scalloc(lmp, total_cap, sizeof(double), "droptol", comm ); - workspace->b = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "b", comm ); - workspace->x = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "x", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "droptol", comm ); + workspace->b = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "b", comm ); + workspace->x = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "x", comm ); /* GMRES storage */ - workspace->y = (double*) scalloc(lmp, RESTART+1, sizeof(double), "y", comm ); - workspace->z = (double*) scalloc(lmp, RESTART+1, sizeof(double), "z", comm ); - workspace->g = (double*) scalloc(lmp, RESTART+1, sizeof(double), "g", comm ); - workspace->h = (double**) scalloc(lmp, RESTART+1, sizeof(double*), "h", comm ); - workspace->hs = (double*) scalloc(lmp, RESTART+1, sizeof(double), "hs", comm ); - workspace->hc = (double*) scalloc(lmp, RESTART+1, sizeof(double), "hc", comm ); - workspace->v = (double**) scalloc(lmp, RESTART+1, sizeof(double*), "v", comm ); + workspace->y = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "y", comm ); + workspace->z = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "z", comm ); + workspace->g = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "g", comm ); + workspace->h = (double**) scalloc(control->error_ptr, RESTART+1, sizeof(double*), "h", comm ); + workspace->hs = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "hs", comm ); + workspace->hc = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "hc", comm ); + workspace->v = (double**) scalloc(control->error_ptr, RESTART+1, sizeof(double*), "v", comm ); for( i = 0; i < RESTART+1; ++i ) { - workspace->h[i] = (double*) scalloc(lmp, RESTART+1, sizeof(double), "h[i]", comm ); - workspace->v[i] = (double*) scalloc(lmp, total_cap, sizeof(double), "v[i]", comm ); + workspace->h[i] = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "h[i]", comm ); + workspace->v[i] = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "v[i]", comm ); } /* CG storage */ - workspace->r = (double*) scalloc(lmp, total_cap, sizeof(double), "r", comm ); - workspace->d = (double*) scalloc(lmp, total_cap, sizeof(double), "d", comm ); - workspace->q = (double*) scalloc(lmp, total_cap, sizeof(double), "q", comm ); - workspace->p = (double*) scalloc(lmp, total_cap, sizeof(double), "p", comm ); - workspace->r2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "r2", comm ); - workspace->d2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "d2", comm ); - workspace->q2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "q2", comm ); - workspace->p2 = (rvec2*) scalloc(lmp, total_cap, sizeof(rvec2), "p2", comm ); + workspace->r = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "r", comm ); + workspace->d = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "d", comm ); + workspace->q = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "q", comm ); + workspace->p = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "p", comm ); + workspace->r2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "r2", comm ); + workspace->d2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "d2", comm ); + workspace->q2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "q2", comm ); + workspace->p2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "p2", comm ); /* integrator storage */ - workspace->v_const = (rvec*) smalloc(lmp, local_rvec, "v_const", comm ); + workspace->v_const = (rvec*) smalloc(control->error_ptr, local_rvec, "v_const", comm ); /* force related storage */ - workspace->f = (rvec*) scalloc(lmp, total_cap, sizeof(rvec), "f", comm ); + workspace->f = (rvec*) scalloc(control->error_ptr, total_cap, sizeof(rvec), "f", comm ); workspace->CdDelta = (double*) - scalloc(lmp, total_cap, sizeof(double), "CdDelta", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "CdDelta", comm ); // storage for reductions with multiple threads #ifdef LMP_USER_OMP - workspace->CdDeltaReduction = (double *) scalloc(lmp, sizeof(double), total_cap*control->nthreads, + workspace->CdDeltaReduction = (double *) scalloc(control->error_ptr, sizeof(double), total_cap*control->nthreads, "cddelta_reduce", comm); - workspace->forceReduction = (rvec *) scalloc(lmp, sizeof(rvec), total_cap*control->nthreads, + workspace->forceReduction = (rvec *) scalloc(control->error_ptr, sizeof(rvec), total_cap*control->nthreads, "forceReduction", comm); - workspace->valence_angle_atom_myoffset = (int *) scalloc(lmp, sizeof(int), total_cap, "valence_angle_atom_myoffset", comm); + workspace->valence_angle_atom_myoffset = (int *) scalloc(control->error_ptr, sizeof(int), total_cap, "valence_angle_atom_myoffset", comm); workspace->my_ext_pressReduction = (rvec *) calloc(sizeof(rvec), control->nthreads); #else LMP_UNUSED_PARAM(control); @@ -321,17 +321,17 @@ int Allocate_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system * /*system*/, contro } -static void Reallocate_Neighbor_List( LAMMPS* lmp, reax_list *far_nbrs, int n, +static void Reallocate_Neighbor_List( reax_list *far_nbrs, int n, int num_intrs, MPI_Comm comm ) { - Delete_List( lmp, far_nbrs, comm ); - if(!Make_List( lmp, n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs, comm )){ - lmp->error->one(FLERR,"Problem in initializing far neighbors list"); + Delete_List( far_nbrs, comm ); + if(!Make_List( n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs, comm )){ + far_nbrs->error_ptr->one(FLERR,"Problem in initializing far neighbors list"); } } -static int Reallocate_HBonds_List( LAMMPS *lmp, reax_system *system, reax_list *hbonds, +static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, MPI_Comm comm ) { int i, total_hbonds; @@ -346,16 +346,16 @@ static int Reallocate_HBonds_List( LAMMPS *lmp, reax_system *system, reax_list * } total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); - Delete_List( lmp, hbonds, comm ); - if (!Make_List( lmp, system->Hcap, total_hbonds, TYP_HBOND, hbonds, comm )) { - lmp->error->one(FLERR, "Not enough space for hydrogen bonds list"); + Delete_List( hbonds, comm ); + if (!Make_List( system->Hcap, total_hbonds, TYP_HBOND, hbonds, comm )) { + hbonds->error_ptr->one(FLERR, "Not enough space for hydrogen bonds list"); } return total_hbonds; } -static int Reallocate_Bonds_List( LAMMPS *lmp, reax_system *system, reax_list *bonds, +static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, int *total_bonds, int *est_3body, MPI_Comm comm ) { @@ -375,12 +375,12 @@ static int Reallocate_Bonds_List( LAMMPS *lmp, reax_system *system, reax_list *b #ifdef LMP_USER_OMP if (system->omp_active) for (i = 0; i < bonds->num_intrs; ++i) - sfree(lmp, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); + sfree(system->error_ptr, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); #endif - Delete_List( lmp, bonds, comm ); - if(!Make_List(lmp, system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) { - lmp->error->one(FLERR, "Not enough space for bonds list"); + Delete_List( bonds, comm ); + if(!Make_List(system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) { + bonds->error_ptr->one(FLERR, "Not enough space for bonds list"); } #ifdef LMP_USER_OMP @@ -393,14 +393,14 @@ static int Reallocate_Bonds_List( LAMMPS *lmp, reax_system *system, reax_list *b if (system->omp_active) for (i = 0; i < bonds->num_intrs; ++i) bonds->select.bond_list[i].bo_data.CdboReduction = - (double*) smalloc(lmp, sizeof(double)*nthreads, "CdboReduction", comm); + (double*) smalloc(system->error_ptr, sizeof(double)*nthreads, "CdboReduction", comm); #endif return SUCCESS; } -void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, +void ReAllocate( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, mpi_datatypes *mpi_data ) { @@ -436,17 +436,17 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, if (ret != SUCCESS) { char errmsg[128]; snprintf(errmsg, 128, "Not enough space for atom_list: total_cap=%d", system->total_cap); - lmp->error->one(FLERR, errmsg); + system->error_ptr->one(FLERR, errmsg); } /* workspace */ - DeAllocate_Workspace( lmp, control, workspace ); - ret = Allocate_Workspace( lmp, system, control, workspace, system->local_cap, + DeAllocate_Workspace( control, workspace ); + ret = Allocate_Workspace( system, control, workspace, system->local_cap, system->total_cap, comm, msg ); if (ret != SUCCESS) { char errmsg[128]; snprintf(errmsg, 128, "Not enough space for workspace: local_cap=%d total_cap=%d", system->local_cap, system->total_cap); - lmp->error->one(FLERR, errmsg); + system->error_ptr->one(FLERR, errmsg); } } @@ -460,13 +460,13 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, if (realloc->num_far > far_nbrs->num_intrs) { char errmsg[128]; snprintf(errmsg, 128, "step%d-ran out of space on far_nbrs: top=%d, max=%d", data->step, realloc->num_far, far_nbrs->num_intrs); - lmp->error->one(FLERR, errmsg); + system->error_ptr->one(FLERR, errmsg); } newsize = static_cast (MAX( realloc->num_far*safezone, mincap*MIN_NBRS )); - Reallocate_Neighbor_List( lmp, far_nbrs, system->total_cap, newsize, comm ); + Reallocate_Neighbor_List( far_nbrs, system->total_cap, newsize, comm ); realloc->num_far = 0; } } @@ -481,7 +481,7 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, } if (Hflag || realloc->hbonds) { - ret = Reallocate_HBonds_List( lmp, system, (*lists)+HBONDS, comm ); + ret = Reallocate_HBonds_List( system, (*lists)+HBONDS, comm ); realloc->hbonds = 0; } } @@ -489,7 +489,7 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, /* bonds list */ num_bonds = est_3body = -1; if (Nflag || realloc->bonds) { - Reallocate_Bonds_List( lmp, system, (*lists)+BONDS, &num_bonds, + Reallocate_Bonds_List( system, (*lists)+BONDS, &num_bonds, &est_3body, comm ); realloc->bonds = 0; realloc->num_3body = MAX( realloc->num_3body, est_3body ) * 2; @@ -497,16 +497,16 @@ void ReAllocate( LAMMPS *lmp, reax_system *system, control_params *control, /* 3-body list */ if (realloc->num_3body > 0) { - Delete_List( lmp, (*lists)+THREE_BODIES, comm ); + Delete_List( (*lists)+THREE_BODIES, comm ); if (num_bonds == -1) num_bonds = ((*lists)+BONDS)->num_intrs; realloc->num_3body = (int)(MAX(realloc->num_3body*safezone, MIN_3BODIES)); - if( !Make_List( lmp, num_bonds, realloc->num_3body, TYP_THREE_BODY, + if( !Make_List( num_bonds, realloc->num_3body, TYP_THREE_BODY, (*lists)+THREE_BODIES, comm ) ) { - lmp->error->one(FLERR, "Problem in initializing angles list"); + system->error_ptr->one(FLERR, "Problem in initializing angles list"); } realloc->num_3body = -1; } diff --git a/src/USER-REAXC/reaxc_allocate.h b/src/USER-REAXC/reaxc_allocate.h index 9f009b0916..f813204006 100644 --- a/src/USER-REAXC/reaxc_allocate.h +++ b/src/USER-REAXC/reaxc_allocate.h @@ -33,15 +33,15 @@ #include "error.h" using namespace LAMMPS_NS; -int PreAllocate_Space( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, storage*, MPI_Comm ); +int PreAllocate_Space( reax_system*, control_params*, storage*, MPI_Comm ); int Allocate_System( reax_system*, int, int, char* ); -void DeAllocate_System( LAMMPS_NS::LAMMPS*, reax_system* ); +void DeAllocate_System( reax_system* ); -int Allocate_Workspace( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, storage*, +int Allocate_Workspace( reax_system*, control_params*, storage*, int, int, MPI_Comm, char* ); -void DeAllocate_Workspace( LAMMPS_NS::LAMMPS*, control_params*, storage* ); +void DeAllocate_Workspace( control_params*, storage* ); -void ReAllocate( LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, +void ReAllocate( reax_system*, control_params*, simulation_data*, storage*, reax_list**, mpi_datatypes* ); #endif diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 6096e3e614..8316c188b3 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -99,54 +99,54 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Allocating structures in reax_interaction */ reax->sbp = (single_body_parameters*) - scalloc(lmp, reax->num_atom_types, sizeof(single_body_parameters), "sbp", + scalloc(lmp->error, reax->num_atom_types, sizeof(single_body_parameters), "sbp", comm ); reax->tbp = (two_body_parameters**) - scalloc(lmp, reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); reax->thbp= (three_body_header***) - scalloc(lmp, reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); reax->hbp = (hbond_parameters***) - scalloc(lmp, reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); reax->fbp = (four_body_header****) - scalloc(lmp, reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); tor_flag = (char****) - scalloc(lmp, reax->num_atom_types, sizeof(char***), "tor_flag", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(char***), "tor_flag", comm ); for( i = 0; i < reax->num_atom_types; i++ ) { reax->tbp[i] = (two_body_parameters*) - scalloc(lmp, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", + scalloc(lmp->error, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", comm ); reax->thbp[i]= (three_body_header**) - scalloc(lmp, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", + scalloc(lmp->error, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", comm ); reax->hbp[i] = (hbond_parameters**) - scalloc(lmp, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", + scalloc(lmp->error, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", comm ); reax->fbp[i] = (four_body_header***) - scalloc(lmp, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", + scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", comm ); tor_flag[i] = (char***) - scalloc(lmp, reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); for( j = 0; j < reax->num_atom_types; j++ ) { reax->thbp[i][j]= (three_body_header*) - scalloc(lmp, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", + scalloc(lmp->error, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", comm ); reax->hbp[i][j] = (hbond_parameters*) - scalloc(lmp, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", + scalloc(lmp->error, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", comm ); reax->fbp[i][j] = (four_body_header**) - scalloc(lmp, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", + scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", comm ); tor_flag[i][j] = (char**) - scalloc(lmp, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); + scalloc(lmp->error, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); for (k=0; k < reax->num_atom_types; k++) { reax->fbp[i][j][k] = (four_body_header*) - scalloc(lmp, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", + scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", comm ); tor_flag[i][j][k] = (char*) - scalloc(lmp, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", + scalloc(lmp->error, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", comm ); } } diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 6ee68d6c46..8c60db0846 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -127,7 +127,7 @@ int Init_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params { int ret; - ret = Allocate_Workspace( lmp, system, control, workspace, + ret = Allocate_Workspace( system, control, workspace, system->local_cap, system->total_cap, comm, msg ); if (ret != SUCCESS) return ret; @@ -181,10 +181,11 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, } total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); - if( !Make_List( lmp, system->Hcap, total_hbonds, TYP_HBOND, + if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, *lists+HBONDS, comm ) ) { lmp->error->one(FLERR, "Not enough space for hbonds list."); } + (*lists+HBONDS)->error_ptr = system->error_ptr; } total_bonds = 0; @@ -194,17 +195,19 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, } bond_cap = (int)(MAX( total_bonds*safezone, mincap*MIN_BONDS )); - if( !Make_List( lmp, system->total_cap, bond_cap, TYP_BOND, + if( !Make_List( system->total_cap, bond_cap, TYP_BOND, *lists+BONDS, comm ) ) { lmp->error->one(FLERR, "Not enough space for bonds list."); } + (*lists+BONDS)->error_ptr = system->error_ptr; /* 3bodies list */ cap_3body = (int)(MAX( num_3body*safezone, MIN_3BODIES )); - if( !Make_List( lmp, bond_cap, cap_3body, TYP_THREE_BODY, + if( !Make_List( bond_cap, cap_3body, TYP_THREE_BODY, *lists+THREE_BODIES, comm ) ){ lmp->error->one(FLERR,"Problem in initializing angles list."); } + (*lists+THREE_BODIES)->error_ptr = system->error_ptr; free( hb_top ); free( bond_top ); diff --git a/src/USER-REAXC/reaxc_list.cpp b/src/USER-REAXC/reaxc_list.cpp index 5d4ab2f3c8..f103e520e8 100644 --- a/src/USER-REAXC/reaxc_list.cpp +++ b/src/USER-REAXC/reaxc_list.cpp @@ -29,118 +29,118 @@ #include "reaxc_tool_box.h" /************* allocate list space ******************/ -int Make_List( LAMMPS_NS::LAMMPS *lmp, int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) +int Make_List( int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) { l->allocated = 1; l->n = n; l->num_intrs = num_intrs; - if (l->index) sfree(lmp, l->index, "list:index"); - if (l->end_index) sfree(lmp, l->end_index, "list:end_index"); - l->index = (int*) smalloc(lmp, n * sizeof(int), "list:index", comm ); - l->end_index = (int*) smalloc(lmp, n * sizeof(int), "list:end_index", comm ); + if (l->index) sfree(l->error_ptr, l->index, "list:index"); + if (l->end_index) sfree(l->error_ptr, l->end_index, "list:end_index"); + l->index = (int*) smalloc(l->error_ptr, n * sizeof(int), "list:index", comm ); + l->end_index = (int*) smalloc(l->error_ptr, n * sizeof(int), "list:end_index", comm ); l->type = type; switch(l->type) { case TYP_VOID: - if (l->select.v) sfree(lmp, l->select.v, "list:v"); - l->select.v = (void*) smalloc(lmp, l->num_intrs * sizeof(void*), "list:v", comm); + if (l->select.v) sfree(l->error_ptr, l->select.v, "list:v"); + l->select.v = (void*) smalloc(l->error_ptr, l->num_intrs * sizeof(void*), "list:v", comm); break; case TYP_THREE_BODY: - if (l->select.three_body_list) sfree(lmp, l->select.three_body_list,"list:three_bodies"); + if (l->select.three_body_list) sfree(l->error_ptr, l->select.three_body_list,"list:three_bodies"); l->select.three_body_list = (three_body_interaction_data*) - smalloc(lmp, l->num_intrs * sizeof(three_body_interaction_data), + smalloc(l->error_ptr, l->num_intrs * sizeof(three_body_interaction_data), "list:three_bodies", comm ); break; case TYP_BOND: - if (l->select.bond_list) sfree(lmp, l->select.bond_list,"list:bonds"); + if (l->select.bond_list) sfree(l->error_ptr, l->select.bond_list,"list:bonds"); l->select.bond_list = (bond_data*) - smalloc(lmp, l->num_intrs * sizeof(bond_data), "list:bonds", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(bond_data), "list:bonds", comm ); break; case TYP_DBO: - if (l->select.dbo_list) sfree(lmp, l->select.dbo_list,"list:dbonds"); + if (l->select.dbo_list) sfree(l->error_ptr, l->select.dbo_list,"list:dbonds"); l->select.dbo_list = (dbond_data*) - smalloc(lmp, l->num_intrs * sizeof(dbond_data), "list:dbonds", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(dbond_data), "list:dbonds", comm ); break; case TYP_DDELTA: - if (l->select.dDelta_list) sfree(lmp, l->select.dDelta_list,"list:dDeltas"); + if (l->select.dDelta_list) sfree(l->error_ptr, l->select.dDelta_list,"list:dDeltas"); l->select.dDelta_list = (dDelta_data*) - smalloc(lmp, l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm ); break; case TYP_FAR_NEIGHBOR: - if (l->select.far_nbr_list) sfree(lmp, l->select.far_nbr_list,"list:far_nbrs"); + if (l->select.far_nbr_list) sfree(l->error_ptr, l->select.far_nbr_list,"list:far_nbrs"); l->select.far_nbr_list = (far_neighbor_data*) - smalloc(lmp, l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm); + smalloc(l->error_ptr, l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm); break; case TYP_HBOND: - if (l->select.hbond_list) sfree(lmp, l->select.hbond_list,"list:hbonds"); + if (l->select.hbond_list) sfree(l->error_ptr, l->select.hbond_list,"list:hbonds"); l->select.hbond_list = (hbond_data*) - smalloc(lmp, l->num_intrs * sizeof(hbond_data), "list:hbonds", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(hbond_data), "list:hbonds", comm ); break; default: char errmsg[128]; snprintf(errmsg, 128, "No %d list type defined", l->type); - lmp->error->all(FLERR,errmsg); + l->error_ptr->all(FLERR,errmsg); } return SUCCESS; } -void Delete_List( LAMMPS_NS::LAMMPS *lmp, reax_list *l, MPI_Comm comm ) +void Delete_List( reax_list *l, MPI_Comm comm ) { if (l->allocated == 0) return; l->allocated = 0; - sfree(lmp, l->index, "list:index" ); - sfree(lmp, l->end_index, "list:end_index" ); + sfree(l->error_ptr, l->index, "list:index" ); + sfree(l->error_ptr, l->end_index, "list:end_index" ); l->index = NULL; l->end_index = NULL; switch(l->type) { case TYP_VOID: - sfree(lmp, l->select.v, "list:v" ); + sfree(l->error_ptr, l->select.v, "list:v" ); l->select.v = NULL; break; case TYP_HBOND: - sfree(lmp, l->select.hbond_list, "list:hbonds" ); + sfree(l->error_ptr, l->select.hbond_list, "list:hbonds" ); l->select.hbond_list = NULL; break; case TYP_FAR_NEIGHBOR: - sfree(lmp, l->select.far_nbr_list, "list:far_nbrs" ); + sfree(l->error_ptr, l->select.far_nbr_list, "list:far_nbrs" ); l->select.far_nbr_list = NULL; break; case TYP_BOND: - sfree(lmp, l->select.bond_list, "list:bonds" ); + sfree(l->error_ptr, l->select.bond_list, "list:bonds" ); l->select.bond_list = NULL; break; case TYP_DBO: - sfree(lmp, l->select.dbo_list, "list:dbos" ); + sfree(l->error_ptr, l->select.dbo_list, "list:dbos" ); l->select.dbo_list = NULL; break; case TYP_DDELTA: - sfree(lmp, l->select.dDelta_list, "list:dDeltas" ); + sfree(l->error_ptr, l->select.dDelta_list, "list:dDeltas" ); l->select.dDelta_list = NULL; break; case TYP_THREE_BODY: - sfree(lmp, l->select.three_body_list, "list:three_bodies" ); + sfree(l->error_ptr, l->select.three_body_list, "list:three_bodies" ); l->select.three_body_list = NULL; break; default: char errmsg[128]; snprintf(errmsg, 128, "No %d list type defined", l->type); - lmp->error->all(FLERR,errmsg); + l->error_ptr->all(FLERR,errmsg); } } diff --git a/src/USER-REAXC/reaxc_list.h b/src/USER-REAXC/reaxc_list.h index 1df2338b0f..ab7fbce19c 100644 --- a/src/USER-REAXC/reaxc_list.h +++ b/src/USER-REAXC/reaxc_list.h @@ -29,8 +29,8 @@ #include "reaxc_types.h" -int Make_List( LAMMPS_NS::LAMMPS*, int, int, int, reax_list*, MPI_Comm ); -void Delete_List( LAMMPS_NS::LAMMPS*, reax_list*, MPI_Comm ); +int Make_List( int, int, int, reax_list*, MPI_Comm ); +void Delete_List( reax_list*, MPI_Comm ); inline int Num_Entries(int,reax_list*); inline int Start_Index( int, reax_list* ); diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp index 41ad5e99d4..c16ca9af52 100644 --- a/src/USER-REAXC/reaxc_lookup.cpp +++ b/src/USER-REAXC/reaxc_lookup.cpp @@ -58,11 +58,11 @@ void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + b = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + c = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + d = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + v = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); /* build the linear system */ a[0] = a[1] = a[n-1] = 0; @@ -92,11 +92,11 @@ void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double coef[i-1].a = f[i]; } - sfree(lmp, a, "cubic_spline:a" ); - sfree(lmp, b, "cubic_spline:b" ); - sfree(lmp, c, "cubic_spline:c" ); - sfree(lmp, d, "cubic_spline:d" ); - sfree(lmp, v, "cubic_spline:v" ); + sfree(lmp->error, a, "cubic_spline:a" ); + sfree(lmp->error, b, "cubic_spline:b" ); + sfree(lmp->error, c, "cubic_spline:c" ); + sfree(lmp->error, d, "cubic_spline:d" ); + sfree(lmp->error, v, "cubic_spline:v" ); } @@ -109,11 +109,11 @@ void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const doubl double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc(lmp, n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + b = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + c = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + d = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + v = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); /* build the linear system */ a[0] = 0; @@ -142,11 +142,11 @@ void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const doubl coef[i-1].a = f[i]; } - sfree(lmp, a, "cubic_spline:a" ); - sfree(lmp, b, "cubic_spline:b" ); - sfree(lmp, c, "cubic_spline:c" ); - sfree(lmp, d, "cubic_spline:d" ); - sfree(lmp, v, "cubic_spline:v" ); + sfree(lmp->error, a, "cubic_spline:a" ); + sfree(lmp->error, b, "cubic_spline:b" ); + sfree(lmp->error, c, "cubic_spline:c" ); + sfree(lmp->error, d, "cubic_spline:d" ); + sfree(lmp->error, v, "cubic_spline:v" ); } @@ -171,23 +171,23 @@ int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_par num_atom_types = system->reax_param.num_atom_types; dr = control->nonb_cut / control->tabulate; h = (double*) - smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:h", comm ); + smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:h", comm ); fh = (double*) - smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); + smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); fvdw = (double*) - smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); + smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); fCEvd = (double*) - smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); + smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); fele = (double*) - smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); + smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); fCEclmb = (double*) - smalloc(lmp, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); + smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); LR = (LR_lookup_table**) - scalloc(lmp, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); + scalloc(lmp->error, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); for( i = 0; i < num_atom_types; ++i ) LR[i] = (LR_lookup_table*) - scalloc(lmp, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); + scalloc(lmp->error, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); for( i = 0; i < MAX_ATOM_TYPES; ++i ) existing_types[i] = 0; @@ -207,21 +207,21 @@ int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_par LR[i][j].dx = dr; LR[i][j].inv_dx = control->tabulate / control->nonb_cut; LR[i][j].y = (LR_data*) - smalloc(lmp, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); + smalloc(lmp->error, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); LR[i][j].H = (cubic_spline_coef*) - smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , + smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , comm ); LR[i][j].vdW = (cubic_spline_coef*) - smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", + smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", comm); LR[i][j].CEvd = (cubic_spline_coef*) - smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", + smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", comm); LR[i][j].ele = (cubic_spline_coef*) - smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", + smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", comm ); LR[i][j].CEclmb = (cubic_spline_coef*) - smalloc(lmp, LR[i][j].n*sizeof(cubic_spline_coef), + smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef), "lookup:LR[i,j].CEclmb", comm ); for( r = 1; r <= control->tabulate; ++r ) { @@ -291,14 +291,14 @@ void Deallocate_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system ) for( i = 0; i < ntypes; ++i ) { for( j = i; j < ntypes; ++j ) if (LR[i][j].n) { - sfree(lmp, LR[i][j].y, "LR[i,j].y" ); - sfree(lmp, LR[i][j].H, "LR[i,j].H" ); - sfree(lmp, LR[i][j].vdW, "LR[i,j].vdW" ); - sfree(lmp, LR[i][j].CEvd, "LR[i,j].CEvd" ); - sfree(lmp, LR[i][j].ele, "LR[i,j].ele" ); - sfree(lmp, LR[i][j].CEclmb, "LR[i,j].CEclmb" ); + sfree(lmp->error, LR[i][j].y, "LR[i,j].y" ); + sfree(lmp->error, LR[i][j].H, "LR[i,j].H" ); + sfree(lmp->error, LR[i][j].vdW, "LR[i,j].vdW" ); + sfree(lmp->error, LR[i][j].CEvd, "LR[i,j].CEvd" ); + sfree(lmp->error, LR[i][j].ele, "LR[i,j].ele" ); + sfree(lmp->error, LR[i][j].CEclmb, "LR[i,j].CEclmb" ); } - sfree(lmp, LR[i], "LR[i]" ); + sfree(lmp->error, LR[i], "LR[i]" ); } - sfree(lmp, LR, "LR" ); + sfree(lmp->error, LR, "LR" ); } diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index eaa6765f36..cd339af556 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -56,7 +56,7 @@ int Tokenize( char* s, char*** tok ) /* safe malloc */ -void *smalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, const char *name, MPI_Comm comm ) +void *smalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, const char *name, MPI_Comm comm ) { void *ptr; char errmsg[256]; @@ -64,14 +64,14 @@ void *smalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, const char *name, MPI_Comm c if (n <= 0) { snprintf(errmsg, 256, "Trying to allocate %ld bytes for array %s. " "returning NULL.", n, name); - lmp->error->warning(FLERR,errmsg); + error_ptr->warning(FLERR,errmsg); return NULL; } ptr = malloc( n ); if (ptr == NULL) { snprintf(errmsg, 256, "Failed to allocate %ld bytes for array %s", n, name); - lmp->error->one(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); } return ptr; @@ -79,7 +79,7 @@ void *smalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, const char *name, MPI_Comm c /* safe calloc */ -void *scalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, rc_bigint size, const char *name, MPI_Comm comm ) +void *scalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, rc_bigint size, const char *name, MPI_Comm comm ) { void *ptr; char errmsg[256]; @@ -87,14 +87,14 @@ void *scalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, rc_bigint size, const char * if (n <= 0) { snprintf(errmsg, 256, "Trying to allocate %ld elements for array %s. " "returning NULL.\n", n, name ); - lmp->error->warning(FLERR,errmsg); + error_ptr->warning(FLERR,errmsg); return NULL; } if (size <= 0) { snprintf(errmsg, 256, "Elements size for array %s is %ld. " "returning NULL", name, size ); - lmp->error->warning(FLERR,errmsg); + error_ptr->warning(FLERR,errmsg); return NULL; } @@ -102,7 +102,7 @@ void *scalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, rc_bigint size, const char * if (ptr == NULL) { char errmsg[256]; snprintf(errmsg, 256, "Failed to allocate %ld bytes for array %s", n*size, name); - lmp->error->one(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); } return ptr; @@ -110,12 +110,12 @@ void *scalloc( LAMMPS_NS::LAMMPS *lmp, rc_bigint n, rc_bigint size, const char * /* safe free */ -void sfree( LAMMPS_NS::LAMMPS* lmp, void *ptr, const char *name ) +void sfree( LAMMPS_NS::Error* error_ptr, void *ptr, const char *name ) { if (ptr == NULL) { char errmsg[256]; snprintf(errmsg, 256, "Trying to free the already NULL pointer %s", name ); - lmp->error->one(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); return; } diff --git a/src/USER-REAXC/reaxc_tool_box.h b/src/USER-REAXC/reaxc_tool_box.h index 7c5ab12587..257ff1813f 100644 --- a/src/USER-REAXC/reaxc_tool_box.h +++ b/src/USER-REAXC/reaxc_tool_box.h @@ -37,7 +37,7 @@ double Get_Time( ); int Tokenize( char*, char*** ); /* from lammps */ -void *smalloc( LAMMPS_NS::LAMMPS*, rc_bigint, const char*, MPI_Comm ); -void *scalloc( LAMMPS_NS::LAMMPS*, rc_bigint, rc_bigint, const char*, MPI_Comm ); -void sfree( LAMMPS_NS::LAMMPS*, void*, const char* ); +void *smalloc( LAMMPS_NS::Error*, rc_bigint, const char*, MPI_Comm ); +void *scalloc( LAMMPS_NS::Error*, rc_bigint, rc_bigint, const char*, MPI_Comm ); +void sfree( LAMMPS_NS::Error*, void*, const char* ); #endif diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index cf6d5dcddc..b7845a0510 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -41,6 +41,7 @@ #include "lammps.h" #include "error.h" +using LAMMPS_NS::Error; #if defined LMP_USER_OMP #define OMP_TIMING 0 @@ -414,6 +415,7 @@ struct _reax_system boundary_cutoff bndry_cuts; reax_atom *my_atoms; + class Error *error_ptr; class Pair *pair_ptr; int my_bonds; int mincap; @@ -491,6 +493,7 @@ typedef struct int lgflag; int enobondsflag; + class Error *error_ptr; } control_params; @@ -777,6 +780,7 @@ struct _reax_list int type; list_type select; + class Error *error_ptr; }; typedef _reax_list reax_list; From 99acb4ac541847c4620208831e2e2d9cfa03297e Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 25 Mar 2019 15:00:52 +0100 Subject: [PATCH 026/372] Cleaning changes 1 --- src/USER-REAXC/pair_reaxc.cpp | 10 +-- src/USER-REAXC/reaxc_control.cpp | 7 +- src/USER-REAXC/reaxc_control.h | 2 +- src/USER-REAXC/reaxc_ffield.cpp | 60 +++++++++--------- src/USER-REAXC/reaxc_ffield.h | 2 +- src/USER-REAXC/reaxc_init_md.cpp | 45 +++++++------ src/USER-REAXC/reaxc_init_md.h | 2 +- src/USER-REAXC/reaxc_io_tools.cpp | 8 +-- src/USER-REAXC/reaxc_io_tools.h | 4 +- src/USER-REAXC/reaxc_lookup.cpp | 102 +++++++++++++++--------------- src/USER-REAXC/reaxc_lookup.h | 4 +- src/USER-REAXC/reaxc_traj.cpp | 48 +++++++------- src/USER-REAXC/reaxc_traj.h | 4 +- 13 files changed, 148 insertions(+), 150 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 58142b122a..b1f7799cb2 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -139,7 +139,7 @@ PairReaxC::~PairReaxC() // deallocate reax data-structures - if (control->tabulate ) Deallocate_Lookup_Tables( lmp, system); + if (control->tabulate ) Deallocate_Lookup_Tables( system); if (control->hbond_cut > 0 ) Delete_List( lists+HBONDS, world); Delete_List( lists+BONDS, world ); @@ -225,7 +225,7 @@ void PairReaxC::settings(int narg, char **arg) out_control->atom_info = 0; out_control->bond_info = 0; out_control->angle_info = 0; - } else Read_Control_File(lmp, arg[0], control, out_control); + } else Read_Control_File(arg[0], control, out_control); // default values @@ -300,7 +300,7 @@ void PairReaxC::coeff( int nargs, char **args ) FILE *fp; fp = force->open_potential(file); if (fp != NULL) - Read_Force_Field(lmp, fp, &(system->reax_param), control); + Read_Force_Field(fp, &(system->reax_param), control); else { char str[128]; snprintf(str,128,"Cannot open ReaxFF potential file %s",file); @@ -449,7 +449,7 @@ void PairReaxC::setup( ) (lists+FAR_NBRS)->error_ptr=lmp->error; write_reax_lists(); - Initialize( lmp, system, control, data, workspace, &lists, out_control, + Initialize( system, control, data, workspace, &lists, out_control, mpi_data, world ); for( int k = 0; k < system->N; ++k ) { num_bonds[k] = system->my_atoms[k].num_bonds; @@ -585,7 +585,7 @@ void PairReaxC::compute(int eflag, int vflag) data->step = update->ntimestep; - Output_Results( lmp, system, control, data, &lists, out_control, mpi_data ); + Output_Results( system, control, data, &lists, out_control, mpi_data ); // populate tmpid and tmpbo arrays for fix reax/c/species int i, j; diff --git a/src/USER-REAXC/reaxc_control.cpp b/src/USER-REAXC/reaxc_control.cpp index bf221a6266..14b28615fb 100644 --- a/src/USER-REAXC/reaxc_control.cpp +++ b/src/USER-REAXC/reaxc_control.cpp @@ -28,9 +28,8 @@ #include "reaxc_control.h" #include "reaxc_tool_box.h" -using namespace LAMMPS_NS; -char Read_Control_File( LAMMPS *lmp, char *control_file, control_params* control, +char Read_Control_File( char *control_file, control_params* control, output_controls *out_control ) { FILE *fp; @@ -40,7 +39,7 @@ char Read_Control_File( LAMMPS *lmp, char *control_file, control_params* control /* open control file */ if ( (fp = fopen( control_file, "r" ) ) == NULL ) { - lmp->error->all(FLERR, "The control file cannot be opened"); + control->error_ptr->all(FLERR, "The control file cannot be opened"); } /* assign default values */ @@ -367,7 +366,7 @@ char Read_Control_File( LAMMPS *lmp, char *control_file, control_params* control else { char errmsg[128]; snprintf(errmsg,128,"Unknown parameter %s in the control file", tmp[0]); - lmp->error->all(FLERR, errmsg); + control->error_ptr->all(FLERR, errmsg); } } diff --git a/src/USER-REAXC/reaxc_control.h b/src/USER-REAXC/reaxc_control.h index 4546a894f6..47627aed61 100644 --- a/src/USER-REAXC/reaxc_control.h +++ b/src/USER-REAXC/reaxc_control.h @@ -32,6 +32,6 @@ #include "lammps.h" #include "error.h" -char Read_Control_File( LAMMPS_NS::LAMMPS *lmp, char*, control_params*, output_controls* ); +char Read_Control_File( char*, control_params*, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 8316c188b3..987a11d252 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -32,7 +32,7 @@ #include "lammps.h" #include "error.h" -char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, +char Read_Force_Field( FILE *fp, reax_interaction *reax, control_params *control ) { char *s; @@ -64,7 +64,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, n = atoi(tmp[0]); if (n < 1) { if (me == 0) - lmp->error->warning( FLERR, "Number of globals in ffield file is 0" ); + control->error_ptr->warning( FLERR, "Number of globals in ffield file is 0" ); fclose(fp); free(s); free(tmp); @@ -99,54 +99,54 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Allocating structures in reax_interaction */ reax->sbp = (single_body_parameters*) - scalloc(lmp->error, reax->num_atom_types, sizeof(single_body_parameters), "sbp", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(single_body_parameters), "sbp", comm ); reax->tbp = (two_body_parameters**) - scalloc(lmp->error, reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); reax->thbp= (three_body_header***) - scalloc(lmp->error, reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); reax->hbp = (hbond_parameters***) - scalloc(lmp->error, reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); reax->fbp = (four_body_header****) - scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); tor_flag = (char****) - scalloc(lmp->error, reax->num_atom_types, sizeof(char***), "tor_flag", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char***), "tor_flag", comm ); for( i = 0; i < reax->num_atom_types; i++ ) { reax->tbp[i] = (two_body_parameters*) - scalloc(lmp->error, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", comm ); reax->thbp[i]= (three_body_header**) - scalloc(lmp->error, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", comm ); reax->hbp[i] = (hbond_parameters**) - scalloc(lmp->error, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", comm ); reax->fbp[i] = (four_body_header***) - scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", comm ); tor_flag[i] = (char***) - scalloc(lmp->error, reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); for( j = 0; j < reax->num_atom_types; j++ ) { reax->thbp[i][j]= (three_body_header*) - scalloc(lmp->error, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", comm ); reax->hbp[i][j] = (hbond_parameters*) - scalloc(lmp->error, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", comm ); reax->fbp[i][j] = (four_body_header**) - scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", comm ); tor_flag[i][j] = (char**) - scalloc(lmp->error, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); for (k=0; k < reax->num_atom_types; k++) { reax->fbp[i][j][k] = (four_body_header*) - scalloc(lmp->error, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", comm ); tor_flag[i][j][k] = (char*) - scalloc(lmp->error, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", comm ); } } @@ -163,7 +163,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Sanity checks */ if (c < 9) { - lmp->error->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->one(FLERR,"Inconsistent ffield file"); } for( j = 0; j < (int)(strlen(tmp[0])); ++j ) @@ -185,7 +185,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - lmp->error->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->one(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].alpha = val; @@ -203,7 +203,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - lmp->error->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->one(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].r_pi_pi = val; @@ -221,7 +221,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - lmp->error->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->one(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].p_ovun2 = val; @@ -240,7 +240,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, /* Sanity check */ if (c > 2) { - lmp->error->one(FLERR,"Force field file incompatible with 'lgvdw yes'"); + control->error_ptr->one(FLERR,"Force field file incompatible with 'lgvdw yes'"); } val = atof(tmp[0]); reax->sbp[i].lgcij = val; @@ -258,7 +258,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, "This may cause division-by-zero errors. " "Keeping vdWaals-setting for earlier atoms.", reax->sbp[i].name); - lmp->error->warning(FLERR,errmsg); + control->error_ptr->warning(FLERR,errmsg); } errorflag = 0; } else { @@ -274,7 +274,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, "This may cause division-by-zero errors. " "Keeping vdWaals-setting for earlier atoms.", reax->sbp[i].name); - lmp->error->warning(FLERR,errmsg); + control->error_ptr->warning(FLERR,errmsg); } } else { reax->gp.vdw_type = 2; @@ -291,7 +291,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, "This may cause division-by-zero errors. " "Keeping vdWaals-setting for earlier atoms.", reax->sbp[i].name); - lmp->error->warning(FLERR,errmsg); + control->error_ptr->warning(FLERR,errmsg); } } else { reax->gp.vdw_type = 1; @@ -301,7 +301,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, snprintf(errmsg, 256, "Inconsistent vdWaals-parameters " "No shielding or inner-wall set for element %s", reax->sbp[i].name); - lmp->error->all(FLERR, errmsg); + control->error_ptr->all(FLERR, errmsg); } } } @@ -314,7 +314,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, char errmsg[256]; snprintf(errmsg, 256, "Changed valency_val to valency_boc for %s", reax->sbp[i].name); - lmp->error->warning(FLERR,errmsg); + control->error_ptr->warning(FLERR,errmsg); } reax->sbp[i].valency_val = reax->sbp[i].valency_boc; } @@ -324,7 +324,7 @@ char Read_Force_Field( LAMMPS_NS::LAMMPS* lmp, FILE *fp, reax_interaction *reax, c=Tokenize(s,&tmp); if (c == 2 && !lgflag) { - lmp->error->all(FLERR, "Force field file requires using 'lgvdw yes'"); + control->error_ptr->all(FLERR, "Force field file requires using 'lgvdw yes'"); } l = atoi(tmp[0]); diff --git a/src/USER-REAXC/reaxc_ffield.h b/src/USER-REAXC/reaxc_ffield.h index 225f207de9..7cef730f91 100644 --- a/src/USER-REAXC/reaxc_ffield.h +++ b/src/USER-REAXC/reaxc_ffield.h @@ -29,6 +29,6 @@ #include "reaxc_types.h" -char Read_Force_Field( LAMMPS_NS::LAMMPS*, FILE*, reax_interaction*, control_params* ); +char Read_Force_Field( FILE*, reax_interaction*, control_params* ); #endif diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 8c60db0846..27e60c580c 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -36,7 +36,6 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" -using namespace LAMMPS_NS; int Init_System( reax_system *system, control_params *control, char * /*msg*/ ) { @@ -82,7 +81,7 @@ int Init_Simulation_Data( reax_system *system, control_params *control, return SUCCESS; } -void Init_Taper( LAMMPS_NS::LAMMPS* lmp, control_params *control, storage *workspace, MPI_Comm comm ) +void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm ) { double d1, d7; double swa, swa2, swa3; @@ -92,15 +91,15 @@ void Init_Taper( LAMMPS_NS::LAMMPS* lmp, control_params *control, storage *work swb = control->nonb_cut; if (fabs( swa ) > 0.01) - lmp->error->warning( FLERR, "Non-zero lower Taper-radius cutoff" ); + control->error_ptr->warning( FLERR, "Non-zero lower Taper-radius cutoff" ); if (swb < 0) { - lmp->error->all(FLERR,"Negative upper Taper-radius cutoff"); + control->error_ptr->all(FLERR,"Negative upper Taper-radius cutoff"); } else if( swb < 5 ) { char errmsg[256]; snprintf(errmsg, 256, "Very low Taper-radius cutoff: %f", swb ); - lmp->error->warning( FLERR, errmsg ); + control->error_ptr->warning( FLERR, errmsg ); } d1 = swb - swa; @@ -122,7 +121,7 @@ void Init_Taper( LAMMPS_NS::LAMMPS* lmp, control_params *control, storage *work } -int Init_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Init_Workspace( reax_system *system, control_params *control, storage *workspace, MPI_Comm comm, char *msg ) { int ret; @@ -136,7 +135,7 @@ int Init_Workspace( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params Reset_Workspace( system, workspace ); /* Initialize the Taper function */ - Init_Taper( lmp, control, workspace, comm ); + Init_Taper( control, workspace, comm ); return SUCCESS; } @@ -154,7 +153,7 @@ int Init_MPI_Datatypes( reax_system *system, storage * /*workspace*/, return SUCCESS; } -int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, +int Init_Lists( reax_system *system, control_params *control, simulation_data * /*data*/, storage * /*workspace*/, reax_list **lists, mpi_datatypes *mpi_data, char * /*msg*/ ) { @@ -183,7 +182,7 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, *lists+HBONDS, comm ) ) { - lmp->error->one(FLERR, "Not enough space for hbonds list."); + control->error_ptr->one(FLERR, "Not enough space for hbonds list."); } (*lists+HBONDS)->error_ptr = system->error_ptr; } @@ -197,7 +196,7 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, if( !Make_List( system->total_cap, bond_cap, TYP_BOND, *lists+BONDS, comm ) ) { - lmp->error->one(FLERR, "Not enough space for bonds list."); + control->error_ptr->one(FLERR, "Not enough space for bonds list."); } (*lists+BONDS)->error_ptr = system->error_ptr; @@ -205,7 +204,7 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, cap_3body = (int)(MAX( num_3body*safezone, MIN_3BODIES )); if( !Make_List( bond_cap, cap_3body, TYP_THREE_BODY, *lists+THREE_BODIES, comm ) ){ - lmp->error->one(FLERR,"Problem in initializing angles list."); + control->error_ptr->one(FLERR,"Problem in initializing angles list."); } (*lists+THREE_BODIES)->error_ptr = system->error_ptr; @@ -215,7 +214,7 @@ int Init_Lists( LAMMPS *lmp, reax_system *system, control_params *control, return SUCCESS; } -void Initialize( LAMMPS *lmp, reax_system *system, control_params *control, +void Initialize( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data, MPI_Comm comm ) @@ -228,46 +227,46 @@ void Initialize( LAMMPS *lmp, reax_system *system, control_params *control, snprintf(errmsg, 128, "Could not create datatypes on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } if (Init_System(system, control, msg) == FAILURE) { snprintf(errmsg, 128, "System could not be initialized on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } if (Init_Simulation_Data( system, control, data, msg ) == FAILURE) { snprintf(errmsg, 128, "Sim_data could not be initialized on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } - if (Init_Workspace( lmp, system, control, workspace, mpi_data->world, msg ) == + if (Init_Workspace( system, control, workspace, mpi_data->world, msg ) == FAILURE) { snprintf(errmsg, 128, "Workspace could not be initialized on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } - if (Init_Lists( lmp, system, control, data, workspace, lists, mpi_data, msg ) == + if (Init_Lists( system, control, data, workspace, lists, mpi_data, msg ) == FAILURE) { snprintf(errmsg, 128, "System could not be initialized on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } - if (Init_Output_Files(lmp, system,control,out_control,mpi_data,msg)== FAILURE) { + if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) { snprintf(errmsg, 128, "Could not open output files on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } if (control->tabulate) { - if (Init_Lookup_Tables( lmp, system, control, workspace, mpi_data, msg ) == FAILURE) { + if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) { snprintf(errmsg, 128, "Lookup table could not be created on thread %d", system->my_rank); - lmp->error->one(FLERR,errmsg); + control->error_ptr->one(FLERR,errmsg); } } diff --git a/src/USER-REAXC/reaxc_init_md.h b/src/USER-REAXC/reaxc_init_md.h index 2baa70245b..546a9e33c9 100644 --- a/src/USER-REAXC/reaxc_init_md.h +++ b/src/USER-REAXC/reaxc_init_md.h @@ -32,6 +32,6 @@ #include "lammps.h" #include "error.h" -void Initialize( LAMMPS_NS::LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, +void Initialize( reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes*, MPI_Comm ); #endif diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp index aa7e7fcea7..f71fcbec8e 100644 --- a/src/USER-REAXC/reaxc_io_tools.cpp +++ b/src/USER-REAXC/reaxc_io_tools.cpp @@ -34,7 +34,7 @@ #include "reaxc_traj.h" #include "reaxc_vector.h" -int Init_Output_Files( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Init_Output_Files( reax_system *system, control_params *control, output_controls *out_control, mpi_datatypes *mpi_data, char *msg ) { @@ -42,7 +42,7 @@ int Init_Output_Files( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_para int ret; if (out_control->write_steps > 0) { - ret = Init_Traj( lmp, system, control, out_control, mpi_data, msg ); + ret = Init_Traj( system, control, out_control, mpi_data, msg ); if (ret == FAILURE) return ret; } @@ -107,7 +107,7 @@ int Close_Output_Files( reax_system *system, control_params *control, } -void Output_Results( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +void Output_Results( reax_system *system, control_params *control, simulation_data *data, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { @@ -146,7 +146,7 @@ void Output_Results( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params /* write current frame */ if( out_control->write_steps > 0 && (data->step-data->prev_steps) % out_control->write_steps == 0 ) { - Append_Frame( lmp, system, control, data, lists, out_control, mpi_data ); + Append_Frame( system, control, data, lists, out_control, mpi_data ); } } diff --git a/src/USER-REAXC/reaxc_io_tools.h b/src/USER-REAXC/reaxc_io_tools.h index 80202d5c83..a3f22fccc2 100644 --- a/src/USER-REAXC/reaxc_io_tools.h +++ b/src/USER-REAXC/reaxc_io_tools.h @@ -29,10 +29,10 @@ #include "reaxc_types.h" -int Init_Output_Files( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, +int Init_Output_Files( reax_system*, control_params*, output_controls*, mpi_datatypes*, char* ); int Close_Output_Files( reax_system*, control_params*, output_controls*, mpi_datatypes* ); -void Output_Results( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, simulation_data*, +void Output_Results( reax_system*, control_params*, simulation_data*, reax_list**, output_controls*, mpi_datatypes* ); #endif diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp index c16ca9af52..b140b0cadf 100644 --- a/src/USER-REAXC/reaxc_lookup.cpp +++ b/src/USER-REAXC/reaxc_lookup.cpp @@ -50,7 +50,7 @@ void Tridiagonal_Solve( const double *a, const double *b, } -void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double *f, +void Natural_Cubic_Spline( LAMMPS_NS::Error* error_ptr, const double *h, const double *f, cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ) { @@ -58,11 +58,11 @@ void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + b = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + c = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + d = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + v = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); /* build the linear system */ a[0] = a[1] = a[n-1] = 0; @@ -92,16 +92,16 @@ void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double coef[i-1].a = f[i]; } - sfree(lmp->error, a, "cubic_spline:a" ); - sfree(lmp->error, b, "cubic_spline:b" ); - sfree(lmp->error, c, "cubic_spline:c" ); - sfree(lmp->error, d, "cubic_spline:d" ); - sfree(lmp->error, v, "cubic_spline:v" ); + sfree(error_ptr, a, "cubic_spline:a" ); + sfree(error_ptr, b, "cubic_spline:b" ); + sfree(error_ptr, c, "cubic_spline:c" ); + sfree(error_ptr, d, "cubic_spline:d" ); + sfree(error_ptr, v, "cubic_spline:v" ); } -void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const double *f, double v0, double vlast, +void Complete_Cubic_Spline( LAMMPS_NS::Error* error_ptr, const double *h, const double *f, double v0, double vlast, cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ) { @@ -109,11 +109,11 @@ void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const doubl double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc(lmp->error, n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + b = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + c = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + d = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + v = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); /* build the linear system */ a[0] = 0; @@ -142,15 +142,15 @@ void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS* lmp, const double *h, const doubl coef[i-1].a = f[i]; } - sfree(lmp->error, a, "cubic_spline:a" ); - sfree(lmp->error, b, "cubic_spline:b" ); - sfree(lmp->error, c, "cubic_spline:c" ); - sfree(lmp->error, d, "cubic_spline:d" ); - sfree(lmp->error, v, "cubic_spline:v" ); + sfree(error_ptr, a, "cubic_spline:a" ); + sfree(error_ptr, b, "cubic_spline:b" ); + sfree(error_ptr, c, "cubic_spline:c" ); + sfree(error_ptr, d, "cubic_spline:d" ); + sfree(error_ptr, v, "cubic_spline:v" ); } -int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Init_Lookup_Tables( reax_system *system, control_params *control, storage *workspace, mpi_datatypes *mpi_data, char * /*msg*/ ) { int i, j, r; @@ -171,23 +171,23 @@ int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_par num_atom_types = system->reax_param.num_atom_types; dr = control->nonb_cut / control->tabulate; h = (double*) - smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:h", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:h", comm ); fh = (double*) - smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); fvdw = (double*) - smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); fCEvd = (double*) - smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); fele = (double*) - smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); fCEclmb = (double*) - smalloc(lmp->error, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); LR = (LR_lookup_table**) - scalloc(lmp->error, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); + scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); for( i = 0; i < num_atom_types; ++i ) LR[i] = (LR_lookup_table*) - scalloc(lmp->error, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); + scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); for( i = 0; i < MAX_ATOM_TYPES; ++i ) existing_types[i] = 0; @@ -207,21 +207,21 @@ int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_par LR[i][j].dx = dr; LR[i][j].inv_dx = control->tabulate / control->nonb_cut; LR[i][j].y = (LR_data*) - smalloc(lmp->error, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); + smalloc(system->error_ptr, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); LR[i][j].H = (cubic_spline_coef*) - smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , comm ); LR[i][j].vdW = (cubic_spline_coef*) - smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", comm); LR[i][j].CEvd = (cubic_spline_coef*) - smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", comm); LR[i][j].ele = (cubic_spline_coef*) - smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", comm ); LR[i][j].CEclmb = (cubic_spline_coef*) - smalloc(lmp->error, LR[i][j].n*sizeof(cubic_spline_coef), + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef), "lookup:LR[i,j].CEclmb", comm ); for( r = 1; r <= control->tabulate; ++r ) { @@ -246,22 +246,22 @@ int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_par vlast_vdw = fCEvd[r-1]; vlast_ele = fele[r-1]; - Natural_Cubic_Spline( lmp, &h[1], &fh[1], + Natural_Cubic_Spline( control->error_ptr, &h[1], &fh[1], &(LR[i][j].H[1]), control->tabulate+1, comm ); - Complete_Cubic_Spline( lmp, &h[1], &fvdw[1], v0_vdw, vlast_vdw, + Complete_Cubic_Spline( control->error_ptr, &h[1], &fvdw[1], v0_vdw, vlast_vdw, &(LR[i][j].vdW[1]), control->tabulate+1, comm ); - Natural_Cubic_Spline( lmp, &h[1], &fCEvd[1], + Natural_Cubic_Spline( control->error_ptr, &h[1], &fCEvd[1], &(LR[i][j].CEvd[1]), control->tabulate+1, comm ); - Complete_Cubic_Spline( lmp, &h[1], &fele[1], v0_ele, vlast_ele, + Complete_Cubic_Spline( control->error_ptr, &h[1], &fele[1], v0_ele, vlast_ele, &(LR[i][j].ele[1]), control->tabulate+1, comm ); - Natural_Cubic_Spline( lmp, &h[1], &fCEclmb[1], + Natural_Cubic_Spline( control->error_ptr, &h[1], &fCEclmb[1], &(LR[i][j].CEclmb[1]), control->tabulate+1, comm ); } else { @@ -281,7 +281,7 @@ int Init_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_par } -void Deallocate_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system ) +void Deallocate_Lookup_Tables( reax_system *system ) { int i, j; int ntypes; @@ -291,14 +291,14 @@ void Deallocate_Lookup_Tables( LAMMPS_NS::LAMMPS* lmp, reax_system *system ) for( i = 0; i < ntypes; ++i ) { for( j = i; j < ntypes; ++j ) if (LR[i][j].n) { - sfree(lmp->error, LR[i][j].y, "LR[i,j].y" ); - sfree(lmp->error, LR[i][j].H, "LR[i,j].H" ); - sfree(lmp->error, LR[i][j].vdW, "LR[i,j].vdW" ); - sfree(lmp->error, LR[i][j].CEvd, "LR[i,j].CEvd" ); - sfree(lmp->error, LR[i][j].ele, "LR[i,j].ele" ); - sfree(lmp->error, LR[i][j].CEclmb, "LR[i,j].CEclmb" ); + sfree(system->error_ptr, LR[i][j].y, "LR[i,j].y" ); + sfree(system->error_ptr, LR[i][j].H, "LR[i,j].H" ); + sfree(system->error_ptr, LR[i][j].vdW, "LR[i,j].vdW" ); + sfree(system->error_ptr, LR[i][j].CEvd, "LR[i,j].CEvd" ); + sfree(system->error_ptr, LR[i][j].ele, "LR[i,j].ele" ); + sfree(system->error_ptr, LR[i][j].CEclmb, "LR[i,j].CEclmb" ); } - sfree(lmp->error, LR[i], "LR[i]" ); + sfree(system->error_ptr, LR[i], "LR[i]" ); } - sfree(lmp->error, LR, "LR" ); + sfree(system->error_ptr, LR, "LR" ); } diff --git a/src/USER-REAXC/reaxc_lookup.h b/src/USER-REAXC/reaxc_lookup.h index 2d33ad82de..9b1b14a34d 100644 --- a/src/USER-REAXC/reaxc_lookup.h +++ b/src/USER-REAXC/reaxc_lookup.h @@ -40,9 +40,9 @@ void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f cubic_spline_coef *coef, unsigned int n, MPI_Comm comm ); -int Init_Lookup_Tables( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, storage*, +int Init_Lookup_Tables( reax_system*, control_params*, storage*, mpi_datatypes*, char* ); -void Deallocate_Lookup_Tables( LAMMPS_NS::LAMMPS*, reax_system* ); +void Deallocate_Lookup_Tables( reax_system* ); #endif diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index ee2939d662..d3b9e799d2 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -29,7 +29,7 @@ #include "reaxc_list.h" #include "reaxc_tool_box.h" -int Reallocate_Output_Buffer( LAMMPS_NS::LAMMPS *lmp, output_controls *out_control, int req_space, +int Reallocate_Output_Buffer( LAMMPS_NS::Error *error_ptr, output_controls *out_control, int req_space, MPI_Comm comm ) { if (out_control->buffer_len > 0) @@ -40,7 +40,7 @@ int Reallocate_Output_Buffer( LAMMPS_NS::LAMMPS *lmp, output_controls *out_contr if (out_control->buffer == NULL) { char errmsg[256]; snprintf(errmsg, 256, "Insufficient memory for required buffer size %d", (int) (req_space*SAFE_ZONE)); - lmp->error->one(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); } return SUCCESS; @@ -56,7 +56,7 @@ void Write_Skip_Line( output_controls *out_control, mpi_datatypes * /*mpi_data*/ } -int Write_Header( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Write_Header( reax_system *system, control_params *control, output_controls *out_control, mpi_datatypes *mpi_data ) { int num_hdr_lines, my_hdr_lines, buffer_req; @@ -82,7 +82,7 @@ int Write_Header( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *c my_hdr_lines = num_hdr_lines * ( system->my_rank == MASTER_NODE ); buffer_req = my_hdr_lines * HEADER_LINE_LEN; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( control->error_ptr, out_control, buffer_req, mpi_data->world ); /* only the master node writes into trajectory header */ if (system->my_rank == MASTER_NODE) { @@ -258,7 +258,7 @@ int Write_Header( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *c } -int Write_Init_Desc( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params * /*control*/, +int Write_Init_Desc( reax_system *system, control_params * /*control*/, output_controls *out_control, mpi_datatypes *mpi_data ) { int i, me, np, cnt, buffer_len, buffer_req; @@ -277,7 +277,7 @@ int Write_Init_Desc( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params else buffer_req = system->n * INIT_DESC_LEN + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); out_control->line[0] = 0; out_control->buffer[0] = 0; @@ -310,7 +310,7 @@ int Write_Init_Desc( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params } -int Init_Traj( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Init_Traj( reax_system *system, control_params *control, output_controls *out_control, mpi_datatypes *mpi_data, char *msg ) { @@ -347,14 +347,14 @@ int Init_Traj( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *cont strcpy( msg, "init_traj: unknown trajectory option" ); return FAILURE; } - Write_Header( lmp, system, control, out_control, mpi_data ); - Write_Init_Desc( lmp, system, control, out_control, mpi_data ); + Write_Header( system, control, out_control, mpi_data ); + Write_Init_Desc( system, control, out_control, mpi_data ); return SUCCESS; } -int Write_Frame_Header( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params *control, +int Write_Frame_Header( reax_system *system, control_params *control, simulation_data *data, output_controls *out_control, mpi_datatypes *mpi_data ) { @@ -366,7 +366,7 @@ int Write_Frame_Header( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_par my_frm_hdr_lines = num_frm_hdr_lines * ( me == MASTER_NODE ); buffer_req = my_frm_hdr_lines * HEADER_LINE_LEN; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( control->error_ptr, out_control, buffer_req, mpi_data->world ); /* only the master node writes into trajectory header */ if (me == MASTER_NODE) { @@ -480,7 +480,7 @@ int Write_Frame_Header( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_par -int Write_Atoms( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * /*control*/, +int Write_Atoms( reax_system *system, control_params * /*control*/, output_controls *out_control, mpi_datatypes *mpi_data ) { int i, me, np, line_len, buffer_len, buffer_req, cnt; @@ -499,7 +499,7 @@ int Write_Atoms( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * / else buffer_req = system->n * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); /* fill in buffer */ out_control->line[0] = 0; @@ -530,7 +530,7 @@ int Write_Atoms( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * / p_atom->f[0], p_atom->f[1], p_atom->f[2], p_atom->q ); break; default: - lmp->error->all(FLERR,"Write_traj_atoms: unknown atom trajectory format"); + system->error_ptr->all(FLERR,"Write_traj_atoms: unknown atom trajectory format"); } strncpy( out_control->buffer + i*line_len, out_control->line, line_len+1 ); @@ -556,7 +556,7 @@ int Write_Atoms( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params * / } -int Write_Bonds( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, reax_list *bonds, +int Write_Bonds( reax_system *system, control_params *control, reax_list *bonds, output_controls *out_control, mpi_datatypes *mpi_data) { int i, j, pj, me, np; @@ -589,7 +589,7 @@ int Write_Bonds( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *co else buffer_req = my_bonds * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); /* fill in the buffer */ out_control->line[0] = 0; @@ -616,7 +616,7 @@ int Write_Bonds( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *co bo_ij->bo_data.BO_pi, bo_ij->bo_data.BO_pi2 ); break; default: - lmp->error->all(FLERR, "Write_traj_bonds: FATAL! invalid bond_info option"); + system->error_ptr->all(FLERR, "Write_traj_bonds: FATAL! invalid bond_info option"); } strncpy( out_control->buffer + my_bonds*line_len, out_control->line, line_len+1 ); @@ -645,7 +645,7 @@ int Write_Bonds( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *co } -int Write_Angles( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Write_Angles( reax_system *system, control_params *control, reax_list *bonds, reax_list *thb_intrs, output_controls *out_control, mpi_datatypes *mpi_data ) { @@ -689,7 +689,7 @@ int Write_Angles( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *c else buffer_req = my_angles * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( lmp, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); /* fill in the buffer */ my_angles = 0; @@ -740,20 +740,20 @@ int Write_Angles( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *c } -int Append_Frame( LAMMPS_NS::LAMMPS* lmp, reax_system *system, control_params *control, +int Append_Frame( reax_system *system, control_params *control, simulation_data *data, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { - Write_Frame_Header( lmp, system, control, data, out_control, mpi_data ); + Write_Frame_Header( system, control, data, out_control, mpi_data ); if (out_control->write_atoms) - Write_Atoms( lmp, system, control, out_control, mpi_data ); + Write_Atoms( system, control, out_control, mpi_data ); if (out_control->write_bonds) - Write_Bonds( lmp, system, control, (*lists + BONDS), out_control, mpi_data ); + Write_Bonds( system, control, (*lists + BONDS), out_control, mpi_data ); if (out_control->write_angles) - Write_Angles( lmp, system, control, (*lists + BONDS), (*lists + THREE_BODIES), + Write_Angles( system, control, (*lists + BONDS), (*lists + THREE_BODIES), out_control, mpi_data ); return SUCCESS; diff --git a/src/USER-REAXC/reaxc_traj.h b/src/USER-REAXC/reaxc_traj.h index 5508d27cdb..72c56637eb 100644 --- a/src/USER-REAXC/reaxc_traj.h +++ b/src/USER-REAXC/reaxc_traj.h @@ -73,11 +73,11 @@ enum BOND_LINE_OPTS { OPT_NOBOND, OPT_BOND_BASIC, OPT_BOND_FULL, NR_OPT_BOND }; enum ANGLE_LINE_OPTS { OPT_NOANGLE, OPT_ANGLE_BASIC, NR_OPT_ANGLE }; -int Init_Traj( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, output_controls*, +int Init_Traj( reax_system*, control_params*, output_controls*, mpi_datatypes*, char* ); int End_Traj( int, output_controls* ); -int Append_Frame( LAMMPS_NS::LAMMPS*, reax_system*, control_params*, simulation_data*, +int Append_Frame( reax_system*, control_params*, simulation_data*, reax_list**, output_controls*, mpi_datatypes* ); #endif From 83e458af0bb552c94b0aa1e48132cdcbca23aa8b Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 25 Mar 2019 15:22:20 +0100 Subject: [PATCH 027/372] Cleaning changes 2 --- src/USER-REAXC/pair_reaxc.cpp | 4 ++-- src/USER-REAXC/reaxc_bond_orders.cpp | 3 +-- src/USER-REAXC/reaxc_bond_orders.h | 2 +- src/USER-REAXC/reaxc_bonds.cpp | 2 +- src/USER-REAXC/reaxc_bonds.h | 2 +- src/USER-REAXC/reaxc_forces.cpp | 18 +++++++++--------- src/USER-REAXC/reaxc_forces.h | 2 +- src/USER-REAXC/reaxc_hydrogen_bonds.cpp | 2 +- src/USER-REAXC/reaxc_hydrogen_bonds.h | 2 +- src/USER-REAXC/reaxc_multi_body.cpp | 2 +- src/USER-REAXC/reaxc_multi_body.h | 2 +- src/USER-REAXC/reaxc_reset_tools.cpp | 11 +++++------ src/USER-REAXC/reaxc_reset_tools.h | 8 ++------ src/USER-REAXC/reaxc_torsion_angles.cpp | 3 +-- src/USER-REAXC/reaxc_torsion_angles.h | 3 +-- src/USER-REAXC/reaxc_traj.cpp | 2 +- src/USER-REAXC/reaxc_types.h | 4 ++-- src/USER-REAXC/reaxc_valence_angles.cpp | 4 ++-- src/USER-REAXC/reaxc_valence_angles.h | 2 +- 19 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index b1f7799cb2..a9501dac9d 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -521,7 +521,7 @@ void PairReaxC::compute(int eflag, int vflag) setup(); - Reset( lmp, system, control, data, workspace, &lists, world ); + Reset( system, control, data, workspace, &lists, world ); workspace->realloc.num_far = write_reax_lists(); // timing for filling in the reax lists if (comm->me == 0) { @@ -531,7 +531,7 @@ void PairReaxC::compute(int eflag, int vflag) // forces - Compute_Forces(lmp, system,control,data,workspace,&lists,out_control,mpi_data); + Compute_Forces(system,control,data,workspace,&lists,out_control,mpi_data); read_reax_forces(vflag); for(int k = 0; k < system->N; ++k) { diff --git a/src/USER-REAXC/reaxc_bond_orders.cpp b/src/USER-REAXC/reaxc_bond_orders.cpp index 924be8809d..1ed58a0bfd 100644 --- a/src/USER-REAXC/reaxc_bond_orders.cpp +++ b/src/USER-REAXC/reaxc_bond_orders.cpp @@ -360,8 +360,7 @@ int BOp( storage *workspace, reax_list *bonds, double bo_cut, void BO( reax_system *system, control_params * /*control*/, simulation_data * /*data*/, - storage *workspace, reax_list **lists, output_controls * /*out_control*/, - LAMMPS_NS::LAMMPS* lmp ) + storage *workspace, reax_list **lists, output_controls * /*out_control*/ ) { int i, j, pj, type_i, type_j; int start_i, end_i, sym_index; diff --git a/src/USER-REAXC/reaxc_bond_orders.h b/src/USER-REAXC/reaxc_bond_orders.h index 8de60ba2f2..3631d90c89 100644 --- a/src/USER-REAXC/reaxc_bond_orders.h +++ b/src/USER-REAXC/reaxc_bond_orders.h @@ -42,5 +42,5 @@ void Add_dBond_to_Forces_NPT( int, int, simulation_data*, int BOp(storage*, reax_list*, double, int, int, far_neighbor_data*, single_body_parameters*, single_body_parameters*, two_body_parameters*); void BO( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); + storage*, reax_list**, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_bonds.cpp b/src/USER-REAXC/reaxc_bonds.cpp index d5ac4f1ed4..48fb872324 100644 --- a/src/USER-REAXC/reaxc_bonds.cpp +++ b/src/USER-REAXC/reaxc_bonds.cpp @@ -33,7 +33,7 @@ void Bonds( reax_system *system, control_params * /*control*/, simulation_data *data, storage *workspace, reax_list **lists, - output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp ) + output_controls * /*out_control*/ ) { int i, j, pj, natoms; int start_i, end_i; diff --git a/src/USER-REAXC/reaxc_bonds.h b/src/USER-REAXC/reaxc_bonds.h index b425598b42..a4a1fb0b44 100644 --- a/src/USER-REAXC/reaxc_bonds.h +++ b/src/USER-REAXC/reaxc_bonds.h @@ -30,5 +30,5 @@ #include "reaxc_types.h" void Bonds( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); + storage*, reax_list**, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 4adec04f0c..ff1dd839fb 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -44,7 +44,7 @@ interaction_function Interaction_Functions[NUM_INTRS]; void Dummy_Interaction( reax_system * /*system*/, control_params * /*control*/, simulation_data * /*data*/, storage * /*workspace*/, - reax_list ** /*lists*/, output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* = NULL ) + reax_list ** /*lists*/, output_controls * /*out_control*/ ) { } @@ -76,7 +76,7 @@ void Compute_Bonded_Forces( reax_system *system, control_params *control, /* Implement all force calls as function pointers */ for( i = 0; i < NUM_INTRS; i++ ) { (Interaction_Functions[i])( system, control, data, workspace, - lists, out_control, NULL ); + lists, out_control ); } } @@ -115,7 +115,7 @@ void Compute_Total_Force( reax_system *system, control_params *control, } -void Validate_Lists( LAMMPS_NS::LAMMPS *lmp, reax_system *system, storage * /*workspace*/, reax_list **lists, +void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **lists, int step, int /*n*/, int N, int numH, MPI_Comm comm ) { int i, comp, Hindex; @@ -138,7 +138,7 @@ void Validate_Lists( LAMMPS_NS::LAMMPS *lmp, reax_system *system, storage * /*wo char errmsg[256]; snprintf(errmsg, 256, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", step, i, End_Index(i,bonds), comp ); - lmp->error->all(FLERR,errmsg); + system->error_ptr->all(FLERR,errmsg); } } } @@ -166,7 +166,7 @@ void Validate_Lists( LAMMPS_NS::LAMMPS *lmp, reax_system *system, storage * /*wo char errmsg[256]; snprintf(errmsg, 256, "step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", step, Hindex, End_Index(Hindex,hbonds), comp ); - lmp->error->all(FLERR, errmsg); + system->error_ptr->all(FLERR, errmsg); } } } @@ -174,7 +174,7 @@ void Validate_Lists( LAMMPS_NS::LAMMPS *lmp, reax_system *system, storage * /*wo } -void Init_Forces_noQEq( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params *control, +void Init_Forces_noQEq( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls * /*out_control*/, MPI_Comm comm ) { @@ -310,7 +310,7 @@ void Init_Forces_noQEq( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_par workspace->realloc.num_bonds = num_bonds; workspace->realloc.num_hbonds = num_hbonds; - Validate_Lists( lmp, system, workspace, lists, data->step, + Validate_Lists( system, workspace, lists, data->step, system->n, system->N, system->numH, comm ); } @@ -434,14 +434,14 @@ void Estimate_Storages( reax_system *system, control_params *control, } -void Compute_Forces( LAMMPS_NS::LAMMPS *lmp, reax_system *system, control_params *control, +void Compute_Forces( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { MPI_Comm comm = mpi_data->world; - Init_Forces_noQEq( lmp, system, control, data, workspace, + Init_Forces_noQEq( system, control, data, workspace, lists, out_control, comm ); /********* bonded interactions ************/ diff --git a/src/USER-REAXC/reaxc_forces.h b/src/USER-REAXC/reaxc_forces.h index 31cfc03a6b..6c839a7023 100644 --- a/src/USER-REAXC/reaxc_forces.h +++ b/src/USER-REAXC/reaxc_forces.h @@ -33,7 +33,7 @@ extern interaction_function Interaction_Functions[NUM_INTRS]; void Init_Force_Functions( control_params* ); -void Compute_Forces( LAMMPS_NS::LAMMPS *lmp, reax_system*, control_params*, simulation_data*, +void Compute_Forces( reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes* ); void Estimate_Storages( reax_system*, control_params*, reax_list**, int*, int*, int*, int*, MPI_Comm ); diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp index 489a43cfc1..be34df7571 100644 --- a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp +++ b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp @@ -33,7 +33,7 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp ) + reax_list **lists, output_controls * /*out_control*/ ) { int i, j, k, pi, pk; int type_i, type_j, type_k; diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.h b/src/USER-REAXC/reaxc_hydrogen_bonds.h index 2a448439ea..04d3d26d5c 100644 --- a/src/USER-REAXC/reaxc_hydrogen_bonds.h +++ b/src/USER-REAXC/reaxc_hydrogen_bonds.h @@ -30,6 +30,6 @@ #include "reaxc_types.h" void Hydrogen_Bonds( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); + storage*, reax_list**, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_multi_body.cpp b/src/USER-REAXC/reaxc_multi_body.cpp index a16c4eb42b..f7d72a2678 100644 --- a/src/USER-REAXC/reaxc_multi_body.cpp +++ b/src/USER-REAXC/reaxc_multi_body.cpp @@ -32,7 +32,7 @@ void Atom_Energy( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, - output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp ) + output_controls * /*out_control*/ ) { int i, j, pj, type_i, type_j; double Delta_lpcorr, dfvl; diff --git a/src/USER-REAXC/reaxc_multi_body.h b/src/USER-REAXC/reaxc_multi_body.h index dc2c1040eb..a17c9f484e 100644 --- a/src/USER-REAXC/reaxc_multi_body.h +++ b/src/USER-REAXC/reaxc_multi_body.h @@ -30,6 +30,6 @@ #include "reaxc_types.h" void Atom_Energy( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL ); + storage*, reax_list**, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index 49a9f096dd..d273a417f8 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -30,7 +30,6 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" -using namespace LAMMPS_NS; void Reset_Atoms( reax_system* system, control_params *control ) { @@ -121,7 +120,7 @@ void Reset_Workspace( reax_system *system, storage *workspace ) } -void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system *system, control_params *control, +void Reset_Neighbor_Lists( reax_system *system, control_params *control, storage *workspace, reax_list **lists, MPI_Comm comm ) { @@ -147,7 +146,7 @@ void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system *system, control_params *con char errmsg[256]; snprintf(errmsg, 256, "p%d: not enough space for bonds! total=%d allocated=%d\n", system->my_rank, total_bonds, bonds->num_intrs); - lmp->error->one(FLERR, errmsg); + control->error_ptr->one(FLERR, errmsg); } } } @@ -173,14 +172,14 @@ void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system *system, control_params *con char errmsg[256]; snprintf(errmsg, 256, "p%d: not enough space for hbonds! total=%d allocated=%d\n", system->my_rank, total_hbonds, hbonds->num_intrs); - lmp->error->one(FLERR, errmsg); + control->error_ptr->one(FLERR, errmsg); } } } } -void Reset( LAMMPS *lmp, reax_system *system, control_params *control, simulation_data *data, +void Reset( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, MPI_Comm comm ) { Reset_Atoms( system, control ); @@ -189,6 +188,6 @@ void Reset( LAMMPS *lmp, reax_system *system, control_params *control, simulatio Reset_Workspace( system, workspace ); - Reset_Neighbor_Lists( lmp, system, control, workspace, lists, comm ); + Reset_Neighbor_Lists( system, control, workspace, lists, comm ); } diff --git a/src/USER-REAXC/reaxc_reset_tools.h b/src/USER-REAXC/reaxc_reset_tools.h index 9e2b9de980..c2a90072d5 100644 --- a/src/USER-REAXC/reaxc_reset_tools.h +++ b/src/USER-REAXC/reaxc_reset_tools.h @@ -29,16 +29,12 @@ #include "reaxc_types.h" -#include "lammps.h" -#include "error.h" -using namespace LAMMPS_NS; - void Reset_Pressures( simulation_data* ); void Reset_Simulation_Data( simulation_data*, int ); void Reset_Timing( reax_timing* ); void Reset_Workspace( reax_system*, storage* ); -void Reset_Neighbor_Lists( LAMMPS *lmp, reax_system*, control_params*, storage*, +void Reset_Neighbor_Lists( reax_system*, control_params*, storage*, reax_list**, MPI_Comm ); -void Reset( LAMMPS *lmp, reax_system*, control_params*, simulation_data*, storage*, +void Reset( reax_system*, control_params*, simulation_data*, storage*, reax_list**, MPI_Comm ); #endif diff --git a/src/USER-REAXC/reaxc_torsion_angles.cpp b/src/USER-REAXC/reaxc_torsion_angles.cpp index 50c3412928..ed76368d68 100644 --- a/src/USER-REAXC/reaxc_torsion_angles.cpp +++ b/src/USER-REAXC/reaxc_torsion_angles.cpp @@ -120,8 +120,7 @@ double Calculate_Omega( rvec dvec_ij, double r_ij, void Torsion_Angles( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control, - LAMMPS_NS::LAMMPS* lmp ) + reax_list **lists, output_controls *out_control ) { int i, j, k, l, pi, pj, pk, pl, pij, plk, natoms; int type_i, type_j, type_k, type_l; diff --git a/src/USER-REAXC/reaxc_torsion_angles.h b/src/USER-REAXC/reaxc_torsion_angles.h index 38236cb7dc..755e8c6532 100644 --- a/src/USER-REAXC/reaxc_torsion_angles.h +++ b/src/USER-REAXC/reaxc_torsion_angles.h @@ -30,7 +30,6 @@ #include "reaxc_types.h" void Torsion_Angles( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*, - LAMMPS_NS::LAMMPS* = NULL ); + storage*, reax_list**, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index d3b9e799d2..90f3d1e668 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -556,7 +556,7 @@ int Write_Atoms( reax_system *system, control_params * /*control*/, } -int Write_Bonds( reax_system *system, control_params *control, reax_list *bonds, +int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, output_controls *out_control, mpi_datatypes *mpi_data) { int i, j, pj, me, np; diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index b7845a0510..310ef42bdf 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -906,9 +906,9 @@ typedef void (*evolve_function)(reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes* ); -typedef void (*interaction_function) ( reax_system*, control_params*, +typedef void (*interaction_function) (reax_system*, control_params*, simulation_data*, storage*, - reax_list**, output_controls*, LAMMPS_NS::LAMMPS*); + reax_list**, output_controls*); typedef void (*print_interaction)(reax_system*, control_params*, simulation_data*, storage*, diff --git a/src/USER-REAXC/reaxc_valence_angles.cpp b/src/USER-REAXC/reaxc_valence_angles.cpp index d762dc1611..e0e94d18f8 100644 --- a/src/USER-REAXC/reaxc_valence_angles.cpp +++ b/src/USER-REAXC/reaxc_valence_angles.cpp @@ -76,7 +76,7 @@ void Calculate_dCos_Theta( rvec dvec_ji, double d_ji, rvec dvec_jk, double d_jk, void Valence_Angles( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls * /*out_control*/, LAMMPS_NS::LAMMPS* lmp) + reax_list **lists, output_controls * /*out_control*/ ) { int i, j, pi, k, pk, t; int type_i, type_j, type_k; @@ -408,7 +408,7 @@ void Valence_Angles( reax_system *system, control_params *control, char errmsg[128]; snprintf(errmsg, 128, "step%d-ran out of space on angle_list: top=%d, max=%d", data->step, num_thb_intrs, thb_intrs->num_intrs); - lmp->error->one(FLERR, errmsg); + control->error_ptr->one(FLERR, errmsg); } } diff --git a/src/USER-REAXC/reaxc_valence_angles.h b/src/USER-REAXC/reaxc_valence_angles.h index 27bda3ba09..51eac5a95e 100644 --- a/src/USER-REAXC/reaxc_valence_angles.h +++ b/src/USER-REAXC/reaxc_valence_angles.h @@ -30,7 +30,7 @@ #include "reaxc_types.h" void Valence_Angles( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*, LAMMPS_NS::LAMMPS* = NULL); + storage*, reax_list**, output_controls*); void Calculate_Theta( rvec, double, rvec, double, double*, double* ); From a89a2de9d4a9912aaa5f50feed6e2e020c5cfee4 Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 25 Mar 2019 16:45:59 +0100 Subject: [PATCH 028/372] Removed unnecessary MPI_comm --- src/USER-REAXC/pair_reaxc.cpp | 16 +-- src/USER-REAXC/reaxc_allocate.cpp | 159 +++++++++++++------------- src/USER-REAXC/reaxc_allocate.h | 11 +- src/USER-REAXC/reaxc_control.cpp | 1 - src/USER-REAXC/reaxc_control.h | 3 - src/USER-REAXC/reaxc_ffield.cpp | 57 ++++----- src/USER-REAXC/reaxc_forces.cpp | 12 +- src/USER-REAXC/reaxc_forces.h | 2 +- src/USER-REAXC/reaxc_init_md.cpp | 20 ++-- src/USER-REAXC/reaxc_init_md.h | 2 - src/USER-REAXC/reaxc_list.cpp | 22 ++-- src/USER-REAXC/reaxc_list.h | 4 +- src/USER-REAXC/reaxc_lookup.cpp | 74 +++++------- src/USER-REAXC/reaxc_lookup.h | 6 +- src/USER-REAXC/reaxc_reset_tools.cpp | 15 ++- src/USER-REAXC/reaxc_reset_tools.h | 4 +- src/USER-REAXC/reaxc_tool_box.cpp | 4 +- src/USER-REAXC/reaxc_tool_box.h | 4 +- src/USER-REAXC/reaxc_traj.cpp | 15 ++- src/USER-REAXC/reaxc_valence_angles.h | 2 +- 20 files changed, 192 insertions(+), 241 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index a9501dac9d..8b36019881 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -141,10 +141,10 @@ PairReaxC::~PairReaxC() if (control->tabulate ) Deallocate_Lookup_Tables( system); - if (control->hbond_cut > 0 ) Delete_List( lists+HBONDS, world); - Delete_List( lists+BONDS, world ); - Delete_List( lists+THREE_BODIES, world ); - Delete_List( lists+FAR_NBRS, world ); + if (control->hbond_cut > 0 ) Delete_List( lists+HBONDS ); + Delete_List( lists+BONDS ); + Delete_List( lists+THREE_BODIES ); + Delete_List( lists+FAR_NBRS ); DeAllocate_Workspace( control, workspace ); DeAllocate_System( system ); @@ -439,12 +439,12 @@ void PairReaxC::setup( ) // initialize my data structures - PreAllocate_Space( system, control, workspace, world ); + PreAllocate_Space( system, control, workspace ); write_reax_atoms(); int num_nbrs = estimate_reax_lists(); if(!Make_List(system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, - lists+FAR_NBRS, world)) + lists+FAR_NBRS)) error->one(FLERR,"Pair reax/c problem in far neighbor list"); (lists+FAR_NBRS)->error_ptr=lmp->error; @@ -469,7 +469,7 @@ void PairReaxC::setup( ) // check if I need to shrink/extend my data-structs - ReAllocate( system, control, data, workspace, &lists, mpi_data ); + ReAllocate( system, control, data, workspace, &lists ); } bigint local_ngroup = list->inum; @@ -521,7 +521,7 @@ void PairReaxC::compute(int eflag, int vflag) setup(); - Reset( system, control, data, workspace, &lists, world ); + Reset( system, control, data, workspace, &lists ); workspace->realloc.num_far = write_reax_lists(); // timing for filling in the reax lists if (comm->me == 0) { diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index 8784c854b5..7649c110ef 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -44,7 +44,7 @@ using namespace LAMMPS_NS; process's box throughout the whole simulation. therefore we need to make upper bound estimates for various data structures */ int PreAllocate_Space( reax_system *system, control_params * /*control*/, - storage * workspace, MPI_Comm comm ) + storage * workspace ) { int mincap = system->mincap; double safezone = system->safezone; @@ -55,7 +55,7 @@ int PreAllocate_Space( reax_system *system, control_params * /*control*/, system->total_cap = MAX( (int)(system->N * safezone), mincap ); system->my_atoms = (reax_atom*) - scalloc(system->error_ptr, system->total_cap, sizeof(reax_atom), "my_atoms", comm ); + scalloc(system->error_ptr, system->total_cap, sizeof(reax_atom), "my_atoms"); // Nullify some arrays only used in omp styles // Should be safe to do here since called in pair->setup(); @@ -212,7 +212,7 @@ void DeAllocate_Workspace( control_params * control, storage *workspace ) int Allocate_Workspace( reax_system * /*system*/, control_params * control, storage *workspace, int local_cap, int total_cap, - MPI_Comm comm, char * /*msg*/ ) + char * /*msg*/ ) { int i, total_real, total_rvec, local_rvec; @@ -224,84 +224,84 @@ int Allocate_Workspace( reax_system * /*system*/, control_params * control, /* communication storage */ for( i = 0; i < MAX_NBRS; ++i ) { workspace->tmp_dbl[i] = (double*) - scalloc(control->error_ptr, total_cap, sizeof(double), "tmp_dbl", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "tmp_dbl"); workspace->tmp_rvec[i] = (rvec*) - scalloc(control->error_ptr, total_cap, sizeof(rvec), "tmp_rvec", comm ); + scalloc(control->error_ptr, total_cap, sizeof(rvec), "tmp_rvec"); workspace->tmp_rvec2[i] = (rvec2*) - scalloc(control->error_ptr, total_cap, sizeof(rvec2), "tmp_rvec2", comm ); + scalloc(control->error_ptr, total_cap, sizeof(rvec2), "tmp_rvec2"); } /* bond order related storage */ workspace->within_bond_box = (int*) - scalloc(control->error_ptr, total_cap, sizeof(int), "skin", comm ); - workspace->total_bond_order = (double*) smalloc(control->error_ptr, total_real, "total_bo", comm ); - workspace->Deltap = (double*) smalloc(control->error_ptr, total_real, "Deltap", comm ); - workspace->Deltap_boc = (double*) smalloc(control->error_ptr, total_real, "Deltap_boc", comm ); - workspace->dDeltap_self = (rvec*) smalloc(control->error_ptr, total_rvec, "dDeltap_self", comm ); - workspace->Delta = (double*) smalloc(control->error_ptr, total_real, "Delta", comm ); - workspace->Delta_lp = (double*) smalloc(control->error_ptr, total_real, "Delta_lp", comm ); + scalloc(control->error_ptr, total_cap, sizeof(int), "skin"); + workspace->total_bond_order = (double*) smalloc(control->error_ptr, total_real, "total_bo"); + workspace->Deltap = (double*) smalloc(control->error_ptr, total_real, "Deltap"); + workspace->Deltap_boc = (double*) smalloc(control->error_ptr, total_real, "Deltap_boc"); + workspace->dDeltap_self = (rvec*) smalloc(control->error_ptr, total_rvec, "dDeltap_self"); + workspace->Delta = (double*) smalloc(control->error_ptr, total_real, "Delta"); + workspace->Delta_lp = (double*) smalloc(control->error_ptr, total_real, "Delta_lp"); workspace->Delta_lp_temp = (double*) - smalloc(control->error_ptr, total_real, "Delta_lp_temp", comm ); - workspace->dDelta_lp = (double*) smalloc(control->error_ptr, total_real, "dDelta_lp", comm ); + smalloc(control->error_ptr, total_real, "Delta_lp_temp"); + workspace->dDelta_lp = (double*) smalloc(control->error_ptr, total_real, "dDelta_lp"); workspace->dDelta_lp_temp = (double*) - smalloc(control->error_ptr, total_real, "dDelta_lp_temp", comm ); - workspace->Delta_e = (double*) smalloc(control->error_ptr, total_real, "Delta_e", comm ); - workspace->Delta_boc = (double*) smalloc(control->error_ptr, total_real, "Delta_boc", comm ); - workspace->Delta_val = (double*) smalloc(control->error_ptr, total_real, "Delta_val", comm ); - workspace->nlp = (double*) smalloc(control->error_ptr, total_real, "nlp", comm ); - workspace->nlp_temp = (double*) smalloc(control->error_ptr, total_real, "nlp_temp", comm ); - workspace->Clp = (double*) smalloc(control->error_ptr, total_real, "Clp", comm ); - workspace->vlpex = (double*) smalloc(control->error_ptr, total_real, "vlpex", comm ); + smalloc(control->error_ptr, total_real, "dDelta_lp_temp"); + workspace->Delta_e = (double*) smalloc(control->error_ptr, total_real, "Delta_e"); + workspace->Delta_boc = (double*) smalloc(control->error_ptr, total_real, "Delta_boc"); + workspace->Delta_val = (double*) smalloc(control->error_ptr, total_real, "Delta_val"); + workspace->nlp = (double*) smalloc(control->error_ptr, total_real, "nlp"); + workspace->nlp_temp = (double*) smalloc(control->error_ptr, total_real, "nlp_temp"); + workspace->Clp = (double*) smalloc(control->error_ptr, total_real, "Clp"); + workspace->vlpex = (double*) smalloc(control->error_ptr, total_real, "vlpex"); workspace->bond_mark = (int*) - scalloc(control->error_ptr, total_cap, sizeof(int), "bond_mark", comm ); + scalloc(control->error_ptr, total_cap, sizeof(int), "bond_mark"); workspace->done_after = (int*) - scalloc(control->error_ptr, total_cap, sizeof(int), "done_after", comm ); + scalloc(control->error_ptr, total_cap, sizeof(int), "done_after"); /* QEq storage */ workspace->Hdia_inv = (double*) - scalloc(control->error_ptr, total_cap, sizeof(double), "Hdia_inv", comm ); - workspace->b_s = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_s", comm ); - workspace->b_t = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_t", comm ); - workspace->b_prc = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_prc", comm ); - workspace->b_prm = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_prm", comm ); - workspace->s = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "s", comm ); - workspace->t = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "t", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "Hdia_inv"); + workspace->b_s = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_s"); + workspace->b_t = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_t"); + workspace->b_prc = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_prc"); + workspace->b_prm = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "b_prm"); + workspace->s = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "s"); + workspace->t = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "t"); workspace->droptol = (double*) - scalloc(control->error_ptr, total_cap, sizeof(double), "droptol", comm ); - workspace->b = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "b", comm ); - workspace->x = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "x", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "droptol"); + workspace->b = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "b"); + workspace->x = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "x"); /* GMRES storage */ - workspace->y = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "y", comm ); - workspace->z = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "z", comm ); - workspace->g = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "g", comm ); - workspace->h = (double**) scalloc(control->error_ptr, RESTART+1, sizeof(double*), "h", comm ); - workspace->hs = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "hs", comm ); - workspace->hc = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "hc", comm ); - workspace->v = (double**) scalloc(control->error_ptr, RESTART+1, sizeof(double*), "v", comm ); + workspace->y = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "y"); + workspace->z = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "z"); + workspace->g = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "g"); + workspace->h = (double**) scalloc(control->error_ptr, RESTART+1, sizeof(double*), "h"); + workspace->hs = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "hs"); + workspace->hc = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "hc"); + workspace->v = (double**) scalloc(control->error_ptr, RESTART+1, sizeof(double*), "v"); for( i = 0; i < RESTART+1; ++i ) { - workspace->h[i] = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "h[i]", comm ); - workspace->v[i] = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "v[i]", comm ); + workspace->h[i] = (double*) scalloc(control->error_ptr, RESTART+1, sizeof(double), "h[i]"); + workspace->v[i] = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "v[i]"); } /* CG storage */ - workspace->r = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "r", comm ); - workspace->d = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "d", comm ); - workspace->q = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "q", comm ); - workspace->p = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "p", comm ); - workspace->r2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "r2", comm ); - workspace->d2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "d2", comm ); - workspace->q2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "q2", comm ); - workspace->p2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "p2", comm ); + workspace->r = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "r"); + workspace->d = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "d"); + workspace->q = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "q"); + workspace->p = (double*) scalloc(control->error_ptr, total_cap, sizeof(double), "p"); + workspace->r2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "r2"); + workspace->d2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "d2"); + workspace->q2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "q2"); + workspace->p2 = (rvec2*) scalloc(control->error_ptr, total_cap, sizeof(rvec2), "p2"); /* integrator storage */ - workspace->v_const = (rvec*) smalloc(control->error_ptr, local_rvec, "v_const", comm ); + workspace->v_const = (rvec*) smalloc(control->error_ptr, local_rvec, "v_const"); /* force related storage */ - workspace->f = (rvec*) scalloc(control->error_ptr, total_cap, sizeof(rvec), "f", comm ); + workspace->f = (rvec*) scalloc(control->error_ptr, total_cap, sizeof(rvec), "f"); workspace->CdDelta = (double*) - scalloc(control->error_ptr, total_cap, sizeof(double), "CdDelta", comm ); + scalloc(control->error_ptr, total_cap, sizeof(double), "CdDelta"); // storage for reductions with multiple threads #ifdef LMP_USER_OMP @@ -322,17 +322,16 @@ int Allocate_Workspace( reax_system * /*system*/, control_params * control, static void Reallocate_Neighbor_List( reax_list *far_nbrs, int n, - int num_intrs, MPI_Comm comm ) + int num_intrs ) { - Delete_List( far_nbrs, comm ); - if(!Make_List( n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs, comm )){ + Delete_List( far_nbrs); + if(!Make_List( n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs )){ far_nbrs->error_ptr->one(FLERR,"Problem in initializing far neighbors list"); } } -static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, - MPI_Comm comm ) +static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds ) { int i, total_hbonds; @@ -346,8 +345,8 @@ static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, } total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); - Delete_List( hbonds, comm ); - if (!Make_List( system->Hcap, total_hbonds, TYP_HBOND, hbonds, comm )) { + Delete_List( hbonds); + if (!Make_List( system->Hcap, total_hbonds, TYP_HBOND, hbonds )) { hbonds->error_ptr->one(FLERR, "Not enough space for hydrogen bonds list"); } @@ -356,8 +355,7 @@ static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds, static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, - int *total_bonds, int *est_3body, - MPI_Comm comm ) + int *total_bonds, int *est_3body ) { int i; @@ -378,8 +376,8 @@ static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, sfree(system->error_ptr, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); #endif - Delete_List( bonds, comm ); - if(!Make_List(system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) { + Delete_List( bonds); + if(!Make_List(system->total_cap, *total_bonds, TYP_BOND, bonds)) { bonds->error_ptr->one(FLERR, "Not enough space for bonds list"); } @@ -401,14 +399,12 @@ static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, void ReAllocate( reax_system *system, control_params *control, - simulation_data *data, storage *workspace, reax_list **lists, - mpi_datatypes *mpi_data ) + simulation_data *data, storage *workspace, reax_list **lists ) { int num_bonds, est_3body, Hflag, ret; int renbr, newsize; reallocate_data *realloc; reax_list *far_nbrs; - MPI_Comm comm; char msg[200]; int mincap = system->mincap; @@ -416,7 +412,6 @@ void ReAllocate( reax_system *system, control_params *control, double saferzone = system->saferzone; realloc = &(workspace->realloc); - comm = mpi_data->world; if( system->n >= DANGER_ZONE * system->local_cap || (0 && system->n <= LOOSE_ZONE * system->local_cap) ) { @@ -434,18 +429,18 @@ void ReAllocate( reax_system *system, control_params *control, /* system */ ret = Allocate_System( system, system->local_cap, system->total_cap, msg ); if (ret != SUCCESS) { - char errmsg[128]; - snprintf(errmsg, 128, "Not enough space for atom_list: total_cap=%d", system->total_cap); + char errmsg[256]; + snprintf(errmsg, 256, "Not enough space for atom_list: total_cap=%d", system->total_cap); system->error_ptr->one(FLERR, errmsg); } /* workspace */ DeAllocate_Workspace( control, workspace ); ret = Allocate_Workspace( system, control, workspace, system->local_cap, - system->total_cap, comm, msg ); + system->total_cap, msg ); if (ret != SUCCESS) { - char errmsg[128]; - snprintf(errmsg, 128, "Not enough space for workspace: local_cap=%d total_cap=%d", system->local_cap, system->total_cap); + char errmsg[256]; + snprintf(errmsg, 256, "Not enough space for workspace: local_cap=%d total_cap=%d", system->local_cap, system->total_cap); system->error_ptr->one(FLERR, errmsg); } } @@ -458,15 +453,15 @@ void ReAllocate( reax_system *system, control_params *control, if (Nflag || realloc->num_far >= far_nbrs->num_intrs * DANGER_ZONE) { if (realloc->num_far > far_nbrs->num_intrs) { - char errmsg[128]; - snprintf(errmsg, 128, "step%d-ran out of space on far_nbrs: top=%d, max=%d", data->step, realloc->num_far, far_nbrs->num_intrs); + char errmsg[256]; + snprintf(errmsg, 256, "step%d-ran out of space on far_nbrs: top=%d, max=%d", data->step, realloc->num_far, far_nbrs->num_intrs); system->error_ptr->one(FLERR, errmsg); } newsize = static_cast (MAX( realloc->num_far*safezone, mincap*MIN_NBRS )); - Reallocate_Neighbor_List( far_nbrs, system->total_cap, newsize, comm ); + Reallocate_Neighbor_List( far_nbrs, system->total_cap, newsize); realloc->num_far = 0; } } @@ -481,7 +476,7 @@ void ReAllocate( reax_system *system, control_params *control, } if (Hflag || realloc->hbonds) { - ret = Reallocate_HBonds_List( system, (*lists)+HBONDS, comm ); + ret = Reallocate_HBonds_List( system, (*lists)+HBONDS); realloc->hbonds = 0; } } @@ -490,14 +485,14 @@ void ReAllocate( reax_system *system, control_params *control, num_bonds = est_3body = -1; if (Nflag || realloc->bonds) { Reallocate_Bonds_List( system, (*lists)+BONDS, &num_bonds, - &est_3body, comm ); + &est_3body); realloc->bonds = 0; realloc->num_3body = MAX( realloc->num_3body, est_3body ) * 2; } /* 3-body list */ if (realloc->num_3body > 0) { - Delete_List( (*lists)+THREE_BODIES, comm ); + Delete_List( (*lists)+THREE_BODIES); if (num_bonds == -1) num_bonds = ((*lists)+BONDS)->num_intrs; @@ -505,7 +500,7 @@ void ReAllocate( reax_system *system, control_params *control, realloc->num_3body = (int)(MAX(realloc->num_3body*safezone, MIN_3BODIES)); if( !Make_List( num_bonds, realloc->num_3body, TYP_THREE_BODY, - (*lists)+THREE_BODIES, comm ) ) { + (*lists)+THREE_BODIES ) ) { system->error_ptr->one(FLERR, "Problem in initializing angles list"); } realloc->num_3body = -1; diff --git a/src/USER-REAXC/reaxc_allocate.h b/src/USER-REAXC/reaxc_allocate.h index f813204006..be203340f6 100644 --- a/src/USER-REAXC/reaxc_allocate.h +++ b/src/USER-REAXC/reaxc_allocate.h @@ -28,20 +28,15 @@ #define __ALLOCATE_H_ #include "reaxc_types.h" - -#include "lammps.h" -#include "error.h" -using namespace LAMMPS_NS; - -int PreAllocate_Space( reax_system*, control_params*, storage*, MPI_Comm ); +int PreAllocate_Space( reax_system*, control_params*, storage* ); int Allocate_System( reax_system*, int, int, char* ); void DeAllocate_System( reax_system* ); int Allocate_Workspace( reax_system*, control_params*, storage*, - int, int, MPI_Comm, char* ); + int, int, char* ); void DeAllocate_Workspace( control_params*, storage* ); void ReAllocate( reax_system*, control_params*, simulation_data*, storage*, - reax_list**, mpi_datatypes* ); + reax_list** ); #endif diff --git a/src/USER-REAXC/reaxc_control.cpp b/src/USER-REAXC/reaxc_control.cpp index 14b28615fb..0caae40156 100644 --- a/src/USER-REAXC/reaxc_control.cpp +++ b/src/USER-REAXC/reaxc_control.cpp @@ -28,7 +28,6 @@ #include "reaxc_control.h" #include "reaxc_tool_box.h" - char Read_Control_File( char *control_file, control_params* control, output_controls *out_control ) { diff --git a/src/USER-REAXC/reaxc_control.h b/src/USER-REAXC/reaxc_control.h index 47627aed61..b2b455d6b8 100644 --- a/src/USER-REAXC/reaxc_control.h +++ b/src/USER-REAXC/reaxc_control.h @@ -29,9 +29,6 @@ #include "reaxc_types.h" -#include "lammps.h" -#include "error.h" - char Read_Control_File( char*, control_params*, output_controls* ); #endif diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 987a11d252..28bc0429cc 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -44,7 +44,6 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, double val; MPI_Comm comm; int me; - comm = MPI_COMM_WORLD; MPI_Comm_rank(comm, &me); @@ -99,55 +98,45 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Allocating structures in reax_interaction */ reax->sbp = (single_body_parameters*) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(single_body_parameters), "sbp", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(single_body_parameters), "sbp"); reax->tbp = (two_body_parameters**) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(two_body_parameters*), "tbp"); reax->thbp= (three_body_header***) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header**), "thbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header**), "thbp"); reax->hbp = (hbond_parameters***) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters**), "hbp"); reax->fbp = (four_body_header****) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header***), "fbp", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header***), "fbp"); tor_flag = (char****) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(char***), "tor_flag", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char***), "tor_flag"); for( i = 0; i < reax->num_atom_types; i++ ) { reax->tbp[i] = (two_body_parameters*) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]"); reax->thbp[i]= (three_body_header**) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header*), "thbp[i]"); reax->hbp[i] = (hbond_parameters**) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]"); reax->fbp[i] = (four_body_header***) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header**), "fbp[i]"); tor_flag[i] = (char***) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char**), "tor_flag[i]"); for( j = 0; j < reax->num_atom_types; j++ ) { reax->thbp[i][j]= (three_body_header*) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]"); reax->hbp[i][j] = (hbond_parameters*) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]"); reax->fbp[i][j] = (four_body_header**) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]"); tor_flag[i][j] = (char**) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char*), "tor_flag[i,j]"); for (k=0; k < reax->num_atom_types; k++) { reax->fbp[i][j][k] = (four_body_header*) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]"); tor_flag[i][j][k] = (char*) - scalloc(control->error_ptr, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]", - comm ); + scalloc(control->error_ptr, reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]"); } } } @@ -163,7 +152,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity checks */ if (c < 9) { - control->error_ptr->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->all(FLERR,"Inconsistent ffield file"); } for( j = 0; j < (int)(strlen(tmp[0])); ++j ) @@ -185,7 +174,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - control->error_ptr->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->all(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].alpha = val; @@ -203,7 +192,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - control->error_ptr->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->all(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].r_pi_pi = val; @@ -221,7 +210,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - control->error_ptr->one(FLERR,"Inconsistent ffield file"); + control->error_ptr->all(FLERR,"Inconsistent ffield file"); } val = atof(tmp[0]); reax->sbp[i].p_ovun2 = val; @@ -240,7 +229,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c > 2) { - control->error_ptr->one(FLERR,"Force field file incompatible with 'lgvdw yes'"); + control->error_ptr->all(FLERR,"Force field file incompatible with 'lgvdw yes'"); } val = atof(tmp[0]); reax->sbp[i].lgcij = val; @@ -337,8 +326,6 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, fgets(s,MAX_LINE,fp); c=Tokenize(s,&tmp); - - j = atoi(tmp[0]) - 1; k = atoi(tmp[1]) - 1; diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index ff1dd839fb..afe9a059ed 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -116,7 +116,7 @@ void Compute_Total_Force( reax_system *system, control_params *control, } void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **lists, - int step, int /*n*/, int N, int numH, MPI_Comm comm ) + int step, int /*n*/, int N, int numH ) { int i, comp, Hindex; reax_list *bonds, *hbonds; @@ -176,8 +176,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l void Init_Forces_noQEq( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls * /*out_control*/, - MPI_Comm comm ) { + reax_list **lists, output_controls * /*out_control*/ ) { int i, j, pj; int start_i, end_i; int type_i, type_j; @@ -311,13 +310,13 @@ void Init_Forces_noQEq( reax_system *system, control_params *control, workspace->realloc.num_hbonds = num_hbonds; Validate_Lists( system, workspace, lists, data->step, - system->n, system->N, system->numH, comm ); + system->n, system->N, system->numH); } void Estimate_Storages( reax_system *system, control_params *control, reax_list **lists, int *Htop, int *hb_top, - int *bond_top, int *num_3body, MPI_Comm /*comm*/ ) + int *bond_top, int *num_3body ) { int i, j, pj; int start_i, end_i; @@ -439,10 +438,9 @@ void Compute_Forces( reax_system *system, control_params *control, reax_list **lists, output_controls *out_control, mpi_datatypes *mpi_data ) { - MPI_Comm comm = mpi_data->world; Init_Forces_noQEq( system, control, data, workspace, - lists, out_control, comm ); + lists, out_control); /********* bonded interactions ************/ Compute_Bonded_Forces( system, control, data, workspace, diff --git a/src/USER-REAXC/reaxc_forces.h b/src/USER-REAXC/reaxc_forces.h index 6c839a7023..bfad2e9b71 100644 --- a/src/USER-REAXC/reaxc_forces.h +++ b/src/USER-REAXC/reaxc_forces.h @@ -36,5 +36,5 @@ void Init_Force_Functions( control_params* ); void Compute_Forces( reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes* ); void Estimate_Storages( reax_system*, control_params*, reax_list**, - int*, int*, int*, int*, MPI_Comm ); + int*, int*, int*, int* ); #endif diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 27e60c580c..913bc241de 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -81,7 +81,7 @@ int Init_Simulation_Data( reax_system *system, control_params *control, return SUCCESS; } -void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm ) +void Init_Taper( control_params *control, storage *workspace ) { double d1, d7; double swa, swa2, swa3; @@ -122,12 +122,12 @@ void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm ) int Init_Workspace( reax_system *system, control_params *control, - storage *workspace, MPI_Comm comm, char *msg ) + storage *workspace, char *msg ) { int ret; ret = Allocate_Workspace( system, control, workspace, - system->local_cap, system->total_cap, comm, msg ); + system->local_cap, system->total_cap, msg ); if (ret != SUCCESS) return ret; @@ -135,7 +135,7 @@ int Init_Workspace( reax_system *system, control_params *control, Reset_Workspace( system, workspace ); /* Initialize the Taper function */ - Init_Taper( control, workspace, comm ); + Init_Taper( control, workspace); return SUCCESS; } @@ -159,17 +159,15 @@ int Init_Lists( reax_system *system, control_params *control, { int i, total_hbonds, total_bonds, bond_cap, num_3body, cap_3body, Htop; int *hb_top, *bond_top; - MPI_Comm comm; int mincap = system->mincap; double safezone = system->safezone; double saferzone = system->saferzone; - comm = mpi_data->world; bond_top = (int*) calloc( system->total_cap, sizeof(int) ); hb_top = (int*) calloc( system->local_cap, sizeof(int) ); Estimate_Storages( system, control, lists, - &Htop, hb_top, bond_top, &num_3body, comm ); + &Htop, hb_top, bond_top, &num_3body); if (control->hbond_cut > 0) { /* init H indexes */ @@ -181,7 +179,7 @@ int Init_Lists( reax_system *system, control_params *control, total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, - *lists+HBONDS, comm ) ) { + *lists+HBONDS ) ) { control->error_ptr->one(FLERR, "Not enough space for hbonds list."); } (*lists+HBONDS)->error_ptr = system->error_ptr; @@ -195,7 +193,7 @@ int Init_Lists( reax_system *system, control_params *control, bond_cap = (int)(MAX( total_bonds*safezone, mincap*MIN_BONDS )); if( !Make_List( system->total_cap, bond_cap, TYP_BOND, - *lists+BONDS, comm ) ) { + *lists+BONDS ) ) { control->error_ptr->one(FLERR, "Not enough space for bonds list."); } (*lists+BONDS)->error_ptr = system->error_ptr; @@ -203,7 +201,7 @@ int Init_Lists( reax_system *system, control_params *control, /* 3bodies list */ cap_3body = (int)(MAX( num_3body*safezone, MIN_3BODIES )); if( !Make_List( bond_cap, cap_3body, TYP_THREE_BODY, - *lists+THREE_BODIES, comm ) ){ + *lists+THREE_BODIES ) ){ control->error_ptr->one(FLERR,"Problem in initializing angles list."); } (*lists+THREE_BODIES)->error_ptr = system->error_ptr; @@ -242,7 +240,7 @@ void Initialize( reax_system *system, control_params *control, control->error_ptr->one(FLERR,errmsg); } - if (Init_Workspace( system, control, workspace, mpi_data->world, msg ) == + if (Init_Workspace( system, control, workspace, msg ) == FAILURE) { snprintf(errmsg, 128, "Workspace could not be initialized on thread %d", system->my_rank); diff --git a/src/USER-REAXC/reaxc_init_md.h b/src/USER-REAXC/reaxc_init_md.h index 546a9e33c9..ab519a4c72 100644 --- a/src/USER-REAXC/reaxc_init_md.h +++ b/src/USER-REAXC/reaxc_init_md.h @@ -29,8 +29,6 @@ #include "reaxc_types.h" -#include "lammps.h" -#include "error.h" void Initialize( reax_system*, control_params*, simulation_data*, storage*, reax_list**, output_controls*, mpi_datatypes*, MPI_Comm ); diff --git a/src/USER-REAXC/reaxc_list.cpp b/src/USER-REAXC/reaxc_list.cpp index f103e520e8..d0143ec9ae 100644 --- a/src/USER-REAXC/reaxc_list.cpp +++ b/src/USER-REAXC/reaxc_list.cpp @@ -29,7 +29,7 @@ #include "reaxc_tool_box.h" /************* allocate list space ******************/ -int Make_List( int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) +int Make_List(int n, int num_intrs, int type, reax_list *l ) { l->allocated = 1; @@ -38,52 +38,52 @@ int Make_List( int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) if (l->index) sfree(l->error_ptr, l->index, "list:index"); if (l->end_index) sfree(l->error_ptr, l->end_index, "list:end_index"); - l->index = (int*) smalloc(l->error_ptr, n * sizeof(int), "list:index", comm ); - l->end_index = (int*) smalloc(l->error_ptr, n * sizeof(int), "list:end_index", comm ); + l->index = (int*) smalloc(l->error_ptr, n * sizeof(int), "list:index"); + l->end_index = (int*) smalloc(l->error_ptr, n * sizeof(int), "list:end_index"); l->type = type; switch(l->type) { case TYP_VOID: if (l->select.v) sfree(l->error_ptr, l->select.v, "list:v"); - l->select.v = (void*) smalloc(l->error_ptr, l->num_intrs * sizeof(void*), "list:v", comm); + l->select.v = (void*) smalloc(l->error_ptr, l->num_intrs * sizeof(void*), "list:v"); break; case TYP_THREE_BODY: if (l->select.three_body_list) sfree(l->error_ptr, l->select.three_body_list,"list:three_bodies"); l->select.three_body_list = (three_body_interaction_data*) smalloc(l->error_ptr, l->num_intrs * sizeof(three_body_interaction_data), - "list:three_bodies", comm ); + "list:three_bodies"); break; case TYP_BOND: if (l->select.bond_list) sfree(l->error_ptr, l->select.bond_list,"list:bonds"); l->select.bond_list = (bond_data*) - smalloc(l->error_ptr, l->num_intrs * sizeof(bond_data), "list:bonds", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(bond_data), "list:bonds"); break; case TYP_DBO: if (l->select.dbo_list) sfree(l->error_ptr, l->select.dbo_list,"list:dbonds"); l->select.dbo_list = (dbond_data*) - smalloc(l->error_ptr, l->num_intrs * sizeof(dbond_data), "list:dbonds", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(dbond_data), "list:dbonds"); break; case TYP_DDELTA: if (l->select.dDelta_list) sfree(l->error_ptr, l->select.dDelta_list,"list:dDeltas"); l->select.dDelta_list = (dDelta_data*) - smalloc(l->error_ptr, l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(dDelta_data), "list:dDeltas"); break; case TYP_FAR_NEIGHBOR: if (l->select.far_nbr_list) sfree(l->error_ptr, l->select.far_nbr_list,"list:far_nbrs"); l->select.far_nbr_list = (far_neighbor_data*) - smalloc(l->error_ptr, l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm); + smalloc(l->error_ptr, l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs"); break; case TYP_HBOND: if (l->select.hbond_list) sfree(l->error_ptr, l->select.hbond_list,"list:hbonds"); l->select.hbond_list = (hbond_data*) - smalloc(l->error_ptr, l->num_intrs * sizeof(hbond_data), "list:hbonds", comm ); + smalloc(l->error_ptr, l->num_intrs * sizeof(hbond_data), "list:hbonds"); break; default: @@ -96,7 +96,7 @@ int Make_List( int n, int num_intrs, int type, reax_list *l, MPI_Comm comm) } -void Delete_List( reax_list *l, MPI_Comm comm ) +void Delete_List( reax_list *l ) { if (l->allocated == 0) return; diff --git a/src/USER-REAXC/reaxc_list.h b/src/USER-REAXC/reaxc_list.h index ab7fbce19c..28567252da 100644 --- a/src/USER-REAXC/reaxc_list.h +++ b/src/USER-REAXC/reaxc_list.h @@ -29,8 +29,8 @@ #include "reaxc_types.h" -int Make_List( int, int, int, reax_list*, MPI_Comm ); -void Delete_List( reax_list*, MPI_Comm ); +int Make_List( int, int, int, reax_list* ); +void Delete_List( reax_list* ); inline int Num_Entries(int,reax_list*); inline int Start_Index( int, reax_list* ); diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp index b140b0cadf..74d8176522 100644 --- a/src/USER-REAXC/reaxc_lookup.cpp +++ b/src/USER-REAXC/reaxc_lookup.cpp @@ -51,18 +51,17 @@ void Tridiagonal_Solve( const double *a, const double *b, void Natural_Cubic_Spline( LAMMPS_NS::Error* error_ptr, const double *h, const double *f, - cubic_spline_coef *coef, unsigned int n, - MPI_Comm comm ) + cubic_spline_coef *coef, unsigned int n ) { int i; double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + b = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + c = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + d = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + v = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); /* build the linear system */ a[0] = a[1] = a[n-1] = 0; @@ -102,18 +101,17 @@ void Natural_Cubic_Spline( LAMMPS_NS::Error* error_ptr, const double *h, const d void Complete_Cubic_Spline( LAMMPS_NS::Error* error_ptr, const double *h, const double *f, double v0, double vlast, - cubic_spline_coef *coef, unsigned int n, - MPI_Comm comm ) + cubic_spline_coef *coef, unsigned int n ) { int i; double *a, *b, *c, *d, *v; /* allocate space for the linear system */ - a = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - b = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - c = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - d = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); - v = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a", comm ); + a = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + b = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + c = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + d = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); + v = (double*) smalloc(error_ptr, n * sizeof(double), "cubic_spline:a"); /* build the linear system */ a[0] = 0; @@ -159,35 +157,33 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, double dr; double *h, *fh, *fvdw, *fele, *fCEvd, *fCEclmb; double v0_vdw, v0_ele, vlast_vdw, vlast_ele; - MPI_Comm comm; /* initializations */ v0_vdw = 0; v0_ele = 0; vlast_vdw = 0; vlast_ele = 0; - comm = mpi_data->world; num_atom_types = system->reax_param.num_atom_types; dr = control->nonb_cut / control->tabulate; h = (double*) - smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:h", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:h"); fh = (double*) - smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fh", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fh"); fvdw = (double*) - smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fvdw", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fvdw"); fCEvd = (double*) - smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEvd", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEvd"); fele = (double*) - smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fele", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fele"); fCEclmb = (double*) - smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", comm ); + smalloc(system->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb"); LR = (LR_lookup_table**) - scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm ); + scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table*), "lookup:LR"); for( i = 0; i < num_atom_types; ++i ) LR[i] = (LR_lookup_table*) - scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm ); + scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]"); for( i = 0; i < MAX_ATOM_TYPES; ++i ) existing_types[i] = 0; @@ -207,22 +203,18 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, LR[i][j].dx = dr; LR[i][j].inv_dx = control->tabulate / control->nonb_cut; LR[i][j].y = (LR_data*) - smalloc(system->error_ptr, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm ); + smalloc(system->error_ptr, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y"); LR[i][j].H = (cubic_spline_coef*) - smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , - comm ); + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H"); LR[i][j].vdW = (cubic_spline_coef*) - smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", - comm); + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW"); LR[i][j].CEvd = (cubic_spline_coef*) - smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", - comm); + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd"); LR[i][j].ele = (cubic_spline_coef*) - smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", - comm ); + smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele"); LR[i][j].CEclmb = (cubic_spline_coef*) smalloc(system->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef), - "lookup:LR[i,j].CEclmb", comm ); + "lookup:LR[i,j].CEclmb"); for( r = 1; r <= control->tabulate; ++r ) { LR_vdW_Coulomb( system, workspace, control, i, j, r * dr, &(LR[i][j].y[r]) ); @@ -247,23 +239,19 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, vlast_ele = fele[r-1]; Natural_Cubic_Spline( control->error_ptr, &h[1], &fh[1], - &(LR[i][j].H[1]), control->tabulate+1, comm ); + &(LR[i][j].H[1]), control->tabulate+1); Complete_Cubic_Spline( control->error_ptr, &h[1], &fvdw[1], v0_vdw, vlast_vdw, - &(LR[i][j].vdW[1]), control->tabulate+1, - comm ); + &(LR[i][j].vdW[1]), control->tabulate+1); Natural_Cubic_Spline( control->error_ptr, &h[1], &fCEvd[1], - &(LR[i][j].CEvd[1]), control->tabulate+1, - comm ); + &(LR[i][j].CEvd[1]), control->tabulate+1); Complete_Cubic_Spline( control->error_ptr, &h[1], &fele[1], v0_ele, vlast_ele, - &(LR[i][j].ele[1]), control->tabulate+1, - comm ); + &(LR[i][j].ele[1]), control->tabulate+1); Natural_Cubic_Spline( control->error_ptr, &h[1], &fCEclmb[1], - &(LR[i][j].CEclmb[1]), control->tabulate+1, - comm ); + &(LR[i][j].CEclmb[1]), control->tabulate+1); } else { LR[i][j].n = 0; } diff --git a/src/USER-REAXC/reaxc_lookup.h b/src/USER-REAXC/reaxc_lookup.h index 9b1b14a34d..6d6aae2f8e 100644 --- a/src/USER-REAXC/reaxc_lookup.h +++ b/src/USER-REAXC/reaxc_lookup.h @@ -33,12 +33,10 @@ void Tridiagonal_Solve( const double *a, const double *b, double *c, double *d, double *x, unsigned int n); void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f, - cubic_spline_coef *coef, unsigned int n, - MPI_Comm comm ); + cubic_spline_coef *coef, unsigned int n ); void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f, double v0, double vlast, - cubic_spline_coef *coef, unsigned int n, - MPI_Comm comm ); + cubic_spline_coef *coef, unsigned int n ); int Init_Lookup_Tables( reax_system*, control_params*, storage*, mpi_datatypes*, char* ); diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index d273a417f8..8954e344df 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -121,8 +121,7 @@ void Reset_Workspace( reax_system *system, storage *workspace ) void Reset_Neighbor_Lists( reax_system *system, control_params *control, - storage *workspace, reax_list **lists, - MPI_Comm comm ) + storage *workspace, reax_list **lists ) { int i, total_bonds, Hindex, total_hbonds; reax_list *bonds, *hbonds; @@ -144,8 +143,8 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, workspace->realloc.bonds = 1; if (total_bonds >= bonds->num_intrs) { char errmsg[256]; - snprintf(errmsg, 256, "p%d: not enough space for bonds! total=%d allocated=%d\n", - system->my_rank, total_bonds, bonds->num_intrs); + snprintf(errmsg, 256, "Not enough space for bonds! total=%d allocated=%d\n", + total_bonds, bonds->num_intrs); control->error_ptr->one(FLERR, errmsg); } } @@ -170,8 +169,8 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, workspace->realloc.hbonds = 1; if (total_hbonds >= hbonds->num_intrs) { char errmsg[256]; - snprintf(errmsg, 256, "p%d: not enough space for hbonds! total=%d allocated=%d\n", - system->my_rank, total_hbonds, hbonds->num_intrs); + snprintf(errmsg, 256, "Not enough space for hbonds! total=%d allocated=%d\n", + total_hbonds, hbonds->num_intrs); control->error_ptr->one(FLERR, errmsg); } } @@ -180,7 +179,7 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, void Reset( reax_system *system, control_params *control, simulation_data *data, - storage *workspace, reax_list **lists, MPI_Comm comm ) + storage *workspace, reax_list **lists ) { Reset_Atoms( system, control ); @@ -188,6 +187,6 @@ void Reset( reax_system *system, control_params *control, simulation_data *data, Reset_Workspace( system, workspace ); - Reset_Neighbor_Lists( system, control, workspace, lists, comm ); + Reset_Neighbor_Lists( system, control, workspace, lists ); } diff --git a/src/USER-REAXC/reaxc_reset_tools.h b/src/USER-REAXC/reaxc_reset_tools.h index c2a90072d5..20d1ab6964 100644 --- a/src/USER-REAXC/reaxc_reset_tools.h +++ b/src/USER-REAXC/reaxc_reset_tools.h @@ -34,7 +34,7 @@ void Reset_Simulation_Data( simulation_data*, int ); void Reset_Timing( reax_timing* ); void Reset_Workspace( reax_system*, storage* ); void Reset_Neighbor_Lists( reax_system*, control_params*, storage*, - reax_list**, MPI_Comm ); + reax_list** ); void Reset( reax_system*, control_params*, simulation_data*, storage*, - reax_list**, MPI_Comm ); + reax_list** ); #endif diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index cd339af556..05ebc34c1b 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -56,7 +56,7 @@ int Tokenize( char* s, char*** tok ) /* safe malloc */ -void *smalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, const char *name, MPI_Comm comm ) +void *smalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, const char *name ) { void *ptr; char errmsg[256]; @@ -79,7 +79,7 @@ void *smalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, const char *name, MPI_C /* safe calloc */ -void *scalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, rc_bigint size, const char *name, MPI_Comm comm ) +void *scalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, rc_bigint size, const char *name ) { void *ptr; char errmsg[256]; diff --git a/src/USER-REAXC/reaxc_tool_box.h b/src/USER-REAXC/reaxc_tool_box.h index 257ff1813f..0465376dba 100644 --- a/src/USER-REAXC/reaxc_tool_box.h +++ b/src/USER-REAXC/reaxc_tool_box.h @@ -37,7 +37,7 @@ double Get_Time( ); int Tokenize( char*, char*** ); /* from lammps */ -void *smalloc( LAMMPS_NS::Error*, rc_bigint, const char*, MPI_Comm ); -void *scalloc( LAMMPS_NS::Error*, rc_bigint, rc_bigint, const char*, MPI_Comm ); +void *smalloc( LAMMPS_NS::Error*, rc_bigint, const char* ); +void *scalloc( LAMMPS_NS::Error*, rc_bigint, rc_bigint, const char* ); void sfree( LAMMPS_NS::Error*, void*, const char* ); #endif diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index 90f3d1e668..27bebb6327 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -29,8 +29,7 @@ #include "reaxc_list.h" #include "reaxc_tool_box.h" -int Reallocate_Output_Buffer( LAMMPS_NS::Error *error_ptr, output_controls *out_control, int req_space, - MPI_Comm comm ) +int Reallocate_Output_Buffer( LAMMPS_NS::Error *error_ptr, output_controls *out_control, int req_space ) { if (out_control->buffer_len > 0) free( out_control->buffer ); @@ -82,7 +81,7 @@ int Write_Header( reax_system *system, control_params *control, my_hdr_lines = num_hdr_lines * ( system->my_rank == MASTER_NODE ); buffer_req = my_hdr_lines * HEADER_LINE_LEN; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( control->error_ptr, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( control->error_ptr, out_control, buffer_req ); /* only the master node writes into trajectory header */ if (system->my_rank == MASTER_NODE) { @@ -277,7 +276,7 @@ int Write_Init_Desc( reax_system *system, control_params * /*control*/, else buffer_req = system->n * INIT_DESC_LEN + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req ); out_control->line[0] = 0; out_control->buffer[0] = 0; @@ -366,7 +365,7 @@ int Write_Frame_Header( reax_system *system, control_params *control, my_frm_hdr_lines = num_frm_hdr_lines * ( me == MASTER_NODE ); buffer_req = my_frm_hdr_lines * HEADER_LINE_LEN; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( control->error_ptr, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( control->error_ptr, out_control, buffer_req ); /* only the master node writes into trajectory header */ if (me == MASTER_NODE) { @@ -499,7 +498,7 @@ int Write_Atoms( reax_system *system, control_params * /*control*/, else buffer_req = system->n * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req ); /* fill in buffer */ out_control->line[0] = 0; @@ -589,7 +588,7 @@ int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, else buffer_req = my_bonds * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req ); /* fill in the buffer */ out_control->line[0] = 0; @@ -689,7 +688,7 @@ int Write_Angles( reax_system *system, control_params *control, else buffer_req = my_angles * line_len + 1; if (buffer_req > out_control->buffer_len * DANGER_ZONE) - Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req, mpi_data->world ); + Reallocate_Output_Buffer( system->error_ptr, out_control, buffer_req ); /* fill in the buffer */ my_angles = 0; diff --git a/src/USER-REAXC/reaxc_valence_angles.h b/src/USER-REAXC/reaxc_valence_angles.h index 51eac5a95e..31936ba190 100644 --- a/src/USER-REAXC/reaxc_valence_angles.h +++ b/src/USER-REAXC/reaxc_valence_angles.h @@ -30,7 +30,7 @@ #include "reaxc_types.h" void Valence_Angles( reax_system*, control_params*, simulation_data*, - storage*, reax_list**, output_controls*); + storage*, reax_list**, output_controls* ); void Calculate_Theta( rvec, double, rvec, double, double*, double* ); From 88755aefcadd1af3ee17e932d875e502f30b0748 Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 25 Mar 2019 17:44:52 +0100 Subject: [PATCH 029/372] Added support for reax/c/omp --- src/USER-OMP/pair_reaxc_omp.cpp | 10 ++-- src/USER-OMP/reaxc_forces_omp.cpp | 12 ++-- src/USER-OMP/reaxc_init_md_omp.cpp | 73 ++++++++++------------- src/USER-OMP/reaxc_valence_angles_omp.cpp | 19 +++--- src/USER-REAXC/reaxc_allocate.cpp | 8 +-- 5 files changed, 56 insertions(+), 66 deletions(-) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index 63beb61be6..fe158e30d4 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -113,7 +113,7 @@ PairReaxCOMP::~PairReaxCOMP() if (setup_flag) { reax_list * bonds = lists+BONDS; for (int i=0; inum_intrs; ++i) - sfree(bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); + sfree(LAMMPS_NS::Pointers::lmp->error, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); } memory->destroy(num_nbrs_offset); @@ -210,7 +210,7 @@ void PairReaxCOMP::compute(int eflag, int vflag) setup(); - Reset( system, control, data, workspace, &lists, world ); + Reset( system, control, data, workspace, &lists ); // Why not update workspace like in MPI-only code? // Using the MPI-only way messes up the hb energy @@ -411,12 +411,12 @@ void PairReaxCOMP::setup( ) // initialize my data structures - PreAllocate_Space( system, control, workspace, world ); + PreAllocate_Space( system, control, workspace ); write_reax_atoms(); int num_nbrs = estimate_reax_lists(); if(!Make_List(system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, - lists+FAR_NBRS, world)) + lists+FAR_NBRS)) error->all(FLERR,"Pair reax/c problem in far neighbor list"); write_reax_lists(); @@ -446,7 +446,7 @@ void PairReaxCOMP::setup( ) // check if I need to shrink/extend my data-structs - ReAllocate( system, control, data, workspace, &lists, mpi_data ); + ReAllocate( system, control, data, workspace, &lists ); } } diff --git a/src/USER-OMP/reaxc_forces_omp.cpp b/src/USER-OMP/reaxc_forces_omp.cpp index 80741a46a8..96b27c4c26 100644 --- a/src/USER-OMP/reaxc_forces_omp.cpp +++ b/src/USER-OMP/reaxc_forces_omp.cpp @@ -289,9 +289,10 @@ void Validate_ListsOMP( reax_system *system, storage * /*workspace */, reax_list else comp = bonds->num_intrs; if (End_Index(i, bonds) > comp) { - fprintf( stderr, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", - step, i, End_Index(i,bonds), comp ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + char errmsg[256]; + snprintf(errmsg, 256, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", + step, i, End_Index(i,bonds), comp ); + system->error_ptr->all(FLERR,errmsg); } } } @@ -315,9 +316,10 @@ void Validate_ListsOMP( reax_system *system, storage * /*workspace */, reax_list else comp = hbonds->num_intrs; if (End_Index(Hindex, hbonds) > comp) { - fprintf(stderr,"step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", + char errmsg[256]; + snprintf(errmsg, 256, "step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", step, Hindex, End_Index(Hindex,hbonds), comp ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + system->error_ptr->all(FLERR, errmsg); } } } diff --git a/src/USER-OMP/reaxc_init_md_omp.cpp b/src/USER-OMP/reaxc_init_md_omp.cpp index bd15b3b9df..fe7682d035 100644 --- a/src/USER-OMP/reaxc_init_md_omp.cpp +++ b/src/USER-OMP/reaxc_init_md_omp.cpp @@ -43,7 +43,7 @@ extern int Init_MPI_Datatypes(reax_system*, storage*, mpi_datatypes*, MPI_Comm, char*); extern int Init_System(reax_system*, control_params*, char*); extern int Init_Simulation_Data(reax_system*, control_params*, simulation_data*, char*); -extern int Init_Workspace(reax_system*, control_params*, storage*, MPI_Comm, char*); +extern int Init_Workspace(reax_system*, control_params*, storage*, char*); /* ---------------------------------------------------------------------- */ @@ -63,7 +63,7 @@ int Init_ListsOMP( reax_system *system, control_params *control, bond_top = (int*) calloc( system->total_cap, sizeof(int) ); hb_top = (int*) calloc( system->local_cap, sizeof(int) ); Estimate_Storages( system, control, lists, - &Htop, hb_top, bond_top, &num_3body, comm ); + &Htop, hb_top, bond_top, &num_3body ); if (control->hbond_cut > 0) { /* init H indexes */ @@ -75,9 +75,8 @@ int Init_ListsOMP( reax_system *system, control_params *control, total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, - *lists+HBONDS, comm ) ) { - fprintf( stderr, "not enough space for hbonds list. terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + *lists+HBONDS ) ) { + system->error_ptr->one( FLERR, "Not enough space for hbonds list. Terminating!" ); } } @@ -89,9 +88,8 @@ int Init_ListsOMP( reax_system *system, control_params *control, bond_cap = (int)(MAX( total_bonds*safezone, mincap*MIN_BONDS )); if( !Make_List( system->total_cap, bond_cap, TYP_BOND, - *lists+BONDS, comm ) ) { - fprintf( stderr, "not enough space for bonds list. terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + *lists+BONDS ) ) { + system->error_ptr->one( FLERR, "Not enough space for bonds list. Terminating!\n" ); } int nthreads = control->nthreads; @@ -99,15 +97,14 @@ int Init_ListsOMP( reax_system *system, control_params *control, for (i = 0; i < bonds->num_intrs; ++i) bonds->select.bond_list[i].bo_data.CdboReduction = - (double*) smalloc(sizeof(double)*nthreads, "CdboReduction", comm); + (double*) smalloc(system->error_ptr, sizeof(double)*nthreads, "CdboReduction"); /* 3bodies list */ cap_3body = (int)(MAX( num_3body*safezone, MIN_3BODIES )); if( !Make_List( bond_cap, cap_3body, TYP_THREE_BODY, - *lists+THREE_BODIES, comm ) ){ + *lists+THREE_BODIES ) ){ - fprintf( stderr, "Problem in initializing angles list. Terminating!\n" ); - MPI_Abort( comm, INSUFFICIENT_MEMORY ); + system->error_ptr->one( FLERR, "Problem in initializing angles list. Terminating!" ); } free( hb_top ); @@ -125,60 +122,50 @@ void InitializeOMP( reax_system *system, control_params *control, mpi_datatypes *mpi_data, MPI_Comm comm ) { char msg[MAX_STR]; + char errmsg[512]; if (Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE) { - fprintf( stderr, "p%d: init_mpi_datatypes: could not create datatypes\n", - system->my_rank ); - fprintf( stderr, "p%d: mpi_data couldn't be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + system->error_ptr->one( FLERR, "init_mpi_datatypes: could not create datatypes. " + "Mpi_data couldn't be initialized! Terminating."); } if (Init_System(system, control, msg) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: system could not be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf( errmsg, 512, "Error on: %s. " + "System could not be initialized! Terminating.", msg ); + system->error_ptr->one(FLERR, errmsg); } if (Init_Simulation_Data( system, control, data, msg ) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: sim_data couldn't be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf( errmsg, 512, "Error on: %s. " + "Sim_data couldn't be initialized! Terminating.", msg ); + system->error_ptr->one(FLERR, errmsg); } - if (Init_Workspace( system, control, workspace, mpi_data->world, msg ) == + if (Init_Workspace( system, control, workspace, msg ) == FAILURE) { - fprintf( stderr, "p%d:init_workspace: not enough memory\n", - system->my_rank ); - fprintf( stderr, "p%d:workspace couldn't be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + system->error_ptr->one(FLERR, "init_workspace: not enough memory. " + "Workspace couldn't be initialized! Terminating."); } if (Init_ListsOMP( system, control, data, workspace, lists, mpi_data, msg ) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: system could not be initialized! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf( errmsg, 512, "Error on: %s. " + "System could not be initialized! Terminating.", msg ); + system->error_ptr->one(FLERR, errmsg); } if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: could not open output files! terminating...\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf( errmsg, 512, "Error on: %s" + "Could not open output files! Terminating.", msg ); + system->error_ptr->one(FLERR, errmsg); } if (control->tabulate) { if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) { - fprintf( stderr, "p%d: %s\n", system->my_rank, msg ); - fprintf( stderr, "p%d: couldn't create lookup table! terminating.\n", - system->my_rank ); - MPI_Abort( mpi_data->world, CANNOT_INITIALIZE ); + snprintf( errmsg, 512, "Error on: %s." + " Couldn't create lookup table! Terminating.", msg ); + system->error_ptr->one(FLERR, errmsg); } } diff --git a/src/USER-OMP/reaxc_valence_angles_omp.cpp b/src/USER-OMP/reaxc_valence_angles_omp.cpp index 4164d39cab..195f16a75d 100644 --- a/src/USER-OMP/reaxc_valence_angles_omp.cpp +++ b/src/USER-OMP/reaxc_valence_angles_omp.cpp @@ -237,12 +237,12 @@ void Valence_AnglesOMP( reax_system *system, control_params *control, // Confirm that thb_intrs->num_intrs / nthreads is enough to hold all angles from a single atom if(my_offset >= (tid+1)*per_thread) { - int me; - MPI_Comm_rank(MPI_COMM_WORLD,&me); - fprintf( stderr, "step%d-ran out of space on angle_list on proc %i for atom %i:", data->step, me, j); - fprintf( stderr, " nthreads= %d, tid=%d, my_offset=%d, per_thread=%d\n", nthreads, tid, my_offset, per_thread); - fprintf( stderr, " num_intrs= %i N= %i\n",thb_intrs->num_intrs , system->N); - MPI_Abort( MPI_COMM_WORLD, INSUFFICIENT_MEMORY ); + char errmsg[512]; + snprintf( errmsg, 512, "step%d-ran out of space on angle_list for atom %i:\n" + " nthreads= %d, tid=%d, my_offset=%d, per_thread=%d\n" + " num_intrs= %i N= %i\n" + , data->step, j, nthreads, tid, my_offset, per_thread,thb_intrs->num_intrs , system->N); + control->error_ptr->one(FLERR, errmsg); } // Number of angles owned by this atom @@ -601,9 +601,10 @@ void Valence_AnglesOMP( reax_system *system, control_params *control, if (num_thb_intrs >= thb_intrs->num_intrs * DANGER_ZONE) { workspace->realloc.num_3body = num_thb_intrs * TWICE; if (num_thb_intrs > thb_intrs->num_intrs) { - fprintf( stderr, "step%d-ran out of space on angle_list: top=%d, max=%d", - data->step, num_thb_intrs, thb_intrs->num_intrs ); - MPI_Abort( MPI_COMM_WORLD, INSUFFICIENT_MEMORY ); + char errmsg[128]; + snprintf(errmsg, 128, "step%d-ran out of space on angle_list: top=%d, max=%d", + data->step, num_thb_intrs, thb_intrs->num_intrs); + control->error_ptr->one(FLERR, errmsg); } } diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index 7649c110ef..ff829db3dc 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -306,12 +306,12 @@ int Allocate_Workspace( reax_system * /*system*/, control_params * control, // storage for reductions with multiple threads #ifdef LMP_USER_OMP workspace->CdDeltaReduction = (double *) scalloc(control->error_ptr, sizeof(double), total_cap*control->nthreads, - "cddelta_reduce", comm); + "cddelta_reduce"); workspace->forceReduction = (rvec *) scalloc(control->error_ptr, sizeof(rvec), total_cap*control->nthreads, - "forceReduction", comm); + "forceReduction"); - workspace->valence_angle_atom_myoffset = (int *) scalloc(control->error_ptr, sizeof(int), total_cap, "valence_angle_atom_myoffset", comm); + workspace->valence_angle_atom_myoffset = (int *) scalloc(control->error_ptr, sizeof(int), total_cap, "valence_angle_atom_myoffset"); workspace->my_ext_pressReduction = (rvec *) calloc(sizeof(rvec), control->nthreads); #else LMP_UNUSED_PARAM(control); @@ -391,7 +391,7 @@ static int Reallocate_Bonds_List( reax_system *system, reax_list *bonds, if (system->omp_active) for (i = 0; i < bonds->num_intrs; ++i) bonds->select.bond_list[i].bo_data.CdboReduction = - (double*) smalloc(system->error_ptr, sizeof(double)*nthreads, "CdboReduction", comm); + (double*) smalloc(system->error_ptr, sizeof(double)*nthreads, "CdboReduction"); #endif return SUCCESS; From eedc88eb9b82701740e48903634395e7990b2cf3 Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 25 Mar 2019 18:01:31 +0100 Subject: [PATCH 030/372] MPI_Abort removed from reax/c/kk + fixed some declarations --- src/KOKKOS/pair_reaxc_kokkos.cpp | 74 ++++++++++++++------------------ src/USER-REAXC/reaxc_lookup.h | 4 +- 2 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 9930894f45..ec9ba79682 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -447,23 +447,23 @@ int PairReaxCKokkos::Init_Lookup_Tables() num_atom_types = atom->ntypes; dr = control->nonb_cut / control->tabulate; h = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:h", world ); + smalloc( control->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:h"); fh = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fh", world ); + smalloc( control->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fh"); fvdw = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fvdw", world ); + smalloc( control->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fvdw"); fCEvd = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fCEvd", world ); + smalloc( control->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEvd"); fele = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fele", world ); + smalloc( control->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fele"); fCEclmb = (double*) - smalloc( (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", world ); + smalloc( control->error_ptr, (control->tabulate+2) * sizeof(double), "lookup:fCEclmb"); LR = (LR_lookup_table**) - scalloc( num_atom_types+1, sizeof(LR_lookup_table*), "lookup:LR", world ); + scalloc( control->error_ptr, num_atom_types+1, sizeof(LR_lookup_table*), "lookup:LR"); for( i = 0; i < num_atom_types+1; ++i ) LR[i] = (LR_lookup_table*) - scalloc( num_atom_types+1, sizeof(LR_lookup_table), "lookup:LR[i]", world ); + scalloc( control->error_ptr, num_atom_types+1, sizeof(LR_lookup_table), "lookup:LR[i]"); for( i = 1; i <= num_atom_types; ++i ) { for( j = i; j <= num_atom_types; ++j ) { @@ -473,22 +473,18 @@ int PairReaxCKokkos::Init_Lookup_Tables() LR[i][j].dx = dr; LR[i][j].inv_dx = control->tabulate / control->nonb_cut; LR[i][j].y = (LR_data*) - smalloc( LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", world ); + smalloc( control->error_ptr, LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y"); LR[i][j].H = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" , - world ); + smalloc( control->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H"); LR[i][j].vdW = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW", - world); + smalloc( control->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW"); LR[i][j].CEvd = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd", - world); + smalloc( control->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd"); LR[i][j].ele = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele", - world ); + smalloc( control->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele"); LR[i][j].CEclmb = (cubic_spline_coef*) - smalloc( LR[i][j].n*sizeof(cubic_spline_coef), - "lookup:LR[i,j].CEclmb", world ); + smalloc( control->error_ptr, LR[i][j].n*sizeof(cubic_spline_coef), + "lookup:LR[i,j].CEclmb"); for( r = 1; r <= control->tabulate; ++r ) { LR_vdW_Coulomb(i, j, r * dr, &(LR[i][j].y[r]) ); @@ -512,24 +508,20 @@ int PairReaxCKokkos::Init_Lookup_Tables() vlast_vdw = fCEvd[r-1]; vlast_ele = fele[r-1]; - Natural_Cubic_Spline( &h[1], &fh[1], - &(LR[i][j].H[1]), control->tabulate+1, world ); + Natural_Cubic_Spline( control->error_ptr, &h[1], &fh[1], + &(LR[i][j].H[1]), control->tabulate+1 ); - Complete_Cubic_Spline( &h[1], &fvdw[1], v0_vdw, vlast_vdw, - &(LR[i][j].vdW[1]), control->tabulate+1, - world ); + Complete_Cubic_Spline( control->error_ptr, &h[1], &fvdw[1], v0_vdw, vlast_vdw, + &(LR[i][j].vdW[1]), control->tabulate+1 ); - Natural_Cubic_Spline( &h[1], &fCEvd[1], - &(LR[i][j].CEvd[1]), control->tabulate+1, - world ); + Natural_Cubic_Spline( control->error_ptr, &h[1], &fCEvd[1], + &(LR[i][j].CEvd[1]), control->tabulate+1 ); - Complete_Cubic_Spline( &h[1], &fele[1], v0_ele, vlast_ele, - &(LR[i][j].ele[1]), control->tabulate+1, - world ); + Complete_Cubic_Spline( control->error_ptr, &h[1], &fele[1], v0_ele, vlast_ele, + &(LR[i][j].ele[1]), control->tabulate+1 ); - Natural_Cubic_Spline( &h[1], &fCEclmb[1], - &(LR[i][j].CEclmb[1]), control->tabulate+1, - world ); + Natural_Cubic_Spline( control->error_ptr, &h[1], &fCEclmb[1], + &(LR[i][j].CEclmb[1]), control->tabulate+1 ); } } free(h); @@ -555,16 +547,16 @@ void PairReaxCKokkos::Deallocate_Lookup_Tables() for( i = 0; i <= ntypes; ++i ) { for( j = i; j <= ntypes; ++j ) if (LR[i][j].n) { - sfree( LR[i][j].y, "LR[i,j].y" ); - sfree( LR[i][j].H, "LR[i,j].H" ); - sfree( LR[i][j].vdW, "LR[i,j].vdW" ); - sfree( LR[i][j].CEvd, "LR[i,j].CEvd" ); - sfree( LR[i][j].ele, "LR[i,j].ele" ); - sfree( LR[i][j].CEclmb, "LR[i,j].CEclmb" ); + sfree( control->error_ptr, LR[i][j].y, "LR[i,j].y" ); + sfree( control->error_ptr, LR[i][j].H, "LR[i,j].H" ); + sfree( control->error_ptr, LR[i][j].vdW, "LR[i,j].vdW" ); + sfree( control->error_ptr, LR[i][j].CEvd, "LR[i,j].CEvd" ); + sfree( control->error_ptr, LR[i][j].ele, "LR[i,j].ele" ); + sfree( control->error_ptr, LR[i][j].CEclmb, "LR[i,j].CEclmb" ); } - sfree( LR[i], "LR[i]" ); + sfree( control->error_ptr, LR[i], "LR[i]" ); } - sfree( LR, "LR" ); + sfree( control->error_ptr, LR, "LR" ); } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-REAXC/reaxc_lookup.h b/src/USER-REAXC/reaxc_lookup.h index 6d6aae2f8e..3fd0c2581a 100644 --- a/src/USER-REAXC/reaxc_lookup.h +++ b/src/USER-REAXC/reaxc_lookup.h @@ -32,10 +32,10 @@ void Tridiagonal_Solve( const double *a, const double *b, double *c, double *d, double *x, unsigned int n); -void Natural_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f, +void Natural_Cubic_Spline( LAMMPS_NS::Error*, const double *h, const double *f, cubic_spline_coef *coef, unsigned int n ); -void Complete_Cubic_Spline( LAMMPS_NS::LAMMPS*, const double *h, const double *f, double v0, double vlast, +void Complete_Cubic_Spline( LAMMPS_NS::Error*, const double *h, const double *f, double v0, double vlast, cubic_spline_coef *coef, unsigned int n ); int Init_Lookup_Tables( reax_system*, control_params*, storage*, From 8c99752cecfc1b4508ec2ff2d05f4023079bd98b Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Tue, 19 Feb 2019 10:40:24 +0200 Subject: [PATCH 031/372] Add fix elstop to USER-MISC Implements inelastic energy loss for fast particles in solids. --- doc/src/Commands_fix.txt | 1 + doc/src/Eqs/fix_elstop.jpg | Bin 0 -> 2262 bytes doc/src/Eqs/fix_elstop.tex | 13 + doc/src/fix.txt | 1 + doc/src/fix_elstop.txt | 163 +++++ doc/src/fixes.txt | 1 + doc/src/lammps.book | 1 + doc/utils/sphinx-config/false_positives.txt | 6 + examples/USER/misc/elstop/Si.Si.elstop | 14 + examples/USER/misc/elstop/Si.sw | 1 + examples/USER/misc/elstop/in.elstop | 38 ++ examples/USER/misc/elstop/in.elstop.only | 39 ++ .../USER/misc/elstop/log.20Mar19.elstop.g++.1 | 597 ++++++++++++++++++ .../USER/misc/elstop/log.20Mar19.elstop.g++.4 | 597 ++++++++++++++++++ .../misc/elstop/log.20Mar19.elstop.only.g++.1 | 198 ++++++ .../misc/elstop/log.20Mar19.elstop.only.g++.4 | 198 ++++++ src/USER-MISC/README | 1 + src/USER-MISC/fix_elstop.cpp | 326 ++++++++++ src/USER-MISC/fix_elstop.h | 111 ++++ 19 files changed, 2306 insertions(+) create mode 100644 doc/src/Eqs/fix_elstop.jpg create mode 100644 doc/src/Eqs/fix_elstop.tex create mode 100644 doc/src/fix_elstop.txt create mode 100644 examples/USER/misc/elstop/Si.Si.elstop create mode 120000 examples/USER/misc/elstop/Si.sw create mode 100644 examples/USER/misc/elstop/in.elstop create mode 100644 examples/USER/misc/elstop/in.elstop.only create mode 100644 examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 create mode 100644 examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 create mode 100644 examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 create mode 100644 examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 create mode 100644 src/USER-MISC/fix_elstop.cpp create mode 100644 src/USER-MISC/fix_elstop.h diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 678cc9ba0d..ad884f7bd8 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -61,6 +61,7 @@ OPT. "edpd/source"_fix_dpd_source.html, "efield"_fix_efield.html, "ehex"_fix_ehex.html, +"elstop"_fix_elstop.html, "enforce2d (k)"_fix_enforce2d.html, "eos/cv"_fix_eos_cv.html, "eos/table"_fix_eos_table.html, diff --git a/doc/src/Eqs/fix_elstop.jpg b/doc/src/Eqs/fix_elstop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e862c938f0ee1d8795bacd7c69cf029e48dc913f GIT binary patch literal 2262 zcmb7E3p7;w8sD?`o?*;j&zNDz@t8bQneiB+GLBRx-SOx}WOR^lI3pJ!49cTH-gR7c zG>9IGL@7N8cd00Gyh0T2jE86_BHtSlA_!&o^P8JsLpjz}cP5eV`MWJF$pq(C4b$_Pn` zLZwoPiYhc^3XM#mQlyt)Ak+rN;;~pfMV=r}`M*ih2#{m}F3=8PNB~H}KqQRhF`y1$ z01%S8yGk$)gs?IgS@e|huli+xq#qzcs0{)k0DxI?SvC8&7kOXCT}`%Bd0AEYOw8t2 zPiJ^U&QV|e#C*RnRIj*h3*31uRc7;z!jztL(YMm=vyz2f^6_v!(TA`;aNz)K zO;7eO-+E1S@Lo5PT}|$3Y!{{+OnSUayZ#5yeP7OsHGXH+X|_7h9!7Rvzfz>S1T4lL zlvaSW8pBE`@qc)ZmdpkN#(f0=t|BbabU)~D~dF@x>9Hf{*; ze-Itw`w(ZIslI=M!wJG2gXBX`)$lJrg==09K3_st#^%|Z2Bks;j;^(o(Tc0DrhoS7 zT{HQnq=VOzyf9odaI7X*e5QxQcdq!zoIC~oB915Oy^gVpj_`9*kEG9Xe$om1N8;$o zO}S;>0o#mjKbqB;{NAdW&)ylFrJJ2&2#!Ww&CJI#&IB24w$kv7``~Dib8oijjnU5% z;C+(U+{v4jejh^G&6_>l^T{Qwi>aHt)rii`?iY?;<~`@iH|UI8SKZUC@zhgCj+C_H zrph{_#&rHhY&C4N>QA)sus6D9@?q?F_0Y7OrU$X1;%0#%f%NTzq-mS<^zi(SZ_JCm z7OGlru|gv`v&CN8Prq2i;-)9L)(hu?YA?`5vrT=?)rDWC9>&rp-*hPMt8<_0xO#ZZ zly<1Bn}*f54`hy{MFk{1i**e+AwSK@`||GfkA<=GCG=m%^|oH>xM53Hv^&-7dhRmU z{IN&Wg>yYO9&tkU_jQSF!dZbMe$}~_rPiTg^f!V-GIpa0HEXiNPdLDFT)cP=^3VGF zPy=jPo=w@-YCNo}z$!_9l%z_!P7x|sa9;ECO?o*g>ZcN-hXRvyN?Z4_qTlCzut_>iu?U55%XJW4EBrkdPI5d3+{(v=W}yd zU$*JqW;xCr`i26OhaVrNI?P}Djnu(9^&2ZF)ZB^k(*8H@0P_)~vZvBb} zi7m`#6BpKcf2AjGUicuF(4MV@gL54-Ph3CWZ8);=cfBR!GI4H9R)g_gKYNk={;J{- z-?+OGA>|t{B}6^*Ycj^4r+bI@xGtS8$R%^4dxt*_biN#?4Xyni-WzGkVMUHCf;N`B z!|FxXGVn7$JuZl-+wG8-$-@hFe$?$hCaeUCF2&e&3l81atTZp{JKA#Rb3;>*|4Aha z=gh6IqTjnD7@Sx!uCclki5k&NjOEv26mwBrq zG-#u@uUE4Da`q-vI#pIjJKltOsc9qu&|ePA3l8{(`4b42ql$&d*NtGlsWcq*R=(RvW*irSR5CJt`Gs zIw#CG_`I)8T9>~8U^*f?&ohCl_2s3{x9pfy)}U-|v1u`p05t;9mf^!))O3#wA0047 z1S7Wkmkqk-mbz%W8WJiuSvU?m*m~mfH5vtbpn!KW5yl1PRh&_nR~yO;%u*{viZ!AL<@Bk7H3`%-p4oT1y^re0W4AuXc#t2a|5mDEpE(|dFa#uxZIc9kLiJ!I z9O)#Ow0P0(PN)e9@(%lWI>kcH$LekP(ws$VT19Tmk&$~EslMgOAE!9JZ}0 wQG=JxCk(4U>C?HF=639WS2~otK{Z~8*Zt(N&FCP~m8OC;0-27BUXs3l0^?FYX#fBK literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/fix_elstop.tex b/doc/src/Eqs/fix_elstop.tex new file mode 100644 index 0000000000..760ded00f1 --- /dev/null +++ b/doc/src/Eqs/fix_elstop.tex @@ -0,0 +1,13 @@ +\documentclass[12pt]{article} + +\begin{document} + +$$ + {\vec F}_i = {\vec F}^{0}_i - \frac{{\vec v}_i}{\|\vec{v}_i\|}\cdot S_e +$$ + +\end{document} + + + + diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 395f2ad7a9..fa34dc17de 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -199,6 +199,7 @@ accelerated styles exist. "edpd/source"_fix_dpd_source.html - "efield"_fix_efield.html - impose electric field on system "ehex"_fix_ehex.html - enhanced heat exchange algorithm +"elstop"_fix_elstop.html - electronic stopping power as a friction force "enforce2d"_fix_enforce2d.html - zero out z-dimension velocity and force "eos/cv"_fix_eos_cv.html - "eos/table"_fix_eos_table.html - diff --git a/doc/src/fix_elstop.txt b/doc/src/fix_elstop.txt new file mode 100644 index 0000000000..75bb2ef101 --- /dev/null +++ b/doc/src/fix_elstop.txt @@ -0,0 +1,163 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix elstop command :h3 + +[Syntax:] + +fix ID group-ID elstop Ecut file keyword value ... :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +elstop = style name of this fix command :l +Ecut = minimum kinetic energy for electronic stopping (energy units) :l +file = name of the file containing the electronic stopping power table :l +zero or more keyword/value pairs may be appended to args :l +keyword = {region} or {minneigh} :l + {region} value = region-ID + region-ID = region, whose atoms will be affected by this fix + {minneigh} value = minneigh + minneigh = minimum number of neighbors for atoms to have elstop applied :pre +:ule + +[Examples:] + +fix el all elstop 10.0 elstop-table.txt +fix el all elstop 10.0 elstop-table.txt minneigh 3 +fix el mygroup elstop 1.0 elstop-table.txt region bulk :pre + +[Description:] + +This fix implements inelastic energy loss for fast projectiles in solids. It +applies a friction force to fast moving atoms to slow them down due to +"electronic stopping"_#elstopping (energy lost via electronic collisions per +unit of distance). This fix should be used for simulation of irradiation +damage or ion implantation, where the ions can lose noticeable amounts of +energy from electron excitations. If the electronic stopping power is not +considered, the simulated range of the ions can be severely overestimated +("Nordlund98"_#Nordlund98, "Nordlund95"_#Nordlund95). + +The electronic stopping is implemented by applying a friction force +to each atom as: + +:c,image(Eqs/fix_elstop.jpg) + +where \(\vec\{F\}_i\) is the resulting total force on the atom. \(\vec\{F\}^0_i\) +is the original force applied to the atom, \(\vec\{v\}_i\) is its velocity and +\(S_e\) is the stopping power of the ion. + +NOTE: In addition to electronic stopping, atomic cascades and irradiation +simulations require the use of an adaptive timestep (see +"fix dt/reset"_fix_dt_reset.html) and the repulsive ZBL potential (see +"ZBL"_pair_zbl.html potential) or similar. Without these settings the +interaction between the ion and the target atoms will be faulty. It is also +common to use in such simulations a thermostat ("fix_nvt"_fix_nh.html) in +the borders of the simulation cell. + +NOTE: This fix removes energy from fast projectiles without depositing it as a +heat to the simulation cell. Such implementation might lead to the unphysical +results when the amount of energy deposited to the electronic system is large, +e.g. simulations of Swift Heavy Ions (energy per nucleon of 100 keV/amu or +higher) or multiple projectiles. You could compensate energy loss by coupling +bulk atoms with some thermostat or control heat transfer between electronic and +atomic subsystems with the two-temperature model ("fix_ttm"_fix_ttm.html). + +At low velocities the electronic stopping is negligible. The electronic +friction is not applied to atoms whose kinetic energy is smaller than {Ecut}, +or smaller than the lowest energy value given in the table in {file}. +Electronic stopping should be applied only when a projectile reaches bulk +material. This fix scans neighbor list and excludes atoms with fewer than +{minneigh} neighbors (by default one). If the pair potential cutoff is large, +minneigh should be increased, though not above the number of nearest neighbors +in bulk material. An alternative is to disable the check for neighbors by +setting {minneigh} to zero and using the {region} keyword. This is necessary +when running simulations of cluster bombardment. + +If the {region} keyword is used, the atom must also be in the specified geometric +"region"_region.html in order to have electronic stopping applied to it. This is +useful if the position of the bulk material is fixed. By default the electronic +stopping is applied everywhere in the simulation cell. + +:line + +The energy ranges and stopping powers are read from the file {file}. +Lines starting with {#} and empty lines are ignored. Otherwise each +line must contain exactly [N+1] numbers, where [N] is the number of atom +types in the simulation. + +The first column is the energy for which the stopping powers on that +line apply. The energies must be sorted from the smallest to the largest. +The other columns are the stopping powers \(S_e\) for each atom type, +in ascending order, in force "units"_units.html. The stopping powers for +intermediate energy values are calculated with linear interpolation between +2 nearest points. + +For example: + +# This is a comment +# atom-1 atom-2 +# eV eV/Ang eV/Ang # units metal + 10 0 0 +250 60 80 +750 100 150 :pre + + +If an atom which would have electronic stopping applied to it has a +kinetic energy higher than the largest energy given in {file}, LAMMPS +will exit with an error message. + +The stopping power depends on the energy of the ion and the target +material. The electronic stopping table can be obtained from +scientific publications, experimental databases or by using +"SRIM"_#SRIM software. Other programs such as "CasP"_#CasP or +"PASS"_#PASS can calculate the energy deposited as a function +of the impact parameter of the ion; these results can be used +to derive the stopping power. + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information about this fix is written to "binary restart +files"_restart.html. + +The "fix_modify"_fix_modify.html options are not supported. + +This fix computes a global scalar, which can be accessed by various +"output commands"_Howto_output.html. The scalar is the total energy +loss from electronic stopping applied by this fix since the start of +the latest run. It is considered "intensive". + +The {start/stop} keywords of the "run"_run.html command have no effect +on this fix. + +[Restrictions:] + +This pair style is part of the USER-MISC package. It is only enabled if +LAMMPS was built with that package. See the "Build package"_Build_package.html +doc page for more info. + +[Default:] + +The default is no limitation by region, and minneigh = 1. + +:line +:link(elstopping) +[(electronic stopping)] Wikipedia - Electronic Stopping Power: https://en.wikipedia.org/wiki/Stopping_power_%28particle_radiation%29 + +:link(Nordlund98) +[(Nordlund98)] Nordlund, Kai, et al. Physical Review B 57.13 (1998): 7556. + +:link(Nordlund95) +[(Nordlund95)] Nordlund, Kai. Computational materials science 3.4 (1995): 448-456. + +:link(SRIM) +[(SRIM)] SRIM webpage: http://www.srim.org/ + +:link(CasP) +[(CasP)] CasP webpage: https://www.helmholtz-berlin.de/people/gregor-schiwietz/casp_en.html + +:link(PASS) +[(PASS)] PASS webpage: https://www.sdu.dk/en/DPASS diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index 3853bb77a9..7bbf269a2c 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -40,6 +40,7 @@ Fixes :h1 fix_dt_reset fix_efield fix_ehex + fix_elstop fix_enforce2d fix_eos_cv fix_eos_table diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 6b220ed241..692ffcd712 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -264,6 +264,7 @@ fix_drude_transform.html fix_dt_reset.html fix_efield.html fix_ehex.html +fix_elstop.html fix_enforce2d.html fix_eos_cv.html fix_eos_table.html diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 6eb158396f..6d376d7b1f 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -286,6 +286,7 @@ Cao Capolungo Caro cartesian +CasP Caswell Cates Cavium @@ -647,6 +648,7 @@ ec Ec ecoul ecp +Ecut edgeIDs edihed edim @@ -690,6 +692,7 @@ elong Elsevier Elsner Elstner +elstop elt emacs emax @@ -1272,6 +1275,7 @@ Keir Kelchner Kelkar Kemper +keV Keyes Khersonskii Khrapak @@ -1608,6 +1612,7 @@ minima minimizations minimizer minimizers +minneigh minorder minSteps mintcream @@ -2919,6 +2924,7 @@ Wi Wicaksono wih Wijk +Wikipedia wildcard Wildcard Wirnsberger diff --git a/examples/USER/misc/elstop/Si.Si.elstop b/examples/USER/misc/elstop/Si.Si.elstop new file mode 100644 index 0000000000..51618149ff --- /dev/null +++ b/examples/USER/misc/elstop/Si.Si.elstop @@ -0,0 +1,14 @@ +# Electronic stopping for Si in Si +# Uses metal units +# Kinetic energy in eV, stopping power in eV/A +# For other atom types, add columns. + +# energy Si in Si + 3918.2 6.541 + 15672.9 13.091 + 35263.9 19.660 + 62691.5 26.257 + 97955.4 32.889 +141055.9 39.566 +191992.0 46.292 +250766.1 53.074 diff --git a/examples/USER/misc/elstop/Si.sw b/examples/USER/misc/elstop/Si.sw new file mode 120000 index 0000000000..e575921334 --- /dev/null +++ b/examples/USER/misc/elstop/Si.sw @@ -0,0 +1 @@ +../../../../potentials/Si.sw \ No newline at end of file diff --git a/examples/USER/misc/elstop/in.elstop b/examples/USER/misc/elstop/in.elstop new file mode 100644 index 0000000000..e31e6d8a65 --- /dev/null +++ b/examples/USER/misc/elstop/in.elstop @@ -0,0 +1,38 @@ +# Test case / example for the electronic stopping fix elstop +# Perfect Si lattice with one primary knock-on atom. +# +# Also uses fix dt/reset, as one should when energies are high +# enough to require electronic stopping. + +units metal +boundary p p p +timestep 0.0001 + +lattice fcc 5.431 + +region rbox block -10 10 -10 10 -10 10 +create_box 1 rbox + +mass 1 28.0855 + +create_atoms 1 box + +velocity all create 300 42534 mom yes rot yes + +group gPKA id 1 +velocity gPKA set 1120 1620 389 + +pair_style sw +pair_coeff * * Si.sw Si + +fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 +fix fel all elstop 1.0 Si.Si.elstop +fix fnve all nve + +thermo 10 +thermo_style custom step time dt f_fel + +#compute ek all ke/atom +#dump mydump all custom 200 elstop.dump id x y z vx vy vz fx fy fz c_ek + +run 5000 diff --git a/examples/USER/misc/elstop/in.elstop.only b/examples/USER/misc/elstop/in.elstop.only new file mode 100644 index 0000000000..1d09fa11f9 --- /dev/null +++ b/examples/USER/misc/elstop/in.elstop.only @@ -0,0 +1,39 @@ +# Test case / example for the electronic stopping fix elstop +# One fast atom, no other interactions. +# Elstop only applied in a smaller box in the middle. +# +# Also uses fix dt/reset, as one should when energies are high +# enough to require electronic stopping. + +units metal +boundary p p p +timestep 0.0001 + +lattice fcc 1 + +region rbox block -100 100 -100 100 -100 100 +region rsmallbox block -90 90 -90 90 -90 90 + +create_box 1 rbox + +mass 1 28.0855 + +create_atoms 1 single 0 0 0 +velocity all set 1120 1620 389 + +pair_style zero 1 +pair_coeff * * 1 + +fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 +fix fel all elstop 1.0 Si.Si.elstop minneigh 0 region rsmallbox +fix fnve all nve + +compute ek all ke/atom +compute ektot all reduce sum c_ek + +thermo 100 +thermo_style custom step time dt f_fel c_ektot + +#dump mydump all custom 200 elstop.only.dump id x y z vx vy vz fx fy fz c_ek + +run 10000 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 b/examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 new file mode 100644 index 0000000000..3547ced959 --- /dev/null +++ b/examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 @@ -0,0 +1,597 @@ +LAMMPS (28 Feb 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Test case / example for the electronic stopping fix elstop +# Perfect Si lattice with one primary knock-on atom. +# +# Also uses fix dt/reset, as one should when energies are high +# enough to require electronic stopping. + +units metal +boundary p p p +timestep 0.0001 + +lattice fcc 5.431 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region rbox block -10 10 -10 10 -10 10 +create_box 1 rbox +Created orthogonal box = (-54.31 -54.31 -54.31) to (54.31 54.31 54.31) + 1 by 1 by 1 MPI processor grid + +mass 1 28.0855 + +create_atoms 1 box +Created 32000 atoms + Time spent = 0.00365901 secs + +velocity all create 300 42534 mom yes rot yes + +group gPKA id 1 +1 atoms in group gPKA +velocity gPKA set 1120 1620 389 + +pair_style sw +pair_coeff * * Si.sw Si +Reading potential file Si.sw with DATE: 2007-06-11 + +fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 +fix fel all elstop 1.0 Si.Si.elstop +fix fnve all nve + +thermo 10 +thermo_style custom step time dt f_fel + +#compute ek all ke/atom +#dump mydump all custom 200 elstop.dump id x y z vx vy vz fx fy fz c_ek + +run 5000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77118 + ghost atom cutoff = 5.77118 + binsize = 2.88559, bins = 38 38 38 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair sw, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) fix elstop, occasional, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 10.89 | 10.89 | 10.89 Mbytes +Step Time Dt f_fel + 0 0 4.98128e-05 0 + 10 0.00030141297 7.4132113e-06 143.83504 + 20 0.00035951427 6.0316944e-06 171.53673 + 30 0.00057458971 3.5117251e-05 274.07596 + 40 0.00086591312 5.8243334e-06 412.87446 + 50 0.00090045701 2.1026443e-06 429.31458 + 60 0.00091828462 1.5368285e-06 437.79421 + 70 0.00093305888 1.4643253e-06 444.81982 + 80 0.00094860749 1.7487528e-06 452.21378 + 90 0.00097032161 3.0786693e-06 462.54244 + 100 0.0010787914 4.9354535e-05 514.16832 + 110 0.0012080771 2.321306e-06 575.68374 + 120 0.0012239682 1.0510328e-06 583.23471 + 130 0.0012325497 6.8272619e-07 587.30872 + 140 0.0012385196 5.1205819e-07 590.14077 + 150 0.001243165 4.1524338e-07 592.34294 + 160 0.0012470201 3.5380824e-07 594.1694 + 170 0.0012503578 3.1203776e-07 595.74992 + 180 0.0012533367 2.8236408e-07 597.15986 + 190 0.0012560575 2.6071908e-07 598.44711 + 200 0.0012585888 2.4474123e-07 599.64431 + 210 0.0012609803 2.3298466e-07 600.77504 + 220 0.0012632696 2.2453464e-07 601.85726 + 230 0.0012654871 2.1880713e-07 602.90531 + 240 0.0012676582 2.1543942e-07 603.93128 + 250 0.0012698054 2.1422997e-07 604.94591 + 260 0.0012719499 2.1510772e-07 605.95925 + 270 0.0012741128 2.1812163e-07 606.98126 + 280 0.0012763159 2.2344765e-07 608.02243 + 290 0.0012785839 2.3141489e-07 609.09436 + 300 0.0012809453 2.425587e-07 610.21066 + 310 0.0012834353 2.577174e-07 611.38806 + 320 0.0012860996 2.7820843e-07 612.64822 + 330 0.0012890001 3.0616141e-07 614.02061 + 340 0.0012922261 3.4518994e-07 615.54764 + 350 0.0012959145 4.0187423e-07 617.29438 + 360 0.0013002933 4.894618e-07 619.36917 + 370 0.0013057872 6.3886828e-07 621.97388 + 380 0.0013133355 9.4153332e-07 625.55502 + 390 0.0013257779 1.8246429e-06 631.46263 + 400 0.0013651328 1.4820738e-05 650.16503 + 410 0.0016916358 4.5528312e-05 805.3327 + 420 0.0020836696 2.6189823e-05 991.45963 + 430 0.002192113 5.1312984e-06 1042.8979 + 440 0.0022530638 1.1643276e-05 1071.7967 + 450 0.0025312898 1.5833134e-05 1203.6961 + 460 0.0028677695 3.9078523e-05 1363.0792 + 470 0.0032653301 3.9299497e-05 1551.2027 + 480 0.0036647478 4.1100578e-05 1739.9906 + 490 0.0040772194 3.6017871e-05 1934.7262 + 500 0.004246426 1.1620229e-05 2014.5366 + 510 0.0045410379 2.1151987e-05 2153.4172 + 520 0.0048951987 4.2067206e-05 2320.2216 + 530 0.0051251181 5.9152255e-06 2428.4156 + 540 0.0051740847 5.0188036e-06 2451.4388 + 550 0.0053207575 4.1618335e-05 2520.4067 + 560 0.0054412772 2.3641932e-06 2577.0541 + 570 0.005457552 1.0847369e-06 2584.6937 + 580 0.0054664476 7.1198746e-07 2588.8658 + 590 0.0054726999 5.3933302e-07 2591.796 + 600 0.0054776139 4.4178461e-07 2594.0976 + 610 0.0054817341 3.8039473e-07 2596.0263 + 620 0.0054853401 3.3924667e-07 2597.7135 + 630 0.0054885957 3.1069211e-07 2599.2361 + 640 0.0054916066 2.9064829e-07 2600.6439 + 650 0.0054944462 2.7678405e-07 2601.9712 + 660 0.0054971697 2.6772348e-07 2603.244 + 670 0.0054998211 2.6266505e-07 2604.4829 + 680 0.0055024383 2.6119265e-07 2605.7058 + 690 0.0055050563 2.6318733e-07 2606.929 + 700 0.0055077103 2.6880326e-07 2608.1691 + 710 0.0055104383 2.7849814e-07 2609.4439 + 720 0.0055132846 2.9313007e-07 2610.7742 + 730 0.0055163044 3.141612e-07 2612.186 + 740 0.0055195719 3.4406726e-07 2613.714 + 750 0.0055231932 3.8719688e-07 2615.4081 + 760 0.0055273329 4.5174267e-07 2617.3455 + 770 0.0055322712 5.5490406e-07 2619.6579 + 780 0.0055385515 7.3934538e-07 2622.6004 + 790 0.0055474645 1.1452909e-06 2626.7792 + 800 0.0055635927 2.6160295e-06 2634.3465 + 810 0.0057044835 3.9642931e-05 2700.5132 + 820 0.0060307501 2.9394558e-05 2853.6539 + 830 0.0063374404 8.5188148e-06 2997.4768 + 840 0.0063740052 1.4828325e-06 3014.6052 + 850 0.0063848364 7.5985425e-07 3019.6727 + 860 0.0063911095 5.0258852e-07 3022.6045 + 870 0.0063954921 3.7335256e-07 3024.6508 + 880 0.0063988506 2.9643864e-07 3026.2175 + 890 0.0064015712 2.4575869e-07 3027.4855 + 900 0.0064038584 2.1001191e-07 3028.5506 + 910 0.0064058333 1.8353805e-07 3029.4694 + 920 0.006407573 1.6320008e-07 3030.2782 + 930 0.0064091297 1.4712417e-07 3031.0014 + 940 0.0064105403 1.3412445e-07 3031.6562 + 950 0.0064118317 1.2341509e-07 3032.2552 + 960 0.0064130243 1.1445544e-07 3032.808 + 970 0.0064141337 1.0686175e-07 3033.3219 + 980 0.0064151722 1.0035437e-07 3033.8027 + 990 0.0064161498 9.4724852e-08 3034.2549 + 1000 0.0064170744 8.9814769e-08 3034.6824 + 1010 0.0064179527 8.5501639e-08 3035.0882 + 1020 0.0064187902 8.1689338e-08 3035.475 + 1030 0.0064195915 7.8301418e-08 3035.8449 + 1040 0.0064203606 7.5276356e-08 3036.1997 + 1050 0.0064211009 7.2564109e-08 3036.541 + 1060 0.0064218154 7.0123584e-08 3036.8703 + 1070 0.0064225065 6.7920744e-08 3037.1886 + 1080 0.0064231766 6.5927178e-08 3037.4971 + 1090 0.0064238276 6.4119002e-08 3037.7967 + 1100 0.0064244613 6.2476011e-08 3038.0882 + 1110 0.0064250792 6.0981016e-08 3038.3724 + 1120 0.0064256828 5.9619315e-08 3038.6498 + 1130 0.0064262733 5.8378279e-08 3038.9212 + 1140 0.0064268519 5.7247013e-08 3039.1869 + 1150 0.0064274196 5.6216088e-08 3039.4476 + 1160 0.0064279775 5.5277318e-08 3039.7037 + 1170 0.0064285264 5.4423582e-08 3039.9556 + 1180 0.006429067 5.3648672e-08 3040.2036 + 1190 0.0064296003 5.294717e-08 3040.4482 + 1200 0.0064301269 5.2314351e-08 3040.6897 + 1210 0.0064306474 5.1746091e-08 3040.9283 + 1220 0.0064311625 5.1238802e-08 3041.1644 + 1230 0.0064316729 5.0789368e-08 3041.3983 + 1240 0.0064321789 5.0395101e-08 3041.6301 + 1250 0.0064326813 5.0053692e-08 3041.8603 + 1260 0.0064331805 4.9763183e-08 3042.0889 + 1270 0.006433677 4.9521937e-08 3042.3163 + 1280 0.0064341713 4.9328614e-08 3042.5427 + 1290 0.0064346639 4.9182151e-08 3042.7682 + 1300 0.0064351552 4.9081752e-08 3042.9931 + 1310 0.0064356458 4.9026872e-08 3043.2177 + 1320 0.006436136 4.9017214e-08 3043.4421 + 1330 0.0064366262 4.9052721e-08 3043.6666 + 1340 0.0064371171 4.9133581e-08 3043.8912 + 1350 0.006437609 4.9260223e-08 3044.1164 + 1360 0.0064381023 4.9433327e-08 3044.3422 + 1370 0.0064385976 4.9653831e-08 3044.569 + 1380 0.0064390953 4.9922944e-08 3044.7968 + 1390 0.0064395959 5.0242164e-08 3045.0261 + 1400 0.0064401 5.0613297e-08 3045.2568 + 1410 0.006440608 5.1038483e-08 3045.4895 + 1420 0.0064411205 5.1520228e-08 3045.7242 + 1430 0.0064416381 5.2061443e-08 3045.9613 + 1440 0.0064421614 5.2665486e-08 3046.201 + 1450 0.006442691 5.3336219e-08 3046.4437 + 1460 0.0064432276 5.4078074e-08 3046.6896 + 1470 0.006443772 5.4896126e-08 3046.9392 + 1480 0.0064443249 5.5796191e-08 3047.1927 + 1490 0.0064448873 5.6784937e-08 3047.4506 + 1500 0.0064454599 5.7870017e-08 3047.7132 + 1510 0.0064460439 5.9060235e-08 3047.9812 + 1520 0.0064466403 6.0365742e-08 3048.2549 + 1530 0.0064472503 6.1798287e-08 3048.5349 + 1540 0.0064478752 6.337151e-08 3048.822 + 1550 0.0064485166 6.5101323e-08 3049.1166 + 1560 0.006449176 6.7006371e-08 3049.4197 + 1570 0.0064498554 6.9108623e-08 3049.732 + 1580 0.0064505567 7.1434118e-08 3050.0546 + 1590 0.0064512824 7.4013931e-08 3050.3885 + 1600 0.0064520352 7.6885409e-08 3050.7351 + 1610 0.0064528182 8.0093813e-08 3051.0957 + 1620 0.006453635 8.3694486e-08 3051.472 + 1630 0.0064544898 8.7755778e-08 3051.8661 + 1640 0.0064553876 9.2363047e-08 3052.2802 + 1650 0.0064563343 9.7624226e-08 3052.7171 + 1660 0.0064573371 1.0367771e-07 3053.1801 + 1670 0.0064584046 1.1070379e-07 3053.6733 + 1680 0.0064595476 1.1894157e-07 3054.2017 + 1690 0.0064607796 1.2871484e-07 3054.7716 + 1700 0.0064621178 1.4047265e-07 3055.391 + 1710 0.0064635847 1.5485559e-07 3056.0705 + 1720 0.0064652106 1.7280864e-07 3056.8241 + 1730 0.0064670371 1.9578361e-07 3057.6713 + 1740 0.0064691241 2.261258e-07 3058.6401 + 1750 0.0064715615 2.6787347e-07 3059.7724 + 1760 0.0064744931 3.2858822e-07 3061.1353 + 1770 0.0064781697 4.2416554e-07 3062.8461 + 1780 0.0064830857 5.9426003e-07 3065.1356 + 1790 0.0064904338 9.7042692e-07 3068.5608 + 1800 0.006504521 2.3570057e-06 3075.1339 + 1810 0.0066489551 2.5350137e-05 3142.596 + 1820 0.0067263358 2.0982567e-06 3178.7218 + 1830 0.0067413263 1.0389873e-06 3185.7117 + 1840 0.0067499639 7.021379e-07 3189.736 + 1850 0.0067561793 5.4125252e-07 3192.6298 + 1860 0.00676114 4.4920623e-07 3194.938 + 1870 0.0067653505 3.911598e-07 3196.8961 + 1880 0.0067690759 3.5254253e-07 3198.6279 + 1890 0.0067724748 3.2626983e-07 3200.2074 + 1900 0.0067756518 3.0855768e-07 3201.6834 + 1910 0.0067786819 2.9728199e-07 3203.0908 + 1920 0.0067816236 2.9125633e-07 3204.457 + 1930 0.0067845263 2.8989566e-07 3205.8049 + 1940 0.0067874357 2.9306921e-07 3207.156 + 1950 0.0067903982 3.0106889e-07 3208.5318 + 1960 0.006793465 3.1467844e-07 3209.9563 + 1970 0.0067966982 3.3537556e-07 3211.4583 + 1980 0.0068001793 3.6577201e-07 3213.0759 + 1990 0.0068040239 4.1056728e-07 3214.863 + 2000 0.0068084116 4.7878365e-07 3216.9034 + 2010 0.0068136505 5.897605e-07 3219.3409 + 2020 0.0068203489 7.9292336e-07 3222.4591 + 2030 0.0068300039 1.259738e-06 3226.9568 + 2040 0.0068484332 3.1869606e-06 3235.5484 + 2050 0.00704302 3.1308435e-05 3326.3332 + 2060 0.0073582601 1.9393034e-05 3473.3099 + 2070 0.0076291992 6.1118973e-06 3599.5265 + 2080 0.0076591273 1.397136e-06 3613.4525 + 2090 0.0076695786 7.5324795e-07 3618.31 + 2100 0.0076758692 5.1095756e-07 3621.2308 + 2110 0.0076803593 3.8613872e-07 3623.3137 + 2120 0.0076838539 3.1077232e-07 3624.9334 + 2130 0.0076867208 2.6065521e-07 3626.2611 + 2140 0.0076891581 2.2509342e-07 3627.3889 + 2150 0.007691284 1.9865679e-07 3628.372 + 2160 0.0076931748 1.7830513e-07 3629.2457 + 2170 0.0076948825 1.6220815e-07 3630.0343 + 2180 0.0076964439 1.4920028e-07 3630.7548 + 2190 0.0076978861 1.3850522e-07 3631.42 + 2200 0.0076992297 1.2958672e-07 3632.0393 + 2210 0.0077004907 1.2206289e-07 3632.6203 + 2220 0.0077016817 1.1565477e-07 3633.1687 + 2230 0.0077028128 1.1015407e-07 3633.6892 + 2240 0.0077038924 1.0540234e-07 3634.1859 + 2250 0.0077049274 1.0127711e-07 3634.6618 + 2260 0.0077059236 9.7682361e-08 3635.1197 + 2270 0.0077068859 9.454193e-08 3635.5619 + 2280 0.0077078187 9.1794781e-08 3635.9903 + 2290 0.0077087255 8.9391579e-08 3636.4067 + 2300 0.0077096098 8.7292175e-08 3636.8125 + 2310 0.0077104742 8.5463727e-08 3637.2092 + 2320 0.0077113216 8.3879281e-08 3637.598 + 2330 0.007712154 8.2516693e-08 3637.9798 + 2340 0.0077129738 8.1357804e-08 3638.3557 + 2350 0.0077137829 8.0387796e-08 3638.7267 + 2360 0.0077145831 7.9594705e-08 3639.0935 + 2370 0.0077153761 7.8969036e-08 3639.457 + 2380 0.0077161635 7.8503481e-08 3639.8178 + 2390 0.007716947 7.8192701e-08 3640.1769 + 2400 0.0077177281 7.8033171e-08 3640.5348 + 2410 0.0077185083 7.8023089e-08 3640.8923 + 2420 0.007719289 7.8162318e-08 3641.25 + 2430 0.0077200718 7.8452384e-08 3641.6087 + 2440 0.0077208582 7.8896522e-08 3641.9691 + 2450 0.0077216498 7.9499759e-08 3642.3318 + 2460 0.0077224481 8.026906e-08 3642.6977 + 2470 0.0077232549 8.1213529e-08 3643.0675 + 2480 0.0077240719 8.2344683e-08 3643.442 + 2490 0.0077249012 8.3676812e-08 3643.8222 + 2500 0.0077257448 8.5227445e-08 3644.209 + 2510 0.0077266049 8.7017961e-08 3644.6035 + 2520 0.0077274841 8.9074372e-08 3645.0068 + 2530 0.0077283852 9.1428349e-08 3645.4203 + 2540 0.0077293113 9.4118559e-08 3645.8454 + 2550 0.0077302659 9.7192441e-08 3646.2837 + 2560 0.0077312533 1.0070857e-07 3646.7372 + 2570 0.0077322781 1.0473987e-07 3647.208 + 2580 0.0077333458 1.0937801e-07 3647.6987 + 2590 0.007734463 1.1473957e-07 3648.2124 + 2600 0.0077356377 1.2097481e-07 3648.7528 + 2610 0.0077368793 1.2828037e-07 3649.3242 + 2620 0.0077381998 1.3691837e-07 3649.9322 + 2630 0.0077396139 1.4724543e-07 3650.5836 + 2640 0.0077411406 1.5975888e-07 3651.2873 + 2650 0.0077428048 1.7517253e-07 3652.0548 + 2660 0.0077446398 1.9454711e-07 3652.9016 + 2670 0.0077466922 2.1952673e-07 3653.8493 + 2680 0.0077490288 2.5279733e-07 3654.929 + 2690 0.0077517515 2.9905194e-07 3656.188 + 2700 0.0077550252 3.6725589e-07 3657.7029 + 2710 0.0077591434 4.7681009e-07 3659.6101 + 2720 0.0077647038 6.7839241e-07 3662.1874 + 2730 0.007773234 1.1552111e-06 3666.1446 + 2740 0.0077911374 3.3406902e-06 3674.458 + 2750 0.0079702 8.4184292e-06 3757.6696 + 2760 0.008006114 1.4496754e-06 3774.3449 + 2770 0.0080166835 7.3926386e-07 3779.2462 + 2780 0.0080227734 4.8640717e-07 3782.0672 + 2790 0.0080270055 3.5945058e-07 3784.0255 + 2800 0.0080302318 2.8394384e-07 3785.517 + 2810 0.008032832 2.3422206e-07 3786.7179 + 2820 0.0080350072 1.9916814e-07 3787.7215 + 2830 0.0080368761 1.7321525e-07 3788.5831 + 2840 0.0080385144 1.5327931e-07 3789.3377 + 2850 0.0080399734 1.3751893e-07 3790.0091 + 2860 0.0080412891 1.2476931e-07 3790.6141 + 2870 0.0080424879 1.1425897e-07 3791.1649 + 2880 0.0080435897 1.0545738e-07 3791.6707 + 2890 0.0080446097 9.7988142e-08 3792.1386 + 2900 0.0080455599 9.1577084e-08 3792.5741 + 2910 0.00804645 8.6019912e-08 3792.9818 + 2920 0.0080472879 8.1161402e-08 3793.3653 + 2930 0.0080480798 7.6881575e-08 3793.7275 + 2940 0.0080488311 7.3086284e-08 3794.0709 + 2950 0.0080495465 6.9700651e-08 3794.3977 + 2960 0.0080502295 6.666441e-08 3794.7094 + 2970 0.0080508836 6.3928523e-08 3795.0078 + 2980 0.0080515116 6.1452701e-08 3795.2941 + 2990 0.0080521158 5.9203545e-08 3795.5694 + 3000 0.0080526985 5.7153146e-08 3795.8346 + 3010 0.0080532614 5.5278009e-08 3796.0908 + 3020 0.0080538063 5.3558217e-08 3796.3386 + 3030 0.0080543347 5.1976785e-08 3796.5788 + 3040 0.0080548478 5.051914e-08 3796.8119 + 3050 0.0080553469 4.9172716e-08 3797.0385 + 3060 0.0080558329 4.7926619e-08 3797.2591 + 3070 0.0080563069 4.6771366e-08 3797.4741 + 3080 0.0080567697 4.5698662e-08 3797.6839 + 3090 0.0080572222 4.4701228e-08 3797.8889 + 3100 0.0080576649 4.3772647e-08 3798.0895 + 3110 0.0080580987 4.2907247e-08 3798.2858 + 3120 0.0080585241 4.2099999e-08 3798.4784 + 3130 0.0080589417 4.1346425e-08 3798.6672 + 3140 0.0080593519 4.0642535e-08 3798.8527 + 3150 0.0080597554 3.9984758e-08 3799.0351 + 3160 0.0080601524 3.9369895e-08 3799.2145 + 3170 0.0080605435 3.8795073e-08 3799.3911 + 3180 0.008060929 3.8257705e-08 3799.5651 + 3190 0.0080613093 3.7755461e-08 3799.7368 + 3200 0.0080616847 3.7286239e-08 3799.9062 + 3210 0.0080620556 3.6848135e-08 3800.0734 + 3220 0.0080624222 3.6439432e-08 3800.2387 + 3230 0.0080627848 3.6058573e-08 3800.4022 + 3240 0.0080631438 3.5704146e-08 3800.564 + 3250 0.0080634994 3.5374876e-08 3800.7241 + 3260 0.0080638517 3.5069606e-08 3800.8828 + 3270 0.0080642011 3.4787289e-08 3801.0402 + 3280 0.0080645478 3.4526978e-08 3801.1962 + 3290 0.008064892 3.4287819e-08 3801.3511 + 3300 0.0080652339 3.4069042e-08 3801.505 + 3310 0.0080655736 3.3869955e-08 3801.6578 + 3320 0.0080659115 3.368994e-08 3801.8098 + 3330 0.0080662477 3.3528444e-08 3801.961 + 3340 0.0080665823 3.3384981e-08 3802.1115 + 3350 0.0080669156 3.3259123e-08 3802.2613 + 3360 0.0080672476 3.3150499e-08 3802.4106 + 3370 0.0080675787 3.305879e-08 3802.5594 + 3380 0.008067909 3.2983732e-08 3802.7078 + 3390 0.0080682385 3.2925108e-08 3802.8559 + 3400 0.0080685676 3.288275e-08 3803.0038 + 3410 0.0080688963 3.2856537e-08 3803.1515 + 3420 0.0080692248 3.2846395e-08 3803.2991 + 3430 0.0080695532 3.2852293e-08 3803.4466 + 3440 0.0080698819 3.2874247e-08 3803.5943 + 3450 0.0080702108 3.2912319e-08 3803.742 + 3460 0.0080705401 3.2966617e-08 3803.89 + 3470 0.0080708701 3.3037293e-08 3804.0382 + 3480 0.0080712008 3.312455e-08 3804.1868 + 3490 0.0080715325 3.3228638e-08 3804.3358 + 3500 0.0080718653 3.3349858e-08 3804.4853 + 3510 0.0080721995 3.3488567e-08 3804.6355 + 3520 0.008072535 3.3645172e-08 3804.7862 + 3530 0.0080728723 3.3820145e-08 3804.9378 + 3540 0.0080732113 3.4014016e-08 3805.0901 + 3550 0.0080735524 3.4227383e-08 3805.2434 + 3560 0.0080738957 3.4460914e-08 3805.3977 + 3570 0.0080742414 3.4715354e-08 3805.5532 + 3580 0.0080745898 3.4991532e-08 3805.7098 + 3590 0.0080749411 3.5290364e-08 3805.8677 + 3600 0.0080752954 3.5612865e-08 3806.0271 + 3610 0.0080756531 3.5960156e-08 3806.188 + 3620 0.0080760143 3.6333475e-08 3806.3505 + 3630 0.0080763794 3.6734187e-08 3806.5148 + 3640 0.0080767487 3.7163802e-08 3806.681 + 3650 0.0080771224 3.7623985e-08 3806.8492 + 3660 0.0080775008 3.8116577e-08 3807.0196 + 3670 0.0080778843 3.8643614e-08 3807.1924 + 3680 0.0080782733 3.9207349e-08 3807.3676 + 3690 0.008078668 3.9810283e-08 3807.5455 + 3700 0.008079069 4.0455191e-08 3807.7262 + 3710 0.0080794766 4.114516e-08 3807.91 + 3720 0.0080798913 4.1883634e-08 3808.0971 + 3730 0.0080803137 4.2674459e-08 3808.2877 + 3740 0.0080807442 4.3521941e-08 3808.482 + 3750 0.0080811834 4.4430917e-08 3808.6803 + 3760 0.0080816321 4.5406834e-08 3808.883 + 3770 0.0080820908 4.6455843e-08 3809.0902 + 3780 0.0080825604 4.7584918e-08 3809.3025 + 3790 0.0080830416 4.8801987e-08 3809.5201 + 3800 0.0080835355 5.0116105e-08 3809.7436 + 3810 0.0080840429 5.1537653e-08 3809.9733 + 3820 0.0080845652 5.3078583e-08 3810.2097 + 3830 0.0080851034 5.4752728e-08 3810.4535 + 3840 0.008085659 5.6576175e-08 3810.7054 + 3850 0.0080862335 5.8567743e-08 3810.9659 + 3860 0.0080868289 6.0749572e-08 3811.236 + 3870 0.008087447 6.3147889e-08 3811.5166 + 3880 0.0080880901 6.5793981e-08 3811.8087 + 3890 0.008088761 6.8725458e-08 3812.1136 + 3900 0.0080894626 7.1987928e-08 3812.4327 + 3910 0.0080901986 7.5637206e-08 3812.7675 + 3920 0.008090973 7.9742316e-08 3813.1201 + 3930 0.0080917909 8.4389592e-08 3813.4926 + 3940 0.008092658 8.9688414e-08 3813.8879 + 3950 0.0080935816 9.5779352e-08 3814.3091 + 3960 0.0080945703 1.0284601e-07 3814.7604 + 3970 0.0080956349 1.1113264e-07 3815.2467 + 3980 0.0080967891 1.2097115e-07 3815.7742 + 3990 0.0080980502 1.3282379e-07 3816.3511 + 4000 0.0080994413 1.4735308e-07 3816.9878 + 4010 0.0081009931 1.6554202e-07 3817.6987 + 4020 0.0081027486 1.8891116e-07 3818.5035 + 4030 0.0081047696 2.1993774e-07 3819.4308 + 4040 0.0081071501 2.6293325e-07 3820.524 + 4050 0.0081100418 3.2608623e-07 3821.8531 + 4060 0.0081137136 4.2695471e-07 3823.5422 + 4070 0.0081187073 6.1068659e-07 3825.8415 + 4080 0.0081263808 1.0353843e-06 3829.3781 + 4090 0.0081421033 2.8175459e-06 3836.6316 + 4100 0.0083319479 3.0660994e-05 3924.296 + 4110 0.0086521081 2.4031675e-05 4072.0381 + 4120 0.0089367803 5.8263834e-06 4203.2922 + 4130 0.0089679114 1.6262217e-06 4217.6293 + 4140 0.0089805825 9.6546502e-07 4223.4594 + 4150 0.0089889356 7.1159925e-07 4227.3001 + 4160 0.0089954101 5.8311893e-07 4230.2754 + 4170 0.0090008803 5.1000973e-07 4232.7881 + 4180 0.0090057682 4.6713078e-07 4235.0326 + 4190 0.0090103206 4.4370361e-07 4237.1225 + 4200 0.0090147071 4.3491502e-07 4239.1361 + 4210 0.0090190645 4.3912951e-07 4241.1362 + 4220 0.0090235243 4.570826e-07 4243.1834 + 4230 0.0090282367 4.9222468e-07 4245.3469 + 4240 0.0090334045 5.5254852e-07 4247.72 + 4250 0.0090393478 6.5600428e-07 4250.4502 + 4260 0.0090466656 8.4827393e-07 4253.8133 + 4270 0.0090567641 1.2818738e-06 4258.457 + 4280 0.0090746835 2.9033891e-06 4266.7027 + 4290 0.0092346752 2.9451638e-05 4340.3839 + 4300 0.0093466586 4.9023913e-06 4391.9319 + 4310 0.0093992941 7.8400922e-06 4416.149 + 4320 0.0097053159 4.3362296e-05 4556.9393 + 4330 0.010037349 4.9648086e-05 4709.5604 + 4340 0.010297354 8.8232096e-06 4828.9697 + 4350 0.010503113 4.4016316e-05 4923.4016 + 4360 0.010926633 4.2142313e-05 5117.622 + 4370 0.011318805 4.0285407e-05 5297.2575 + 4380 0.011746199 4.3755472e-05 5492.8047 + 4390 0.012044606 2.1150168e-05 5629.1924 + 4400 0.01231664 7.0784321e-06 5753.4243 + 4410 0.01236554 3.954763e-06 5775.7358 + 4420 0.012415 8.8450437e-06 5798.2999 + 4430 0.012723996 3.6113036e-05 5939.2622 + 4440 0.013109261 4.5827638e-05 6114.8493 + 4450 0.013251276 2.6649019e-06 6179.5172 + 4460 0.013269544 1.2200106e-06 6187.8251 + 4470 0.013279619 8.155501e-07 6192.4028 + 4480 0.013286853 6.3300974e-07 6195.6879 + 4490 0.01329269 5.3347649e-07 6198.3373 + 4500 0.013297735 4.7451627e-07 6200.6261 + 4510 0.013302306 4.392029e-07 6202.6992 + 4520 0.013306599 4.1982963e-07 6204.6461 + 4530 0.013310757 4.1285331e-07 6206.5311 + 4540 0.013314895 4.1710029e-07 6208.4074 + 4550 0.013319128 4.3324769e-07 6210.3267 + 4560 0.013323586 4.6410935e-07 6212.348 + 4570 0.013328439 5.1597347e-07 6214.5493 + 4580 0.01333395 6.0235495e-07 6217.0498 + 4590 0.013340584 7.5537668e-07 6220.0613 + 4600 0.013349342 1.0699582e-06 6224.0388 + 4610 0.013363183 1.98365e-06 6230.3293 + 4620 0.013404081 1.4367775e-05 6248.9319 + 4630 0.013593325 3.787203e-06 6335.0239 + 4640 0.01361833 1.6441528e-06 6346.3866 + 4650 0.013632159 1.1592769e-06 6352.6667 + 4660 0.013642828 9.8623051e-07 6357.5101 + 4670 0.013652418 9.4451692e-07 6361.8626 + 4680 0.013662041 1.0034733e-06 6366.2295 + 4690 0.013672824 1.2061779e-06 6371.1243 + 4700 0.013686941 1.780995e-06 6377.5343 + 4710 0.013713088 4.7634009e-06 6389.4131 + 4720 0.013968014 3.9765415e-05 6505.2802 + 4730 0.014228787 6.2632217e-06 6623.7185 + 4740 0.014278333 4.7934169e-06 6646.2018 + 4750 0.014382212 5.1069055e-05 6693.3424 + 4760 0.014525205 2.0381123e-06 6758.2178 + 4770 0.014538504 8.2250651e-07 6764.2412 + 4780 0.014544984 4.9114353e-07 6767.1723 + 4790 0.014549144 3.4212232e-07 6769.0518 + 4800 0.014552156 2.589287e-07 6770.4109 + 4810 0.014554491 2.0641662e-07 6771.4633 + 4820 0.014556384 1.7052382e-07 6772.315 + 4830 0.014557966 1.4457875e-07 6773.0262 + 4840 0.014559319 1.250293e-07 6773.6339 + 4850 0.014560498 1.09819e-07 6774.1626 + 4860 0.014561539 9.7678962e-08 6774.629 + 4870 0.01456247 8.7785899e-08 6775.0453 + 4880 0.01456331 7.9583482e-08 6775.4205 + 4890 0.014564074 7.2682934e-08 6775.7613 + 4900 0.014564773 6.6804784e-08 6776.0732 + 4910 0.014565418 6.1743238e-08 6776.3601 + 4920 0.014566015 5.7343571e-08 6776.6256 + 4930 0.014566571 5.3487327e-08 6776.8723 + 4940 0.01456709 5.0082359e-08 6777.1026 + 4950 0.014567577 4.7055963e-08 6777.3183 + 4960 0.014568035 4.4350048e-08 6777.521 + 4970 0.014568467 4.1917669e-08 6777.712 + 4980 0.014568876 3.9720495e-08 6777.8926 + 4990 0.014569265 3.7726941e-08 6778.0636 + 5000 0.014569634 3.5910753e-08 6778.2261 +Loop time of 27.2739 on 1 procs for 5000 steps with 32000 atoms + +Performance: 0.001 ns/day, 42193.880 hours/ns, 183.326 timesteps/s +96.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 17.626 | 17.626 | 17.626 | 0.0 | 64.62 +Neigh | 1.5828 | 1.5828 | 1.5828 | 0.0 | 5.80 +Comm | 0.78596 | 0.78596 | 0.78596 | 0.0 | 2.88 +Output | 0.0082562 | 0.0082562 | 0.0082562 | 0.0 | 0.03 +Modify | 6.414 | 6.414 | 6.414 | 0.0 | 23.52 +Other | | 0.8573 | | | 3.14 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 13556 ave 13556 max 13556 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 576016 ave 576016 max 576016 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 576016 +Ave neighs/atom = 18.0005 +Neighbor list builds = 68 +Dangerous builds = 42 +Total wall time: 0:00:27 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 b/examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 new file mode 100644 index 0000000000..4b06000522 --- /dev/null +++ b/examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 @@ -0,0 +1,597 @@ +LAMMPS (28 Feb 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Test case / example for the electronic stopping fix elstop +# Perfect Si lattice with one primary knock-on atom. +# +# Also uses fix dt/reset, as one should when energies are high +# enough to require electronic stopping. + +units metal +boundary p p p +timestep 0.0001 + +lattice fcc 5.431 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region rbox block -10 10 -10 10 -10 10 +create_box 1 rbox +Created orthogonal box = (-54.31 -54.31 -54.31) to (54.31 54.31 54.31) + 1 by 2 by 2 MPI processor grid + +mass 1 28.0855 + +create_atoms 1 box +Created 32000 atoms + Time spent = 0.000838995 secs + +velocity all create 300 42534 mom yes rot yes + +group gPKA id 1 +1 atoms in group gPKA +velocity gPKA set 1120 1620 389 + +pair_style sw +pair_coeff * * Si.sw Si +Reading potential file Si.sw with DATE: 2007-06-11 + +fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 +fix fel all elstop 1.0 Si.Si.elstop +fix fnve all nve + +thermo 10 +thermo_style custom step time dt f_fel + +#compute ek all ke/atom +#dump mydump all custom 200 elstop.dump id x y z vx vy vz fx fy fz c_ek + +run 5000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77118 + ghost atom cutoff = 5.77118 + binsize = 2.88559, bins = 38 38 38 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair sw, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) fix elstop, occasional, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.825 | 3.825 | 3.825 Mbytes +Step Time Dt f_fel + 0 0 4.98128e-05 0 + 10 0.00030141235 7.4131221e-06 143.83474 + 20 0.00035951242 6.0314282e-06 171.53584 + 30 0.00057457861 3.511731e-05 274.07067 + 40 0.00086591115 5.8248574e-06 412.87352 + 50 0.00090045749 2.102773e-06 429.31482 + 60 0.00091828633 1.5369556e-06 437.79502 + 70 0.00093306208 1.4645168e-06 444.82135 + 80 0.00094861336 1.7491631e-06 452.21657 + 90 0.00097033523 3.0804023e-06 462.54893 + 100 0.0010792154 4.9075683e-05 514.37014 + 110 0.0012080866 2.3201427e-06 575.68827 + 120 0.0012239719 1.0507964e-06 583.23648 + 130 0.0012325518 6.8263389e-07 587.30975 + 140 0.0012385211 5.1201217e-07 590.14147 + 150 0.0012431661 4.1521773e-07 592.34347 + 160 0.001247021 3.5379338e-07 594.16984 + 170 0.0012503586 3.1202939e-07 595.75031 + 180 0.0012533374 2.8236002e-07 597.16021 + 190 0.0012560582 2.6071816e-07 598.44745 + 200 0.0012585895 2.4474279e-07 599.64465 + 210 0.001260981 2.3298831e-07 600.7754 + 220 0.0012632704 2.2454021e-07 601.85763 + 230 0.001265488 2.1881458e-07 602.90571 + 240 0.0012676591 2.154488e-07 603.93173 + 250 0.0012698064 2.1424147e-07 604.94641 + 260 0.0012719511 2.1512161e-07 605.9598 + 270 0.0012741141 2.1813836e-07 606.98189 + 280 0.0012763174 2.2346783e-07 608.02314 + 290 0.0012785856 2.3143942e-07 609.09518 + 300 0.0012809473 2.4258888e-07 610.2116 + 310 0.0012834376 2.5775518e-07 611.38916 + 320 0.0012861023 2.7825685e-07 612.64953 + 330 0.0012890034 3.062254e-07 614.02218 + 340 0.0012922301 3.4527805e-07 615.54956 + 350 0.0012959196 4.0200263e-07 617.29679 + 360 0.0013003 4.8966484e-07 619.37233 + 370 0.0013057965 6.3923294e-07 621.9783 + 380 0.00131335 9.423535e-07 625.56194 + 390 0.0013258073 1.8277087e-06 631.47661 + 400 0.0013653313 1.4985239e-05 650.25939 + 410 0.0016927117 4.5643592e-05 805.84388 + 420 0.002085671 2.5698185e-05 992.40957 + 430 0.0021935861 5.3102217e-06 1043.597 + 440 0.0022614637 1.5788858e-05 1075.7807 + 450 0.0025463923 1.6989456e-05 1210.8535 + 460 0.0029095455 3.9205279e-05 1382.8591 + 470 0.003309122 3.8882183e-05 1571.9128 + 480 0.0037129772 4.0573389e-05 1762.7749 + 490 0.004120209 2.7525742e-05 1955.0148 + 500 0.0042711049 1.9373612e-05 2026.1805 + 510 0.0045860203 2.4773305e-05 2174.6208 + 520 0.004995259 3.8017877e-05 2367.3335 + 530 0.0051457762 5.4205615e-06 2438.1475 + 540 0.005203221 8.8625579e-06 2465.1577 + 550 0.0054221421 5.7304442e-06 2568.0888 + 560 0.0054524345 1.5599386e-06 2582.3169 + 570 0.0054645073 9.1093243e-07 2587.9819 + 580 0.0054723338 6.6033575e-07 2591.6518 + 590 0.0054782965 5.3155858e-07 2594.446 + 600 0.005483241 4.5581839e-07 2596.7619 + 610 0.0054875675 4.0821885e-07 2598.7875 + 620 0.0054915013 3.7775507e-07 2600.6287 + 630 0.0054951861 3.5898561e-07 2602.3529 + 640 0.0054987249 3.4911444e-07 2604.0086 + 650 0.0055021998 3.4682698e-07 2605.6342 + 660 0.0055056844 3.5182676e-07 2607.2643 + 670 0.0055092538 3.6473743e-07 2608.9342 + 680 0.0055129936 3.8730595e-07 2610.6841 + 690 0.0055170145 4.2303997e-07 2612.566 + 700 0.0055214749 4.7876507e-07 2614.6542 + 710 0.0055266296 5.6863699e-07 2617.0684 + 720 0.0055329452 7.2626141e-07 2620.0278 + 730 0.0055414528 1.0527596e-06 2624.0166 + 740 0.0055553208 2.0371511e-06 2630.523 + 750 0.0056023478 2.2133456e-05 2652.6057 + 760 0.0059007346 3.8610962e-05 2792.7168 + 770 0.0062508505 3.9428337e-05 2956.9697 + 780 0.0063682296 2.1223153e-06 3011.9927 + 790 0.0063824196 9.0656948e-07 3018.6346 + 800 0.0063896741 5.6137676e-07 3022.0266 + 810 0.0063944906 4.0276465e-07 3024.2763 + 820 0.0063980771 3.1284015e-07 3025.9499 + 830 0.0064009279 2.5537602e-07 3027.2789 + 840 0.006403292 2.1569057e-07 3028.3801 + 850 0.0064053117 1.8674792e-07 3029.32 + 860 0.0064070756 1.6477015e-07 3030.1402 + 870 0.0064086425 1.4755386e-07 3030.8682 + 880 0.0064100535 1.3373048e-07 3031.5232 + 890 0.0064113381 1.2240666e-07 3032.1191 + 900 0.0064125183 1.1297538e-07 3032.6662 + 910 0.0064136112 1.0501022e-07 3033.1724 + 920 0.0064146298 9.8203162e-08 3033.6439 + 930 0.0064155847 9.2326368e-08 3034.0856 + 940 0.0064164843 8.7207794e-08 3034.5015 + 950 0.0064173357 8.2715188e-08 3034.8948 + 960 0.0064181446 7.8745279e-08 3035.2682 + 970 0.0064189159 7.5216291e-08 3035.6241 + 980 0.0064196535 7.2062662e-08 3035.9642 + 990 0.0064203612 6.9231241e-08 3036.2903 + 1000 0.0064210418 6.6678502e-08 3036.6038 + 1010 0.006421698 6.4368478e-08 3036.9059 + 1020 0.0064223321 6.2271202e-08 3037.1976 + 1030 0.0064229461 6.0361517e-08 3037.4799 + 1040 0.0064235417 5.8618162e-08 3037.7537 + 1050 0.0064241206 5.702305e-08 3038.0197 + 1060 0.0064246841 5.556071e-08 3038.2784 + 1070 0.0064252336 5.4217838e-08 3038.5306 + 1080 0.0064257701 5.2982939e-08 3038.7768 + 1090 0.0064262948 5.1846034e-08 3039.0174 + 1100 0.0064268085 5.079843e-08 3039.2529 + 1110 0.006427312 4.9832523e-08 3039.4837 + 1120 0.0064278063 4.8941643e-08 3039.7101 + 1130 0.0064282919 4.811992e-08 3039.9325 + 1140 0.0064287697 4.7362175e-08 3040.1512 + 1150 0.0064292401 4.6663831e-08 3040.3665 + 1160 0.0064297038 4.6020833e-08 3040.5786 + 1170 0.0064301613 4.5429586e-08 3040.7878 + 1180 0.0064306131 4.4886899e-08 3040.9944 + 1190 0.0064310597 4.4389937e-08 3041.1986 + 1200 0.0064315016 4.3936183e-08 3041.4005 + 1210 0.006431939 4.3523406e-08 3041.6003 + 1220 0.0064323725 4.3149628e-08 3041.7984 + 1230 0.0064328025 4.2813101e-08 3041.9947 + 1240 0.0064332292 4.2512286e-08 3042.1896 + 1250 0.0064336531 4.2245836e-08 3042.3831 + 1260 0.0064340745 4.201258e-08 3042.5755 + 1270 0.0064344937 4.1811507e-08 3042.7668 + 1280 0.006434911 4.1641759e-08 3042.9572 + 1290 0.0064353268 4.1502622e-08 3043.1469 + 1300 0.0064357413 4.1393513e-08 3043.336 + 1310 0.0064361549 4.1313982e-08 3043.5247 + 1320 0.0064365678 4.1263699e-08 3043.713 + 1330 0.0064369803 4.1242458e-08 3043.9012 + 1340 0.0064373927 4.125017e-08 3044.0893 + 1350 0.0064378054 4.1286866e-08 3044.2775 + 1360 0.0064382185 4.1352691e-08 3044.466 + 1370 0.0064386324 4.1447915e-08 3044.6548 + 1380 0.0064390475 4.1572925e-08 3044.8441 + 1390 0.0064394639 4.1728238e-08 3045.034 + 1400 0.0064398819 4.1914501e-08 3045.2247 + 1410 0.006440302 4.2132499e-08 3045.4163 + 1420 0.0064407245 4.2383163e-08 3045.6091 + 1430 0.0064411496 4.2667584e-08 3045.803 + 1440 0.0064415776 4.2987016e-08 3045.9983 + 1450 0.0064420091 4.33429e-08 3046.1952 + 1460 0.0064424443 4.3736874e-08 3046.3938 + 1470 0.0064428835 4.4170794e-08 3046.5944 + 1480 0.0064433274 4.4646761e-08 3046.797 + 1490 0.0064437761 4.5167139e-08 3047.0019 + 1500 0.0064442303 4.5734596e-08 3047.2093 + 1510 0.0064446904 4.6352132e-08 3047.4195 + 1520 0.0064451569 4.7023127e-08 3047.6327 + 1530 0.0064456303 4.7751389e-08 3047.849 + 1540 0.0064461114 4.8541214e-08 3048.0689 + 1550 0.0064466006 4.9397455e-08 3048.2926 + 1560 0.0064470987 5.0325606e-08 3048.5204 + 1570 0.0064476064 5.1331902e-08 3048.7527 + 1580 0.0064481245 5.2423434e-08 3048.9899 + 1590 0.006448654 5.3608296e-08 3049.2323 + 1600 0.0064491958 5.4895757e-08 3049.4804 + 1610 0.006449751 5.6296469e-08 3049.7347 + 1620 0.0064503207 5.7822727e-08 3049.9959 + 1630 0.0064509063 5.9488788e-08 3050.2644 + 1640 0.0064515092 6.1311263e-08 3050.5409 + 1650 0.0064521312 6.3309616e-08 3050.8263 + 1660 0.006452774 6.5506785e-08 3051.1214 + 1670 0.0064534398 6.7929981e-08 3051.4272 + 1680 0.0064541309 7.0611714e-08 3051.7448 + 1690 0.0064548502 7.3591127e-08 3052.0755 + 1700 0.0064556007 7.6915753e-08 3052.4207 + 1710 0.0064563863 8.064386e-08 3052.7823 + 1720 0.0064572113 8.4847627e-08 3053.1621 + 1730 0.0064580807 8.9617502e-08 3053.5627 + 1740 0.0064590008 9.5068304e-08 3053.9869 + 1750 0.006459979 1.0134793e-07 3054.4381 + 1760 0.0064610244 1.0865003e-07 3054.9206 + 1770 0.0064621483 1.1723301e-07 3055.4397 + 1780 0.0064633651 1.2744917e-07 3056.0021 + 1790 0.0064646931 1.3979108e-07 3056.6163 + 1800 0.0064661566 1.5496815e-07 3057.2937 + 1810 0.0064677883 1.7403894e-07 3058.0494 + 1820 0.006469634 1.9865267e-07 3058.9049 + 1830 0.0064717601 2.3152064e-07 3059.8912 + 1840 0.0064742682 2.7741818e-07 3061.0556 + 1850 0.0064773249 3.4556351e-07 3062.4759 + 1860 0.0064812294 4.5619653e-07 3064.2917 + 1870 0.0064866019 6.6337441e-07 3066.7924 + 1880 0.0064950748 1.1706786e-06 3070.7399 + 1890 0.0065140322 3.7878566e-06 3079.5809 + 1900 0.0066957122 6.7105464e-06 3164.3691 + 1910 0.0067279909 1.493224e-06 3179.4195 + 1920 0.0067392058 8.1410321e-07 3184.6428 + 1930 0.0067460435 5.5996376e-07 3187.8246 + 1940 0.0067509948 4.2936252e-07 3190.1267 + 1950 0.0067549055 3.5072462e-07 3191.9436 + 1960 0.0067581623 2.9865016e-07 3193.4556 + 1970 0.0067609737 2.6192794e-07 3194.7601 + 1980 0.0067634648 2.3486813e-07 3195.9153 + 1990 0.0067657165 2.1428715e-07 3196.9589 + 2000 0.0067677841 1.9827071e-07 3197.9167 + 2010 0.0067697074 1.8560268e-07 3198.8073 + 2020 0.006771516 1.7547663e-07 3199.6445 + 2030 0.0067732327 1.6733961e-07 3200.4388 + 2040 0.0067748755 1.6080268e-07 3201.1987 + 2050 0.0067764591 1.5558723e-07 3201.931 + 2060 0.0067779957 1.5149159e-07 3202.6414 + 2070 0.0067794958 1.4836976e-07 3203.3348 + 2080 0.0067809687 1.4611749e-07 3204.0155 + 2090 0.0067824227 1.4466322e-07 3204.6874 + 2100 0.0067838655 1.4396229e-07 3205.3542 + 2110 0.0067853047 1.4399348e-07 3206.0191 + 2120 0.0067867474 1.4475745e-07 3206.6858 + 2130 0.0067882012 1.4627671e-07 3207.3576 + 2140 0.0067896737 1.4859736e-07 3208.0381 + 2150 0.0067911733 1.5179256e-07 3208.7311 + 2160 0.0067927092 1.5596849e-07 3209.4411 + 2170 0.0067942917 1.6127347e-07 3210.1728 + 2180 0.0067959331 1.6791214e-07 3210.9319 + 2190 0.0067976479 1.7616698e-07 3211.7251 + 2200 0.0067994539 1.8643208e-07 3212.5608 + 2210 0.0068013736 1.9926751e-07 3213.4494 + 2220 0.0068034361 2.154897e-07 3214.4044 + 2230 0.0068056803 2.3632937e-07 3215.4441 + 2240 0.0068081604 2.6372257e-07 3216.5937 + 2250 0.0068109549 3.0088625e-07 3217.8897 + 2260 0.0068141846 3.5356212e-07 3219.3884 + 2270 0.0068180485 4.330391e-07 3221.1825 + 2280 0.0068229109 5.6479966e-07 3223.4417 + 2290 0.0068295488 8.2016289e-07 3226.5284 + 2300 0.0068401389 1.4950446e-06 3231.4568 + 2310 0.0068668194 6.4794351e-06 3243.8847 + 2320 0.0071339944 2.3817631e-05 3368.3827 + 2330 0.0074221156 3.4144405e-05 3502.5364 + 2340 0.007650075 3.3142879e-06 3608.5998 + 2350 0.0076703526 1.1927138e-06 3618.0215 + 2360 0.0076797526 7.185434e-07 3622.3847 + 2370 0.0076859146 5.1648342e-07 3625.2424 + 2380 0.0076905359 4.0623045e-07 3627.3839 + 2390 0.0076942651 3.3753265e-07 3629.1108 + 2400 0.0076974175 2.910504e-07 3630.5697 + 2410 0.0077001699 2.5780894e-07 3631.8426 + 2420 0.007702631 2.3309498e-07 3632.9803 + 2430 0.007704873 2.1420535e-07 3634.0161 + 2440 0.0077069459 1.9948463e-07 3634.9733 + 2450 0.0077088862 1.8786685e-07 3635.869 + 2460 0.0077107216 1.7863849e-07 3636.716 + 2470 0.0077124736 1.713078e-07 3637.5242 + 2480 0.0077141595 1.6552875e-07 3638.3017 + 2490 0.0077157937 1.6105508e-07 3639.0552 + 2500 0.0077173883 1.5771154e-07 3639.7903 + 2510 0.0077189541 1.553756e-07 3640.5121 + 2520 0.0077205008 1.539658e-07 3641.2249 + 2530 0.0077220373 1.534345e-07 3641.933 + 2540 0.0077235724 1.5376384e-07 3642.6405 + 2550 0.0077251148 1.5496427e-07 3643.3513 + 2560 0.0077266731 1.5707538e-07 3644.0695 + 2570 0.007728257 1.6016917e-07 3644.7995 + 2580 0.0077298765 1.6435633e-07 3645.5461 + 2590 0.0077315435 1.6979645e-07 3646.3147 + 2600 0.0077332712 1.7671412e-07 3647.1115 + 2610 0.0077350759 1.8542415e-07 3647.944 + 2620 0.0077369773 1.9637153e-07 3648.8214 + 2630 0.0077390006 2.1019669e-07 3649.7553 + 2640 0.0077411783 2.2784614e-07 3650.7609 + 2650 0.0077435548 2.5076917e-07 3651.8588 + 2660 0.0077461922 2.8128932e-07 3653.0779 + 2670 0.0077491826 3.233607e-07 3654.4608 + 2680 0.0077526703 3.8426634e-07 3656.0746 + 2690 0.0077569014 4.7896536e-07 3658.0337 + 2700 0.0077623476 6.435095e-07 3660.5572 + 2710 0.0077700972 9.9066415e-07 3664.1508 + 2720 0.0077837321 2.1192489e-06 3670.4787 + 2730 0.0078537309 5.0478452e-05 3702.9978 + 2740 0.0080019842 2.234588e-06 3771.8639 + 2750 0.0080167983 9.3912008e-07 3778.7349 + 2760 0.0080243022 5.7998894e-07 3782.2116 + 2770 0.0080292782 4.1619434e-07 3784.5147 + 2780 0.0080329859 3.2365852e-07 3786.2291 + 2790 0.0080359374 2.6464667e-07 3787.5927 + 2800 0.0080383893 2.2394834e-07 3788.7244 + 2810 0.0080404882 1.9429813e-07 3789.6924 + 2820 0.0080423251 1.7180333e-07 3790.5389 + 2830 0.0080439606 1.5419708e-07 3791.292 + 2840 0.0080454366 1.4007294e-07 3791.9711 + 2850 0.0080467835 1.2851365e-07 3792.5904 + 2860 0.0080480239 1.1889632e-07 3793.1603 + 2870 0.0080491753 1.1078364e-07 3793.689 + 2880 0.0080502511 1.0385986e-07 3794.1826 + 2890 0.0080512621 9.7891518e-08 3794.6462 + 2900 0.0080522171 9.2702379e-08 3795.0838 + 2910 0.0080531232 8.815703e-08 3795.4988 + 2920 0.0080539863 8.4149767e-08 3795.8939 + 2930 0.0080548115 8.0596927e-08 3796.2714 + 2940 0.0080556029 7.7431468e-08 3796.6332 + 2950 0.0080563642 7.4599072e-08 3796.9811 + 2960 0.0080570985 7.2055292e-08 3797.3166 + 2970 0.0080578086 6.9763432e-08 3797.6407 + 2980 0.0080584967 6.7692955e-08 3797.9548 + 2990 0.0080591651 6.5818259e-08 3798.2596 + 3000 0.0080598155 6.4117744e-08 3798.5562 + 3010 0.0080604496 6.2573076e-08 3798.8452 + 3020 0.0080610689 6.1168613e-08 3799.1273 + 3030 0.0080616747 5.9890948e-08 3799.4033 + 3040 0.0080622683 5.8728542e-08 3799.6735 + 3050 0.0080628507 5.7671429e-08 3799.9386 + 3060 0.0080634231 5.6710976e-08 3800.199 + 3070 0.0080639862 5.5839691e-08 3800.4551 + 3080 0.008064541 5.5051058e-08 3800.7074 + 3090 0.0080650882 5.4339406e-08 3800.9562 + 3100 0.0080656287 5.3699803e-08 3801.2018 + 3110 0.008066163 5.3127961e-08 3801.4446 + 3120 0.008066692 5.2620159e-08 3801.6849 + 3130 0.0080672161 5.2173187e-08 3801.923 + 3140 0.0080677361 5.1784286e-08 3802.1591 + 3150 0.0080682524 5.1451107e-08 3802.3936 + 3160 0.0080687656 5.1171678e-08 3802.6266 + 3170 0.0080692762 5.0944369e-08 3802.8584 + 3180 0.0080697848 5.0767875e-08 3803.0892 + 3190 0.0080702919 5.064119e-08 3803.3194 + 3200 0.0080707979 5.0563598e-08 3803.549 + 3210 0.0080713034 5.0534662e-08 3803.7784 + 3220 0.0080718088 5.0554215e-08 3804.0077 + 3230 0.0080723146 5.0622362e-08 3804.2373 + 3240 0.0080728213 5.073948e-08 3804.4672 + 3250 0.0080733294 5.090622e-08 3804.6978 + 3260 0.0080738394 5.1123521e-08 3804.9292 + 3270 0.0080743518 5.139262e-08 3805.1618 + 3280 0.0080748671 5.171507e-08 3805.3957 + 3290 0.0080753859 5.2092761e-08 3805.6311 + 3300 0.0080759088 5.2527952e-08 3805.8685 + 3310 0.0080764362 5.3023303e-08 3806.1079 + 3320 0.0080769689 5.3581914e-08 3806.3498 + 3330 0.0080775075 5.4207378e-08 3806.5944 + 3340 0.0080780526 5.4903844e-08 3806.842 + 3350 0.0080786051 5.567608e-08 3807.093 + 3360 0.0080791656 5.652957e-08 3807.3477 + 3370 0.0080797351 5.7470611e-08 3807.6065 + 3380 0.0080803144 5.8506444e-08 3807.8698 + 3390 0.0080809045 5.9645402e-08 3808.1381 + 3400 0.0080815065 6.0897097e-08 3808.412 + 3410 0.0080821215 6.2272649e-08 3808.6918 + 3420 0.0080827509 6.3784959e-08 3808.9782 + 3430 0.0080833961 6.5449061e-08 3809.272 + 3440 0.0080840587 6.7282544e-08 3809.5737 + 3450 0.0080847405 6.9306098e-08 3809.8843 + 3460 0.0080854434 7.1544197e-08 3810.2047 + 3470 0.0080861698 7.402597e-08 3810.5359 + 3480 0.0080869223 7.6786336e-08 3810.8791 + 3490 0.0080877037 7.9867475e-08 3811.2357 + 3500 0.0080885176 8.3320783e-08 3811.6073 + 3510 0.0080893679 8.7209484e-08 3811.9957 + 3520 0.0080902594 9.1612182e-08 3812.4031 + 3530 0.0080911975 9.662777e-08 3812.8321 + 3540 0.008092189 1.0238234e-07 3813.2857 + 3550 0.008093242 1.0903907e-07 3813.7677 + 3560 0.0080943663 1.1681285e-07 3814.2827 + 3570 0.0080955744 1.2599212e-07 3814.8364 + 3580 0.0080968821 1.3697303e-07 3815.4361 + 3590 0.0080983096 1.5031413e-07 3816.0912 + 3600 0.008099884 1.6682798e-07 3816.8142 + 3610 0.0081016421 1.877419e-07 3817.6222 + 3620 0.0081036359 2.1499717e-07 3818.5391 + 3630 0.0081059419 2.5184713e-07 3819.6004 + 3640 0.0081086795 3.041685e-07 3820.8614 + 3650 0.0081120491 3.8370792e-07 3822.4147 + 3660 0.0081164246 5.1761443e-07 3824.4335 + 3670 0.0081226282 7.8476649e-07 3827.2984 + 3680 0.0081330874 1.5377267e-06 3832.133 + 3690 0.0081640997 9.4754571e-06 3846.4828 + 3700 0.0084647088 3.6520628e-05 3985.6105 + 3710 0.0087788105 5.0607918e-05 4130.8576 + 3720 0.0089496823 2.7369422e-06 4209.8144 + 3730 0.0089676915 1.1442905e-06 4218.1247 + 3740 0.0089769276 7.2591487e-07 4222.3827 + 3750 0.0089832427 5.3867242e-07 4225.2918 + 3760 0.0089881163 4.3436406e-07 4227.5353 + 3770 0.0089921427 3.689283e-07 4229.3876 + 3780 0.0089956201 3.2480899e-07 4230.9866 + 3790 0.0089987196 2.9368682e-07 4232.4111 + 3800 0.0090015492 2.7114137e-07 4233.711 + 3810 0.0090041821 2.5463023e-07 4234.9202 + 3820 0.0090066711 2.4261002e-07 4236.0629 + 3830 0.0090090563 2.3411372e-07 4237.1578 + 3840 0.0090113701 2.2853263e-07 4238.2196 + 3850 0.0090136398 2.2549889e-07 4239.2611 + 3860 0.0090158898 2.2482231e-07 4240.2936 + 3870 0.0090181435 2.264602e-07 4241.3277 + 3880 0.0090204243 2.3051066e-07 4242.3742 + 3890 0.0090227572 2.3722751e-07 4243.4449 + 3900 0.0090251709 2.4706119e-07 4244.5528 + 3910 0.0090276995 2.6073849e-07 4245.7136 + 3920 0.0090303862 2.7940938e-07 4246.9474 + 3930 0.0090332884 3.0492215e-07 4248.2805 + 3940 0.0090364872 3.4036714e-07 4249.7505 + 3950 0.0090401038 3.9124064e-07 4251.4133 + 3960 0.0090443343 4.6822852e-07 4253.3593 + 3970 0.0090495296 5.9498137e-07 4255.7504 + 3980 0.0090564177 8.3552398e-07 4258.9229 + 3990 0.0090669429 1.4384739e-06 4263.774 + 4000 0.0090904831 4.9111984e-06 4274.6331 + 4010 0.0092929124 8.3135371e-06 4368.0633 + 4020 0.0093414419 3.1334206e-06 4390.4447 + 4030 0.0093714047 3.1966251e-06 4404.2581 + 4040 0.0094176451 9.8265197e-06 4425.5788 + 4050 0.0097772862 4.2787238e-05 4591.3956 + 4060 0.010043914 5.0703357e-05 4714.2148 + 4070 0.010275503 5.9586189e-06 4820.8179 + 4080 0.010329372 6.4730027e-06 4845.5948 + 4090 0.010580719 3.2675549e-05 4961.1991 + 4100 0.01097933 4.1824022e-05 5144.3777 + 4110 0.011375225 4.4528389e-05 5326.1041 + 4120 0.011791986 4.4629128e-05 5517.1914 + 4130 0.012199057 3.8467532e-05 5703.6209 + 4140 0.012388718 1.6598211e-05 5790.3997 + 4150 0.012719145 2.6617697e-05 5941.4863 + 4160 0.013138874 3.9714695e-05 6133.2127 + 4170 0.013296898 5.7028372e-06 6205.3279 + 4180 0.013359491 1.0623338e-05 6233.8756 + 4190 0.013580279 4.9259166e-06 6334.5676 + 4200 0.013608204 1.5476759e-06 6347.2885 + 4210 0.013620408 9.4152281e-07 6352.8431 + 4220 0.013628594 7.0110358e-07 6356.5664 + 4230 0.01363499 5.7777895e-07 6359.474 + 4240 0.013640419 5.071712e-07 6361.941 + 4250 0.013645286 4.6571283e-07 6364.1515 + 4260 0.013649829 4.4320314e-07 6366.2145 + 4270 0.013654213 4.3508698e-07 6368.2055 + 4280 0.013658575 4.3986766e-07 6370.186 + 4290 0.013663045 4.5837677e-07 6372.2157 + 4300 0.013667773 4.9416073e-07 6374.363 + 4310 0.013672963 5.5535604e-07 6376.7211 + 4320 0.01367894 6.6021298e-07 6379.4372 + 4330 0.013686311 8.5526524e-07 6382.7882 + 4340 0.013696507 1.296644e-06 6387.4262 + 4350 0.013714701 2.9652221e-06 6395.7088 + 4360 0.013881439 3.5899661e-05 6471.6738 + 4370 0.014196617 3.1253608e-05 6615.1811 + 4380 0.014504048 7.0683429e-06 6755.0394 + 4390 0.014536871 1.4515319e-06 6769.9538 + 4400 0.014547629 7.6742092e-07 6774.8365 + 4410 0.01455401 5.1561918e-07 6777.7294 + 4420 0.014558528 3.8717171e-07 6779.7758 + 4430 0.014562024 3.1004583e-07 6781.3579 + 4440 0.014564879 2.5893679e-07 6782.6486 + 4450 0.014567296 2.2275131e-07 6783.7406 + 4460 0.014569397 1.9588676e-07 6784.6888 + 4470 0.014571258 1.7521879e-07 6785.5285 + 4480 0.014572934 1.5887218e-07 6786.2838 + 4490 0.014574461 1.4565562e-07 6786.9717 + 4500 0.014575867 1.3477717e-07 6787.6046 + 4510 0.014577173 1.2569059e-07 6788.1919 + 4520 0.014578394 1.1800737e-07 6788.741 + 4530 0.014579544 1.1144387e-07 6789.2576 + 4540 0.014580632 1.0578845e-07 6789.7464 + 4550 0.014581667 1.0088007e-07 6790.2111 + 4560 0.014582656 9.6594222e-08 6790.6548 + 4570 0.014583605 9.283317e-08 6791.0802 + 4580 0.014584518 8.9519251e-08 6791.4895 + 4590 0.0145854 8.6590045e-08 6791.8845 + 4600 0.014586254 8.3994895e-08 6792.267 + 4610 0.014587083 8.1692339e-08 6792.6383 + 4620 0.014587891 7.9648193e-08 6792.9997 + 4630 0.014588679 7.7834097e-08 6793.3523 + 4640 0.01458945 7.6226411e-08 6793.6971 + 4650 0.014590205 7.4805352e-08 6794.035 + 4660 0.014590948 7.3554327e-08 6794.3668 + 4670 0.014591678 7.2459408e-08 6794.6932 + 4680 0.014592398 7.1508917e-08 6795.015 + 4690 0.01459311 7.0693097e-08 6795.3328 + 4700 0.014593813 7.0003852e-08 6795.6471 + 4710 0.014594511 6.9434537e-08 6795.9585 + 4720 0.014595203 6.8979799e-08 6796.2676 + 4730 0.014595891 6.8635445e-08 6796.5748 + 4740 0.014596576 6.839835e-08 6796.8807 + 4750 0.01459726 6.8266383e-08 6797.1857 + 4760 0.014597942 6.823836e-08 6797.4903 + 4770 0.014598625 6.8314021e-08 6797.795 + 4780 0.014599309 6.849402e-08 6798.1003 + 4790 0.014599995 6.8779943e-08 6798.4065 + 4800 0.014600684 6.9174339e-08 6798.7143 + 4810 0.014601378 6.9680779e-08 6799.0241 + 4820 0.014602078 7.0303936e-08 6799.3364 + 4830 0.014602784 7.1049693e-08 6799.6517 + 4840 0.014603498 7.1925284e-08 6799.9707 + 4850 0.014604222 7.2939475e-08 6800.294 + 4860 0.014604956 7.4102791e-08 6800.6221 + 4870 0.014605703 7.5427802e-08 6800.9557 + 4880 0.014606464 7.6929481e-08 6801.2958 + 4890 0.014607241 7.8625665e-08 6801.643 + 4900 0.014608036 8.0537626e-08 6801.9983 + 4910 0.01460885 8.2690811e-08 6802.3627 + 4920 0.014609688 8.5115787e-08 6802.7374 + 4930 0.014610551 8.7849474e-08 6803.1237 + 4940 0.014611443 9.0936752e-08 6803.5231 + 4950 0.014612368 9.4432608e-08 6803.9372 + 4960 0.01461333 9.8405013e-08 6804.3681 + 4970 0.014614334 1.0293885e-07 6804.8181 + 4980 0.014615386 1.0814135e-07 6805.2899 + 4990 0.014616494 1.1414984e-07 6805.7869 + 5000 0.014617666 1.2114278e-07 6806.313 +Loop time of 20.4871 on 4 procs for 5000 steps with 32000 atoms + +Performance: 0.003 ns/day, 9395.278 hours/ns, 244.056 timesteps/s +80.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.3304 | 5.3747 | 5.4481 | 1.9 | 26.23 +Neigh | 0.47764 | 0.49529 | 0.50484 | 1.5 | 2.42 +Comm | 7.3264 | 7.6698 | 8.0174 | 11.5 | 37.44 +Output | 0.020597 | 0.064879 | 0.11197 | 13.7 | 0.32 +Modify | 4.3321 | 4.7499 | 5.1576 | 18.4 | 23.18 +Other | | 2.132 | | | 10.41 + +Nlocal: 8000 ave 8033 max 7977 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Nghost: 6061.25 ave 6085 max 6028 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 144002 ave 144601 max 143596 min +Histogram: 1 0 1 1 0 0 0 0 0 1 + +Total # of neighbors = 576008 +Ave neighs/atom = 18.0003 +Neighbor list builds = 67 +Dangerous builds = 38 +Total wall time: 0:00:20 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 b/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 new file mode 100644 index 0000000000..e586fb5afb --- /dev/null +++ b/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 @@ -0,0 +1,198 @@ +LAMMPS (28 Feb 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Test case / example for the electronic stopping fix elstop +# One fast atom, no other interactions. +# Elstop only applied in a smaller box in the middle. +# +# Also uses fix dt/reset, as one should when energies are high +# enough to require electronic stopping. + +units metal +boundary p p p +timestep 0.0001 + +lattice fcc 1 +Lattice spacing in x,y,z = 1 1 1 + +region rbox block -100 100 -100 100 -100 100 +region rsmallbox block -90 90 -90 90 -90 90 + +create_box 1 rbox +Created orthogonal box = (-100 -100 -100) to (100 100 100) + 1 by 1 by 1 MPI processor grid + +mass 1 28.0855 + +create_atoms 1 single 0 0 0 +Created 1 atoms + Time spent = 3.09944e-06 secs +velocity all set 1120 1620 389 + +pair_style zero 1 +pair_coeff * * 1 + +fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 +fix fel all elstop 1.0 Si.Si.elstop minneigh 0 region rsmallbox +fix fnve all nve + +compute ek all ke/atom +compute ektot all reduce sum c_ek + +thermo 100 +thermo_style custom step time dt f_fel c_ektot + +#dump mydump all custom 200 elstop.only.dump id x y z vx vy vz fx fy fz c_ek + +run 10000 +WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) +WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3 + ghost atom cutoff = 3 + binsize = 1.5, bins = 134 134 134 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix elstop, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 13.31 | 13.31 | 13.31 Mbytes +Step Time Dt f_fel c_ektot + 0 0 4.98128e-05 0 5865.5525 + 100 0.0049972222 5.0137252e-05 76.048699 5789.883 + 200 0.010027278 5.0467945e-05 151.67477 5714.2548 + 300 0.015090636 5.0803375e-05 226.8806 5639.0469 + 400 0.020187777 5.1143663e-05 301.6685 5564.2569 + 500 0.025319192 5.1488933e-05 376.04082 5489.8825 + 600 0.030485386 5.1839314e-05 449.99984 5415.9215 + 700 0.035686876 5.2194938e-05 523.54788 5342.3714 + 800 0.040924195 5.2555944e-05 596.68721 5269.23 + 900 0.046197886 5.2922477e-05 669.42011 5196.4951 + 1000 0.05150851 5.3294685e-05 741.74883 5124.1643 + 1100 0.056856642 5.3672723e-05 813.67563 5052.2355 + 1200 0.062229338 5.3731851e-05 824.43012 5041.1224 + 1300 0.067602524 5.3731851e-05 824.43012 5041.1224 + 1400 0.072978188 5.387166e-05 850.91948 5014.9907 + 1500 0.07838447 5.425887e-05 922.23961 4943.6685 + 1600 0.08382978 5.4652329e-05 993.16341 4872.7428 + 1700 0.089299984 5.4705935e-05 1002.3545 4863.198 + 1800 0.094770578 5.4705935e-05 1002.3545 4863.198 + 1900 0.10024117 5.4705935e-05 1002.3545 4863.198 + 2000 0.10571333 5.4819488e-05 1022.8338 4843.0716 + 2100 0.11121515 5.5222127e-05 1093.1986 4772.7048 + 2200 0.11675757 5.5631458e-05 1163.1724 4702.7291 + 2300 0.12234126 5.6047675e-05 1232.7573 4633.1422 + 2400 0.12796692 5.6470985e-05 1301.9555 4563.942 + 2500 0.13363527 5.6901598e-05 1370.7692 4495.1264 + 2600 0.13934706 5.7339739e-05 1439.2006 4426.6932 + 2700 0.14510304 5.7785637e-05 1507.2516 4358.6403 + 2800 0.150904 5.8239536e-05 1574.9245 4290.9655 + 2900 0.15675076 5.8701688e-05 1642.2213 4223.6668 + 3000 0.16264416 5.9172358e-05 1709.1441 4156.7422 + 3100 0.16858505 5.9651822e-05 1775.695 4090.1894 + 3200 0.17457434 6.0140369e-05 1841.8761 4024.0064 + 3300 0.18061294 6.0638302e-05 1907.6894 3958.1913 + 3400 0.18669814 6.0949329e-05 1947.6558 3917.8967 + 3500 0.19279307 6.0949329e-05 1947.6558 3917.8967 + 3600 0.198888 6.0949329e-05 1947.6558 3917.8967 + 3700 0.20498294 6.0949329e-05 1947.6558 3917.8967 + 3800 0.21107787 6.0949329e-05 1947.6558 3917.8967 + 3900 0.2171728 6.0949329e-05 1947.6558 3917.8967 + 4000 0.22326773 6.0949329e-05 1947.6558 3917.8967 + 4100 0.22936267 6.0949329e-05 1947.6558 3917.8967 + 4200 0.2354576 6.0949329e-05 1947.6558 3917.8967 + 4300 0.24155253 6.0949329e-05 1947.6558 3917.8967 + 4400 0.24764747 6.0949329e-05 1947.6558 3917.8967 + 4500 0.2537424 6.0949329e-05 1947.6558 3917.8967 + 4600 0.25983733 6.0949329e-05 1947.6558 3917.8967 + 4700 0.26593227 6.0949329e-05 1947.6558 3917.8967 + 4800 0.2720272 6.0949329e-05 1947.6558 3917.8967 + 4900 0.27812213 6.0949329e-05 1947.6558 3917.8967 + 5000 0.28421706 6.0949329e-05 1947.6558 3917.8967 + 5100 0.290312 6.0949329e-05 1947.6558 3917.8967 + 5200 0.29640693 6.0949329e-05 1947.6558 3917.8967 + 5300 0.30250186 6.0949329e-05 1947.6558 3917.8967 + 5400 0.3085968 6.0949329e-05 1947.6558 3917.8967 + 5500 0.31469173 6.0949329e-05 1947.6558 3917.8967 + 5600 0.32078666 6.0949329e-05 1947.6558 3917.8967 + 5700 0.32688159 6.0949329e-05 1947.6558 3917.8967 + 5800 0.33297653 6.0949329e-05 1947.6558 3917.8967 + 5900 0.33907146 6.0949329e-05 1947.6558 3917.8967 + 6000 0.34516639 6.0949329e-05 1947.6558 3917.8967 + 6100 0.35126133 6.0949329e-05 1947.6558 3917.8967 + 6200 0.35735626 6.0949329e-05 1947.6558 3917.8967 + 6300 0.36345119 6.0949329e-05 1947.6558 3917.8967 + 6400 0.36954612 6.0949329e-05 1947.6558 3917.8967 + 6500 0.37564106 6.0949329e-05 1947.6558 3917.8967 + 6600 0.38173599 6.0949329e-05 1947.6558 3917.8967 + 6700 0.38783092 6.0949329e-05 1947.6558 3917.8967 + 6800 0.39392586 6.0949329e-05 1947.6558 3917.8967 + 6900 0.40002079 6.0949329e-05 1947.6558 3917.8967 + 7000 0.40611572 6.0949329e-05 1947.6558 3917.8967 + 7100 0.41221066 6.0949329e-05 1947.6558 3917.8967 + 7200 0.41830559 6.0949329e-05 1947.6558 3917.8967 + 7300 0.42440052 6.0949329e-05 1947.6558 3917.8967 + 7400 0.43049545 6.0949329e-05 1947.6558 3917.8967 + 7500 0.43659039 6.0949329e-05 1947.6558 3917.8967 + 7600 0.44268532 6.0949329e-05 1947.6558 3917.8967 + 7700 0.44878025 6.0949329e-05 1947.6558 3917.8967 + 7800 0.45487519 6.0949329e-05 1947.6558 3917.8967 + 7900 0.46097012 6.0949329e-05 1947.6558 3917.8967 + 8000 0.46706505 6.0949329e-05 1947.6558 3917.8967 + 8100 0.47315998 6.0949329e-05 1947.6558 3917.8967 + 8200 0.47925492 6.0949329e-05 1947.6558 3917.8967 + 8300 0.48534985 6.0949329e-05 1947.6558 3917.8967 + 8400 0.49144478 6.0949329e-05 1947.6558 3917.8967 + 8500 0.49753972 6.0949329e-05 1947.6558 3917.8967 + 8600 0.50363465 6.0949329e-05 1947.6558 3917.8967 + 8700 0.50972958 6.0949329e-05 1947.6558 3917.8967 + 8800 0.51582452 6.0949329e-05 1947.6558 3917.8967 + 8900 0.52191945 6.0949329e-05 1947.6558 3917.8967 + 9000 0.52801438 6.0949329e-05 1947.6558 3917.8967 + 9100 0.53410931 6.0949329e-05 1947.6558 3917.8967 + 9200 0.54020425 6.0949329e-05 1947.6558 3917.8967 + 9300 0.54629918 6.0949329e-05 1947.6558 3917.8967 + 9400 0.55239411 6.0949329e-05 1947.6558 3917.8967 + 9500 0.55848905 6.0949329e-05 1947.6558 3917.8967 + 9600 0.56458398 6.0949329e-05 1947.6558 3917.8967 + 9700 0.57067891 6.0949329e-05 1947.6558 3917.8967 + 9800 0.57677384 6.0949329e-05 1947.6558 3917.8967 + 9900 0.58286878 6.0949329e-05 1947.6558 3917.8967 + 10000 0.58896371 6.0949329e-05 1947.6558 3917.8967 +Loop time of 1.81749 on 1 procs for 10000 steps with 1 atoms + +Performance: 28.974 ns/day, 0.828 hours/ns, 5502.087 timesteps/s +95.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00068855 | 0.00068855 | 0.00068855 | 0.0 | 0.04 +Neigh | 1.777 | 1.777 | 1.777 | 0.0 | 97.77 +Comm | 0.028521 | 0.028521 | 0.028521 | 0.0 | 1.57 +Output | 0.0020428 | 0.0020428 | 0.0020428 | 0.0 | 0.11 +Modify | 0.0063827 | 0.0063827 | 0.0063827 | 0.0 | 0.35 +Other | | 0.002891 | | | 0.16 + +Nlocal: 1 ave 1 max 1 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 960 +Dangerous builds = 568 +Total wall time: 0:00:01 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 b/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 new file mode 100644 index 0000000000..5ed0d86f1c --- /dev/null +++ b/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 @@ -0,0 +1,198 @@ +LAMMPS (28 Feb 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Test case / example for the electronic stopping fix elstop +# One fast atom, no other interactions. +# Elstop only applied in a smaller box in the middle. +# +# Also uses fix dt/reset, as one should when energies are high +# enough to require electronic stopping. + +units metal +boundary p p p +timestep 0.0001 + +lattice fcc 1 +Lattice spacing in x,y,z = 1 1 1 + +region rbox block -100 100 -100 100 -100 100 +region rsmallbox block -90 90 -90 90 -90 90 + +create_box 1 rbox +Created orthogonal box = (-100 -100 -100) to (100 100 100) + 1 by 2 by 2 MPI processor grid + +mass 1 28.0855 + +create_atoms 1 single 0 0 0 +Created 1 atoms + Time spent = 2.00272e-05 secs +velocity all set 1120 1620 389 + +pair_style zero 1 +pair_coeff * * 1 + +fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 +fix fel all elstop 1.0 Si.Si.elstop minneigh 0 region rsmallbox +fix fnve all nve + +compute ek all ke/atom +compute ektot all reduce sum c_ek + +thermo 100 +thermo_style custom step time dt f_fel c_ektot + +#dump mydump all custom 200 elstop.only.dump id x y z vx vy vz fx fy fz c_ek + +run 10000 +WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) +WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3 + ghost atom cutoff = 3 + binsize = 1.5, bins = 134 134 134 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix elstop, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.637 | 4.2 | 5.887 Mbytes +Step Time Dt f_fel c_ektot + 0 0 4.98128e-05 0 5865.5525 + 100 0.0049972222 5.0137252e-05 76.048699 5789.883 + 200 0.010027278 5.0467945e-05 151.67477 5714.2548 + 300 0.015090636 5.0803375e-05 226.8806 5639.0469 + 400 0.020187777 5.1143663e-05 301.6685 5564.2569 + 500 0.025319192 5.1488933e-05 376.04082 5489.8825 + 600 0.030485386 5.1839314e-05 449.99984 5415.9215 + 700 0.035686876 5.2194938e-05 523.54788 5342.3714 + 800 0.040924195 5.2555944e-05 596.68721 5269.23 + 900 0.046197886 5.2922477e-05 669.42011 5196.4951 + 1000 0.05150851 5.3294685e-05 741.74883 5124.1643 + 1100 0.056856642 5.3672723e-05 813.67563 5052.2355 + 1200 0.062229338 5.3731851e-05 824.43012 5041.1224 + 1300 0.067602524 5.3731851e-05 824.43012 5041.1224 + 1400 0.072978188 5.387166e-05 850.91948 5014.9907 + 1500 0.07838447 5.425887e-05 922.23961 4943.6685 + 1600 0.08382978 5.4652329e-05 993.16341 4872.7428 + 1700 0.089299984 5.4705935e-05 1002.3545 4863.198 + 1800 0.094770578 5.4705935e-05 1002.3545 4863.198 + 1900 0.10024117 5.4705935e-05 1002.3545 4863.198 + 2000 0.10571333 5.4819488e-05 1022.8338 4843.0716 + 2100 0.11121515 5.5222127e-05 1093.1986 4772.7048 + 2200 0.11675757 5.5631458e-05 1163.1724 4702.7291 + 2300 0.12234126 5.6047675e-05 1232.7573 4633.1422 + 2400 0.12796692 5.6470985e-05 1301.9555 4563.942 + 2500 0.13363527 5.6901598e-05 1370.7692 4495.1264 + 2600 0.13934706 5.7339739e-05 1439.2006 4426.6932 + 2700 0.14510304 5.7785637e-05 1507.2516 4358.6403 + 2800 0.150904 5.8239536e-05 1574.9245 4290.9655 + 2900 0.15675076 5.8701688e-05 1642.2213 4223.6668 + 3000 0.16264416 5.9172358e-05 1709.1441 4156.7422 + 3100 0.16858505 5.9651822e-05 1775.695 4090.1894 + 3200 0.17457434 6.0140369e-05 1841.8761 4024.0064 + 3300 0.18061294 6.0638302e-05 1907.6894 3958.1913 + 3400 0.18669814 6.0949329e-05 1947.6558 3917.8967 + 3500 0.19279307 6.0949329e-05 1947.6558 3917.8967 + 3600 0.198888 6.0949329e-05 1947.6558 3917.8967 + 3700 0.20498294 6.0949329e-05 1947.6558 3917.8967 + 3800 0.21107787 6.0949329e-05 1947.6558 3917.8967 + 3900 0.2171728 6.0949329e-05 1947.6558 3917.8967 + 4000 0.22326773 6.0949329e-05 1947.6558 3917.8967 + 4100 0.22936267 6.0949329e-05 1947.6558 3917.8967 + 4200 0.2354576 6.0949329e-05 1947.6558 3917.8967 + 4300 0.24155253 6.0949329e-05 1947.6558 3917.8967 + 4400 0.24764747 6.0949329e-05 1947.6558 3917.8967 + 4500 0.2537424 6.0949329e-05 1947.6558 3917.8967 + 4600 0.25983733 6.0949329e-05 1947.6558 3917.8967 + 4700 0.26593227 6.0949329e-05 1947.6558 3917.8967 + 4800 0.2720272 6.0949329e-05 1947.6558 3917.8967 + 4900 0.27812213 6.0949329e-05 1947.6558 3917.8967 + 5000 0.28421706 6.0949329e-05 1947.6558 3917.8967 + 5100 0.290312 6.0949329e-05 1947.6558 3917.8967 + 5200 0.29640693 6.0949329e-05 1947.6558 3917.8967 + 5300 0.30250186 6.0949329e-05 1947.6558 3917.8967 + 5400 0.3085968 6.0949329e-05 1947.6558 3917.8967 + 5500 0.31469173 6.0949329e-05 1947.6558 3917.8967 + 5600 0.32078666 6.0949329e-05 1947.6558 3917.8967 + 5700 0.32688159 6.0949329e-05 1947.6558 3917.8967 + 5800 0.33297653 6.0949329e-05 1947.6558 3917.8967 + 5900 0.33907146 6.0949329e-05 1947.6558 3917.8967 + 6000 0.34516639 6.0949329e-05 1947.6558 3917.8967 + 6100 0.35126133 6.0949329e-05 1947.6558 3917.8967 + 6200 0.35735626 6.0949329e-05 1947.6558 3917.8967 + 6300 0.36345119 6.0949329e-05 1947.6558 3917.8967 + 6400 0.36954612 6.0949329e-05 1947.6558 3917.8967 + 6500 0.37564106 6.0949329e-05 1947.6558 3917.8967 + 6600 0.38173599 6.0949329e-05 1947.6558 3917.8967 + 6700 0.38783092 6.0949329e-05 1947.6558 3917.8967 + 6800 0.39392586 6.0949329e-05 1947.6558 3917.8967 + 6900 0.40002079 6.0949329e-05 1947.6558 3917.8967 + 7000 0.40611572 6.0949329e-05 1947.6558 3917.8967 + 7100 0.41221066 6.0949329e-05 1947.6558 3917.8967 + 7200 0.41830559 6.0949329e-05 1947.6558 3917.8967 + 7300 0.42440052 6.0949329e-05 1947.6558 3917.8967 + 7400 0.43049545 6.0949329e-05 1947.6558 3917.8967 + 7500 0.43659039 6.0949329e-05 1947.6558 3917.8967 + 7600 0.44268532 6.0949329e-05 1947.6558 3917.8967 + 7700 0.44878025 6.0949329e-05 1947.6558 3917.8967 + 7800 0.45487519 6.0949329e-05 1947.6558 3917.8967 + 7900 0.46097012 6.0949329e-05 1947.6558 3917.8967 + 8000 0.46706505 6.0949329e-05 1947.6558 3917.8967 + 8100 0.47315998 6.0949329e-05 1947.6558 3917.8967 + 8200 0.47925492 6.0949329e-05 1947.6558 3917.8967 + 8300 0.48534985 6.0949329e-05 1947.6558 3917.8967 + 8400 0.49144478 6.0949329e-05 1947.6558 3917.8967 + 8500 0.49753972 6.0949329e-05 1947.6558 3917.8967 + 8600 0.50363465 6.0949329e-05 1947.6558 3917.8967 + 8700 0.50972958 6.0949329e-05 1947.6558 3917.8967 + 8800 0.51582452 6.0949329e-05 1947.6558 3917.8967 + 8900 0.52191945 6.0949329e-05 1947.6558 3917.8967 + 9000 0.52801438 6.0949329e-05 1947.6558 3917.8967 + 9100 0.53410931 6.0949329e-05 1947.6558 3917.8967 + 9200 0.54020425 6.0949329e-05 1947.6558 3917.8967 + 9300 0.54629918 6.0949329e-05 1947.6558 3917.8967 + 9400 0.55239411 6.0949329e-05 1947.6558 3917.8967 + 9500 0.55848905 6.0949329e-05 1947.6558 3917.8967 + 9600 0.56458398 6.0949329e-05 1947.6558 3917.8967 + 9700 0.57067891 6.0949329e-05 1947.6558 3917.8967 + 9800 0.57677384 6.0949329e-05 1947.6558 3917.8967 + 9900 0.58286878 6.0949329e-05 1947.6558 3917.8967 + 10000 0.58896371 6.0949329e-05 1947.6558 3917.8967 +Loop time of 3.82192 on 4 procs for 10000 steps with 1 atoms + +Performance: 13.778 ns/day, 1.742 hours/ns, 2616.487 timesteps/s +76.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0006454 | 0.00077975 | 0.001003 | 0.0 | 0.02 +Neigh | 1.3094 | 1.3771 | 1.441 | 4.0 | 36.03 +Comm | 0.13665 | 0.16207 | 0.20281 | 6.1 | 4.24 +Output | 0.036584 | 0.046189 | 0.060792 | 4.2 | 1.21 +Modify | 2.1326 | 2.212 | 2.3096 | 4.3 | 57.88 +Other | | 0.02382 | | | 0.62 + +Nlocal: 0.25 ave 1 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 960 +Dangerous builds = 568 +Total wall time: 0:00:03 diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 13e406d42f..43deda0bdb 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -45,6 +45,7 @@ dihedral_style table/cut, Mike Salerno, ksalerno@pha.jhu.edu, 11 May 18 fix addtorque, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 fix ave/correlate/long, Jorge Ramirez (UPM Madrid), jorge.ramirez at upm.es, 21 Oct 2015 fix bond/react, Jacob Gissinger (CU Boulder), info at disarmmd.org, 24 Feb 2018 +fix elstop, Konstantin Avchaciov, k.avchachov at gmail.com, 26 Feb 2019 fix ffl, David Wilkins (EPFL Lausanne), david.wilkins @ epfl.ch, 28 Sep 2018 fix filter/corotate, Lukas Fath (KIT), lukas.fath at kit.edu, 15 Mar 2017 fix flow/gauss, Joel Eaves (CU Boulder), Joel.Eaves@Colorado.edu, 23 Aug 2016 diff --git a/src/USER-MISC/fix_elstop.cpp b/src/USER-MISC/fix_elstop.cpp new file mode 100644 index 0000000000..def576cfca --- /dev/null +++ b/src/USER-MISC/fix_elstop.cpp @@ -0,0 +1,326 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Electronic stopping power + Contributing authors: K. Avchaciov and T. Metspalu + Information: k.avchachov@gmail.com +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "fix_elstop.h" +#include "mpi.h" +#include "atom.h" +#include "update.h" +#include "domain.h" +#include "region.h" +#include "group.h" +#include "force.h" +#include "pair.h" +#include "fix.h" +#include "compute.h" +#include "modify.h" +#include "memory.h" +#include "comm.h" +#include "error.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +#define MAXLINE 1024 + +/* ---------------------------------------------------------------------- */ + +FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + scalar_flag = 1; // Has compute_scalar + global_freq = 1; // SeLoss computed every step + extscalar = 0; // SeLoss compute_scalar is intensive + nevery = 1; // Run fix every step + + + // Make sure the id for the kinetic energy compute is unique + // by prepending the ID of this fix. + int n = strlen(id) + strlen("_ke_atom") + 1; + id_ke_atom = new char[n]; + strcpy(id_ke_atom, id); + strcat(id_ke_atom, "_ke_atom"); + + char *newarg[3]; + newarg[0] = id_ke_atom; + newarg[1] = group->names[igroup]; + newarg[2] = (char *) "ke/atom"; + modify->add_compute(3, newarg); + + + // args: 0 = fix ID, 1 = group ID, 2 = "elstop" + // 3 = Ecut, 4 = file path + // optional rest: "region" + // "minneigh" + + if (narg < 5) + error->all(FLERR, "Illegal fix elstop command: too few arguments"); + + Ecut = force->numeric(FLERR, arg[3]); + if (Ecut <= 0.0) error->all(FLERR, "Illegal fix elstop command: Ecut <= 0"); + + int iarg = 5; + iregion = -1; + minneigh = 1; + bool minneighflag = false; + + while (iarg < narg) { + if (strcmp(arg[iarg], "region") == 0) { + if (iregion >= 0) + error->all(FLERR, "Illegal fix elstop command: region given twice"); + if (iarg+2 > narg) + error->all(FLERR, "Illegal fix elstop command: region name missing"); + iregion = domain->find_region(arg[iarg+1]); + if (iregion < 0) + error->all(FLERR, "Region ID for fix elstop does not exist"); + iarg += 2; + } + else if (strcmp(arg[iarg], "minneigh") == 0) { + if (minneighflag) + error->all(FLERR, "Illegal fix elstop command: minneigh given twice"); + minneighflag = true; + if (iarg+2 > narg) + error->all(FLERR, "Illegal fix elstop command: minneigh number missing"); + minneigh = force->inumeric(FLERR, arg[iarg+1]); + if (minneigh < 0) + error->all(FLERR, "Illegal fix elstop command: minneigh < 0"); + iarg += 2; + } + else error->all(FLERR, "Illegal fix elstop command: unknown argument"); + } + + + // Read the input file for energy ranges and stopping powers. + // First proc 0 reads the file, then bcast to others. + const int ncol = atom->ntypes + 1; + if (comm->me == 0) { + maxlines = 300; + memory->create(elstop_ranges, ncol, maxlines, "elstop:tabs"); + read_table(arg[4]); + } + + MPI_Bcast(&maxlines, 1 , MPI_INT, 0, world); + MPI_Bcast(&table_entries, 1 , MPI_INT, 0, world); + + if (comm->me != 0) + memory->create(elstop_ranges, ncol, maxlines, "elstop:tabs"); + + MPI_Bcast(&elstop_ranges[0][0], ncol*maxlines, MPI_DOUBLE, 0, world); +} + +/* ---------------------------------------------------------------------- */ + +FixElstop::~FixElstop() +{ + memory->destroy(elstop_ranges); + modify->delete_compute(id_ke_atom); + delete id_ke_atom; +} + +/* ---------------------------------------------------------------------- */ + +int FixElstop::setmask() +{ + int mask = 0; + mask |= POST_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixElstop::init() +{ + SeLoss_sync_flag = 0; + SeLoss = 0.0; + + int ikeatom = modify->find_compute(id_ke_atom); + if (ikeatom < 0) + error->all(FLERR, "KE compute ID for fix elstop does not exist"); + c_ke = modify->compute[ikeatom]; + + + // need an occasional full neighbor list + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->fix = 1; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->occasional = 1; +} + +/* ---------------------------------------------------------------------- */ + +void FixElstop::init_list(int /*id*/, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void FixElstop::post_force(int /*vflag*/) +{ + SeLoss_sync_flag = 0; + + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + double dt = update->dt; + + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + neighbor->build_one(list); + int *numneigh = list->numneigh; + + c_ke->compute_peratom(); + double *ke = c_ke->vector_atom; + + for (int i = 0; i < nlocal; ++i) { + + // Do fast checks first, only then the region check + if (!(mask[i] & groupbit)) continue; + + // Avoid atoms outside bulk material + if (numneigh[i] < minneigh) continue; + + double energy = ke[i]; + if (energy < Ecut) continue; + if (energy < elstop_ranges[0][0]) continue; + if (energy > elstop_ranges[0][table_entries - 1]) + error->one(FLERR, "Atom kinetic energy too high for fix elstop"); + + if (iregion >= 0) { + // Only apply in the given region + if (domain->regions[iregion]->match(x[i][0], x[i][1], x[i][2]) != 1) + continue; + } + + // Binary search to find correct energy range + int iup = table_entries - 1; + int idown = 0; + while (true) { + int ihalf = idown + (iup - idown) / 2; + if (ihalf == idown) break; + if (elstop_ranges[0][ihalf] < energy) idown = ihalf; + else iup = ihalf; + } + + int itype = type[i]; + double Se_lo = elstop_ranges[itype][idown]; + double Se_hi = elstop_ranges[itype][iup]; + double E_lo = elstop_ranges[0][idown]; + double E_hi = elstop_ranges[0][iup]; + + // Get elstop with a simple linear interpolation + double Se = (Se_hi - Se_lo) / (E_hi - E_lo) * (energy - E_lo) + Se_lo; + + double v2 = v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]; + double vabs = sqrt(v2); + double factor = -Se / vabs; + + f[i][0] += v[i][0] * factor; + f[i][1] += v[i][1] * factor; + f[i][2] += v[i][2] * factor; + + SeLoss += Se * vabs * dt; // very rough approx + } +} + +/* ---------------------------------------------------------------------- */ + +double FixElstop::compute_scalar() +{ + // only sum across procs when changed since last call + + if (SeLoss_sync_flag == 0) { + MPI_Allreduce(&SeLoss, &SeLoss_all, 1, MPI_DOUBLE, MPI_SUM, world); + SeLoss_sync_flag = 1; + } + return SeLoss_all; +} + +/* ---------------------------------------------------------------------- */ + +void FixElstop::read_table(const char *file) +{ + char line[MAXLINE]; + + FILE *fp = force->open_potential(file); + if (fp == NULL) { + char str[128]; + snprintf(str, 128, "Cannot open stopping range table %s", file); + error->one(FLERR, str); + } + + const int ncol = atom->ntypes + 1; + + int l = 0; + while (true) { + if (fgets(line, MAXLINE, fp) == NULL) break; // end of file + if (line[0] == '#') continue; // comment + + char *pch = strtok(line, " \t\n\r"); + if (pch == NULL) continue; // blank line + + if (l >= maxlines) grow_table(); + + int i = 0; + for ( ; i < ncol && pch != NULL; i++) { + elstop_ranges[i][l] = force->numeric(FLERR, pch); + pch = strtok(NULL, " \t\n\r"); + } + + if (i != ncol || pch != NULL) // too short or too long + error->one(FLERR, "fix elstop: Invalid table line"); + + if (l >= 1 && elstop_ranges[0][l] <= elstop_ranges[0][l-1]) + error->one(FLERR, "fix elstop: Energies must be in ascending order"); + + l++; + } + table_entries = l; + + if (table_entries == 0) + error->one(FLERR, "Did not find any data in elstop table file"); + + fclose(fp); +} + +/* ---------------------------------------------------------------------- */ + +void FixElstop::grow_table() +{ + const int ncol = atom->ntypes + 1; + int new_maxlines = 2 * maxlines; + + double **new_array; + memory->create(new_array, ncol, new_maxlines, "elstop:tabscopy"); + + for (int i = 0; i < ncol; i++) + memcpy(new_array[i], elstop_ranges[i], maxlines*sizeof(double)); + + memory->destroy(elstop_ranges); + elstop_ranges = new_array; + maxlines = new_maxlines; +} diff --git a/src/USER-MISC/fix_elstop.h b/src/USER-MISC/fix_elstop.h new file mode 100644 index 0000000000..dc49825290 --- /dev/null +++ b/src/USER-MISC/fix_elstop.h @@ -0,0 +1,111 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Electronic stopping power + Contributing authors: K. Avchaciov and T. Metspalu + Information: k.avchachov@gmail.com +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(elstop,FixElstop) + +#else + +#ifndef LMP_FIX_ELSTOP_H +#define LMP_FIX_ELSTOP_H + +#include "fix.h" + + +namespace LAMMPS_NS { + +class FixElstop : public Fix { + public: + FixElstop(class LAMMPS *, int, char **); + ~FixElstop(); + int setmask(); + void init(); + void post_force(int); + void init_list(int, class NeighList *); + double compute_scalar(); + + private: + void read_table(const char *); + void grow_table(); + + double Ecut; // cutoff energy + double SeLoss, SeLoss_all; // electronic energy loss + int SeLoss_sync_flag; // sync done since last change? + + int maxlines; // max number of lines in table + int table_entries; // number of table entries actually read + double **elstop_ranges; // [ 0][i]: energies + // [>0][i]: stopping powers per type + + char *id_ke_atom; // name of kinetic energy compute + int iregion; // region index if used, else -1 + int minneigh; // minimum number of neighbors + + class NeighList *list; + class Compute *c_ke; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Region ID for fix elstop does not exist + +Self-explanatory. + +E: KE compute ID for fix elstop does not exist + +Internal error. Should not happen. + +E: Atom kinetic energy too high for fix elstop + +The group given in the fix elstop command includes an atom that has +a kinetic energy higher than the largest energy in the elstop table. +Reconsider whether the table is physically applicable to your system. + +E: Cannot open stopping range table ... + +The file containing the elstop table could not be opened. Chck the +given path and the file's permissions. + +E: fix elstop: Invalid table line + +A line in the elstop table file contained too many or too few columns. + +E: fix elstop: Energies must be in ascending order + +The first column in the elstop table must be sorted from the smallest +energy to the largest. + +E: Did not find any data in elstop table file + +Parsing the elstop table file produced no lines that were identifiable +as energies/stopping powers. Most likely the file is empty or contains +only comments. + +*/ From 676370ade7995fca6ef125d8644e196c55c16ef4 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 26 Mar 2019 07:21:16 -0600 Subject: [PATCH 032/372] Commit JT 032619 - added citeme in neb/spin - started work on distance output --- src/SPIN/fix_neb_spin.cpp | 7 ++++++- src/SPIN/neb_spin.cpp | 24 +++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/SPIN/fix_neb_spin.cpp b/src/SPIN/fix_neb_spin.cpp index 610e6d2fe5..49736bce33 100644 --- a/src/SPIN/fix_neb_spin.cpp +++ b/src/SPIN/fix_neb_spin.cpp @@ -566,6 +566,10 @@ void FixNEB_spin::min_post_force(int /*vflag*/) if (NEBLongRange) error->all(FLERR,"NEB_spin long range option not yet active"); + // test output length + + //printf("testi irep / plen: %d %g \n",ireplica,nlen); + // exit calc. if first or last replica (no gneb force) if (ireplica == 0 || ireplica == nreplica-1) return ; @@ -587,11 +591,12 @@ void FixNEB_spin::min_post_force(int /*vflag*/) MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); dot=dotall; + // for intermediate replica // calc. GNEB force prefactor if (ireplica == rclimber) prefactor = -2.0*dot; // for climbing replica else { - if (NEBLongRange) { // for intermediate replica + if (NEBLongRange) { error->all(FLERR,"Long Range NEB_spin climber option not yet active"); } else if (StandardNEB) { prefactor = -dot + kspring*(nlen-plen); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 728532a187..ecbbffdcd8 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -15,6 +15,10 @@ Contributing authors: Julien Tranchida (SNL) Please cite the related publication: + Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015). + Method for finding mechanism and activation energy of magnetic transitions, + applied to skyrmion and antivortex annihilation. + Computer Physics Communications, 196, 335-347. ------------------------------------------------------------------------- */ // lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h @@ -27,6 +31,7 @@ #include #include #include "neb_spin.h" +#include "citeme.h" #include "compute.h" #include "force.h" #include "universe.h" @@ -49,6 +54,21 @@ using namespace LAMMPS_NS; using namespace MathConst; +static const char cite_neb_spin[] = + "neb/spin command:\n\n" + "@article{bessarab2015method,\n" + "title={Method for finding mechanism and activation energy of " + "magnetic transitions, applied to skyrmion and antivortex " + "annihilation},\n" + "author={Bessarab, P.F. and Uzdin, V.M. and J{\'o}nsson, H.},\n" + "journal={Computer Physics Communications},\n" + "volume={196},\n" + "pages={335--347},\n" + "year={2015},\n" + "publisher={Elsevier}\n" + "doi={10.1016/j.cpc.2015.07.001}\n" + "}\n\n"; + #define MAXLINE 256 #define CHUNK 1024 // 8 attributes: tag, spin norm, position (3), spin direction (3) @@ -56,7 +76,9 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -NEB_spin::NEB_spin(LAMMPS *lmp) : Pointers(lmp) {} +NEB_spin::NEB_spin(LAMMPS *lmp) : Pointers(lmp) { + if (lmp->citeme) lmp->citeme->add(cite_neb_spin); +} /* ---------------------------------------------------------------------- internal NEB_spin constructor, called from TAD From 3cabfd13cd1b4f4628aff45fd59c1a78f7c4d6b3 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 26 Mar 2019 12:51:51 -0600 Subject: [PATCH 033/372] Commit JT 032619 - finish merge of min_spin.cpp - test output --- src/SPIN/min_spin.cpp | 116 ------------------------------------------ src/SPIN/neb_spin.cpp | 3 +- 2 files changed, 2 insertions(+), 117 deletions(-) diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index 33b602f519..2bddc110e7 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -51,11 +51,7 @@ MinSpin::MinSpin(LAMMPS *lmp) : Min(lmp) {} void MinSpin::init() { alpha_damp = 1.0; -<<<<<<< HEAD - discret_factor = 10.0; -======= discrete_factor = 10.0; ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 Min::init(); @@ -88,15 +84,9 @@ int MinSpin::modify_param(int narg, char **arg) alpha_damp = force->numeric(FLERR,arg[1]); return 2; } -<<<<<<< HEAD - if (strcmp(arg[0],"discret_factor") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - discret_factor = force->numeric(FLERR,arg[1]); -======= if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); discrete_factor = force->numeric(FLERR,arg[1]); ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 return 2; } return 0; @@ -114,17 +104,10 @@ void MinSpin::reset_vectors() // size sp is 4N vector nvec = 4 * atom->nlocal; if (nvec) spvec = atom->sp[0]; -<<<<<<< HEAD - - nvec = 3 * atom->nlocal; - if (nvec) fmvec = atom->fm[0]; - -======= nvec = 3 * atom->nlocal; if (nvec) fmvec = atom->fm[0]; ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 if (nvec) xvec = atom->x[0]; if (nvec) fvec = atom->f[0]; } @@ -136,11 +119,7 @@ void MinSpin::reset_vectors() int MinSpin::iterate(int maxiter) { bigint ntimestep; -<<<<<<< HEAD - double fmdotfm,fmdotfmall; -======= double fmdotfm; ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 int flag,flagall; for (int iter = 0; iter < maxiter; iter++) { @@ -153,21 +132,12 @@ int MinSpin::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization -<<<<<<< HEAD - - energy_force(0); - dts = evaluate_dt(); - - // apply damped precessional dynamics to the spins - -======= energy_force(0); dts = evaluate_dt(); // apply damped precessional dynamics to the spins ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 advance_spins(dts); eprevious = ecurrent; @@ -230,18 +200,10 @@ double MinSpin::evaluate_dt() double fmsq; double fmaxsqone,fmaxsqloc,fmaxsqall; int nlocal = atom->nlocal; -<<<<<<< HEAD - int *mask = atom->mask; - double **fm = atom->fm; - - // finding max fm on this proc. - -======= double **fm = atom->fm; // finding max fm on this proc. ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; for (int i = 0; i < nlocal; i++) { fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; @@ -249,17 +211,10 @@ double MinSpin::evaluate_dt() } // finding max fm on this replica -<<<<<<< HEAD - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - -======= fmaxsqloc = fmaxsqone; MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 // finding max fm over all replicas, if necessary // this communicator would be invalid for multiprocess replicas @@ -272,17 +227,10 @@ double MinSpin::evaluate_dt() if (fmaxsqall == 0.0) error->all(FLERR,"Incorrect fmaxsqall calculation"); -<<<<<<< HEAD - // define max timestep by dividing by the - // inverse of max frequency by discret_factor - - dtmax = MY_2PI/(discret_factor*sqrt(fmaxsqall)); -======= // define max timestep by dividing by the // inverse of max frequency by discrete_factor dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 return dtmax; } @@ -294,51 +242,17 @@ double MinSpin::evaluate_dt() void MinSpin::advance_spins(double dts) { int nlocal = atom->nlocal; -<<<<<<< HEAD - int *mask = atom->mask; -======= ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 double **sp = atom->sp; double **fm = atom->fm; double tdampx,tdampy,tdampz; double msq,scale,fm2,energy,dts2; double cp[3],g[3]; -<<<<<<< HEAD - dts2 = dts*dts; -======= dts2 = dts*dts; ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { -<<<<<<< HEAD - - // calc. damping torque - - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - // apply advance algorithm (geometric, norm preserving) - - fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); - energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); - - cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; - cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; - cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; - - g[0] = sp[i][0]+cp[0]*dts; - g[1] = sp[i][1]+cp[1]*dts; - g[2] = sp[i][2]+cp[2]*dts; - - g[0] += (tdampx*energy-0.5*sp[i][0]*fm2)*0.5*dts2; - g[1] += (tdampy*energy-0.5*sp[i][1]*fm2)*0.5*dts2; - g[2] += (tdampz*energy-0.5*sp[i][2]*fm2)*0.5*dts2; - -======= // calc. damping torque @@ -363,34 +277,22 @@ void MinSpin::advance_spins(double dts) g[1] += (tdampy*energy-0.5*sp[i][1]*fm2)*0.5*dts2; g[2] += (tdampz*energy-0.5*sp[i][2]*fm2)*0.5*dts2; ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 g[0] /= (1+0.25*fm2*dts2); g[1] /= (1+0.25*fm2*dts2); g[2] /= (1+0.25*fm2*dts2); sp[i][0] = g[0]; sp[i][1] = g[1]; -<<<<<<< HEAD - sp[i][2] = g[2]; - - // renormalization (check if necessary) - -======= sp[i][2] = g[2]; // renormalization (check if necessary) ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; scale = 1.0/sqrt(msq); sp[i][0] *= scale; sp[i][1] *= scale; sp[i][2] *= scale; -<<<<<<< HEAD - -======= ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 // no comm. to atoms with same tag // because no need for simplecticity } @@ -402,23 +304,13 @@ void MinSpin::advance_spins(double dts) double MinSpin::fmnorm_sqr() { -<<<<<<< HEAD - int i,n; - double *fmatom; - -======= ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 int nlocal = atom->nlocal; double tx,ty,tz; double **sp = atom->sp; double **fm = atom->fm; // calc. magnetic torques -<<<<<<< HEAD - -======= ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 double local_norm2_sqr = 0.0; for (int i = 0; i < nlocal; i++) { tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); @@ -427,19 +319,11 @@ double MinSpin::fmnorm_sqr() local_norm2_sqr += tx*tx + ty*ty + tz*tz; } -<<<<<<< HEAD - - // no extra atom calc. for spins - - if (nextra_atom) - error->all(FLERR,"extra atom option not available yet"); -======= // no extra atom calc. for spins if (nextra_atom) error->all(FLERR,"extra atom option not available yet"); ->>>>>>> e2e4fe2cf7a95a04ae6a7de93d9b72ad56f0b620 double norm2_sqr = 0.0; MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index ecbbffdcd8..53b9da9c42 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -901,7 +901,8 @@ void NEB_spin::print_status() gradvnorm0,gradvnorm1,gradvnormc); fprintf(ulogfile,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt); for (int i = 0; i < nreplica; i++) - fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); + //fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); + fprintf(ulogfile,"%12.8g %12.8g %12.8g %12.8g ",rdist[i],all[i][0],all[i][2],all[i][5]); if (verbose) { fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg, From af8f06141f3fb284ede0602ae85fbc58063a5b2f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 26 Mar 2019 23:02:07 -0400 Subject: [PATCH 034/372] Step version string for next patch release --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index af0a2681ab..126ba7f3e6 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -28 Feb 2019 version :c,h2 +28 Mar 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 0539f757c9..8031f3e787 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "28 Feb 2019" +#define LAMMPS_VERSION "28 Mar 2019" From 44fe8330b923a2c6221f6678822f1ddd73558aab Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 27 Mar 2019 14:59:12 -0600 Subject: [PATCH 035/372] Commit JT 032719 - commit before wok output --- src/SPIN/fix_neb_spin.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/SPIN/fix_neb_spin.cpp b/src/SPIN/fix_neb_spin.cpp index 49736bce33..fce099e7c4 100644 --- a/src/SPIN/fix_neb_spin.cpp +++ b/src/SPIN/fix_neb_spin.cpp @@ -492,7 +492,7 @@ void FixNEB_spin::min_post_force(int /*vflag*/) // no Perpendicular nudging force option active yet if (kspringPerp != 0.0) - error->all(FLERR,"NEB_spin Perpendicular nudging force not yet active"); + error->all(FLERR,"NEB_spin Perpendicular spring force not yet active"); } } @@ -566,10 +566,6 @@ void FixNEB_spin::min_post_force(int /*vflag*/) if (NEBLongRange) error->all(FLERR,"NEB_spin long range option not yet active"); - // test output length - - //printf("testi irep / plen: %d %g \n",ireplica,nlen); - // exit calc. if first or last replica (no gneb force) if (ireplica == 0 || ireplica == nreplica-1) return ; From 30bca9f91ec6fc6f5c9478369b62bbc5af1e41dc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Mar 2019 16:20:19 -0400 Subject: [PATCH 036/372] force loading of Sphinx version 1.7.6 instead of 2.0.0 or later, so the spellchecker keeps working --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index 5c679440b8..fa60aa3698 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -211,7 +211,7 @@ $(VENV): @( \ $(VIRTUALENV) -p $(PYTHON) $(VENV); \ . $(VENV)/bin/activate; \ - pip install Sphinx; \ + pip install Sphinx==1.7.6; \ deactivate;\ ) From 088a6721967a37678542afd349a1fc0247246386 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Mar 2019 16:20:57 -0400 Subject: [PATCH 037/372] replace (evil) tabs with (nice) spaces --- src/special.cpp | 304 ++++++++++++++++++++++++------------------------ 1 file changed, 152 insertions(+), 152 deletions(-) diff --git a/src/special.cpp b/src/special.cpp index 22022519a2..62bc195b65 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -822,20 +822,20 @@ void Special::angle_trim() int nsend = 0; for (i = 0; i < nlocal; i++) { for (j = 0; j < num_angle[i]; j++) { - if (tag[i] != angle_atom2[i][j]) continue; - m = atom->map(angle_atom1[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(angle_atom3[i][j]); - if (m < 0 || m >= nlocal) nsend++; + if (tag[i] != angle_atom2[i][j]) continue; + m = atom->map(angle_atom1[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(angle_atom3[i][j]); + if (m < 0 || m >= nlocal) nsend++; } for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(dihedral_atom3[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(dihedral_atom4[i][j]); - if (m < 0 || m >= nlocal) nsend++; + if (tag[i] != dihedral_atom2[i][j]) continue; + m = atom->map(dihedral_atom1[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(dihedral_atom3[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(dihedral_atom4[i][j]); + if (m < 0 || m >= nlocal) nsend++; } } @@ -853,51 +853,51 @@ void Special::angle_trim() nsend = 0; for (i = 0; i < nlocal; i++) { for (j = 0; j < num_angle[i]; j++) { - if (tag[i] != angle_atom2[i][j]) continue; + if (tag[i] != angle_atom2[i][j]) continue; - m = atom->map(angle_atom1[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = angle_atom1[i][j] % nprocs; - inbuf[nsend].atomID = angle_atom1[i][j]; - inbuf[nsend].partnerID = angle_atom3[i][j]; - nsend++; - } + m = atom->map(angle_atom1[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = angle_atom1[i][j] % nprocs; + inbuf[nsend].atomID = angle_atom1[i][j]; + inbuf[nsend].partnerID = angle_atom3[i][j]; + nsend++; + } - m = atom->map(angle_atom3[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = angle_atom3[i][j] % nprocs; - inbuf[nsend].atomID = angle_atom3[i][j]; - inbuf[nsend].partnerID = angle_atom1[i][j]; - nsend++; - } + m = atom->map(angle_atom3[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = angle_atom3[i][j] % nprocs; + inbuf[nsend].atomID = angle_atom3[i][j]; + inbuf[nsend].partnerID = angle_atom1[i][j]; + nsend++; + } } for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; + if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom1[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom1[i][j]; - inbuf[nsend].partnerID = dihedral_atom3[i][j]; - nsend++; - } + m = atom->map(dihedral_atom1[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom1[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom1[i][j]; + inbuf[nsend].partnerID = dihedral_atom3[i][j]; + nsend++; + } - m = atom->map(dihedral_atom3[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom3[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom3[i][j]; - inbuf[nsend].partnerID = dihedral_atom1[i][j]; - nsend++; - } + m = atom->map(dihedral_atom3[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom3[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom3[i][j]; + inbuf[nsend].partnerID = dihedral_atom1[i][j]; + nsend++; + } - m = atom->map(dihedral_atom4[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom4[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom4[i][j]; - inbuf[nsend].partnerID = dihedral_atom2[i][j]; - nsend++; - } + m = atom->map(dihedral_atom4[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom4[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom4[i][j]; + inbuf[nsend].partnerID = dihedral_atom2[i][j]; + nsend++; + } } } @@ -925,7 +925,7 @@ void Special::angle_trim() for (i = 0; i < nlocal; i++) for (j = 0; j < nspecial[i][1]; j++) - flag[i][j] = 0; + flag[i][j] = 0; // reset nspecial[1] and onethree for all owned atoms based on output info // based on owned info plus rendezvous output info @@ -933,68 +933,68 @@ void Special::angle_trim() for (i = 0; i < nlocal; i++) { for (j = 0; j < num_angle[i]; j++) { - if (tag[i] != angle_atom2[i][j]) continue; + if (tag[i] != angle_atom2[i][j]) continue; - m = atom->map(angle_atom1[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == angle_atom3[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(angle_atom1[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == angle_atom3[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(angle_atom3[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == angle_atom1[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(angle_atom3[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == angle_atom1[i][j]) { + flag[m][k] = 1; + break; + } + } } for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; + if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == dihedral_atom3[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom1[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == dihedral_atom3[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(dihedral_atom3[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == dihedral_atom1[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom3[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == dihedral_atom1[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(dihedral_atom4[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == dihedral_atom2[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom4[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == dihedral_atom2[i][j]) { + flag[m][k] = 1; + break; + } + } } } for (m = 0; m < nreturn; m++) { i = atom->map(outbuf[m].atomID); for (k = 0; k < nspecial[i][1]; k++) - if (onethree[i][k] == outbuf[m].partnerID) { - flag[i][k] = 1; - break; - } + if (onethree[i][k] == outbuf[m].partnerID) { + flag[i][k] = 1; + break; + } } - + memory->destroy(outbuf); // use flag values to compress onefour list for each atom @@ -1002,11 +1002,11 @@ void Special::angle_trim() for (i = 0; i < nlocal; i++) { j = 0; while (j < nspecial[i][1]) { - if (flag[i][j] == 0) { - onethree[i][j] = onethree[i][nspecial[i][1]-1]; - flag[i][j] = flag[i][nspecial[i][1]-1]; - nspecial[i][1]--; - } else j++; + if (flag[i][j] == 0) { + onethree[i][j] = onethree[i][nspecial[i][1]-1]; + flag[i][j] = flag[i][nspecial[i][1]-1]; + nspecial[i][1]--; + } else j++; } } @@ -1077,11 +1077,11 @@ void Special::dihedral_trim() int nsend = 0; for (i = 0; i < nlocal; i++) { for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(dihedral_atom4[i][j]); - if (m < 0 || m >= nlocal) nsend++; + if (tag[i] != dihedral_atom2[i][j]) continue; + m = atom->map(dihedral_atom1[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(dihedral_atom4[i][j]); + if (m < 0 || m >= nlocal) nsend++; } } @@ -1100,23 +1100,23 @@ void Special::dihedral_trim() nsend = 0; for (i = 0; i < nlocal; i++) { for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; + if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom1[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom1[i][j]; - inbuf[nsend].partnerID = dihedral_atom4[i][j]; - nsend++; - } + m = atom->map(dihedral_atom1[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom1[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom1[i][j]; + inbuf[nsend].partnerID = dihedral_atom4[i][j]; + nsend++; + } - m = atom->map(dihedral_atom4[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom4[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom4[i][j]; - inbuf[nsend].partnerID = dihedral_atom1[i][j]; - nsend++; - } + m = atom->map(dihedral_atom4[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom4[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom4[i][j]; + inbuf[nsend].partnerID = dihedral_atom1[i][j]; + nsend++; + } } } @@ -1144,39 +1144,39 @@ void Special::dihedral_trim() for (i = 0; i < nlocal; i++) for (j = 0; j < nspecial[i][2]; j++) - flag[i][j] = 0; + flag[i][j] = 0; for (i = 0; i < nlocal; i++) { for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; + if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][2]; k++) - if (onefour[m][k] == dihedral_atom4[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom1[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][2]; k++) + if (onefour[m][k] == dihedral_atom4[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(dihedral_atom4[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][2]; k++) - if (onefour[m][k] == dihedral_atom1[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom4[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][2]; k++) + if (onefour[m][k] == dihedral_atom1[i][j]) { + flag[m][k] = 1; + break; + } + } } } for (m = 0; m < nreturn; m++) { i = atom->map(outbuf[m].atomID); for (k = 0; k < nspecial[i][2]; k++) - if (onefour[i][k] == outbuf[m].partnerID) { - flag[i][k] = 1; - break; - } + if (onefour[i][k] == outbuf[m].partnerID) { + flag[i][k] = 1; + break; + } } memory->destroy(outbuf); @@ -1186,11 +1186,11 @@ void Special::dihedral_trim() for (i = 0; i < nlocal; i++) { j = 0; while (j < nspecial[i][2]) { - if (flag[i][j] == 0) { - onefour[i][j] = onefour[i][nspecial[i][2]-1]; - flag[i][j] = flag[i][nspecial[i][2]-1]; - nspecial[i][2]--; - } else j++; + if (flag[i][j] == 0) { + onefour[i][j] = onefour[i][nspecial[i][2]-1]; + flag[i][j] = flag[i][nspecial[i][2]-1]; + nspecial[i][2]--; + } else j++; } } @@ -1225,8 +1225,8 @@ void Special::dihedral_trim() ------------------------------------------------------------------------- */ int Special::rendezvous_ids(int n, char *inbuf, - int &flag, int *&proclist, char *&outbuf, - void *ptr) + int &flag, int *&proclist, char *&outbuf, + void *ptr) { Special *sptr = (Special *) ptr; Memory *memory = sptr->memory; @@ -1255,7 +1255,7 @@ int Special::rendezvous_ids(int n, char *inbuf, flag = 0; return 0; } - + /* ---------------------------------------------------------------------- process data for atoms assigned to me in rendezvous decomposition From 747ddf2642a328dea4589e7e5c9a11c3effa496d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Mar 2019 17:15:05 -0400 Subject: [PATCH 038/372] expose -DCUDA_PROXY define to CMake so that the GPU package can be used with nvidia MPS proxy server --- cmake/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9b3125f04b..9bed8ea5e8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1168,6 +1168,10 @@ if(PKG_GPU) message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") endif() option(CUDPP_OPT "Enable CUDPP_OPT" ON) + option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF) + if(CUDA_MPS_SUPPORT) + set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY") + endif() set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") @@ -1231,7 +1235,7 @@ if(PKG_GPU) add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS}) target_link_libraries(gpu ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS}) - target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT) + target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS}) if(CUDPP_OPT) target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) target_compile_definitions(gpu PRIVATE -DUSE_CUDPP) From 1bf5047c7af36f366b1a884a9d7d83bda1f7cfe8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Mar 2019 18:03:54 -0400 Subject: [PATCH 039/372] document new CUDA_MPS_SUPPORT option in CMake --- cmake/README.md | 10 ++++++++++ doc/src/Build_extras.txt | 24 +++++++++++++----------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/cmake/README.md b/cmake/README.md index ce3b4502af..1c37ecc92e 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -1503,6 +1503,16 @@ target API. + + CUDA_MPS_SUPPORT (CUDA only) + Enable tweaks for running with Nvidia CUDA Multi-process services daemon + +
+
on
+
off (default)
+
+ + BIN2C (CUDA only) Path to bin2c executable, will automatically pick up the first one in your $PATH. diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 65a05c267e..1fd6c320ce 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -82,17 +82,19 @@ which GPU hardware to build for. [CMake build]: --D GPU_API=value # value = opencl (default) or cuda --D GPU_PREC=value # precision setting - # value = double or mixed (default) or single --D OCL_TUNE=value # hardware choice for GPU_API=opencl - # generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA) --D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda - # value = sm_XX, see below - # default is Cuda-compiler dependent, but typically sm_20 --D CUDPP_OPT=value # optimization setting for GPU_API=cuda - # enables CUDA Performance Primitives Optimizations - # yes (default) or no :pre +-D GPU_API=value # value = opencl (default) or cuda +-D GPU_PREC=value # precision setting + # value = double or mixed (default) or single +-D OCL_TUNE=value # hardware choice for GPU_API=opencl + # generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA) +-D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda + # value = sm_XX, see below + # default is Cuda-compiler dependent, but typically sm_20 +-D CUDPP_OPT=value # optimization setting for GPU_API=cuda + # enables CUDA Performance Primitives Optimizations + # value = yes (default) or no +-D CUDA_MPS_SUPPORT=value # enables some tweaks required to run with active nvidia-cuda-mps daemon + # value = yes or no (default) GPU_ARCH settings for different GPU hardware is as follows: From 13255d63386369babeb7229527b87f21dd769778 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 29 Mar 2019 09:20:33 -0400 Subject: [PATCH 040/372] step version to 29 March 2019 --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 126ba7f3e6..e36e4063c9 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -28 Mar 2019 version :c,h2 +29 Mar 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 8031f3e787..94fee893cb 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "28 Mar 2019" +#define LAMMPS_VERSION "29 Mar 2019" From ff819be807ff71d92c424e985dd5273d28ff7f0e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 29 Mar 2019 10:21:44 -0400 Subject: [PATCH 041/372] more 'war on tabs' --- src/comm.cpp | 4 +- src/compute_angle_local.cpp | 76 +++++++++++++++---------------- src/compute_bond_local.cpp | 22 ++++----- src/compute_chunk_spread_atom.cpp | 56 +++++++++++------------ src/compute_dihedral_local.cpp | 26 +++++------ src/compute_property_atom.cpp | 2 +- src/compute_property_atom.h | 4 +- src/memory.h | 60 ++++++++++++------------ 8 files changed, 126 insertions(+), 124 deletions(-) diff --git a/src/comm.cpp b/src/comm.cpp index 8389e4993d..30fd7c243e 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -933,7 +933,7 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs, "rendezvous:inbuf"); MPI_Alltoallv(inbuf_a2a,sendcount,sdispls,MPI_CHAR, - inbuf_rvous,recvcount,rdispls,MPI_CHAR,world); + inbuf_rvous,recvcount,rdispls,MPI_CHAR,world); if (!inorder) { memory->destroy(procs_a2a); @@ -1036,7 +1036,7 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs, outbuf = (char *) memory->smalloc((bigint) nout*outsize,"rendezvous:outbuf"); MPI_Alltoallv(outbuf_a2a,sendcount,sdispls,MPI_CHAR, - outbuf,recvcount,rdispls,MPI_CHAR,world); + outbuf,recvcount,rdispls,MPI_CHAR,world); memory->destroy(procs_rvous); memory->sfree(outbuf_rvous); diff --git a/src/compute_angle_local.cpp b/src/compute_angle_local.cpp index 641784fe03..8f0606329f 100644 --- a/src/compute_angle_local.cpp +++ b/src/compute_angle_local.cpp @@ -88,7 +88,7 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : int n = strlen(arg[iarg+2]) + 1; tstr = new char[n]; strcpy(tstr,arg[iarg+2]); - tflag = 1; + tflag = 1; } else error->all(FLERR,"Illegal compute angle/local command"); iarg += 3; } else error->all(FLERR,"Illegal compute angle/local command"); @@ -102,9 +102,9 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nvar; i++) { vvar[i] = input->variable->find(vstr[i]); if (vvar[i] < 0) - error->all(FLERR,"Variable name for copute angle/local does not exist"); + error->all(FLERR,"Variable name for copute angle/local does not exist"); if (!input->variable->equalstyle(vvar[i])) - error->all(FLERR,"Variable for compute angle/local is invalid style"); + error->all(FLERR,"Variable for compute angle/local is invalid style"); } if (tstr) { @@ -153,7 +153,7 @@ void ComputeAngleLocal::init() for (int i = 0; i < nvar; i++) { vvar[i] = input->variable->find(vstr[i]); if (vvar[i] < 0) - error->all(FLERR,"Variable name for compute angle/local does not exist"); + error->all(FLERR,"Variable name for compute angle/local does not exist"); } if (tstr) { @@ -261,53 +261,53 @@ int ComputeAngleLocal::compute_angles(int flag) // theta needed by one or more outputs if (tflag) { - delx1 = x[atom1][0] - x[atom2][0]; - dely1 = x[atom1][1] - x[atom2][1]; - delz1 = x[atom1][2] - x[atom2][2]; - domain->minimum_image(delx1,dely1,delz1); + delx1 = x[atom1][0] - x[atom2][0]; + dely1 = x[atom1][1] - x[atom2][1]; + delz1 = x[atom1][2] - x[atom2][2]; + domain->minimum_image(delx1,dely1,delz1); - rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; - r1 = sqrt(rsq1); - - delx2 = x[atom3][0] - x[atom2][0]; - dely2 = x[atom3][1] - x[atom2][1]; - delz2 = x[atom3][2] - x[atom2][2]; - domain->minimum_image(delx2,dely2,delz2); + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + delx2 = x[atom3][0] - x[atom2][0]; + dely2 = x[atom3][1] - x[atom2][1]; + delz2 = x[atom3][2] - x[atom2][2]; + domain->minimum_image(delx2,dely2,delz2); - rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; - r2 = sqrt(rsq2); + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); - // c = cosine of angle - // theta = angle in radians + // c = cosine of angle + // theta = angle in radians - c = delx1*delx2 + dely1*dely2 + delz1*delz2; - c /= r1*r2; - if (c > 1.0) c = 1.0; - if (c < -1.0) c = -1.0; - theta = acos(c); + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + theta = acos(c); } if (nvalues == 1) ptr = &vlocal[m]; else ptr = alocal[m]; if (nvar) { - ivar = 0; - if (tstr) input->variable->internal_set(tvar,theta); + ivar = 0; + if (tstr) input->variable->internal_set(tvar,theta); } for (n = 0; n < nvalues; n++) { - switch (bstyle[n]) { - case THETA: - ptr[n] = 180.0*theta/MY_PI; - break; - case ENG: - if (atype > 0) ptr[n] = angle->single(atype,atom1,atom2,atom3); - else ptr[n] = 0.0; - break; - case VARIABLE: - ptr[n] = input->variable->compute_equal(vvar[ivar]); - ivar++; - break; + switch (bstyle[n]) { + case THETA: + ptr[n] = 180.0*theta/MY_PI; + break; + case ENG: + if (atype > 0) ptr[n] = angle->single(atype,atom1,atom2,atom3); + else ptr[n] = 0.0; + break; + case VARIABLE: + ptr[n] = input->variable->compute_equal(vvar[ivar]); + ivar++; + break; } } diff --git a/src/compute_bond_local.cpp b/src/compute_bond_local.cpp index adbbde1a0c..ccdd3ee77c 100644 --- a/src/compute_bond_local.cpp +++ b/src/compute_bond_local.cpp @@ -105,9 +105,9 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nvar; i++) { vvar[i] = input->variable->find(vstr[i]); if (vvar[i] < 0) - error->all(FLERR,"Variable name for copute bond/local does not exist"); + error->all(FLERR,"Variable name for copute bond/local does not exist"); if (!input->variable->equalstyle(vvar[i])) - error->all(FLERR,"Variable for compute bond/local is invalid style"); + error->all(FLERR,"Variable for compute bond/local is invalid style"); } if (dstr) { @@ -168,7 +168,7 @@ void ComputeBondLocal::init() for (int i = 0; i < nvar; i++) { vvar[i] = input->variable->find(vstr[i]); if (vvar[i] < 0) - error->all(FLERR,"Variable name for compute bond/local does not exist"); + error->all(FLERR,"Variable name for compute bond/local does not exist"); } if (dstr) { @@ -377,10 +377,10 @@ int ComputeBondLocal::compute_bonds(int flag) if (nvalues == 1) ptr = &vlocal[m]; else ptr = alocal[m]; - if (nvar) { - ivar = 0; - if (dstr) input->variable->internal_set(dvar,sqrt(rsq)); - } + if (nvar) { + ivar = 0; + if (dstr) input->variable->internal_set(dvar,sqrt(rsq)); + } for (n = 0; n < nvalues; n++) { switch (bstyle[n]) { @@ -408,10 +408,10 @@ int ComputeBondLocal::compute_bonds(int flag) case VELVIB: ptr[n] = vvib; break; - case VARIABLE: - ptr[n] = input->variable->compute_equal(vvar[ivar]); - ivar++; - break; + case VARIABLE: + ptr[n] = input->variable->compute_equal(vvar[ivar]); + ivar++; + break; } } } diff --git a/src/compute_chunk_spread_atom.cpp b/src/compute_chunk_spread_atom.cpp index 36fad5cca1..3d0cea1add 100644 --- a/src/compute_chunk_spread_atom.cpp +++ b/src/compute_chunk_spread_atom.cpp @@ -71,7 +71,7 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : ids[nvalues] = NULL; if (strncmp(arg[iarg],"c_",2) == 0 || - strncmp(arg[iarg],"f_",2) == 0) { + strncmp(arg[iarg],"f_",2) == 0) { if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE; else if (arg[iarg][0] == 'f') which[nvalues] = FIX; @@ -123,15 +123,15 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : "does not calculate per-chunk values"); if (argindex[i] == 0) { - if (!modify->compute[icompute]->vector_flag) - error->all(FLERR,"Compute chunk/spread/atom compute " + if (!modify->compute[icompute]->vector_flag) + error->all(FLERR,"Compute chunk/spread/atom compute " "does not calculate global vector"); } else { - if (!modify->compute[icompute]->array_flag) - error->all(FLERR,"Compute chunk/spread/atom compute " + if (!modify->compute[icompute]->array_flag) + error->all(FLERR,"Compute chunk/spread/atom compute " "does not calculate global array"); - if (argindex[i] > modify->compute[icompute]->size_array_cols) - error->all(FLERR,"Compute chunk/spread/atom compute array " + if (argindex[i] > modify->compute[icompute]->size_array_cols) + error->all(FLERR,"Compute chunk/spread/atom compute array " "is accessed out-of-range"); } @@ -140,15 +140,15 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : if (ifix < 0) error->all(FLERR,"Fix ID for compute chunk/spread/atom does not exist"); if (argindex[i] == 0) { - if (!modify->fix[ifix]->vector_flag) - error->all(FLERR,"Compute chunk/spread/atom fix " + if (!modify->fix[ifix]->vector_flag) + error->all(FLERR,"Compute chunk/spread/atom fix " "does not calculate global vector"); } else { - if (!modify->fix[ifix]->array_flag) - error->all(FLERR,"Compute chunk/spread/atom fix " + if (!modify->fix[ifix]->array_flag) + error->all(FLERR,"Compute chunk/spread/atom fix " "does not calculate global array"); - if (argindex[i] > modify->fix[ifix]->size_array_cols) - error->all(FLERR,"Compute chunk/spread/atom fix array " + if (argindex[i] > modify->fix[ifix]->size_array_cols) + error->all(FLERR,"Compute chunk/spread/atom fix array " "is accessed out-of-range"); } } @@ -281,14 +281,14 @@ void ComputeChunkSpreadAtom::compute_peratom() compute->compute_vector(); compute->invoked_flag |= INVOKED_VECTOR; } - double *cvector = compute->vector; - for (i = 0; i < nlocal; i++, ptr += nstride) { - *ptr = 0.0; - if (!(mask[i] & groupbit)) continue; - index = ichunk[i]-1; - if (index < 0 || index >= nchunk) continue; - *ptr = cvector[index]; - } + double *cvector = compute->vector; + for (i = 0; i < nlocal; i++, ptr += nstride) { + *ptr = 0.0; + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0 || index >= nchunk) continue; + *ptr = cvector[index]; + } } else { if (!(compute->invoked_flag & INVOKED_ARRAY)) { @@ -297,13 +297,13 @@ void ComputeChunkSpreadAtom::compute_peratom() } int icol = argindex[m]-1; double **carray = compute->array; - for (i = 0; i < nlocal; i++, ptr += nstride) { - *ptr = 0.0; - if (!(mask[i] & groupbit)) continue; - index = ichunk[i]-1; - if (index < 0 || index >= nchunk) continue; - *ptr = carray[index][icol]; - } + for (i = 0; i < nlocal; i++, ptr += nstride) { + *ptr = 0.0; + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0 || index >= nchunk) continue; + *ptr = carray[index][icol]; + } } // access fix data, check if fix frequency is a match diff --git a/src/compute_dihedral_local.cpp b/src/compute_dihedral_local.cpp index 9e18d03f9f..9efdd61cb8 100644 --- a/src/compute_dihedral_local.cpp +++ b/src/compute_dihedral_local.cpp @@ -101,10 +101,10 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nvar; i++) { vvar[i] = input->variable->find(vstr[i]); if (vvar[i] < 0) - error->all(FLERR, + error->all(FLERR, "Variable name for copute dihedral/local does not exist"); if (!input->variable->equalstyle(vvar[i])) - error->all(FLERR,"Variable for compute dihedral/local is invalid style"); + error->all(FLERR,"Variable for compute dihedral/local is invalid style"); } if (pstr) { @@ -154,7 +154,7 @@ void ComputeDihedralLocal::init() for (int i = 0; i < nvar; i++) { vvar[i] = input->variable->find(vstr[i]); if (vvar[i] < 0) - error->all(FLERR, + error->all(FLERR, "Variable name for compute dihedral/local does not exist"); } @@ -307,19 +307,19 @@ int ComputeDihedralLocal::compute_dihedrals(int flag) else ptr = alocal[m]; if (nvar) { - ivar = 0; - if (pstr) input->variable->internal_set(pvar,phi); + ivar = 0; + if (pstr) input->variable->internal_set(pvar,phi); } for (n = 0; n < nvalues; n++) { - switch (bstyle[n]) { - case PHI: - ptr[n] = 180.0*phi/MY_PI; - break; - case VARIABLE: - ptr[n] = input->variable->compute_equal(vvar[ivar]); - ivar++; - break; + switch (bstyle[n]) { + case PHI: + ptr[n] = 180.0*phi/MY_PI; + break; + case VARIABLE: + ptr[n] = input->variable->compute_equal(vvar[ivar]); + ivar++; + break; } } diff --git a/src/compute_property_atom.cpp b/src/compute_property_atom.cpp index 862a66e3f9..0b57840696 100644 --- a/src/compute_property_atom.cpp +++ b/src/compute_property_atom.cpp @@ -141,7 +141,7 @@ ComputePropertyAtom::ComputePropertyAtom(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Compute property/atom for " "atom property that isn't allocated"); pack_choice[i] = &ComputePropertyAtom::pack_mu; - } else if (strcmp(arg[iarg],"spx") == 0) { // pack magnetic variables + } else if (strcmp(arg[iarg],"spx") == 0) { // pack magnetic variables if (!atom->sp_flag) error->all(FLERR,"Compute property/atom for " "atom property that isn't allocated"); diff --git a/src/compute_property_atom.h b/src/compute_property_atom.h index 0c1ed7e305..eb002457fb 100644 --- a/src/compute_property_atom.h +++ b/src/compute_property_atom.h @@ -84,7 +84,9 @@ class ComputePropertyAtom : public Compute { void pack_radius(int); void pack_diameter(int); - void pack_spx(int); // pack magnetic variables + // pack magnetic variables + + void pack_spx(int); void pack_spy(int); void pack_spz(int); void pack_sp(int); diff --git a/src/memory.h b/src/memory.h index df942387fa..b5d70b977f 100644 --- a/src/memory.h +++ b/src/memory.h @@ -443,44 +443,44 @@ class Memory : protected Pointers { template TYPE ****grow(TYPE ****&array, int n1, int n2, int n3, int n4, - const char *name) + const char *name) { - if (array == NULL) return create(array, n1, n2, n3, n4, name); + if (array == NULL) return create(array, n1, n2, n3, n4, name); - bigint nbytes = ((bigint) sizeof(TYPE)) * n1*n2*n3*n4; - TYPE *data = (TYPE *)srealloc(array[0][0][0], nbytes, name); - nbytes = ((bigint) sizeof(TYPE *)) * n1*n2*n3; - TYPE **cube = (TYPE **)srealloc(array[0][0], nbytes, name); - nbytes = ((bigint) sizeof(TYPE **)) * n1*n2; - TYPE ***plane = (TYPE ***)srealloc(array[0], nbytes, name); - nbytes = ((bigint) sizeof(TYPE ***)) * n1; - array = (TYPE ****)srealloc(array, nbytes, name); + bigint nbytes = ((bigint) sizeof(TYPE)) * n1*n2*n3*n4; + TYPE *data = (TYPE *)srealloc(array[0][0][0], nbytes, name); + nbytes = ((bigint) sizeof(TYPE *)) * n1*n2*n3; + TYPE **cube = (TYPE **)srealloc(array[0][0], nbytes, name); + nbytes = ((bigint) sizeof(TYPE **)) * n1*n2; + TYPE ***plane = (TYPE ***)srealloc(array[0], nbytes, name); + nbytes = ((bigint) sizeof(TYPE ***)) * n1; + array = (TYPE ****)srealloc(array, nbytes, name); - int i, j, k; - bigint m1, m2; - bigint n = 0; - for (i = 0; i < n1; i++) { - m2 = ((bigint)i) * n2; - array[i] = &plane[m2]; - for (j = 0; j < n2; j++) { - m1 = ((bigint)i) * n2 + j; - m2 = ((bigint)i) * n2*n3 + j*n3; - plane[m1] = &cube[m2]; - for (k = 0; k < n3; k++) { - m1 = ((bigint)i) * n2*n3 + j*n3 + k; - cube[m1] = &data[n]; - n += n4; - } - } - } - return array; + int i, j, k; + bigint m1, m2; + bigint n = 0; + for (i = 0; i < n1; i++) { + m2 = ((bigint)i) * n2; + array[i] = &plane[m2]; + for (j = 0; j < n2; j++) { + m1 = ((bigint)i) * n2 + j; + m2 = ((bigint)i) * n2*n3 + j*n3; + plane[m1] = &cube[m2]; + for (k = 0; k < n3; k++) { + m1 = ((bigint)i) * n2*n3 + j*n3 + k; + cube[m1] = &data[n]; + n += n4; + } + } + } + return array; } template TYPE *****grow(TYPE *****&array, int n1, int n2, int n3, int n4, - const char *name) + const char *name) { - fail(name); return NULL; + fail(name); return NULL; } /* ---------------------------------------------------------------------- From 75382cf265fce725a3c7ac306adc1220c0d48877 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 29 Mar 2019 10:34:34 -0400 Subject: [PATCH 042/372] update documentation tweaks to run cleanly --- doc/src/Build_extras.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 1fd6c320ce..01a63f9d2e 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -94,7 +94,7 @@ which GPU hardware to build for. # enables CUDA Performance Primitives Optimizations # value = yes (default) or no -D CUDA_MPS_SUPPORT=value # enables some tweaks required to run with active nvidia-cuda-mps daemon - # value = yes or no (default) + # value = yes or no (default) :pre GPU_ARCH settings for different GPU hardware is as follows: diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 14f5b89072..d30cfe4129 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1267,6 +1267,7 @@ kcl Kd KDevelop ke +kepler KE Keblinski keflag @@ -1675,6 +1676,7 @@ mpiexec mpiio mpirun mplayer +mps Mryglod mscg MSCG @@ -1958,6 +1960,7 @@ oneway onn ons OO +opencl openKIM OpenMP openmp From ff7f129a5d4342d03e84267a0c01830a8eb76cda Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 29 Mar 2019 11:37:26 -0400 Subject: [PATCH 043/372] remove trailing whitespace --- src/compute_angle_local.cpp | 2 +- src/special.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compute_angle_local.cpp b/src/compute_angle_local.cpp index 8f0606329f..1196211665 100644 --- a/src/compute_angle_local.cpp +++ b/src/compute_angle_local.cpp @@ -268,7 +268,7 @@ int ComputeAngleLocal::compute_angles(int flag) rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; r1 = sqrt(rsq1); - + delx2 = x[atom3][0] - x[atom2][0]; dely2 = x[atom3][1] - x[atom2][1]; delz2 = x[atom3][2] - x[atom2][2]; diff --git a/src/special.cpp b/src/special.cpp index 62bc195b65..ab3764a156 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -994,7 +994,7 @@ void Special::angle_trim() break; } } - + memory->destroy(outbuf); // use flag values to compress onefour list for each atom @@ -1255,7 +1255,7 @@ int Special::rendezvous_ids(int n, char *inbuf, flag = 0; return 0; } - + /* ---------------------------------------------------------------------- process data for atoms assigned to me in rendezvous decomposition From a28ae7c2c0e4d5b179fc7d627f0e5dde8fd9a31f Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 30 Mar 2019 13:56:02 -0500 Subject: [PATCH 044/372] Rename FindKIM-API.cmake.in to FindKIM-API.cmake Fixes: #1396 --- cmake/Modules/{FindKIM-API.cmake.in => FindKIM-API.cmake} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cmake/Modules/{FindKIM-API.cmake.in => FindKIM-API.cmake} (100%) diff --git a/cmake/Modules/FindKIM-API.cmake.in b/cmake/Modules/FindKIM-API.cmake similarity index 100% rename from cmake/Modules/FindKIM-API.cmake.in rename to cmake/Modules/FindKIM-API.cmake From 74489621c41f89e96bcdd1be3f8d4829bde904b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 30 Mar 2019 22:35:41 -0400 Subject: [PATCH 045/372] correct misleading indentation to follow syntax --- src/GRANULAR/pair_granular.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 973acbbaf4..ce6cae75e4 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -872,16 +872,16 @@ void PairGranular::coeff(int narg, char **arg) if (iarg + 4 >= narg) error->all(FLERR,"Illegal pair_coeff command, " "not enough parameters provided for twist model"); - twist_model_one = TWIST_SDS; - twist_history = 1; - // kt and gammat and friction coeff - twist_coeffs_one[0] = force->numeric(FLERR,arg[iarg+2]); - twist_coeffs_one[1] = force->numeric(FLERR,arg[iarg+3]); - twist_coeffs_one[2] = force->numeric(FLERR,arg[iarg+4]); - iarg += 5; + twist_model_one = TWIST_SDS; + twist_history = 1; + // kt and gammat and friction coeff + twist_coeffs_one[0] = force->numeric(FLERR,arg[iarg+2]); + twist_coeffs_one[1] = force->numeric(FLERR,arg[iarg+3]); + twist_coeffs_one[2] = force->numeric(FLERR,arg[iarg+4]); + iarg += 5; } else { - error->all(FLERR, "Illegal pair_coeff command, " - "twisting friction model not recognized"); + error->all(FLERR, "Illegal pair_coeff command, " + "twisting friction model not recognized"); } } else if (strcmp(arg[iarg], "cutoff") == 0) { if (iarg + 1 >= narg) From 506535008125ede5a9a549f4dcbd30721a387a8b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 30 Mar 2019 23:19:31 -0400 Subject: [PATCH 046/372] improve kim-query documentation --- doc/src/kim_query.txt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/src/kim_query.txt b/doc/src/kim_query.txt index be46783d82..c581de0ebb 100644 --- a/doc/src/kim_query.txt +++ b/doc/src/kim_query.txt @@ -26,12 +26,13 @@ kim_query latconst get_test_result test=TE_156715955670 model=MO_800509458712 & The kim_query command allows to retrieve properties from the OpenKIM through a web query. The result is stored in a string style "variable"_variable.html, the name of which must be given as the first -argument of the kim_query command. The second required argument is the -name of the actual query function (e.g. {get_test_result}). All following +argument of the kim_query command. The second required argument is the +name of the actual query function (e.g. {get_test_result}). All following arguments are parameters handed over to the web query in the format -{keyword=value}. This list of supported keywords and the type of how -the value has to be encoded depends on the query function used. -For more details on this, please refer to the OpenKIM homepage. +{keyword=value}. The list of supported keywords and the type of how +the value has to be encoded depends on the query function used. This +mirrors the functionality available on the OpenKIM webpage at +"https://query.openkim.org"_https://query.openkim.org/ [Restrictions:] From 971bce74283388f0f5d3b280144ed20f307270a1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 30 Mar 2019 23:33:54 -0400 Subject: [PATCH 047/372] address formatting issue in pair granular docs --- doc/src/pair_granular.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index e4b9bb3250..d287123246 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -19,7 +19,7 @@ pair_style granular command :h3 pair_style granular cutoff :pre -cutoff = global cutoff (optional). See discussion below. :l +cutoff = global cutoff (optional). See discussion below. :ul [Examples:] From fa407c05a1f8ecd6281889ea388909c525b89ffc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Mar 2019 14:59:20 -0400 Subject: [PATCH 048/372] neither KOKKOS nor USER-INTEL require OpenMP; they can be built without --- cmake/CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c15011b2af..77ca136b81 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -322,7 +322,7 @@ pkg_depends(USER-SCAFACOS MPI) find_package(OpenMP QUIET) option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) -if(BUILD_OMP OR PKG_KOKKOS OR PKG_USER-INTEL) +if(BUILD_OMP) find_package(OpenMP REQUIRED) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") @@ -1068,10 +1068,6 @@ if(PKG_USER-INTEL) message(FATAL_ERROR "USER-INTEL needs at least a 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") endif() - if(NOT BUILD_OMP) - message(FATAL_ERROR "USER-INTEL requires OpenMP") - endif() - if(NOT ${LAMMPS_MEMALIGN} STREQUAL "64") message(FATAL_ERROR "USER-INTEL is only useful with LAMMPS_MEMALIGN=64") endif() From 4d3c1785c6bade7552bf705e389abd14f71d1edc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Mar 2019 17:12:11 -0400 Subject: [PATCH 049/372] add utility function to add custom integrate style --- cmake/Modules/StyleHeaderUtils.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/Modules/StyleHeaderUtils.cmake b/cmake/Modules/StyleHeaderUtils.cmake index a7b23b4cf1..ebaa5dae8e 100644 --- a/cmake/Modules/StyleHeaderUtils.cmake +++ b/cmake/Modules/StyleHeaderUtils.cmake @@ -91,6 +91,10 @@ function(RegisterFixStyle path) AddStyleHeader(${path} FIX) endfunction(RegisterFixStyle) +function(RegisterIntegrateStyle path) + AddStyleHeader(${path} INTEGRATE) +endfunction(RegisterIntegrateStyle) + function(RegisterStyles search_path) FindStyleHeaders(${search_path} ANGLE_CLASS angle_ ANGLE ) # angle ) # force FindStyleHeaders(${search_path} ATOM_CLASS atom_vec_ ATOM_VEC ) # atom ) # atom atom_vec_hybrid From 3bf4cd9c01858d595b4bdc9c453058ea5704dcca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 31 Mar 2019 17:17:07 -0400 Subject: [PATCH 050/372] major refactor of USER-INTEL support in CMake - decouple from USER-OMP - decouple from OpenMP support - make MKL and TBB optional - support compilers other than Intel (but print warning about bad performance) - expose Long-range thread support selection to CMake - fix bugs and typos and add missing code, so that it actually compiles and includes all styles --- cmake/CMakeLists.txt | 131 ++++++++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 46 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 77ca136b81..b730324a0d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -944,7 +944,7 @@ if(PKG_USER-OMP) # detects styles which have USER-OMP version RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES) - RegisterFixStyle("${USER-OMP_SOURCES_DIR}/fix_omp.h") + RegisterFixStyle(${USER-OMP_SOURCES_DIR}/fix_omp.h) get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES) @@ -1057,33 +1057,72 @@ if(PKG_OPT) endif() if(PKG_USER-INTEL) - find_package(TBB REQUIRED) - find_package(MKL REQUIRED) + add_definitions(-DLMP_USER_INTEL) - if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(FATAL_ERROR "USER-INTEL is only useful together with intel compiler") - endif() + set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") + set(INTEL_ARCH_VALUES cpu knl) + set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES}) + validate_option(INTEL_ARCH INTEL_ARCH_VALUES) + string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - message(FATAL_ERROR "USER-INTEL needs at least a 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") - endif() - - if(NOT ${LAMMPS_MEMALIGN} STREQUAL "64") - message(FATAL_ERROR "USER-INTEL is only useful with LAMMPS_MEMALIGN=64") - endif() - - set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") - set(INTEL_ARCH_VALUES cpu knl) - set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES}) - validate_option(INTEL_ARCH INTEL_ARCH_VALUES) - string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) - - if(INTEL_ARCH STREQUAL "KNL") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload") - set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"") - add_compile_options(-xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS}) - add_definitions(-DLMP_INTEL_OFFLOAD) + # add_definitions(-DLMP_INTEL_USELRT) + find_package(Threads QUIET) + if(Threads_FOUND) + set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)") + else() + set(INTEL_LRT_MODE "none" CACHE STRING "Long-range threads mode (none, threads, or c++11)") + endif() + set(INTEL_LRT_VALUES none threads c++11) + set_property(CACHE INTEL_LRT_MODE PROPERTY STRINGS ${INTEL_LRT_VALUES}) + validate_option(INTEL_LRT_MODE INTEL_LRT_VALUES) + string(TOUPPER ${INTEL_LRT_MODE} INTEL_LRT_MODE) + if(INTEL_LRT_MODE STREQUAL "THREADS") + if(Threads_FOUND) + add_definitions(-DLMP_INTEL_USELRT) + list(APPEND LAMMPS_LINK_LIBS ${CMAKE_THREAD_LIBS_INIT}) else() + message(FATAL_ERROR "Must have working threads library for Long-range thread support") + endif() + endif() + if(INTEL_LRT_MODE STREQUAL "C++11") + add_definitions(-DLMP_INTEL_USERLRT -DLMP_INTEL_LRT11) + endif() + + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + message(FATAL_ERROR "USER-INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") + endif() + else() + message(WARNING "USER-INTEL gives best performance with Intel compilers") + endif() + + find_package(TBB QUIET) + if(TBB_FOUND) + list(APPEND LAMMPS_LINK_LIBS ${TBB_MALLOC_LIBRARIES}) + else() + add_definitions(-DLMP_INTEL_NO_TBB) + endif() + + find_package(MKL QUIET) + if(MKL_FOUND) + add_definitions(-DLMP_USE_MKL_RNG) + list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) + endif() + + if((NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) + message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256") + endif() + + if(INTEL_ARCH STREQUAL "KNL") + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(FATAL_ERROR "Must use Intel compiler with USER-INTEL for KNL architecture") + endif() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload") + set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"") + add_compile_options(-xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS}) + add_definitions(-DLMP_INTEL_OFFLOAD) + else() + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") else() @@ -1096,33 +1135,33 @@ if(PKG_USER-INTEL) add_compile_options(${_FLAG}) endif() endforeach() + else() + add_compile_options(-O3 -ffast-math) endif() + endif() - add_definitions(-DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG) + # collect sources + set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) + set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/fix_intel.cpp + ${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp + ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp + ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp + ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp + ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) - list(APPEND LAMMPS_LINK_LIBS ${TBB_MALLOC_LIBRARIES} ${MKL_LIBRARIES}) + set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") - set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) - set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h - ${USER-INTEL_SOURCES_DIR}/intel_buffers.h - ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp - ${USER-INTEL_SOURCES_DIR}/math_extra_intel.h - ${USER-INTEL_SOURCES_DIR}/nbin_intel.h - ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp - ${USER-INTEL_SOURCES_DIR}/npair_intel.h - ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp - ${USER-INTEL_SOURCES_DIR}/intel_simd.h - ${USER-INTEL_SOURCES_DIR}/intel_intrinsics.h) + # detect styles which have a USER-INTEL version + RegisterStylesExt(${USER-INTEL_SOURCES_DIR} intel USER-INTEL_SOURCES) + RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h) + RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h) + RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h) + RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) - set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") + get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) - # detects styles which have USER-INTEL version - RegisterStylesExt(${USER-INTEL_SOURCES_DIR} opt USER-INTEL_SOURCES) - - get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) - - list(APPEND LIB_SOURCES ${USER-INTEL_SOURCES}) - include_directories(${USER-INTEL_SOURCES_DIR}) + list(APPEND LIB_SOURCES ${USER-INTEL_SOURCES}) + include_directories(${USER-INTEL_SOURCES_DIR}) endif() if(PKG_GPU) From 61d4b7a47f0e4995d1b368b3b82cdde7b9e2ee6d Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Mon, 1 Apr 2019 09:14:47 +0300 Subject: [PATCH 051/372] Add Kai as spelling false positive --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 6d376d7b1f..65d0d16908 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1246,6 +1246,7 @@ Jy Jz jzimmer Kadiri +Kai Kalia Kamberaj Kapfer From 7688ead60fd8f56ddf96a846420303dfb0614733 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 04:42:56 -0400 Subject: [PATCH 052/372] add pair style granular to pair style overview page in manual --- doc/src/Commands_pair.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index b18d852c09..e887f0178a 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -98,6 +98,7 @@ OPT. "gran/hertz/history (o)"_pair_gran.html, "gran/hooke (o)"_pair_gran.html, "gran/hooke/history (ko)"_pair_gran.html, +"granular"_pair_granular.html, "gw"_pair_gw.html, "gw/zbl"_pair_gw.html, "hbond/dreiding/lj (o)"_pair_hbond_dreiding.html, From 053bdea2347a640f7d82df92e25978a069238586 Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Mon, 1 Apr 2019 12:27:50 +0300 Subject: [PATCH 053/372] fix elstop: Use inline LaTeX for equation --- doc/src/Eqs/fix_elstop.jpg | Bin 2262 -> 0 bytes doc/src/Eqs/fix_elstop.tex | 13 ------------- doc/src/fix_elstop.txt | 4 +++- 3 files changed, 3 insertions(+), 14 deletions(-) delete mode 100644 doc/src/Eqs/fix_elstop.jpg delete mode 100644 doc/src/Eqs/fix_elstop.tex diff --git a/doc/src/Eqs/fix_elstop.jpg b/doc/src/Eqs/fix_elstop.jpg deleted file mode 100644 index e862c938f0ee1d8795bacd7c69cf029e48dc913f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2262 zcmb7E3p7;w8sD?`o?*;j&zNDz@t8bQneiB+GLBRx-SOx}WOR^lI3pJ!49cTH-gR7c zG>9IGL@7N8cd00Gyh0T2jE86_BHtSlA_!&o^P8JsLpjz}cP5eV`MWJF$pq(C4b$_Pn` zLZwoPiYhc^3XM#mQlyt)Ak+rN;;~pfMV=r}`M*ih2#{m}F3=8PNB~H}KqQRhF`y1$ z01%S8yGk$)gs?IgS@e|huli+xq#qzcs0{)k0DxI?SvC8&7kOXCT}`%Bd0AEYOw8t2 zPiJ^U&QV|e#C*RnRIj*h3*31uRc7;z!jztL(YMm=vyz2f^6_v!(TA`;aNz)K zO;7eO-+E1S@Lo5PT}|$3Y!{{+OnSUayZ#5yeP7OsHGXH+X|_7h9!7Rvzfz>S1T4lL zlvaSW8pBE`@qc)ZmdpkN#(f0=t|BbabU)~D~dF@x>9Hf{*; ze-Itw`w(ZIslI=M!wJG2gXBX`)$lJrg==09K3_st#^%|Z2Bks;j;^(o(Tc0DrhoS7 zT{HQnq=VOzyf9odaI7X*e5QxQcdq!zoIC~oB915Oy^gVpj_`9*kEG9Xe$om1N8;$o zO}S;>0o#mjKbqB;{NAdW&)ylFrJJ2&2#!Ww&CJI#&IB24w$kv7``~Dib8oijjnU5% z;C+(U+{v4jejh^G&6_>l^T{Qwi>aHt)rii`?iY?;<~`@iH|UI8SKZUC@zhgCj+C_H zrph{_#&rHhY&C4N>QA)sus6D9@?q?F_0Y7OrU$X1;%0#%f%NTzq-mS<^zi(SZ_JCm z7OGlru|gv`v&CN8Prq2i;-)9L)(hu?YA?`5vrT=?)rDWC9>&rp-*hPMt8<_0xO#ZZ zly<1Bn}*f54`hy{MFk{1i**e+AwSK@`||GfkA<=GCG=m%^|oH>xM53Hv^&-7dhRmU z{IN&Wg>yYO9&tkU_jQSF!dZbMe$}~_rPiTg^f!V-GIpa0HEXiNPdLDFT)cP=^3VGF zPy=jPo=w@-YCNo}z$!_9l%z_!P7x|sa9;ECO?o*g>ZcN-hXRvyN?Z4_qTlCzut_>iu?U55%XJW4EBrkdPI5d3+{(v=W}yd zU$*JqW;xCr`i26OhaVrNI?P}Djnu(9^&2ZF)ZB^k(*8H@0P_)~vZvBb} zi7m`#6BpKcf2AjGUicuF(4MV@gL54-Ph3CWZ8);=cfBR!GI4H9R)g_gKYNk={;J{- z-?+OGA>|t{B}6^*Ycj^4r+bI@xGtS8$R%^4dxt*_biN#?4Xyni-WzGkVMUHCf;N`B z!|FxXGVn7$JuZl-+wG8-$-@hFe$?$hCaeUCF2&e&3l81atTZp{JKA#Rb3;>*|4Aha z=gh6IqTjnD7@Sx!uCclki5k&NjOEv26mwBrq zG-#u@uUE4Da`q-vI#pIjJKltOsc9qu&|ePA3l8{(`4b42ql$&d*NtGlsWcq*R=(RvW*irSR5CJt`Gs zIw#CG_`I)8T9>~8U^*f?&ohCl_2s3{x9pfy)}U-|v1u`p05t;9mf^!))O3#wA0047 z1S7Wkmkqk-mbz%W8WJiuSvU?m*m~mfH5vtbpn!KW5yl1PRh&_nR~yO;%u*{viZ!AL<@Bk7H3`%-p4oT1y^re0W4AuXc#t2a|5mDEpE(|dFa#uxZIc9kLiJ!I z9O)#Ow0P0(PN)e9@(%lWI>kcH$LekP(ws$VT19Tmk&$~EslMgOAE!9JZ}0 wQG=JxCk(4U>C?HF=639WS2~otK{Z~8*Zt(N&FCP~m8OC;0-27BUXs3l0^?FYX#fBK diff --git a/doc/src/Eqs/fix_elstop.tex b/doc/src/Eqs/fix_elstop.tex deleted file mode 100644 index 760ded00f1..0000000000 --- a/doc/src/Eqs/fix_elstop.tex +++ /dev/null @@ -1,13 +0,0 @@ -\documentclass[12pt]{article} - -\begin{document} - -$$ - {\vec F}_i = {\vec F}^{0}_i - \frac{{\vec v}_i}{\|\vec{v}_i\|}\cdot S_e -$$ - -\end{document} - - - - diff --git a/doc/src/fix_elstop.txt b/doc/src/fix_elstop.txt index 75bb2ef101..53779e0953 100644 --- a/doc/src/fix_elstop.txt +++ b/doc/src/fix_elstop.txt @@ -44,7 +44,9 @@ considered, the simulated range of the ions can be severely overestimated The electronic stopping is implemented by applying a friction force to each atom as: -:c,image(Eqs/fix_elstop.jpg) +\begin\{equation\} +\vec\{F\}_i = \vec\{F\}^0_i - \frac\{\vec\{v\}_i\}\{\|\vec\{v\}_i\|\} \cdot S_e +\end\{equation\} where \(\vec\{F\}_i\) is the resulting total force on the atom. \(\vec\{F\}^0_i\) is the original force applied to the atom, \(\vec\{v\}_i\) is its velocity and From a8e5af3cb4b93e241785537327f2b626e5d60067 Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Mon, 1 Apr 2019 12:59:25 +0300 Subject: [PATCH 054/372] fix elstop: Inline kinetic energy computation --- src/USER-MISC/fix_elstop.cpp | 33 +++++---------------------------- src/USER-MISC/fix_elstop.h | 6 ------ 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/src/USER-MISC/fix_elstop.cpp b/src/USER-MISC/fix_elstop.cpp index def576cfca..842c2f4e1a 100644 --- a/src/USER-MISC/fix_elstop.cpp +++ b/src/USER-MISC/fix_elstop.cpp @@ -54,20 +54,6 @@ FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : nevery = 1; // Run fix every step - // Make sure the id for the kinetic energy compute is unique - // by prepending the ID of this fix. - int n = strlen(id) + strlen("_ke_atom") + 1; - id_ke_atom = new char[n]; - strcpy(id_ke_atom, id); - strcat(id_ke_atom, "_ke_atom"); - - char *newarg[3]; - newarg[0] = id_ke_atom; - newarg[1] = group->names[igroup]; - newarg[2] = (char *) "ke/atom"; - modify->add_compute(3, newarg); - - // args: 0 = fix ID, 1 = group ID, 2 = "elstop" // 3 = Ecut, 4 = file path // optional rest: "region" @@ -133,8 +119,6 @@ FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : FixElstop::~FixElstop() { memory->destroy(elstop_ranges); - modify->delete_compute(id_ke_atom); - delete id_ke_atom; } /* ---------------------------------------------------------------------- */ @@ -153,12 +137,6 @@ void FixElstop::init() SeLoss_sync_flag = 0; SeLoss = 0.0; - int ikeatom = modify->find_compute(id_ke_atom); - if (ikeatom < 0) - error->all(FLERR, "KE compute ID for fix elstop does not exist"); - c_ke = modify->compute[ikeatom]; - - // need an occasional full neighbor list int irequest = neighbor->request(this, instance_me); neighbor->requests[irequest]->pair = 0; @@ -193,9 +171,6 @@ void FixElstop::post_force(int /*vflag*/) neighbor->build_one(list); int *numneigh = list->numneigh; - c_ke->compute_peratom(); - double *ke = c_ke->vector_atom; - for (int i = 0; i < nlocal; ++i) { // Do fast checks first, only then the region check @@ -204,7 +179,11 @@ void FixElstop::post_force(int /*vflag*/) // Avoid atoms outside bulk material if (numneigh[i] < minneigh) continue; - double energy = ke[i]; + int itype = type[i]; + double massone = (atom->rmass) ? atom->rmass[i] : atom->mass[itype]; + double v2 = v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]; + double energy = 0.5 * force->mvv2e * massone * v2; + if (energy < Ecut) continue; if (energy < elstop_ranges[0][0]) continue; if (energy > elstop_ranges[0][table_entries - 1]) @@ -226,7 +205,6 @@ void FixElstop::post_force(int /*vflag*/) else iup = ihalf; } - int itype = type[i]; double Se_lo = elstop_ranges[itype][idown]; double Se_hi = elstop_ranges[itype][iup]; double E_lo = elstop_ranges[0][idown]; @@ -235,7 +213,6 @@ void FixElstop::post_force(int /*vflag*/) // Get elstop with a simple linear interpolation double Se = (Se_hi - Se_lo) / (E_hi - E_lo) * (energy - E_lo) + Se_lo; - double v2 = v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]; double vabs = sqrt(v2); double factor = -Se / vabs; diff --git a/src/USER-MISC/fix_elstop.h b/src/USER-MISC/fix_elstop.h index dc49825290..afb9fd813a 100644 --- a/src/USER-MISC/fix_elstop.h +++ b/src/USER-MISC/fix_elstop.h @@ -53,12 +53,10 @@ class FixElstop : public Fix { double **elstop_ranges; // [ 0][i]: energies // [>0][i]: stopping powers per type - char *id_ke_atom; // name of kinetic energy compute int iregion; // region index if used, else -1 int minneigh; // minimum number of neighbors class NeighList *list; - class Compute *c_ke; }; } @@ -78,10 +76,6 @@ E: Region ID for fix elstop does not exist Self-explanatory. -E: KE compute ID for fix elstop does not exist - -Internal error. Should not happen. - E: Atom kinetic energy too high for fix elstop The group given in the fix elstop command includes an atom that has From 2e7316a9e34f1b888a58ab05b58d0946a6fcc637 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 08:11:22 -0400 Subject: [PATCH 055/372] fix another windows portability issue in USER-PTM by adding missing header include --- src/USER-PTM/ptm_polar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/USER-PTM/ptm_polar.cpp b/src/USER-PTM/ptm_polar.cpp index 7a2695b504..5e234127a9 100644 --- a/src/USER-PTM/ptm_polar.cpp +++ b/src/USER-PTM/ptm_polar.cpp @@ -88,6 +88,7 @@ #include #include #include +#include "ptm_polar.h" #include "ptm_quat.h" From adbc64b45e30b5199a97027a12de90fed29366b8 Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 1 Apr 2019 16:34:34 +0200 Subject: [PATCH 056/372] Cleaning includes + changing error->all to error->one --- src/USER-OMP/reaxc_forces_omp.cpp | 4 ++-- src/USER-REAXC/reaxc_allocate.cpp | 2 -- src/USER-REAXC/reaxc_control.cpp | 2 ++ src/USER-REAXC/reaxc_ffield.cpp | 2 -- src/USER-REAXC/reaxc_forces.cpp | 4 +++- src/USER-REAXC/reaxc_init_md.cpp | 1 + src/USER-REAXC/reaxc_list.cpp | 2 ++ src/USER-REAXC/reaxc_reset_tools.cpp | 2 ++ src/USER-REAXC/reaxc_tool_box.cpp | 2 ++ src/USER-REAXC/reaxc_traj.cpp | 2 ++ src/USER-REAXC/reaxc_types.h | 12 ++++++------ src/USER-REAXC/reaxc_valence_angles.cpp | 2 ++ 12 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/USER-OMP/reaxc_forces_omp.cpp b/src/USER-OMP/reaxc_forces_omp.cpp index 96b27c4c26..1e1cf44f50 100644 --- a/src/USER-OMP/reaxc_forces_omp.cpp +++ b/src/USER-OMP/reaxc_forces_omp.cpp @@ -292,7 +292,7 @@ void Validate_ListsOMP( reax_system *system, storage * /*workspace */, reax_list char errmsg[256]; snprintf(errmsg, 256, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", step, i, End_Index(i,bonds), comp ); - system->error_ptr->all(FLERR,errmsg); + system->error_ptr->one(FLERR,errmsg); } } } @@ -319,7 +319,7 @@ void Validate_ListsOMP( reax_system *system, storage * /*workspace */, reax_list char errmsg[256]; snprintf(errmsg, 256, "step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", step, Hindex, End_Index(Hindex,hbonds), comp ); - system->error_ptr->all(FLERR, errmsg); + system->error_ptr->one(FLERR, errmsg); } } } diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index ff829db3dc..460f8aeb6a 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -35,9 +35,7 @@ #include #endif -#include "lammps.h" #include "error.h" -using namespace LAMMPS_NS; /* allocate space for my_atoms important: we cannot know the exact number of atoms that will fall into a diff --git a/src/USER-REAXC/reaxc_control.cpp b/src/USER-REAXC/reaxc_control.cpp index 0caae40156..535226fff8 100644 --- a/src/USER-REAXC/reaxc_control.cpp +++ b/src/USER-REAXC/reaxc_control.cpp @@ -28,6 +28,8 @@ #include "reaxc_control.h" #include "reaxc_tool_box.h" +#include "error.h" + char Read_Control_File( char *control_file, control_params* control, output_controls *out_control ) { diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 28bc0429cc..eea1696cd6 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -29,8 +29,6 @@ #include "reaxc_ffield.h" #include "reaxc_tool_box.h" -#include "lammps.h" -#include "error.h" char Read_Force_Field( FILE *fp, reax_interaction *reax, control_params *control ) diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index afe9a059ed..8c602e9156 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -39,6 +39,8 @@ #include "reaxc_valence_angles.h" #include "reaxc_vector.h" +#include "error.h" + interaction_function Interaction_Functions[NUM_INTRS]; @@ -138,7 +140,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l char errmsg[256]; snprintf(errmsg, 256, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n", step, i, End_Index(i,bonds), comp ); - system->error_ptr->all(FLERR,errmsg); + system->error_ptr->one(FLERR,errmsg); } } } diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 913bc241de..fbef5e42d1 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -36,6 +36,7 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" +#include "error.h" int Init_System( reax_system *system, control_params *control, char * /*msg*/ ) { diff --git a/src/USER-REAXC/reaxc_list.cpp b/src/USER-REAXC/reaxc_list.cpp index d0143ec9ae..2e86c3c06b 100644 --- a/src/USER-REAXC/reaxc_list.cpp +++ b/src/USER-REAXC/reaxc_list.cpp @@ -28,6 +28,8 @@ #include "reaxc_list.h" #include "reaxc_tool_box.h" +#include "error.h" + /************* allocate list space ******************/ int Make_List(int n, int num_intrs, int type, reax_list *l ) { diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index 8954e344df..5439ee33a4 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -30,6 +30,8 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" +#include "error.h" + void Reset_Atoms( reax_system* system, control_params *control ) { diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index 05ebc34c1b..df8d7c85bf 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -27,6 +27,8 @@ #include "pair_reaxc.h" #include "reaxc_tool_box.h" +#include "error.h" + struct timeval tim; double t_end; diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index 27bebb6327..d25221512e 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -29,6 +29,8 @@ #include "reaxc_list.h" #include "reaxc_tool_box.h" +#include "error.h" + int Reallocate_Output_Buffer( LAMMPS_NS::Error *error_ptr, output_controls *out_control, int req_space ) { if (out_control->buffer_len > 0) diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index 310ef42bdf..d390768ac6 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -39,9 +39,8 @@ #include #include "accelerator_kokkos.h" -#include "lammps.h" -#include "error.h" -using LAMMPS_NS::Error; + +namespace LAMMPS_NS { class Error;} #if defined LMP_USER_OMP #define OMP_TIMING 0 @@ -415,7 +414,7 @@ struct _reax_system boundary_cutoff bndry_cuts; reax_atom *my_atoms; - class Error *error_ptr; + class LAMMPS_NS::Error *error_ptr; class Pair *pair_ptr; int my_bonds; int mincap; @@ -493,7 +492,8 @@ typedef struct int lgflag; int enobondsflag; - class Error *error_ptr; + class LAMMPS_NS::Error *error_ptr; + int me; } control_params; @@ -780,7 +780,7 @@ struct _reax_list int type; list_type select; - class Error *error_ptr; + class LAMMPS_NS::Error *error_ptr; }; typedef _reax_list reax_list; diff --git a/src/USER-REAXC/reaxc_valence_angles.cpp b/src/USER-REAXC/reaxc_valence_angles.cpp index e0e94d18f8..4ba870b6d9 100644 --- a/src/USER-REAXC/reaxc_valence_angles.cpp +++ b/src/USER-REAXC/reaxc_valence_angles.cpp @@ -30,6 +30,8 @@ #include "reaxc_list.h" #include "reaxc_vector.h" +#include "error.h" + static double Dot( double* v1, double* v2, int k ) { double ret = 0.0; From 799c16a8b29922838994d6381662ad77692d4a92 Mon Sep 17 00:00:00 2001 From: mkanski Date: Mon, 1 Apr 2019 17:04:09 +0200 Subject: [PATCH 057/372] restore a removed check + print some warnings only once --- src/USER-REAXC/reaxc_ffield.cpp | 2 ++ src/USER-REAXC/reaxc_init_md.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index eea1696cd6..36b7105ce8 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -148,6 +148,8 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, c = Tokenize( s, &tmp ); /* Sanity checks */ + if (c == 2 && !lgflag) + control->error_ptr->all(FLERR, "Force field file requires using 'lgvdw yes'"); if (c < 9) { control->error_ptr->all(FLERR,"Inconsistent ffield file"); diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index fbef5e42d1..8ac9f0e53c 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -91,13 +91,13 @@ void Init_Taper( control_params *control, storage *workspace ) swa = control->nonb_low; swb = control->nonb_cut; - if (fabs( swa ) > 0.01) + if (fabs( swa ) > 0.01 && control->me == 0) control->error_ptr->warning( FLERR, "Non-zero lower Taper-radius cutoff" ); if (swb < 0) { control->error_ptr->all(FLERR,"Negative upper Taper-radius cutoff"); } - else if( swb < 5 ) { + else if( swb < 5 && control->me == 0) { char errmsg[256]; snprintf(errmsg, 256, "Very low Taper-radius cutoff: %f", swb ); control->error_ptr->warning( FLERR, errmsg ); From b7aecc0d5928244de708f4127d0d87584f49c0cd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 17:22:53 -0400 Subject: [PATCH 058/372] avoid linking with -ldl on windows, as it is not needed or supported --- cmake/CMakeLists.txt | 5 ++++- cmake/presets/mingw-cross.cmake | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 cmake/presets/mingw-cross.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c15011b2af..eb7e419ec9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -607,7 +607,10 @@ if(PKG_USER-MOLFILE) set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") add_library(molfile INTERFACE) target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) - target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS}) + # no need to link with -ldl on windows + if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS}) + endif() list(APPEND LAMMPS_LINK_LIBS molfile) endif() diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake new file mode 100644 index 0000000000..5c41509d5f --- /dev/null +++ b/cmake/presets/mingw-cross.cmake @@ -0,0 +1,12 @@ +set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE + GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS + PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI + USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS + USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP + USER-MANIFOLD USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE + USER-OMP USER-PHONON USER-QTB USER-REAXC USER-SDPD USER-SMD + USER-SMTBQ USER-SPH USER-TALLY USER-UEF) + +foreach(PKG ${WIN_PACKAGES}) + set(PKG_${PKG} ON CACHE BOOL "" FORCE) +endforeach() From d5aa60dbfe2b62046bf56096eec00e5a63c23f7c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 17:23:27 -0400 Subject: [PATCH 059/372] skip inline function optimizations for windows when compiling with mingw --- src/lmpwindows.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/lmpwindows.h b/src/lmpwindows.h index 546fa62535..92a248a05e 100644 --- a/src/lmpwindows.h +++ b/src/lmpwindows.h @@ -24,14 +24,13 @@ inline double pow(int i, int j){ return pow((double)i,j); } -#endif -inline double sqrt(int i){ - return sqrt((double) i); -} - inline double fabs(int i){ return fabs((double) i); } +inline double sqrt(int i){ + return sqrt((double) i); +} +#endif inline double trunc(double x) { return x > 0 ? floor(x) : ceil(x); From 8d8f0af7a626fb6a6cc93263cea6b05189af2b32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 17:38:53 -0400 Subject: [PATCH 060/372] add download flags to mingw preset --- cmake/presets/mingw-cross.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 5c41509d5f..841972b858 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -10,3 +10,5 @@ set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE foreach(PKG ${WIN_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) endforeach() +set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) +set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) From 70ae5f41e35df1fa7c1fa2ab7011edb47bd36a3e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 17:46:25 -0400 Subject: [PATCH 061/372] tweaks for compiling USER-INTEL in cpu mode on Windows with GCC --- cmake/CMakeLists.txt | 2 +- cmake/presets/mingw-cross.cmake | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a9147bf8c7..9402ec0663 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1112,7 +1112,7 @@ if(PKG_USER-INTEL) list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) endif() - if((NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) + if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256") endif() diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 841972b858..d8edf95403 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -12,3 +12,4 @@ foreach(PKG ${WIN_PACKAGES}) endforeach() set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) +set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) From 35129c0881991c028ab549ea48de83a39e88bddf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 17:51:53 -0400 Subject: [PATCH 062/372] posix_memalign() does not exist on windows, so we have to workaround using it with USER-INTEL --- src/memory.cpp | 2 +- src/my_page.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/memory.cpp b/src/memory.cpp index 971de3dce6..b2f8a95b17 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -26,7 +26,7 @@ #endif #endif -#if defined(LMP_USER_INTEL) && !defined(LAMMPS_MEMALIGN) +#if defined(LMP_USER_INTEL) && !defined(LAMMPS_MEMALIGN) && !defined(_WIN32) #define LAMMPS_MEMALIGN 64 #endif diff --git a/src/my_page.h b/src/my_page.h index 5cd7098d8c..01542a9174 100644 --- a/src/my_page.h +++ b/src/my_page.h @@ -48,7 +48,7 @@ methods: #ifndef LAMMPS_MY_PAGE_H #define LAMMPS_MY_PAGE_H -#if defined(LMP_USER_INTEL) && !defined(LAMMPS_MEMALIGN) +#if defined(LMP_USER_INTEL) && !defined(LAMMPS_MEMALIGN) && !defined(_WIN32) #define LAMMPS_MEMALIGN 64 #endif From a0e5d14990af4cd281e5db5c97c8a281838fb072 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 1 Apr 2019 15:53:36 -0600 Subject: [PATCH 063/372] Commit JT 040119 - corrected tangent vector projection - output verbose (Gradidottan) --- src/SPIN/fix_neb_spin.cpp | 18 ++++++++++-- src/SPIN/neb_spin.cpp | 59 +++++++++++---------------------------- 2 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/SPIN/fix_neb_spin.cpp b/src/SPIN/fix_neb_spin.cpp index fce099e7c4..017085a9a8 100644 --- a/src/SPIN/fix_neb_spin.cpp +++ b/src/SPIN/fix_neb_spin.cpp @@ -15,6 +15,10 @@ Contributing authors: Julien Tranchida (SNL) Please cite the related publication: + Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015). + Method for finding mechanism and activation energy of magnetic transitions, + applied to skyrmion and antivortex annihilation. + Computer Physics Communications, 196, 335-347. ------------------------------------------------------------------------- */ #include @@ -467,6 +471,15 @@ void FixNEB_spin::min_post_force(int /*vflag*/) } } + // project tangent vector on tangent space + + double sdottan; + sdottan = sp[i][0]*tangent[i][0] + sp[i][1]*tangent[i][1] + + sp[i][2]*tangent[i][2]; + tangent[i][0] -= sdottan*sp[i][0]; + tangent[i][1] -= sdottan*sp[i][1]; + tangent[i][2] -= sdottan*sp[i][2]; + // calc. next geodesic length spi[0]=sp[i][0]; @@ -518,7 +531,8 @@ void FixNEB_spin::min_post_force(int /*vflag*/) dottangrad = bufout[6]; dotgrad = bufout[7]; - // project tangent vector on tangent space and normalize it + // check projection of tangent vector on tangent space + // and normalize it double buftan[3]; double tandots; @@ -655,7 +669,7 @@ double FixNEB_spin::geodesic_distance(double spi[3], double spj[3]) if (normcross == 0.0 && dots == 0.0) error->all(FLERR,"Incorrect calc. of geodesic_distance in Fix NEB/spin"); - dist = atan2(normcross,dots); + dist = atan2(normcross,dots); return dist; } diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 53b9da9c42..5dcd27ef2b 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -281,10 +281,9 @@ void NEB_spin::run() if (uscreen) { if (verbose) { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " - "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaTorqueN MaxAtomTorqueN\n"); + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan ... GradVNdottan\n"); } else { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " @@ -294,11 +293,10 @@ void NEB_spin::run() if (ulogfile) { if (verbose) { - fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " - "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaTorqueN MaxAtomTorqueN\n"); + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan ... GradVNdottan\n"); } else { fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " @@ -370,9 +368,7 @@ void NEB_spin::run() fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " - "pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); + "GradV0dottan ... GradVNdottan\n"); } else { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " @@ -382,12 +378,10 @@ void NEB_spin::run() } if (ulogfile) { if (verbose) { - fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " - "GradV0 GradV1 GradVc EBF EBR RDT " - "RD1 PE1 RD2 PE2 ... RDN PEN " - "pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan ... GradVNdottan\n"); } else { fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " @@ -879,17 +873,8 @@ void NEB_spin::print_status() for (int i = 0; i < nreplica; i++) fprintf(uscreen,"%12.8g %12.8g ",rdist[i],all[i][0]); if (verbose) { - fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", - NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg, - all[0][3],freplica[0],fmaxatomInRepl[0]); - for (int i = 1; i < nreplica-1; i++) - fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", - 180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg, - 180-acos(all[i][6])*todeg,all[i][3],freplica[i], - fmaxatomInRepl[i]); - fprintf(uscreen,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", - NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3], - freplica[nreplica-1],fmaxatomInRepl[nreplica-1]); + for (int i = 0; i < nreplica; i++) + fprintf(uscreen,"%12.8g ",all[i][5]); } fprintf(uscreen,"\n"); } @@ -901,20 +886,10 @@ void NEB_spin::print_status() gradvnorm0,gradvnorm1,gradvnormc); fprintf(ulogfile,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt); for (int i = 0; i < nreplica; i++) - //fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); - fprintf(ulogfile,"%12.8g %12.8g %12.8g %12.8g ",rdist[i],all[i][0],all[i][2],all[i][5]); + fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); if (verbose) { - fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", - NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg, - all[0][3],freplica[0],fmaxatomInRepl[0]); - for (int i = 1; i < nreplica-1; i++) - fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", - 180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg, - 180-acos(all[i][6])*todeg,all[i][3],freplica[i], - fmaxatomInRepl[i]); - fprintf(ulogfile,"%12.5g %12.5g %12.5g %12.5g %12.5g %12.5g", - NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3], - freplica[nreplica-1],fmaxatomInRepl[nreplica-1]); + for (int i = 0; i < nreplica; i++) + fprintf(ulogfile,"%12.8g ",all[i][5]); } fprintf(ulogfile,"\n"); fflush(ulogfile); From 76b848bb0ad2028deff14c37584f22922c9387ca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 17:58:19 -0400 Subject: [PATCH 064/372] include USER-INTEL, but need to disable support for LRT mode --- cmake/presets/mingw-cross.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index d8edf95403..11921c05c9 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -2,7 +2,7 @@ set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS - USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP + USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE USER-OMP USER-PHONON USER-QTB USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF) @@ -13,3 +13,4 @@ endforeach() set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) +set(INTEL_LRT_MODE "none" CACHE STRING "" FORCE) From 3a0b108f914401e7b1328611888471ba55acbd07 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 18:22:06 -0400 Subject: [PATCH 065/372] reformat --- cmake/presets/mingw-cross.cmake | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 11921c05c9..cab5a3ca41 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -1,15 +1,16 @@ -set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE - GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI - USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS - USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-INTEL - USER-MANIFOLD USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE +set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GRANULAR + KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS QEQ REPLICA + RIGID SHOCK SNAP SRD VORONOI USER-ATC USER-AWPMD USER-BOCS + USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD + USER-DRUDE USER-EFF USER-FEP USER-INTEL USER-MANIFOLD + USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE USER-OMP USER-PHONON USER-QTB USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF) foreach(PKG ${WIN_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) endforeach() + set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) From 200aa2d06fc6c52171eb7e2211947b5fb130d059 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 18:50:53 -0400 Subject: [PATCH 066/372] missed a few packages in cross-compiler preset --- cmake/presets/mingw-cross.cmake | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index cab5a3ca41..b53e5a7b93 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 GRANULAR - KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS QEQ REPLICA - RIGID SHOCK SNAP SRD VORONOI USER-ATC USER-AWPMD USER-BOCS - USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD - USER-DRUDE USER-EFF USER-FEP USER-INTEL USER-MANIFOLD - USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE - USER-OMP USER-PHONON USER-QTB USER-REAXC USER-SDPD USER-SMD - USER-SMTBQ USER-SPH USER-TALLY USER-UEF) +set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU + GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS QEQ + REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI USER-ATC USER-AWPMD + USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION + USER-DPD USER-DRUDE USER-EFF USER-FEP USER-INTEL USER-MANIFOLD + USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE USER-OMP + USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SDPD USER-SMD + USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-YAFF) foreach(PKG ${WIN_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) From 0b8332cedfa5f7df3979efd8525edcf45d7a5d2a Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 1 Apr 2019 17:52:59 -0600 Subject: [PATCH 067/372] Commit2 JT 040119 - improved verbose output - work on examples --- examples/SPIN/gneb/README | 4 +- examples/SPIN/gneb/interpolate/README | 7 + examples/SPIN/gneb/interpolate/interpolate.c | 109 +++ .../interpolate/reac_coords_iron_verbose.dat | 8 + examples/SPIN/gneb/{ => iron}/final.iron_spin | 0 examples/SPIN/gneb/{ => iron}/in.gneb.iron | 14 +- .../SPIN/gneb/{ => iron}/initial.iron_spin | 0 examples/SPIN/gneb/skyrmion/final.skyrmion | 401 +++++++++ examples/SPIN/gneb/skyrmion/in.gneb.skyrmion | 58 ++ examples/SPIN/gneb/skyrmion/initial.skyrmion | 818 ++++++++++++++++++ src/SPIN/neb_spin.cpp | 18 +- 11 files changed, 1415 insertions(+), 22 deletions(-) create mode 100644 examples/SPIN/gneb/interpolate/README create mode 100644 examples/SPIN/gneb/interpolate/interpolate.c create mode 100644 examples/SPIN/gneb/interpolate/reac_coords_iron_verbose.dat rename examples/SPIN/gneb/{ => iron}/final.iron_spin (100%) rename examples/SPIN/gneb/{ => iron}/in.gneb.iron (70%) rename examples/SPIN/gneb/{ => iron}/initial.iron_spin (100%) create mode 100644 examples/SPIN/gneb/skyrmion/final.skyrmion create mode 100644 examples/SPIN/gneb/skyrmion/in.gneb.skyrmion create mode 100644 examples/SPIN/gneb/skyrmion/initial.skyrmion diff --git a/examples/SPIN/gneb/README b/examples/SPIN/gneb/README index eeb4aa4692..7d388d898e 100644 --- a/examples/SPIN/gneb/README +++ b/examples/SPIN/gneb/README @@ -1,5 +1,5 @@ -Run this example as: +Run those examples as: -mpirun -np 3 lmp_g++ -partition 3x1 -in in.tad +mpirun -np 4 lmp_mpi -in in.gneb.iron -partition 4x1 You should be able to use any number of replicas >= 3. diff --git a/examples/SPIN/gneb/interpolate/README b/examples/SPIN/gneb/interpolate/README new file mode 100644 index 0000000000..d0f75226c5 --- /dev/null +++ b/examples/SPIN/gneb/interpolate/README @@ -0,0 +1,7 @@ +Interpolate.x tries to perform a cubic polynomial interpolation +of the MEP found + +Compile the program with: +gcc interpolate.c -o interpolate.x -lm -lgsl + + diff --git a/examples/SPIN/gneb/interpolate/interpolate.c b/examples/SPIN/gneb/interpolate/interpolate.c new file mode 100644 index 0000000000..48804d53a2 --- /dev/null +++ b/examples/SPIN/gneb/interpolate/interpolate.c @@ -0,0 +1,109 @@ +/* ------------------------------------------------------------------------ + Provide some explanation here +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + This program is a courtesy of Aleksei Ivanov (Univ. of Iceland) + Contributing authors: Aleksei Ivanov (Univ. of Iceland), + Julien Tranchida (SNL) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include + +// calculate cubic coefficients + +void count_coefficient(double *V, double *F, double *R, double *a, double *b, + double *c,double *d,int M){ + /* R = square of distance between images*/ + /* V = energy of images */ + /* F = projection of real real forces along the path? */ + int i; + for(i = 0; i < M ; i++) { + a[i] = ( -2.0*(V[i+1]-V[i])/R[i] - F[i] - F[i+1] ) / (R[i]*R[i]); + //a[i] = ( -2.0*(V[i+1]-V[i])/sqrt(R[i]) - F[i] - F[i+1] ) / R[i]; + b[i] = ( 3.0*(V[i+1]-V[i]) + (2.0*F[i]+F[i+1])*R[i] ) / (R[i]*R[i]); + //b[i] = ( 3.0*(V[i+1]-V[i]) + (2.0*F[i]+F[i+1])*sqrt(R[i]) ) / R[i]; + c[i] = -F[i]; + d[i] = V[i]; + } +} + +// cubic spline + +double spline(double a,double b,double c,double d,double x) { + return (a*x*x*x + b*x*x + c*x + d); +} + +int main() { + int M=0; // M+1 = number of images + double *fmdottan; // projection of real forces on tangent path + double *coords; // initial value of reaction coords + double *V; // energy of images + double *dist; // square of the distance between images + double *a, *b, *c, *d ; // coefficients of cubic functions + double x; // reaction coordinate + double A,B; // additional variables for rnd + double length = 0.0; + int i,j; + FILE *data; + + printf("Enter M = number of images - 1 \n"); + scanf("%d",&M); + + // allocating and initializing tables + + a = calloc(M,sizeof(double)); // cubic coefficients + b = calloc(M,sizeof(double)); + c = calloc(M,sizeof(double)); + d = calloc(M,sizeof(double)); + V = calloc((M+1),sizeof(double)); // energies + coords = calloc((M+1),sizeof(double)); // reaction coordinates + fmdottan = calloc((M+1),sizeof(double)); // fm dot tangent + dist = calloc(M+1,sizeof(double)); // distance between images + + // reading input file + + if((data=fopen("reac_coords_iron_verbose.dat","r")) == NULL) { + //if((data=fopen("neb_init.dat","r")) == NULL) { + printf("Incorrect input file name."); + return 0; + } + + for(j=0; j < M+1; j++) { + fscanf(data,"%lf\t%lf\t%lf\t%lf\n",&coords[j],&V[j],&fmdottan[j],&dist[j]); + length += dist[j]; + printf("%lf %lf %lf %lf\n",coords[j],V[j],fmdottan[j],dist[j]); + } + + if( (fclose(data)) == 0) { + printf("Data stored, input file closed.\n "); + } + + // calculate value of coefficients + + count_coefficient(V,fmdottan,dist,a,b,c,d,M); + + // plot result of the interpolation + + if( ( data=fopen("interpolation_result.dat","w") )== NULL) { + printf("Interpolation file could not be open."); + return 0; + } + + A = B = 0.0; + for(i = 0; i < M ; i++) { + B += dist[i]; + printf("%13le\n",B); + for(j = 0; j <= 1000; j++) { + x = dist[i]*1.0e-3*j; + fprintf(data,"%13lf\t%13le\n",(x+A)/length,spline(a[i],b[i],c[i],d[i],x)); + } + A += dist[i]; + } + + return 0; +} diff --git a/examples/SPIN/gneb/interpolate/reac_coords_iron_verbose.dat b/examples/SPIN/gneb/interpolate/reac_coords_iron_verbose.dat new file mode 100644 index 0000000000..7a56274a31 --- /dev/null +++ b/examples/SPIN/gneb/interpolate/reac_coords_iron_verbose.dat @@ -0,0 +1,8 @@ +0.0000000 -3.915271 3.4995081e-17 2.4573077 +0.14285714 -3.9148148 -0.00059075739 2.4573077 +0.28571429 -3.9136926 -0.00072315767 2.4573077 +0.42857143 -3.9127883 -0.0003191228 2.4573265 +0.57142857 -3.9127883 0.0003191228 2.4403341 +0.71428571 -3.9136926 0.00072315767 2.4044093 +0.85714286 -3.9148148 0.00059075739 2.3766041 +1.0000000 -3.915271 -4.1231828e-17 0.0000000 diff --git a/examples/SPIN/gneb/final.iron_spin b/examples/SPIN/gneb/iron/final.iron_spin similarity index 100% rename from examples/SPIN/gneb/final.iron_spin rename to examples/SPIN/gneb/iron/final.iron_spin diff --git a/examples/SPIN/gneb/in.gneb.iron b/examples/SPIN/gneb/iron/in.gneb.iron similarity index 70% rename from examples/SPIN/gneb/in.gneb.iron rename to examples/SPIN/gneb/iron/in.gneb.iron index a8028392a1..4cfbd723b7 100644 --- a/examples/SPIN/gneb/in.gneb.iron +++ b/examples/SPIN/gneb/iron/in.gneb.iron @@ -8,17 +8,11 @@ atom_style spin # necessary for the serial algorithm (sametag) atom_modify map array -lattice bcc 2.8665 -region box block 0.0 4.0 0.0 4.0 0.0 1.0 -#create_box 1 box -#create_atoms 1 box - read_data initial.iron_spin # setting mass, mag. moments, and interactions for bcc iron mass 1 55.845 -#set group all spin 2.2 -1.0 0.0 0.0 pair_style spin/exchange 3.5 pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 @@ -28,9 +22,7 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.0001 1.0 0.0 0.0 fix_modify 1 energy yes -fix 2 all langevin/spin 0.0 0.0 21 fix 3 all neb/spin 1.0 -#fix 4 all nve/spin lattice no timestep 0.0001 thermo 100 @@ -52,10 +44,8 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz variable u universe 1 2 3 4 -#dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] dump 1 all custom 200 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] min_style spin -min_modify alpha_damp 1.0 discret_factor 10.0 -neb/spin 1.0e-12 1.0e-12 50000 50000 10 final final.iron_spin -#neb/spin 1.0e-6 1.0e-6 1000 10 10 final final.iron_spin +min_modify alpha_damp 1.0 discrete_factor 10.0 +neb/spin 1.0e-12 1.0e-12 200000 100000 1000 final final.iron_spin verbose diff --git a/examples/SPIN/gneb/initial.iron_spin b/examples/SPIN/gneb/iron/initial.iron_spin similarity index 100% rename from examples/SPIN/gneb/initial.iron_spin rename to examples/SPIN/gneb/iron/initial.iron_spin diff --git a/examples/SPIN/gneb/skyrmion/final.skyrmion b/examples/SPIN/gneb/skyrmion/final.skyrmion new file mode 100644 index 0000000000..4ff51f6376 --- /dev/null +++ b/examples/SPIN/gneb/skyrmion/final.skyrmion @@ -0,0 +1,401 @@ +400 +1 2.5 0.0 0.0 0.0 0.0 0.0 1.0 +2 2.5 0.0 3.0 0.0 0.0 0.0 1.0 +3 2.5 0.0 6.0 0.0 0.0 0.0 1.0 +4 2.5 0.0 9.0 0.0 0.0 0.0 1.0 +5 2.5 0.0 12.0 0.0 0.0 0.0 1.0 +6 2.5 0.0 15.0 0.0 0.0 0.0 1.0 +7 2.5 0.0 18.0 0.0 0.0 0.0 1.0 +8 2.5 0.0 21.0 0.0 0.0 0.0 1.0 +9 2.5 0.0 24.0 0.0 0.0 0.0 1.0 +10 2.5 0.0 27.0 0.0 0.0 0.0 1.0 +11 2.5 0.0 30.0 0.0 0.0 0.0 1.0 +12 2.5 0.0 33.0 0.0 0.0 0.0 1.0 +13 2.5 0.0 36.0 0.0 0.0 0.0 1.0 +14 2.5 0.0 39.0 0.0 0.0 0.0 1.0 +15 2.5 0.0 42.0 0.0 0.0 0.0 1.0 +16 2.5 0.0 45.0 0.0 0.0 0.0 1.0 +17 2.5 0.0 48.0 0.0 0.0 0.0 1.0 +18 2.5 0.0 51.0 0.0 0.0 0.0 1.0 +19 2.5 0.0 54.0 0.0 0.0 0.0 1.0 +20 2.5 0.0 57.0 0.0 0.0 0.0 1.0 +21 2.5 3.0 0.0 0.0 0.0 0.0 1.0 +22 2.5 3.0 3.0 0.0 0.0 0.0 1.0 +23 2.5 3.0 6.0 0.0 0.0 0.0 1.0 +24 2.5 3.0 9.0 0.0 0.0 0.0 1.0 +25 2.5 3.0 12.0 0.0 0.0 0.0 1.0 +26 2.5 3.0 15.0 0.0 0.0 0.0 1.0 +27 2.5 3.0 18.0 0.0 0.0 0.0 1.0 +28 2.5 3.0 21.0 0.0 0.0 0.0 1.0 +29 2.5 3.0 24.0 0.0 0.0 0.0 1.0 +30 2.5 3.0 27.0 0.0 0.0 0.0 1.0 +31 2.5 3.0 30.0 0.0 0.0 0.0 1.0 +32 2.5 3.0 33.0 0.0 0.0 0.0 1.0 +33 2.5 3.0 36.0 0.0 0.0 0.0 1.0 +34 2.5 3.0 39.0 0.0 0.0 0.0 1.0 +35 2.5 3.0 42.0 0.0 0.0 0.0 1.0 +36 2.5 3.0 45.0 0.0 0.0 0.0 1.0 +37 2.5 3.0 48.0 0.0 0.0 0.0 1.0 +38 2.5 3.0 51.0 0.0 0.0 0.0 1.0 +39 2.5 3.0 54.0 0.0 0.0 0.0 1.0 +40 2.5 3.0 57.0 0.0 0.0 0.0 1.0 +41 2.5 6.0 0.0 0.0 0.0 0.0 1.0 +42 2.5 6.0 3.0 0.0 0.0 0.0 1.0 +43 2.5 6.0 6.0 0.0 0.0 0.0 1.0 +44 2.5 6.0 9.0 0.0 0.0 0.0 1.0 +45 2.5 6.0 12.0 0.0 0.0 0.0 1.0 +46 2.5 6.0 15.0 0.0 0.0 0.0 1.0 +47 2.5 6.0 18.0 0.0 0.0 0.0 1.0 +48 2.5 6.0 21.0 0.0 0.0 0.0 1.0 +49 2.5 6.0 24.0 0.0 0.0 0.0 1.0 +50 2.5 6.0 27.0 0.0 0.0 0.0 1.0 +51 2.5 6.0 30.0 0.0 0.0 0.0 1.0 +52 2.5 6.0 33.0 0.0 0.0 0.0 1.0 +53 2.5 6.0 36.0 0.0 0.0 0.0 1.0 +54 2.5 6.0 39.0 0.0 0.0 0.0 1.0 +55 2.5 6.0 42.0 0.0 0.0 0.0 1.0 +56 2.5 6.0 45.0 0.0 0.0 0.0 1.0 +57 2.5 6.0 48.0 0.0 0.0 0.0 1.0 +58 2.5 6.0 51.0 0.0 0.0 0.0 1.0 +59 2.5 6.0 54.0 0.0 0.0 0.0 1.0 +60 2.5 6.0 57.0 0.0 0.0 0.0 1.0 +61 2.5 9.0 0.0 0.0 0.0 0.0 1.0 +62 2.5 9.0 3.0 0.0 0.0 0.0 1.0 +63 2.5 9.0 6.0 0.0 0.0 0.0 1.0 +64 2.5 9.0 9.0 0.0 0.0 0.0 1.0 +65 2.5 9.0 12.0 0.0 0.0 0.0 1.0 +66 2.5 9.0 15.0 0.0 0.0 0.0 1.0 +67 2.5 9.0 18.0 0.0 0.0 0.0 1.0 +68 2.5 9.0 21.0 0.0 0.0 0.0 1.0 +69 2.5 9.0 24.0 0.0 0.0 0.0 1.0 +70 2.5 9.0 27.0 0.0 0.0 0.0 1.0 +71 2.5 9.0 30.0 0.0 0.0 0.0 1.0 +72 2.5 9.0 33.0 0.0 0.0 0.0 1.0 +73 2.5 9.0 36.0 0.0 0.0 0.0 1.0 +74 2.5 9.0 39.0 0.0 0.0 0.0 1.0 +75 2.5 9.0 42.0 0.0 0.0 0.0 1.0 +76 2.5 9.0 45.0 0.0 0.0 0.0 1.0 +77 2.5 9.0 48.0 0.0 0.0 0.0 1.0 +78 2.5 9.0 51.0 0.0 0.0 0.0 1.0 +79 2.5 9.0 54.0 0.0 0.0 0.0 1.0 +80 2.5 9.0 57.0 0.0 0.0 0.0 1.0 +81 2.5 12.0 0.0 0.0 0.0 0.0 1.0 +82 2.5 12.0 3.0 0.0 0.0 0.0 1.0 +83 2.5 12.0 6.0 0.0 0.0 0.0 1.0 +84 2.5 12.0 9.0 0.0 0.0 0.0 1.0 +85 2.5 12.0 12.0 0.0 0.0 0.0 1.0 +86 2.5 12.0 15.0 0.0 0.0 0.0 1.0 +87 2.5 12.0 18.0 0.0 0.0 0.0 1.0 +88 2.5 12.0 21.0 0.0 0.0 0.0 1.0 +89 2.5 12.0 24.0 0.0 0.0 0.0 1.0 +90 2.5 12.0 27.0 0.0 0.0 0.0 1.0 +91 2.5 12.0 30.0 0.0 0.0 0.0 1.0 +92 2.5 12.0 33.0 0.0 0.0 0.0 1.0 +93 2.5 12.0 36.0 0.0 0.0 0.0 1.0 +94 2.5 12.0 39.0 0.0 0.0 0.0 1.0 +95 2.5 12.0 42.0 0.0 0.0 0.0 1.0 +96 2.5 12.0 45.0 0.0 0.0 0.0 1.0 +97 2.5 12.0 48.0 0.0 0.0 0.0 1.0 +98 2.5 12.0 51.0 0.0 0.0 0.0 1.0 +99 2.5 12.0 54.0 0.0 0.0 0.0 1.0 +100 2.5 12.0 57.0 0.0 0.0 0.0 1.0 +101 2.5 15.0 0.0 0.0 0.0 0.0 1.0 +102 2.5 15.0 3.0 0.0 0.0 0.0 1.0 +103 2.5 15.0 6.0 0.0 0.0 0.0 1.0 +104 2.5 15.0 9.0 0.0 0.0 0.0 1.0 +105 2.5 15.0 12.0 0.0 0.0 0.0 1.0 +106 2.5 15.0 15.0 0.0 0.0 0.0 1.0 +107 2.5 15.0 18.0 0.0 0.0 0.0 1.0 +108 2.5 15.0 21.0 0.0 0.0 0.0 1.0 +109 2.5 15.0 24.0 0.0 0.0 0.0 1.0 +110 2.5 15.0 27.0 0.0 0.0 0.0 1.0 +111 2.5 15.0 30.0 0.0 0.0 0.0 1.0 +112 2.5 15.0 33.0 0.0 0.0 0.0 1.0 +113 2.5 15.0 36.0 0.0 0.0 0.0 1.0 +114 2.5 15.0 39.0 0.0 0.0 0.0 1.0 +115 2.5 15.0 42.0 0.0 0.0 0.0 1.0 +116 2.5 15.0 45.0 0.0 0.0 0.0 1.0 +117 2.5 15.0 48.0 0.0 0.0 0.0 1.0 +118 2.5 15.0 51.0 0.0 0.0 0.0 1.0 +119 2.5 15.0 54.0 0.0 0.0 0.0 1.0 +120 2.5 15.0 57.0 0.0 0.0 0.0 1.0 +121 2.5 18.0 0.0 0.0 0.0 0.0 1.0 +122 2.5 18.0 3.0 0.0 0.0 0.0 1.0 +123 2.5 18.0 6.0 0.0 0.0 0.0 1.0 +124 2.5 18.0 9.0 0.0 0.0 0.0 1.0 +125 2.5 18.0 12.0 0.0 0.0 0.0 1.0 +126 2.5 18.0 15.0 0.0 0.0 0.0 1.0 +127 2.5 18.0 18.0 0.0 0.0 0.0 1.0 +128 2.5 18.0 21.0 0.0 0.0 0.0 1.0 +129 2.5 18.0 24.0 0.0 0.0 0.0 1.0 +130 2.5 18.0 27.0 0.0 0.0 0.0 1.0 +131 2.5 18.0 30.0 0.0 0.0 0.0 1.0 +132 2.5 18.0 33.0 0.0 0.0 0.0 1.0 +133 2.5 18.0 36.0 0.0 0.0 0.0 1.0 +134 2.5 18.0 39.0 0.0 0.0 0.0 1.0 +135 2.5 18.0 42.0 0.0 0.0 0.0 1.0 +136 2.5 18.0 45.0 0.0 0.0 0.0 1.0 +137 2.5 18.0 48.0 0.0 0.0 0.0 1.0 +138 2.5 18.0 51.0 0.0 0.0 0.0 1.0 +139 2.5 18.0 54.0 0.0 0.0 0.0 1.0 +140 2.5 18.0 57.0 0.0 0.0 0.0 1.0 +141 2.5 21.0 0.0 0.0 0.0 0.0 1.0 +142 2.5 21.0 3.0 0.0 0.0 0.0 1.0 +143 2.5 21.0 6.0 0.0 0.0 0.0 1.0 +144 2.5 21.0 9.0 0.0 0.0 0.0 1.0 +145 2.5 21.0 12.0 0.0 0.0 0.0 1.0 +146 2.5 21.0 15.0 0.0 0.0 0.0 1.0 +147 2.5 21.0 18.0 0.0 0.0 0.0 1.0 +148 2.5 21.0 21.0 0.0 0.0 0.0 1.0 +149 2.5 21.0 24.0 0.0 0.0 0.0 1.0 +150 2.5 21.0 27.0 0.0 0.0 0.0 1.0 +151 2.5 21.0 30.0 0.0 0.0 0.0 1.0 +152 2.5 21.0 33.0 0.0 0.0 0.0 1.0 +153 2.5 21.0 36.0 0.0 0.0 0.0 1.0 +154 2.5 21.0 39.0 0.0 0.0 0.0 1.0 +155 2.5 21.0 42.0 0.0 0.0 0.0 1.0 +156 2.5 21.0 45.0 0.0 0.0 0.0 1.0 +157 2.5 21.0 48.0 0.0 0.0 0.0 1.0 +158 2.5 21.0 51.0 0.0 0.0 0.0 1.0 +159 2.5 21.0 54.0 0.0 0.0 0.0 1.0 +160 2.5 21.0 57.0 0.0 0.0 0.0 1.0 +161 2.5 24.0 0.0 0.0 0.0 0.0 1.0 +162 2.5 24.0 3.0 0.0 0.0 0.0 1.0 +163 2.5 24.0 6.0 0.0 0.0 0.0 1.0 +164 2.5 24.0 9.0 0.0 0.0 0.0 1.0 +165 2.5 24.0 12.0 0.0 0.0 0.0 1.0 +166 2.5 24.0 15.0 0.0 0.0 0.0 1.0 +167 2.5 24.0 18.0 0.0 0.0 0.0 1.0 +168 2.5 24.0 21.0 0.0 0.0 0.0 1.0 +169 2.5 24.0 24.0 0.0 0.0 0.0 1.0 +170 2.5 24.0 27.0 0.0 0.0 0.0 1.0 +171 2.5 24.0 30.0 0.0 0.0 0.0 1.0 +172 2.5 24.0 33.0 0.0 0.0 0.0 1.0 +173 2.5 24.0 36.0 0.0 0.0 0.0 1.0 +174 2.5 24.0 39.0 0.0 0.0 0.0 1.0 +175 2.5 24.0 42.0 0.0 0.0 0.0 1.0 +176 2.5 24.0 45.0 0.0 0.0 0.0 1.0 +177 2.5 24.0 48.0 0.0 0.0 0.0 1.0 +178 2.5 24.0 51.0 0.0 0.0 0.0 1.0 +179 2.5 24.0 54.0 0.0 0.0 0.0 1.0 +180 2.5 24.0 57.0 0.0 0.0 0.0 1.0 +181 2.5 27.0 0.0 0.0 0.0 0.0 1.0 +182 2.5 27.0 3.0 0.0 0.0 0.0 1.0 +183 2.5 27.0 6.0 0.0 0.0 0.0 1.0 +184 2.5 27.0 9.0 0.0 0.0 0.0 1.0 +185 2.5 27.0 12.0 0.0 0.0 0.0 1.0 +186 2.5 27.0 15.0 0.0 0.0 0.0 1.0 +187 2.5 27.0 18.0 0.0 0.0 0.0 1.0 +188 2.5 27.0 21.0 0.0 0.0 0.0 1.0 +189 2.5 27.0 24.0 0.0 0.0 0.0 1.0 +190 2.5 27.0 27.0 0.0 0.0 0.0 1.0 +191 2.5 27.0 30.0 0.0 0.0 0.0 1.0 +192 2.5 27.0 33.0 0.0 0.0 0.0 1.0 +193 2.5 27.0 36.0 0.0 0.0 0.0 1.0 +194 2.5 27.0 39.0 0.0 0.0 0.0 1.0 +195 2.5 27.0 42.0 0.0 0.0 0.0 1.0 +196 2.5 27.0 45.0 0.0 0.0 0.0 1.0 +197 2.5 27.0 48.0 0.0 0.0 0.0 1.0 +198 2.5 27.0 51.0 0.0 0.0 0.0 1.0 +199 2.5 27.0 54.0 0.0 0.0 0.0 1.0 +200 2.5 27.0 57.0 0.0 0.0 0.0 1.0 +201 2.5 30.0 0.0 0.0 0.0 0.0 1.0 +202 2.5 30.0 3.0 0.0 0.0 0.0 1.0 +203 2.5 30.0 6.0 0.0 0.0 0.0 1.0 +204 2.5 30.0 9.0 0.0 0.0 0.0 1.0 +205 2.5 30.0 12.0 0.0 0.0 0.0 1.0 +206 2.5 30.0 15.0 0.0 0.0 0.0 1.0 +207 2.5 30.0 18.0 0.0 0.0 0.0 1.0 +208 2.5 30.0 21.0 0.0 0.0 0.0 1.0 +209 2.5 30.0 24.0 0.0 0.0 0.0 1.0 +210 2.5 30.0 27.0 0.0 0.0 0.0 1.0 +211 2.5 30.0 30.0 0.0 0.0 0.0 1.0 +212 2.5 30.0 33.0 0.0 0.0 0.0 1.0 +213 2.5 30.0 36.0 0.0 0.0 0.0 1.0 +214 2.5 30.0 39.0 0.0 0.0 0.0 1.0 +215 2.5 30.0 42.0 0.0 0.0 0.0 1.0 +216 2.5 30.0 45.0 0.0 0.0 0.0 1.0 +217 2.5 30.0 48.0 0.0 0.0 0.0 1.0 +218 2.5 30.0 51.0 0.0 0.0 0.0 1.0 +219 2.5 30.0 54.0 0.0 0.0 0.0 1.0 +220 2.5 30.0 57.0 0.0 0.0 0.0 1.0 +221 2.5 33.0 0.0 0.0 0.0 0.0 1.0 +222 2.5 33.0 3.0 0.0 0.0 0.0 1.0 +223 2.5 33.0 6.0 0.0 0.0 0.0 1.0 +224 2.5 33.0 9.0 0.0 0.0 0.0 1.0 +225 2.5 33.0 12.0 0.0 0.0 0.0 1.0 +226 2.5 33.0 15.0 0.0 0.0 0.0 1.0 +227 2.5 33.0 18.0 0.0 0.0 0.0 1.0 +228 2.5 33.0 21.0 0.0 0.0 0.0 1.0 +229 2.5 33.0 24.0 0.0 0.0 0.0 1.0 +230 2.5 33.0 27.0 0.0 0.0 0.0 1.0 +231 2.5 33.0 30.0 0.0 0.0 0.0 1.0 +232 2.5 33.0 33.0 0.0 0.0 0.0 1.0 +233 2.5 33.0 36.0 0.0 0.0 0.0 1.0 +234 2.5 33.0 39.0 0.0 0.0 0.0 1.0 +235 2.5 33.0 42.0 0.0 0.0 0.0 1.0 +236 2.5 33.0 45.0 0.0 0.0 0.0 1.0 +237 2.5 33.0 48.0 0.0 0.0 0.0 1.0 +238 2.5 33.0 51.0 0.0 0.0 0.0 1.0 +239 2.5 33.0 54.0 0.0 0.0 0.0 1.0 +240 2.5 33.0 57.0 0.0 0.0 0.0 1.0 +241 2.5 36.0 0.0 0.0 0.0 0.0 1.0 +242 2.5 36.0 3.0 0.0 0.0 0.0 1.0 +243 2.5 36.0 6.0 0.0 0.0 0.0 1.0 +244 2.5 36.0 9.0 0.0 0.0 0.0 1.0 +245 2.5 36.0 12.0 0.0 0.0 0.0 1.0 +246 2.5 36.0 15.0 0.0 0.0 0.0 1.0 +247 2.5 36.0 18.0 0.0 0.0 0.0 1.0 +248 2.5 36.0 21.0 0.0 0.0 0.0 1.0 +249 2.5 36.0 24.0 0.0 0.0 0.0 1.0 +250 2.5 36.0 27.0 0.0 0.0 0.0 1.0 +251 2.5 36.0 30.0 0.0 0.0 0.0 1.0 +252 2.5 36.0 33.0 0.0 0.0 0.0 1.0 +253 2.5 36.0 36.0 0.0 0.0 0.0 1.0 +254 2.5 36.0 39.0 0.0 0.0 0.0 1.0 +255 2.5 36.0 42.0 0.0 0.0 0.0 1.0 +256 2.5 36.0 45.0 0.0 0.0 0.0 1.0 +257 2.5 36.0 48.0 0.0 0.0 0.0 1.0 +258 2.5 36.0 51.0 0.0 0.0 0.0 1.0 +259 2.5 36.0 54.0 0.0 0.0 0.0 1.0 +260 2.5 36.0 57.0 0.0 0.0 0.0 1.0 +261 2.5 39.0 0.0 0.0 0.0 0.0 1.0 +262 2.5 39.0 3.0 0.0 0.0 0.0 1.0 +263 2.5 39.0 6.0 0.0 0.0 0.0 1.0 +264 2.5 39.0 9.0 0.0 0.0 0.0 1.0 +265 2.5 39.0 12.0 0.0 0.0 0.0 1.0 +266 2.5 39.0 15.0 0.0 0.0 0.0 1.0 +267 2.5 39.0 18.0 0.0 0.0 0.0 1.0 +268 2.5 39.0 21.0 0.0 0.0 0.0 1.0 +269 2.5 39.0 24.0 0.0 0.0 0.0 1.0 +270 2.5 39.0 27.0 0.0 0.0 0.0 1.0 +271 2.5 39.0 30.0 0.0 0.0 0.0 1.0 +272 2.5 39.0 33.0 0.0 0.0 0.0 1.0 +273 2.5 39.0 36.0 0.0 0.0 0.0 1.0 +274 2.5 39.0 39.0 0.0 0.0 0.0 1.0 +275 2.5 39.0 42.0 0.0 0.0 0.0 1.0 +276 2.5 39.0 45.0 0.0 0.0 0.0 1.0 +277 2.5 39.0 48.0 0.0 0.0 0.0 1.0 +278 2.5 39.0 51.0 0.0 0.0 0.0 1.0 +279 2.5 39.0 54.0 0.0 0.0 0.0 1.0 +280 2.5 39.0 57.0 0.0 0.0 0.0 1.0 +281 2.5 42.0 0.0 0.0 0.0 0.0 1.0 +282 2.5 42.0 3.0 0.0 0.0 0.0 1.0 +283 2.5 42.0 6.0 0.0 0.0 0.0 1.0 +284 2.5 42.0 9.0 0.0 0.0 0.0 1.0 +285 2.5 42.0 12.0 0.0 0.0 0.0 1.0 +286 2.5 42.0 15.0 0.0 0.0 0.0 1.0 +287 2.5 42.0 18.0 0.0 0.0 0.0 1.0 +288 2.5 42.0 21.0 0.0 0.0 0.0 1.0 +289 2.5 42.0 24.0 0.0 0.0 0.0 1.0 +290 2.5 42.0 27.0 0.0 0.0 0.0 1.0 +291 2.5 42.0 30.0 0.0 0.0 0.0 1.0 +292 2.5 42.0 33.0 0.0 0.0 0.0 1.0 +293 2.5 42.0 36.0 0.0 0.0 0.0 1.0 +294 2.5 42.0 39.0 0.0 0.0 0.0 1.0 +295 2.5 42.0 42.0 0.0 0.0 0.0 1.0 +296 2.5 42.0 45.0 0.0 0.0 0.0 1.0 +297 2.5 42.0 48.0 0.0 0.0 0.0 1.0 +298 2.5 42.0 51.0 0.0 0.0 0.0 1.0 +299 2.5 42.0 54.0 0.0 0.0 0.0 1.0 +300 2.5 42.0 57.0 0.0 0.0 0.0 1.0 +301 2.5 45.0 0.0 0.0 0.0 0.0 1.0 +302 2.5 45.0 3.0 0.0 0.0 0.0 1.0 +303 2.5 45.0 6.0 0.0 0.0 0.0 1.0 +304 2.5 45.0 9.0 0.0 0.0 0.0 1.0 +305 2.5 45.0 12.0 0.0 0.0 0.0 1.0 +306 2.5 45.0 15.0 0.0 0.0 0.0 1.0 +307 2.5 45.0 18.0 0.0 0.0 0.0 1.0 +308 2.5 45.0 21.0 0.0 0.0 0.0 1.0 +309 2.5 45.0 24.0 0.0 0.0 0.0 1.0 +310 2.5 45.0 27.0 0.0 0.0 0.0 1.0 +311 2.5 45.0 30.0 0.0 0.0 0.0 1.0 +312 2.5 45.0 33.0 0.0 0.0 0.0 1.0 +313 2.5 45.0 36.0 0.0 0.0 0.0 1.0 +314 2.5 45.0 39.0 0.0 0.0 0.0 1.0 +315 2.5 45.0 42.0 0.0 0.0 0.0 1.0 +316 2.5 45.0 45.0 0.0 0.0 0.0 1.0 +317 2.5 45.0 48.0 0.0 0.0 0.0 1.0 +318 2.5 45.0 51.0 0.0 0.0 0.0 1.0 +319 2.5 45.0 54.0 0.0 0.0 0.0 1.0 +320 2.5 45.0 57.0 0.0 0.0 0.0 1.0 +321 2.5 48.0 0.0 0.0 0.0 0.0 1.0 +322 2.5 48.0 3.0 0.0 0.0 0.0 1.0 +323 2.5 48.0 6.0 0.0 0.0 0.0 1.0 +324 2.5 48.0 9.0 0.0 0.0 0.0 1.0 +325 2.5 48.0 12.0 0.0 0.0 0.0 1.0 +326 2.5 48.0 15.0 0.0 0.0 0.0 1.0 +327 2.5 48.0 18.0 0.0 0.0 0.0 1.0 +328 2.5 48.0 21.0 0.0 0.0 0.0 1.0 +329 2.5 48.0 24.0 0.0 0.0 0.0 1.0 +330 2.5 48.0 27.0 0.0 0.0 0.0 1.0 +331 2.5 48.0 30.0 0.0 0.0 0.0 1.0 +332 2.5 48.0 33.0 0.0 0.0 0.0 1.0 +333 2.5 48.0 36.0 0.0 0.0 0.0 1.0 +334 2.5 48.0 39.0 0.0 0.0 0.0 1.0 +335 2.5 48.0 42.0 0.0 0.0 0.0 1.0 +336 2.5 48.0 45.0 0.0 0.0 0.0 1.0 +337 2.5 48.0 48.0 0.0 0.0 0.0 1.0 +338 2.5 48.0 51.0 0.0 0.0 0.0 1.0 +339 2.5 48.0 54.0 0.0 0.0 0.0 1.0 +340 2.5 48.0 57.0 0.0 0.0 0.0 1.0 +341 2.5 51.0 0.0 0.0 0.0 0.0 1.0 +342 2.5 51.0 3.0 0.0 0.0 0.0 1.0 +343 2.5 51.0 6.0 0.0 0.0 0.0 1.0 +344 2.5 51.0 9.0 0.0 0.0 0.0 1.0 +345 2.5 51.0 12.0 0.0 0.0 0.0 1.0 +346 2.5 51.0 15.0 0.0 0.0 0.0 1.0 +347 2.5 51.0 18.0 0.0 0.0 0.0 1.0 +348 2.5 51.0 21.0 0.0 0.0 0.0 1.0 +349 2.5 51.0 24.0 0.0 0.0 0.0 1.0 +350 2.5 51.0 27.0 0.0 0.0 0.0 1.0 +351 2.5 51.0 30.0 0.0 0.0 0.0 1.0 +352 2.5 51.0 33.0 0.0 0.0 0.0 1.0 +353 2.5 51.0 36.0 0.0 0.0 0.0 1.0 +354 2.5 51.0 39.0 0.0 0.0 0.0 1.0 +355 2.5 51.0 42.0 0.0 0.0 0.0 1.0 +356 2.5 51.0 45.0 0.0 0.0 0.0 1.0 +357 2.5 51.0 48.0 0.0 0.0 0.0 1.0 +358 2.5 51.0 51.0 0.0 0.0 0.0 1.0 +359 2.5 51.0 54.0 0.0 0.0 0.0 1.0 +360 2.5 51.0 57.0 0.0 0.0 0.0 1.0 +361 2.5 54.0 0.0 0.0 0.0 0.0 1.0 +362 2.5 54.0 3.0 0.0 0.0 0.0 1.0 +363 2.5 54.0 6.0 0.0 0.0 0.0 1.0 +364 2.5 54.0 9.0 0.0 0.0 0.0 1.0 +365 2.5 54.0 12.0 0.0 0.0 0.0 1.0 +366 2.5 54.0 15.0 0.0 0.0 0.0 1.0 +367 2.5 54.0 18.0 0.0 0.0 0.0 1.0 +368 2.5 54.0 21.0 0.0 0.0 0.0 1.0 +369 2.5 54.0 24.0 0.0 0.0 0.0 1.0 +370 2.5 54.0 27.0 0.0 0.0 0.0 1.0 +371 2.5 54.0 30.0 0.0 0.0 0.0 1.0 +372 2.5 54.0 33.0 0.0 0.0 0.0 1.0 +373 2.5 54.0 36.0 0.0 0.0 0.0 1.0 +374 2.5 54.0 39.0 0.0 0.0 0.0 1.0 +375 2.5 54.0 42.0 0.0 0.0 0.0 1.0 +376 2.5 54.0 45.0 0.0 0.0 0.0 1.0 +377 2.5 54.0 48.0 0.0 0.0 0.0 1.0 +378 2.5 54.0 51.0 0.0 0.0 0.0 1.0 +379 2.5 54.0 54.0 0.0 0.0 0.0 1.0 +380 2.5 54.0 57.0 0.0 0.0 0.0 1.0 +381 2.5 57.0 0.0 0.0 0.0 0.0 1.0 +382 2.5 57.0 3.0 0.0 0.0 0.0 1.0 +383 2.5 57.0 6.0 0.0 0.0 0.0 1.0 +384 2.5 57.0 9.0 0.0 0.0 0.0 1.0 +385 2.5 57.0 12.0 0.0 0.0 0.0 1.0 +386 2.5 57.0 15.0 0.0 0.0 0.0 1.0 +387 2.5 57.0 18.0 0.0 0.0 0.0 1.0 +388 2.5 57.0 21.0 0.0 0.0 0.0 1.0 +389 2.5 57.0 24.0 0.0 0.0 0.0 1.0 +390 2.5 57.0 27.0 0.0 0.0 0.0 1.0 +391 2.5 57.0 30.0 0.0 0.0 0.0 1.0 +392 2.5 57.0 33.0 0.0 0.0 0.0 1.0 +393 2.5 57.0 36.0 0.0 0.0 0.0 1.0 +394 2.5 57.0 39.0 0.0 0.0 0.0 1.0 +395 2.5 57.0 42.0 0.0 0.0 0.0 1.0 +396 2.5 57.0 45.0 0.0 0.0 0.0 1.0 +397 2.5 57.0 48.0 0.0 0.0 0.0 1.0 +398 2.5 57.0 51.0 0.0 0.0 0.0 1.0 +399 2.5 57.0 54.0 0.0 0.0 0.0 1.0 +400 2.5 57.0 57.0 0.0 0.0 0.0 1.0 diff --git a/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion new file mode 100644 index 0000000000..aab6376e98 --- /dev/null +++ b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion @@ -0,0 +1,58 @@ +# bcc iron in a 3d periodic box + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +#lattice sc 3.0 +#region box block 0.0 20.0 0.0 20.0 0.0 1.0 +#create_box 1 box +#create_atoms 1 box + +read_data initial.skyrmion + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +#set group all spin 2.2 -1.0 0.0 0.0 + +pair_style hybrid/overlay spin/exchange 3.1 spin/dmi 3.1 +pair_coeff * * spin/exchange exchange 3.1 0.01593 0.06626915552 1.211 +pair_coeff * * spin/dmi dmi 3.1 0.12e-03 0.0 0.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 5e-05 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all neb/spin 1.0 +#fix 4 all nve/spin lattice no + +timestep 0.0001 +#run 0 + +compute out_mag all spin +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] + +thermo 100 +thermo_style custom step time v_magx v_magz v_magnorm etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +variable u universe 1 2 3 4 +#dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] +dump 1 all custom 1 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +min_style spin +min_modify alpha_damp 1.0 discret_factor 10.0 +neb/spin 1.0e-16 1.0e-16 1000 1000 10 final final.skyrmion +#neb/spin 1.0e-16 1.0e-16 10 10 10 final final.skyrmion diff --git a/examples/SPIN/gneb/skyrmion/initial.skyrmion b/examples/SPIN/gneb/skyrmion/initial.skyrmion new file mode 100644 index 0000000000..f940aee182 --- /dev/null +++ b/examples/SPIN/gneb/skyrmion/initial.skyrmion @@ -0,0 +1,818 @@ +LAMMPS data file via write_data, version 28 Feb 2019, timestep = 6 + +400 atoms +1 atom types + +0.0000000000000000e+00 6.0000000000000000e+01 xlo xhi +0.0000000000000000e+00 6.0000000000000000e+01 ylo yhi +0.0000000000000000e+00 3.0000000000000000e+00 zlo zhi + +Masses + +1 55.845 + +Atoms # spin + +1 1 2.5000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -3.9693242391277868e-03 -3.9693242391277929e-03 9.9998424434096433e-01 0 0 0 +21 1 2.5000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.1868011343002482e-02 -4.8145058779812530e-03 9.9991798205648519e-01 0 0 0 +41 1 2.5000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.9561861499557517e-02 -6.5828744882500201e-03 9.9978697697966845e-01 0 0 0 +61 1 2.5000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.6644762521588476e-02 -9.3989438861432541e-03 9.9960077855311480e-01 0 0 0 +81 1 2.5000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2364838887478299e-02 -1.3362272507461704e-02 9.9938679542868891e-01 0 0 0 +101 1 2.5000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.5634992015801843e-02 -1.8429703183501425e-02 9.9919492261750509e-01 0 0 0 +121 1 2.5000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.5235119566844247e-02 -2.4270277420221115e-02 9.9908430073895971e-01 0 0 0 +141 1 2.5000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.0237916900163156e-02 -3.0163850736159143e-02 9.9908748890690546e-01 0 0 0 +161 1 2.5000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -2.0551704657275890e-02 -3.5058787503171429e-02 9.9917391321755789e-01 0 0 0 +181 1 2.5000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -7.2971667669136115e-03 -3.7860607272964066e-02 9.9925638640646097e-01 0 0 0 +201 1 2.5000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 7.2971667669136028e-03 -3.7860607272964066e-02 9.9925638640646086e-01 0 0 0 +221 1 2.5000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 2.0551704657275901e-02 -3.5058787503171443e-02 9.9917391321755789e-01 0 0 0 +241 1 2.5000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.0237916900163156e-02 -3.0163850736159153e-02 9.9908748890690535e-01 0 0 0 +261 1 2.5000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.5235119566844234e-02 -2.4270277420221108e-02 9.9908430073895960e-01 0 0 0 +281 1 2.5000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.5634992015801829e-02 -1.8429703183501414e-02 9.9919492261750498e-01 0 0 0 +301 1 2.5000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.2364838887478306e-02 -1.3362272507461704e-02 9.9938679542868891e-01 0 0 0 +321 1 2.5000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 2.6644762521588494e-02 -9.3989438861432611e-03 9.9960077855311491e-01 0 0 0 +341 1 2.5000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 1.9561861499557517e-02 -6.5828744882500201e-03 9.9978697697966856e-01 0 0 0 +361 1 2.5000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 1.1868011343002482e-02 -4.8145058779812547e-03 9.9991798205648508e-01 0 0 0 +381 1 2.5000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.9693242391277929e-03 -3.9693242391277937e-03 9.9998424434096445e-01 0 0 0 +2 1 2.5000000000000000e+00 0.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -4.8145058779812512e-03 -1.1868011343002475e-02 9.9991798205648519e-01 0 0 0 +22 1 2.5000000000000000e+00 3.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -1.4489047587394138e-02 -1.4489047587394138e-02 9.9979004545955574e-01 0 0 0 +42 1 2.5000000000000000e+00 6.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -2.4184841732588187e-02 -2.0009637034407928e-02 9.9950723251816487e-01 0 0 0 +62 1 2.5000000000000000e+00 9.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -3.3534698701154796e-02 -2.8894018478272422e-02 9.9901979944303421e-01 0 0 0 +82 1 2.5000000000000000e+00 1.2000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.1631298256624205e-02 -4.1569375222726884e-02 9.9826791095830603e-01 0 0 0 +102 1 2.5000000000000000e+00 1.5000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.6947676140268457e-02 -5.8031121465001792e-02 9.9721026100143129e-01 0 0 0 +122 1 2.5000000000000000e+00 1.8000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.7535409319668050e-02 -7.7312985281705895e-02 9.9587302763336383e-01 0 0 0 +142 1 2.5000000000000000e+00 2.1000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.1653952417990837e-02 -9.7059251840902777e-02 9.9440658177630958e-01 0 0 0 +162 1 2.5000000000000000e+00 2.4000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -2.8752729368399305e-02 -1.1365104497068100e-01 9.9310458690459180e-01 0 0 0 +182 1 2.5000000000000000e+00 2.7000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -1.0293413501576094e-02 -1.2321728304286263e-01 9.9232633079951105e-01 0 0 0 +202 1 2.5000000000000000e+00 3.0000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 1.0293413501576086e-02 -1.2321728304286261e-01 9.9232633079951116e-01 0 0 0 +222 1 2.5000000000000000e+00 3.3000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 2.8752729368399291e-02 -1.1365104497068100e-01 9.9310458690459180e-01 0 0 0 +242 1 2.5000000000000000e+00 3.6000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.1653952417990824e-02 -9.7059251840902777e-02 9.9440658177630958e-01 0 0 0 +262 1 2.5000000000000000e+00 3.9000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.7535409319668057e-02 -7.7312985281705895e-02 9.9587302763336383e-01 0 0 0 +282 1 2.5000000000000000e+00 4.2000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.6947676140268443e-02 -5.8031121465001792e-02 9.9721026100143140e-01 0 0 0 +302 1 2.5000000000000000e+00 4.5000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.1631298256624191e-02 -4.1569375222726877e-02 9.9826791095830592e-01 0 0 0 +322 1 2.5000000000000000e+00 4.8000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 3.3534698701154809e-02 -2.8894018478272433e-02 9.9901979944303410e-01 0 0 0 +342 1 2.5000000000000000e+00 5.1000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 2.4184841732588204e-02 -2.0009637034407945e-02 9.9950723251816487e-01 0 0 0 +362 1 2.5000000000000000e+00 5.4000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 1.4489047587394149e-02 -1.4489047587394138e-02 9.9979004545955585e-01 0 0 0 +382 1 2.5000000000000000e+00 5.7000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.8145058779812547e-03 -1.1868011343002482e-02 9.9991798205648519e-01 0 0 0 +3 1 2.5000000000000000e+00 0.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -6.5828744882500158e-03 -1.9561861499557527e-02 9.9978697697966856e-01 0 0 0 +23 1 2.5000000000000000e+00 3.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -2.0009637034407932e-02 -2.4184841732588200e-02 9.9950723251816498e-01 0 0 0 +43 1 2.5000000000000000e+00 6.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -3.4047077037887570e-02 -3.4047077037887577e-02 9.9884012388887977e-01 0 0 0 +63 1 2.5000000000000000e+00 9.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -4.8498220596720307e-02 -5.0241530269051260e-02 9.9755887607457838e-01 0 0 0 +83 1 2.5000000000000000e+00 1.2000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -6.2196104012276265e-02 -7.3954811425103587e-02 9.9532021506285684e-01 0 0 0 +103 1 2.5000000000000000e+00 1.5000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -7.2649992877525826e-02 -1.0567933713226435e-01 9.9174283775491956e-01 0 0 0 +123 1 2.5000000000000000e+00 1.8000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -7.6126593015943808e-02 -1.4398087111736477e-01 9.8664798717073865e-01 0 0 0 +143 1 2.5000000000000000e+00 2.1000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -6.8709104650143085e-02 -1.8428174194944069e-01 9.8046891767268973e-01 0 0 0 +163 1 2.5000000000000000e+00 2.4000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -4.8457456104349643e-02 -2.1884669159068457e-01 9.7455528346405618e-01 0 0 0 +183 1 2.5000000000000000e+00 2.7000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -1.7543173966404597e-02 -2.3902270727461428e-01 9.7085548999544657e-01 0 0 0 +203 1 2.5000000000000000e+00 3.0000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 1.7543173966404587e-02 -2.3902270727461422e-01 9.7085548999544646e-01 0 0 0 +223 1 2.5000000000000000e+00 3.3000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 4.8457456104349608e-02 -2.1884669159068454e-01 9.7455528346405618e-01 0 0 0 +243 1 2.5000000000000000e+00 3.6000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 6.8709104650143044e-02 -1.8428174194944069e-01 9.8046891767268962e-01 0 0 0 +263 1 2.5000000000000000e+00 3.9000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 7.6126593015943766e-02 -1.4398087111736474e-01 9.8664798717073865e-01 0 0 0 +283 1 2.5000000000000000e+00 4.2000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 7.2649992877525826e-02 -1.0567933713226434e-01 9.9174283775491956e-01 0 0 0 +303 1 2.5000000000000000e+00 4.5000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 6.2196104012276258e-02 -7.3954811425103573e-02 9.9532021506285673e-01 0 0 0 +323 1 2.5000000000000000e+00 4.8000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 4.8498220596720307e-02 -5.0241530269051260e-02 9.9755887607457838e-01 0 0 0 +343 1 2.5000000000000000e+00 5.1000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 3.4047077037887577e-02 -3.4047077037887577e-02 9.9884012388887966e-01 0 0 0 +363 1 2.5000000000000000e+00 5.4000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 2.0009637034407942e-02 -2.4184841732588211e-02 9.9950723251816498e-01 0 0 0 +383 1 2.5000000000000000e+00 5.7000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 6.5828744882500201e-03 -1.9561861499557531e-02 9.9978697697966856e-01 0 0 0 +4 1 2.5000000000000000e+00 0.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -9.3989438861432524e-03 -2.6644762521588497e-02 9.9960077855311480e-01 0 0 0 +24 1 2.5000000000000000e+00 3.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -2.8894018478272426e-02 -3.3534698701154803e-02 9.9901979944303410e-01 0 0 0 +44 1 2.5000000000000000e+00 6.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -5.0241530269051232e-02 -4.8498220596720286e-02 9.9755887607457827e-01 0 0 0 +64 1 2.5000000000000000e+00 9.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -7.3771080474423129e-02 -7.3771080474423115e-02 9.9454293792237669e-01 0 0 0 +84 1 2.5000000000000000e+00 1.2000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -9.8127311868331568e-02 -1.1214098437153223e-01 9.8883539089662387e-01 0 0 0 +104 1 2.5000000000000000e+00 1.5000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -1.1922421797550638e-01 -1.6561310406555055e-01 9.7895755046370747e-01 0 0 0 +124 1 2.5000000000000000e+00 1.8000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -1.2975986317850730e-01 -2.3284022614534144e-01 9.6381938504912923e-01 0 0 0 +144 1 2.5000000000000000e+00 2.1000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -1.2090775615411226e-01 -3.0602867088565672e-01 9.4431338394504205e-01 0 0 0 +164 1 2.5000000000000000e+00 2.4000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -8.7191355151399766e-02 -3.7026717261459724e-01 9.2482424734154478e-01 0 0 0 +184 1 2.5000000000000000e+00 2.7000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -3.1922103301157183e-02 -4.0821375936870385e-01 9.1232806927272614e-01 0 0 0 +204 1 2.5000000000000000e+00 3.0000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 3.1922103301157155e-02 -4.0821375936870385e-01 9.1232806927272625e-01 0 0 0 +224 1 2.5000000000000000e+00 3.3000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 8.7191355151399724e-02 -3.7026717261459718e-01 9.2482424734154478e-01 0 0 0 +244 1 2.5000000000000000e+00 3.6000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 1.2090775615411219e-01 -3.0602867088565661e-01 9.4431338394504194e-01 0 0 0 +264 1 2.5000000000000000e+00 3.9000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 1.2975986317850724e-01 -2.3284022614534142e-01 9.6381938504912912e-01 0 0 0 +284 1 2.5000000000000000e+00 4.2000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 1.1922421797550635e-01 -1.6561310406555052e-01 9.7895755046370747e-01 0 0 0 +304 1 2.5000000000000000e+00 4.5000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 9.8127311868331568e-02 -1.1214098437153228e-01 9.8883539089662398e-01 0 0 0 +324 1 2.5000000000000000e+00 4.8000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 7.3771080474423129e-02 -7.3771080474423142e-02 9.9454293792237669e-01 0 0 0 +344 1 2.5000000000000000e+00 5.1000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 5.0241530269051253e-02 -4.8498220596720314e-02 9.9755887607457827e-01 0 0 0 +364 1 2.5000000000000000e+00 5.4000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 2.8894018478272443e-02 -3.3534698701154816e-02 9.9901979944303410e-01 0 0 0 +384 1 2.5000000000000000e+00 5.7000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 9.3989438861432611e-03 -2.6644762521588494e-02 9.9960077855311480e-01 0 0 0 +5 1 2.5000000000000000e+00 0.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -1.3362272507461699e-02 -3.2364838887478299e-02 9.9938679542868880e-01 0 0 0 +25 1 2.5000000000000000e+00 3.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -4.1569375222726863e-02 -4.1631298256624198e-02 9.9826791095830603e-01 0 0 0 +45 1 2.5000000000000000e+00 6.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -7.3954811425103559e-02 -6.2196104012276245e-02 9.9532021506285673e-01 0 0 0 +65 1 2.5000000000000000e+00 9.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -1.1214098437153225e-01 -9.8127311868331554e-02 9.8883539089662398e-01 0 0 0 +85 1 2.5000000000000000e+00 1.2000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -1.5508313718777630e-01 -1.5508313718777628e-01 9.7565282817198595e-01 0 0 0 +105 1 2.5000000000000000e+00 1.5000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -1.9646003525323200e-01 -2.3830565311068275e-01 9.5111191257590177e-01 0 0 0 +125 1 2.5000000000000000e+00 1.8000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -2.2234110900479689e-01 -3.4758786972735528e-01 9.1090455266450188e-01 0 0 0 +145 1 2.5000000000000000e+00 2.1000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -2.1357380845070773e-01 -4.7013886220911955e-01 8.5636188529416402e-01 0 0 0 +165 1 2.5000000000000000e+00 2.4000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -1.5692234237038313e-01 -5.7886257432716870e-01 8.0018341554190886e-01 0 0 0 +185 1 2.5000000000000000e+00 2.7000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -5.7920936211537863e-02 -6.4295931380698856e-01 7.6370706814669809e-01 0 0 0 +205 1 2.5000000000000000e+00 3.0000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 5.7920936211537793e-02 -6.4295931380698856e-01 7.6370706814669809e-01 0 0 0 +225 1 2.5000000000000000e+00 3.3000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.5692234237038311e-01 -5.7886257432716881e-01 8.0018341554190908e-01 0 0 0 +245 1 2.5000000000000000e+00 3.6000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 2.1357380845070767e-01 -4.7013886220911949e-01 8.5636188529416413e-01 0 0 0 +265 1 2.5000000000000000e+00 3.9000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 2.2234110900479689e-01 -3.4758786972735528e-01 9.1090455266450188e-01 0 0 0 +285 1 2.5000000000000000e+00 4.2000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.9646003525323205e-01 -2.3830565311068283e-01 9.5111191257590177e-01 0 0 0 +305 1 2.5000000000000000e+00 4.5000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.5508313718777633e-01 -1.5508313718777636e-01 9.7565282817198595e-01 0 0 0 +325 1 2.5000000000000000e+00 4.8000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.1214098437153229e-01 -9.8127311868331610e-02 9.8883539089662398e-01 0 0 0 +345 1 2.5000000000000000e+00 5.1000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 7.3954811425103614e-02 -6.2196104012276265e-02 9.9532021506285684e-01 0 0 0 +365 1 2.5000000000000000e+00 5.4000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 4.1569375222726898e-02 -4.1631298256624198e-02 9.9826791095830603e-01 0 0 0 +385 1 2.5000000000000000e+00 5.7000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.3362272507461706e-02 -3.2364838887478299e-02 9.9938679542868891e-01 0 0 0 +6 1 2.5000000000000000e+00 0.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -1.8429703183501404e-02 -3.5634992015801836e-02 9.9919492261750509e-01 0 0 0 +26 1 2.5000000000000000e+00 3.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -5.8031121465001771e-02 -4.6947676140268457e-02 9.9721026100143140e-01 0 0 0 +46 1 2.5000000000000000e+00 6.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -1.0567933713226434e-01 -7.2649992877525812e-02 9.9174283775491956e-01 0 0 0 +66 1 2.5000000000000000e+00 9.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -1.6561310406555055e-01 -1.1922421797550634e-01 9.7895755046370747e-01 0 0 0 +86 1 2.5000000000000000e+00 1.2000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -2.3830565311068275e-01 -1.9646003525323197e-01 9.5111191257590177e-01 0 0 0 +106 1 2.5000000000000000e+00 1.5000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -3.1460569929723275e-01 -3.1460569929723275e-01 8.9557049300398384e-01 0 0 0 +126 1 2.5000000000000000e+00 1.8000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -3.6852592591640337e-01 -4.7476254409897906e-01 7.9924287212844281e-01 0 0 0 +146 1 2.5000000000000000e+00 2.1000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -3.6081689881382256e-01 -6.5421949001862334e-01 6.6468641058031896e-01 0 0 0 +166 1 2.5000000000000000e+00 2.4000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -2.6598547494087149e-01 -8.0744368404029232e-01 5.2657993146712301e-01 0 0 0 +186 1 2.5000000000000000e+00 2.7000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -9.7873033584060118e-02 -8.9330169771966939e-01 4.3867179775797049e-01 0 0 0 +206 1 2.5000000000000000e+00 3.0000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 9.7873033584060007e-02 -8.9330169771966939e-01 4.3867179775797044e-01 0 0 0 +226 1 2.5000000000000000e+00 3.3000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 2.6598547494087138e-01 -8.0744368404029232e-01 5.2657993146712301e-01 0 0 0 +246 1 2.5000000000000000e+00 3.6000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 3.6081689881382251e-01 -6.5421949001862334e-01 6.6468641058031896e-01 0 0 0 +266 1 2.5000000000000000e+00 3.9000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 3.6852592591640337e-01 -4.7476254409897911e-01 7.9924287212844303e-01 0 0 0 +286 1 2.5000000000000000e+00 4.2000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 3.1460569929723281e-01 -3.1460569929723281e-01 8.9557049300398361e-01 0 0 0 +306 1 2.5000000000000000e+00 4.5000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 2.3830565311068277e-01 -1.9646003525323205e-01 9.5111191257590177e-01 0 0 0 +326 1 2.5000000000000000e+00 4.8000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 1.6561310406555055e-01 -1.1922421797550636e-01 9.7895755046370736e-01 0 0 0 +346 1 2.5000000000000000e+00 5.1000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 1.0567933713226439e-01 -7.2649992877525854e-02 9.9174283775491956e-01 0 0 0 +366 1 2.5000000000000000e+00 5.4000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 5.8031121465001820e-02 -4.6947676140268485e-02 9.9721026100143140e-01 0 0 0 +386 1 2.5000000000000000e+00 5.7000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 1.8429703183501425e-02 -3.5634992015801836e-02 9.9919492261750498e-01 0 0 0 +7 1 2.5000000000000000e+00 0.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -2.4270277420221083e-02 -3.5235119566844234e-02 9.9908430073895960e-01 0 0 0 +27 1 2.5000000000000000e+00 3.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -7.7312985281705854e-02 -4.7535409319668043e-02 9.9587302763336372e-01 0 0 0 +47 1 2.5000000000000000e+00 6.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -1.4398087111736474e-01 -7.6126593015943766e-02 9.8664798717073854e-01 0 0 0 +67 1 2.5000000000000000e+00 9.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -2.3284022614534147e-01 -1.2975986317850727e-01 9.6381938504912923e-01 0 0 0 +87 1 2.5000000000000000e+00 1.2000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -3.4758786972735523e-01 -2.2234110900479681e-01 9.1090455266450177e-01 0 0 0 +107 1 2.5000000000000000e+00 1.5000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -4.7476254409897900e-01 -3.6852592591640326e-01 7.9924287212844292e-01 0 0 0 +127 1 2.5000000000000000e+00 1.8000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -5.6571145299922609e-01 -5.6571145299922598e-01 5.9995091790163058e-01 0 0 0 +147 1 2.5000000000000000e+00 2.1000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -5.4725458628470525e-01 -7.6968694425946660e-01 3.2877716713129740e-01 0 0 0 +167 1 2.5000000000000000e+00 2.4000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -3.9048923819288139e-01 -9.1777534868081290e-01 7.2156525757244322e-02 0 0 0 +187 1 2.5000000000000000e+00 2.7000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -1.3991724696158017e-01 -9.8714633419212083e-01 -7.7235217962726241e-02 0 0 0 +207 1 2.5000000000000000e+00 3.0000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 1.3991724696158006e-01 -9.8714633419212106e-01 -7.7235217962726241e-02 0 0 0 +227 1 2.5000000000000000e+00 3.3000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 3.9048923819288128e-01 -9.1777534868081279e-01 7.2156525757244322e-02 0 0 0 +247 1 2.5000000000000000e+00 3.6000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 5.4725458628470514e-01 -7.6968694425946649e-01 3.2877716713129734e-01 0 0 0 +267 1 2.5000000000000000e+00 3.9000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 5.6571145299922621e-01 -5.6571145299922609e-01 5.9995091790163035e-01 0 0 0 +287 1 2.5000000000000000e+00 4.2000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 4.7476254409897917e-01 -3.6852592591640337e-01 7.9924287212844281e-01 0 0 0 +307 1 2.5000000000000000e+00 4.5000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 3.4758786972735534e-01 -2.2234110900479692e-01 9.1090455266450188e-01 0 0 0 +327 1 2.5000000000000000e+00 4.8000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 2.3284022614534147e-01 -1.2975986317850732e-01 9.6381938504912912e-01 0 0 0 +347 1 2.5000000000000000e+00 5.1000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 1.4398087111736477e-01 -7.6126593015943808e-02 9.8664798717073854e-01 0 0 0 +367 1 2.5000000000000000e+00 5.4000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 7.7312985281705909e-02 -4.7535409319668064e-02 9.9587302763336372e-01 0 0 0 +387 1 2.5000000000000000e+00 5.7000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 2.4270277420221129e-02 -3.5235119566844247e-02 9.9908430073895971e-01 0 0 0 +8 1 2.5000000000000000e+00 0.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -3.0163850736159105e-02 -3.0237916900163149e-02 9.9908748890690535e-01 0 0 0 +28 1 2.5000000000000000e+00 3.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -9.7059251840902722e-02 -4.1653952417990810e-02 9.9440658177630958e-01 0 0 0 +48 1 2.5000000000000000e+00 6.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -1.8428174194944064e-01 -6.8709104650143071e-02 9.8046891767268973e-01 0 0 0 +68 1 2.5000000000000000e+00 9.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -3.0602867088565666e-01 -1.2090775615411221e-01 9.4431338394504205e-01 0 0 0 +88 1 2.5000000000000000e+00 1.2000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -4.7013886220911943e-01 -2.1357380845070767e-01 8.5636188529416413e-01 0 0 0 +108 1 2.5000000000000000e+00 1.5000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -6.5421949001862312e-01 -3.6081689881382245e-01 6.6468641058031908e-01 0 0 0 +128 1 2.5000000000000000e+00 1.8000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -7.6968694425946649e-01 -5.4725458628470514e-01 3.2877716713129745e-01 0 0 0 +148 1 2.5000000000000000e+00 2.1000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -7.0472416296125850e-01 -7.0472416296125850e-01 -8.2022608329090224e-02 0 0 0 +168 1 2.5000000000000000e+00 2.4000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -4.6907708232882805e-01 -7.8303583820847300e-01 -4.0843795968914098e-01 0 0 0 +188 1 2.5000000000000000e+00 2.7000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -1.6077801357100108e-01 -8.0506391360620255e-01 -5.7098382232881861e-01 0 0 0 +208 1 2.5000000000000000e+00 3.0000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 1.6077801357100094e-01 -8.0506391360620255e-01 -5.7098382232881872e-01 0 0 0 +228 1 2.5000000000000000e+00 3.3000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 4.6907708232882789e-01 -7.8303583820847278e-01 -4.0843795968914093e-01 0 0 0 +248 1 2.5000000000000000e+00 3.6000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 7.0472416296125839e-01 -7.0472416296125850e-01 -8.2022608329090321e-02 0 0 0 +268 1 2.5000000000000000e+00 3.9000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 7.6968694425946660e-01 -5.4725458628470514e-01 3.2877716713129729e-01 0 0 0 +288 1 2.5000000000000000e+00 4.2000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 6.5421949001862334e-01 -3.6081689881382256e-01 6.6468641058031885e-01 0 0 0 +308 1 2.5000000000000000e+00 4.5000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 4.7013886220911955e-01 -2.1357380845070770e-01 8.5636188529416402e-01 0 0 0 +328 1 2.5000000000000000e+00 4.8000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 3.0602867088565666e-01 -1.2090775615411227e-01 9.4431338394504194e-01 0 0 0 +348 1 2.5000000000000000e+00 5.1000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 1.8428174194944072e-01 -6.8709104650143099e-02 9.8046891767268962e-01 0 0 0 +368 1 2.5000000000000000e+00 5.4000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 9.7059251840902791e-02 -4.1653952417990824e-02 9.9440658177630958e-01 0 0 0 +388 1 2.5000000000000000e+00 5.7000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 3.0163850736159153e-02 -3.0237916900163146e-02 9.9908748890690535e-01 0 0 0 +9 1 2.5000000000000000e+00 0.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -3.5058787503171387e-02 -2.0551704657275887e-02 9.9917391321755789e-01 0 0 0 +29 1 2.5000000000000000e+00 3.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -1.1365104497068090e-01 -2.8752729368399281e-02 9.9310458690459180e-01 0 0 0 +49 1 2.5000000000000000e+00 6.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -2.1884669159068454e-01 -4.8457456104349608e-02 9.7455528346405629e-01 0 0 0 +69 1 2.5000000000000000e+00 9.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -3.7026717261459713e-01 -8.7191355151399724e-02 9.2482424734154478e-01 0 0 0 +89 1 2.5000000000000000e+00 1.2000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -5.7886257432716870e-01 -1.5692234237038305e-01 8.0018341554190908e-01 0 0 0 +109 1 2.5000000000000000e+00 1.5000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -8.0744368404029221e-01 -2.6598547494087144e-01 5.2657993146712301e-01 0 0 0 +129 1 2.5000000000000000e+00 1.8000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -9.1777534868081279e-01 -3.9048923819288128e-01 7.2156525757244433e-02 0 0 0 +149 1 2.5000000000000000e+00 2.1000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -7.8303583820847289e-01 -4.6907708232882789e-01 -4.0843795968914071e-01 0 0 0 +169 1 2.5000000000000000e+00 2.4000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -4.8741359543182999e-01 -4.8741359543182988e-01 -7.2446944309365668e-01 0 0 0 +189 1 2.5000000000000000e+00 2.7000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -1.6115060626850930e-01 -4.8338466373268979e-01 -8.6044741208706443e-01 0 0 0 +209 1 2.5000000000000000e+00 3.0000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 1.6115060626850913e-01 -4.8338466373268968e-01 -8.6044741208706432e-01 0 0 0 +229 1 2.5000000000000000e+00 3.3000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 4.8741359543182988e-01 -4.8741359543182988e-01 -7.2446944309365668e-01 0 0 0 +249 1 2.5000000000000000e+00 3.6000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 7.8303583820847289e-01 -4.6907708232882789e-01 -4.0843795968914098e-01 0 0 0 +269 1 2.5000000000000000e+00 3.9000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 9.1777534868081290e-01 -3.9048923819288139e-01 7.2156525757244280e-02 0 0 0 +289 1 2.5000000000000000e+00 4.2000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 8.0744368404029232e-01 -2.6598547494087149e-01 5.2657993146712290e-01 0 0 0 +309 1 2.5000000000000000e+00 4.5000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 5.7886257432716870e-01 -1.5692234237038313e-01 8.0018341554190908e-01 0 0 0 +329 1 2.5000000000000000e+00 4.8000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 3.7026717261459713e-01 -8.7191355151399724e-02 9.2482424734154478e-01 0 0 0 +349 1 2.5000000000000000e+00 5.1000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 2.1884669159068457e-01 -4.8457456104349622e-02 9.7455528346405618e-01 0 0 0 +369 1 2.5000000000000000e+00 5.4000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 1.1365104497068097e-01 -2.8752729368399291e-02 9.9310458690459180e-01 0 0 0 +389 1 2.5000000000000000e+00 5.7000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 3.5058787503171436e-02 -2.0551704657275904e-02 9.9917391321755789e-01 0 0 0 +10 1 2.5000000000000000e+00 0.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -3.7860607272964017e-02 -7.2971667669136089e-03 9.9925638640646097e-01 0 0 0 +30 1 2.5000000000000000e+00 3.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -1.2321728304286257e-01 -1.0293413501576077e-02 9.9232633079951116e-01 0 0 0 +50 1 2.5000000000000000e+00 6.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -2.3902270727461422e-01 -1.7543173966404584e-02 9.7085548999544669e-01 0 0 0 +70 1 2.5000000000000000e+00 9.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -4.0821375936870385e-01 -3.1922103301157141e-02 9.1232806927272625e-01 0 0 0 +90 1 2.5000000000000000e+00 1.2000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -6.4295931380698856e-01 -5.7920936211537787e-02 7.6370706814669798e-01 0 0 0 +110 1 2.5000000000000000e+00 1.5000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -8.9330169771966939e-01 -9.7873033584060035e-02 4.3867179775797044e-01 0 0 0 +130 1 2.5000000000000000e+00 1.8000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -9.8714633419212094e-01 -1.3991724696158003e-01 -7.7235217962726088e-02 0 0 0 +150 1 2.5000000000000000e+00 2.1000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -8.0506391360620255e-01 -1.6077801357100097e-01 -5.7098382232881850e-01 0 0 0 +170 1 2.5000000000000000e+00 2.4000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -4.8338466373268996e-01 -1.6115060626850919e-01 -8.6044741208706443e-01 0 0 0 +190 1 2.5000000000000000e+00 2.7000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -1.5704482464087621e-01 -1.5704482464087605e-01 -9.7502504896388853e-01 0 0 0 +210 1 2.5000000000000000e+00 3.0000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 1.5704482464087599e-01 -1.5704482464087605e-01 -9.7502504896388842e-01 0 0 0 +230 1 2.5000000000000000e+00 3.3000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 4.8338466373268973e-01 -1.6115060626850916e-01 -8.6044741208706443e-01 0 0 0 +250 1 2.5000000000000000e+00 3.6000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 8.0506391360620255e-01 -1.6077801357100097e-01 -5.7098382232881861e-01 0 0 0 +270 1 2.5000000000000000e+00 3.9000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 9.8714633419212106e-01 -1.3991724696158012e-01 -7.7235217962726269e-02 0 0 0 +290 1 2.5000000000000000e+00 4.2000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 8.9330169771966950e-01 -9.7873033584060062e-02 4.3867179775797038e-01 0 0 0 +310 1 2.5000000000000000e+00 4.5000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 6.4295931380698856e-01 -5.7920936211537821e-02 7.6370706814669798e-01 0 0 0 +330 1 2.5000000000000000e+00 4.8000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 4.0821375936870391e-01 -3.1922103301157183e-02 9.1232806927272614e-01 0 0 0 +350 1 2.5000000000000000e+00 5.1000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 2.3902270727461428e-01 -1.7543173966404597e-02 9.7085548999544657e-01 0 0 0 +370 1 2.5000000000000000e+00 5.4000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 1.2321728304286259e-01 -1.0293413501576086e-02 9.9232633079951105e-01 0 0 0 +390 1 2.5000000000000000e+00 5.7000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 3.7860607272964045e-02 -7.2971667669136028e-03 9.9925638640646086e-01 0 0 0 +11 1 2.5000000000000000e+00 0.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -3.7860607272964017e-02 7.2971667669136028e-03 9.9925638640646086e-01 0 0 0 +31 1 2.5000000000000000e+00 3.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -1.2321728304286254e-01 1.0293413501576089e-02 9.9232633079951105e-01 0 0 0 +51 1 2.5000000000000000e+00 6.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -2.3902270727461422e-01 1.7543173966404594e-02 9.7085548999544657e-01 0 0 0 +71 1 2.5000000000000000e+00 9.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -4.0821375936870374e-01 3.1922103301157183e-02 9.1232806927272625e-01 0 0 0 +91 1 2.5000000000000000e+00 1.2000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -6.4295931380698856e-01 5.7920936211537842e-02 7.6370706814669798e-01 0 0 0 +111 1 2.5000000000000000e+00 1.5000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -8.9330169771966950e-01 9.7873033584060118e-02 4.3867179775797055e-01 0 0 0 +131 1 2.5000000000000000e+00 1.8000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -9.8714633419212083e-01 1.3991724696158012e-01 -7.7235217962726102e-02 0 0 0 +151 1 2.5000000000000000e+00 2.1000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -8.0506391360620255e-01 1.6077801357100108e-01 -5.7098382232881850e-01 0 0 0 +171 1 2.5000000000000000e+00 2.4000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -4.8338466373268996e-01 1.6115060626850930e-01 -8.6044741208706443e-01 0 0 0 +191 1 2.5000000000000000e+00 2.7000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -1.5704482464087621e-01 1.5704482464087616e-01 -9.7502504896388853e-01 0 0 0 +211 1 2.5000000000000000e+00 3.0000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 1.5704482464087602e-01 1.5704482464087616e-01 -9.7502504896388842e-01 0 0 0 +231 1 2.5000000000000000e+00 3.3000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 4.8338466373268985e-01 1.6115060626850930e-01 -8.6044741208706443e-01 0 0 0 +251 1 2.5000000000000000e+00 3.6000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 8.0506391360620266e-01 1.6077801357100105e-01 -5.7098382232881861e-01 0 0 0 +271 1 2.5000000000000000e+00 3.9000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 9.8714633419212094e-01 1.3991724696158014e-01 -7.7235217962726227e-02 0 0 0 +291 1 2.5000000000000000e+00 4.2000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 8.9330169771966950e-01 9.7873033584060118e-02 4.3867179775797049e-01 0 0 0 +311 1 2.5000000000000000e+00 4.5000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 6.4295931380698867e-01 5.7920936211537849e-02 7.6370706814669809e-01 0 0 0 +331 1 2.5000000000000000e+00 4.8000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 4.0821375936870391e-01 3.1922103301157183e-02 9.1232806927272614e-01 0 0 0 +351 1 2.5000000000000000e+00 5.1000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 2.3902270727461428e-01 1.7543173966404590e-02 9.7085548999544657e-01 0 0 0 +371 1 2.5000000000000000e+00 5.4000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 1.2321728304286261e-01 1.0293413501576086e-02 9.9232633079951116e-01 0 0 0 +391 1 2.5000000000000000e+00 5.7000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 3.7860607272964052e-02 7.2971667669136046e-03 9.9925638640646097e-01 0 0 0 +12 1 2.5000000000000000e+00 0.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -3.5058787503171387e-02 2.0551704657275897e-02 9.9917391321755789e-01 0 0 0 +32 1 2.5000000000000000e+00 3.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -1.1365104497068096e-01 2.8752729368399288e-02 9.9310458690459191e-01 0 0 0 +52 1 2.5000000000000000e+00 6.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -2.1884669159068451e-01 4.8457456104349615e-02 9.7455528346405618e-01 0 0 0 +72 1 2.5000000000000000e+00 9.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -3.7026717261459707e-01 8.7191355151399710e-02 9.2482424734154478e-01 0 0 0 +92 1 2.5000000000000000e+00 1.2000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -5.7886257432716870e-01 1.5692234237038316e-01 8.0018341554190908e-01 0 0 0 +112 1 2.5000000000000000e+00 1.5000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -8.0744368404029210e-01 2.6598547494087149e-01 5.2657993146712301e-01 0 0 0 +132 1 2.5000000000000000e+00 1.8000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -9.1777534868081267e-01 3.9048923819288134e-01 7.2156525757244433e-02 0 0 0 +152 1 2.5000000000000000e+00 2.1000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -7.8303583820847311e-01 4.6907708232882811e-01 -4.0843795968914082e-01 0 0 0 +172 1 2.5000000000000000e+00 2.4000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -4.8741359543183005e-01 4.8741359543182999e-01 -7.2446944309365657e-01 0 0 0 +192 1 2.5000000000000000e+00 2.7000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -1.6115060626850930e-01 4.8338466373268979e-01 -8.6044741208706432e-01 0 0 0 +212 1 2.5000000000000000e+00 3.0000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 1.6115060626850916e-01 4.8338466373268979e-01 -8.6044741208706443e-01 0 0 0 +232 1 2.5000000000000000e+00 3.3000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 4.8741359543182988e-01 4.8741359543182999e-01 -7.2446944309365657e-01 0 0 0 +252 1 2.5000000000000000e+00 3.6000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 7.8303583820847278e-01 4.6907708232882794e-01 -4.0843795968914076e-01 0 0 0 +272 1 2.5000000000000000e+00 3.9000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 9.1777534868081279e-01 3.9048923819288139e-01 7.2156525757244377e-02 0 0 0 +292 1 2.5000000000000000e+00 4.2000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 8.0744368404029221e-01 2.6598547494087149e-01 5.2657993146712301e-01 0 0 0 +312 1 2.5000000000000000e+00 4.5000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 5.7886257432716870e-01 1.5692234237038316e-01 8.0018341554190908e-01 0 0 0 +332 1 2.5000000000000000e+00 4.8000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 3.7026717261459713e-01 8.7191355151399738e-02 9.2482424734154467e-01 0 0 0 +352 1 2.5000000000000000e+00 5.1000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 2.1884669159068457e-01 4.8457456104349622e-02 9.7455528346405618e-01 0 0 0 +372 1 2.5000000000000000e+00 5.4000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 1.1365104497068099e-01 2.8752729368399295e-02 9.9310458690459180e-01 0 0 0 +392 1 2.5000000000000000e+00 5.7000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 3.5058787503171422e-02 2.0551704657275897e-02 9.9917391321755777e-01 0 0 0 +13 1 2.5000000000000000e+00 0.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -3.0163850736159126e-02 3.0237916900163156e-02 9.9908748890690546e-01 0 0 0 +33 1 2.5000000000000000e+00 3.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -9.7059251840902735e-02 4.1653952417990817e-02 9.9440658177630958e-01 0 0 0 +53 1 2.5000000000000000e+00 6.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -1.8428174194944066e-01 6.8709104650143071e-02 9.8046891767268973e-01 0 0 0 +73 1 2.5000000000000000e+00 9.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -3.0602867088565661e-01 1.2090775615411221e-01 9.4431338394504194e-01 0 0 0 +93 1 2.5000000000000000e+00 1.2000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -4.7013886220911938e-01 2.1357380845070770e-01 8.5636188529416413e-01 0 0 0 +113 1 2.5000000000000000e+00 1.5000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -6.5421949001862323e-01 3.6081689881382251e-01 6.6468641058031896e-01 0 0 0 +133 1 2.5000000000000000e+00 1.8000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -7.6968694425946660e-01 5.4725458628470525e-01 3.2877716713129751e-01 0 0 0 +153 1 2.5000000000000000e+00 2.1000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -7.0472416296125850e-01 7.0472416296125850e-01 -8.2022608329090127e-02 0 0 0 +173 1 2.5000000000000000e+00 2.4000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -4.6907708232882805e-01 7.8303583820847300e-01 -4.0843795968914076e-01 0 0 0 +193 1 2.5000000000000000e+00 2.7000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -1.6077801357100108e-01 8.0506391360620244e-01 -5.7098382232881861e-01 0 0 0 +213 1 2.5000000000000000e+00 3.0000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 1.6077801357100091e-01 8.0506391360620277e-01 -5.7098382232881861e-01 0 0 0 +233 1 2.5000000000000000e+00 3.3000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 4.6907708232882794e-01 7.8303583820847300e-01 -4.0843795968914076e-01 0 0 0 +253 1 2.5000000000000000e+00 3.6000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 7.0472416296125850e-01 7.0472416296125850e-01 -8.2022608329090210e-02 0 0 0 +273 1 2.5000000000000000e+00 3.9000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 7.6968694425946649e-01 5.4725458628470525e-01 3.2877716713129740e-01 0 0 0 +293 1 2.5000000000000000e+00 4.2000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 6.5421949001862323e-01 3.6081689881382251e-01 6.6468641058031896e-01 0 0 0 +313 1 2.5000000000000000e+00 4.5000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 4.7013886220911949e-01 2.1357380845070775e-01 8.5636188529416413e-01 0 0 0 +333 1 2.5000000000000000e+00 4.8000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 3.0602867088565661e-01 1.2090775615411223e-01 9.4431338394504194e-01 0 0 0 +353 1 2.5000000000000000e+00 5.1000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 1.8428174194944069e-01 6.8709104650143099e-02 9.8046891767268973e-01 0 0 0 +373 1 2.5000000000000000e+00 5.4000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 9.7059251840902763e-02 4.1653952417990830e-02 9.9440658177630947e-01 0 0 0 +393 1 2.5000000000000000e+00 5.7000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 3.0163850736159133e-02 3.0237916900163159e-02 9.9908748890690535e-01 0 0 0 +14 1 2.5000000000000000e+00 0.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -2.4270277420221101e-02 3.5235119566844240e-02 9.9908430073895960e-01 0 0 0 +34 1 2.5000000000000000e+00 3.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -7.7312985281705854e-02 4.7535409319668036e-02 9.9587302763336372e-01 0 0 0 +54 1 2.5000000000000000e+00 6.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -1.4398087111736474e-01 7.6126593015943766e-02 9.8664798717073854e-01 0 0 0 +74 1 2.5000000000000000e+00 9.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -2.3284022614534142e-01 1.2975986317850727e-01 9.6381938504912923e-01 0 0 0 +94 1 2.5000000000000000e+00 1.2000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -3.4758786972735517e-01 2.2234110900479689e-01 9.1090455266450199e-01 0 0 0 +114 1 2.5000000000000000e+00 1.5000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -4.7476254409897917e-01 3.6852592591640326e-01 7.9924287212844314e-01 0 0 0 +134 1 2.5000000000000000e+00 1.8000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -5.6571145299922609e-01 5.6571145299922598e-01 5.9995091790163058e-01 0 0 0 +154 1 2.5000000000000000e+00 2.1000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -5.4725458628470514e-01 7.6968694425946649e-01 3.2877716713129751e-01 0 0 0 +174 1 2.5000000000000000e+00 2.4000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -3.9048923819288139e-01 9.1777534868081279e-01 7.2156525757244475e-02 0 0 0 +194 1 2.5000000000000000e+00 2.7000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -1.3991724696158014e-01 9.8714633419212094e-01 -7.7235217962726074e-02 0 0 0 +214 1 2.5000000000000000e+00 3.0000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 1.3991724696158006e-01 9.8714633419212106e-01 -7.7235217962726074e-02 0 0 0 +234 1 2.5000000000000000e+00 3.3000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 3.9048923819288128e-01 9.1777534868081290e-01 7.2156525757244516e-02 0 0 0 +254 1 2.5000000000000000e+00 3.6000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 5.4725458628470502e-01 7.6968694425946649e-01 3.2877716713129757e-01 0 0 0 +274 1 2.5000000000000000e+00 3.9000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 5.6571145299922598e-01 5.6571145299922598e-01 5.9995091790163058e-01 0 0 0 +294 1 2.5000000000000000e+00 4.2000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 4.7476254409897917e-01 3.6852592591640337e-01 7.9924287212844292e-01 0 0 0 +314 1 2.5000000000000000e+00 4.5000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 3.4758786972735523e-01 2.2234110900479689e-01 9.1090455266450188e-01 0 0 0 +334 1 2.5000000000000000e+00 4.8000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 2.3284022614534150e-01 1.2975986317850730e-01 9.6381938504912923e-01 0 0 0 +354 1 2.5000000000000000e+00 5.1000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 1.4398087111736474e-01 7.6126593015943780e-02 9.8664798717073843e-01 0 0 0 +374 1 2.5000000000000000e+00 5.4000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 7.7312985281705868e-02 4.7535409319668070e-02 9.9587302763336383e-01 0 0 0 +394 1 2.5000000000000000e+00 5.7000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 2.4270277420221108e-02 3.5235119566844240e-02 9.9908430073895971e-01 0 0 0 +15 1 2.5000000000000000e+00 0.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -1.8429703183501411e-02 3.5634992015801829e-02 9.9919492261750498e-01 0 0 0 +35 1 2.5000000000000000e+00 3.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -5.8031121465001799e-02 4.6947676140268450e-02 9.9721026100143129e-01 0 0 0 +55 1 2.5000000000000000e+00 6.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -1.0567933713226436e-01 7.2649992877525812e-02 9.9174283775491956e-01 0 0 0 +75 1 2.5000000000000000e+00 9.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -1.6561310406555052e-01 1.1922421797550635e-01 9.7895755046370747e-01 0 0 0 +95 1 2.5000000000000000e+00 1.2000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -2.3830565311068272e-01 1.9646003525323200e-01 9.5111191257590177e-01 0 0 0 +115 1 2.5000000000000000e+00 1.5000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -3.1460569929723275e-01 3.1460569929723275e-01 8.9557049300398384e-01 0 0 0 +135 1 2.5000000000000000e+00 1.8000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -3.6852592591640337e-01 4.7476254409897900e-01 7.9924287212844303e-01 0 0 0 +155 1 2.5000000000000000e+00 2.1000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -3.6081689881382245e-01 6.5421949001862312e-01 6.6468641058031908e-01 0 0 0 +175 1 2.5000000000000000e+00 2.4000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -2.6598547494087144e-01 8.0744368404029221e-01 5.2657993146712301e-01 0 0 0 +195 1 2.5000000000000000e+00 2.7000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -9.7873033584060104e-02 8.9330169771966939e-01 4.3867179775797061e-01 0 0 0 +215 1 2.5000000000000000e+00 3.0000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 9.7873033584060048e-02 8.9330169771966939e-01 4.3867179775797061e-01 0 0 0 +235 1 2.5000000000000000e+00 3.3000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 2.6598547494087144e-01 8.0744368404029221e-01 5.2657993146712312e-01 0 0 0 +255 1 2.5000000000000000e+00 3.6000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 3.6081689881382245e-01 6.5421949001862323e-01 6.6468641058031908e-01 0 0 0 +275 1 2.5000000000000000e+00 3.9000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 3.6852592591640332e-01 4.7476254409897917e-01 7.9924287212844303e-01 0 0 0 +295 1 2.5000000000000000e+00 4.2000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 3.1460569929723275e-01 3.1460569929723275e-01 8.9557049300398373e-01 0 0 0 +315 1 2.5000000000000000e+00 4.5000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 2.3830565311068272e-01 1.9646003525323200e-01 9.5111191257590177e-01 0 0 0 +335 1 2.5000000000000000e+00 4.8000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 1.6561310406555046e-01 1.1922421797550636e-01 9.7895755046370747e-01 0 0 0 +355 1 2.5000000000000000e+00 5.1000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 1.0567933713226434e-01 7.2649992877525826e-02 9.9174283775491967e-01 0 0 0 +375 1 2.5000000000000000e+00 5.4000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 5.8031121465001792e-02 4.6947676140268464e-02 9.9721026100143140e-01 0 0 0 +395 1 2.5000000000000000e+00 5.7000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 1.8429703183501421e-02 3.5634992015801836e-02 9.9919492261750509e-01 0 0 0 +16 1 2.5000000000000000e+00 0.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -1.3362272507461697e-02 3.2364838887478299e-02 9.9938679542868891e-01 0 0 0 +36 1 2.5000000000000000e+00 3.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -4.1569375222726877e-02 4.1631298256624177e-02 9.9826791095830592e-01 0 0 0 +56 1 2.5000000000000000e+00 6.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -7.3954811425103587e-02 6.2196104012276252e-02 9.9532021506285684e-01 0 0 0 +76 1 2.5000000000000000e+00 9.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -1.1214098437153222e-01 9.8127311868331527e-02 9.8883539089662387e-01 0 0 0 +96 1 2.5000000000000000e+00 1.2000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -1.5508313718777622e-01 1.5508313718777625e-01 9.7565282817198595e-01 0 0 0 +116 1 2.5000000000000000e+00 1.5000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -1.9646003525323200e-01 2.3830565311068266e-01 9.5111191257590189e-01 0 0 0 +136 1 2.5000000000000000e+00 1.8000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -2.2234110900479692e-01 3.4758786972735517e-01 9.1090455266450188e-01 0 0 0 +156 1 2.5000000000000000e+00 2.1000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -2.1357380845070770e-01 4.7013886220911938e-01 8.5636188529416413e-01 0 0 0 +176 1 2.5000000000000000e+00 2.4000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -1.5692234237038313e-01 5.7886257432716870e-01 8.0018341554190919e-01 0 0 0 +196 1 2.5000000000000000e+00 2.7000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -5.7920936211537842e-02 6.4295931380698867e-01 7.6370706814669809e-01 0 0 0 +216 1 2.5000000000000000e+00 3.0000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 5.7920936211537780e-02 6.4295931380698856e-01 7.6370706814669798e-01 0 0 0 +236 1 2.5000000000000000e+00 3.3000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.5692234237038313e-01 5.7886257432716870e-01 8.0018341554190919e-01 0 0 0 +256 1 2.5000000000000000e+00 3.6000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 2.1357380845070764e-01 4.7013886220911938e-01 8.5636188529416402e-01 0 0 0 +276 1 2.5000000000000000e+00 3.9000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 2.2234110900479681e-01 3.4758786972735523e-01 9.1090455266450177e-01 0 0 0 +296 1 2.5000000000000000e+00 4.2000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.9646003525323197e-01 2.3830565311068272e-01 9.5111191257590177e-01 0 0 0 +316 1 2.5000000000000000e+00 4.5000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.5508313718777625e-01 1.5508313718777628e-01 9.7565282817198595e-01 0 0 0 +336 1 2.5000000000000000e+00 4.8000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.1214098437153222e-01 9.8127311868331568e-02 9.8883539089662398e-01 0 0 0 +356 1 2.5000000000000000e+00 5.1000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 7.3954811425103573e-02 6.2196104012276258e-02 9.9532021506285684e-01 0 0 0 +376 1 2.5000000000000000e+00 5.4000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 4.1569375222726877e-02 4.1631298256624191e-02 9.9826791095830603e-01 0 0 0 +396 1 2.5000000000000000e+00 5.7000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.3362272507461703e-02 3.2364838887478306e-02 9.9938679542868891e-01 0 0 0 +17 1 2.5000000000000000e+00 0.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -9.3989438861432541e-03 2.6644762521588483e-02 9.9960077855311480e-01 0 0 0 +37 1 2.5000000000000000e+00 3.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -2.8894018478272422e-02 3.3534698701154803e-02 9.9901979944303410e-01 0 0 0 +57 1 2.5000000000000000e+00 6.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -5.0241530269051239e-02 4.8498220596720300e-02 9.9755887607457838e-01 0 0 0 +77 1 2.5000000000000000e+00 9.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -7.3771080474423129e-02 7.3771080474423115e-02 9.9454293792237680e-01 0 0 0 +97 1 2.5000000000000000e+00 1.2000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -9.8127311868331568e-02 1.1214098437153222e-01 9.8883539089662398e-01 0 0 0 +117 1 2.5000000000000000e+00 1.5000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -1.1922421797550634e-01 1.6561310406555049e-01 9.7895755046370736e-01 0 0 0 +137 1 2.5000000000000000e+00 1.8000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -1.2975986317850727e-01 2.3284022614534133e-01 9.6381938504912912e-01 0 0 0 +157 1 2.5000000000000000e+00 2.1000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -1.2090775615411221e-01 3.0602867088565655e-01 9.4431338394504194e-01 0 0 0 +177 1 2.5000000000000000e+00 2.4000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -8.7191355151399738e-02 3.7026717261459713e-01 9.2482424734154467e-01 0 0 0 +197 1 2.5000000000000000e+00 2.7000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -3.1922103301157183e-02 4.0821375936870380e-01 9.1232806927272625e-01 0 0 0 +217 1 2.5000000000000000e+00 3.0000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 3.1922103301157141e-02 4.0821375936870391e-01 9.1232806927272625e-01 0 0 0 +237 1 2.5000000000000000e+00 3.3000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 8.7191355151399710e-02 3.7026717261459707e-01 9.2482424734154489e-01 0 0 0 +257 1 2.5000000000000000e+00 3.6000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 1.2090775615411221e-01 3.0602867088565661e-01 9.4431338394504205e-01 0 0 0 +277 1 2.5000000000000000e+00 3.9000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 1.2975986317850727e-01 2.3284022614534139e-01 9.6381938504912912e-01 0 0 0 +297 1 2.5000000000000000e+00 4.2000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 1.1922421797550634e-01 1.6561310406555052e-01 9.7895755046370747e-01 0 0 0 +317 1 2.5000000000000000e+00 4.5000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 9.8127311868331568e-02 1.1214098437153222e-01 9.8883539089662398e-01 0 0 0 +337 1 2.5000000000000000e+00 4.8000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 7.3771080474423115e-02 7.3771080474423129e-02 9.9454293792237680e-01 0 0 0 +357 1 2.5000000000000000e+00 5.1000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 5.0241530269051225e-02 4.8498220596720300e-02 9.9755887607457838e-01 0 0 0 +377 1 2.5000000000000000e+00 5.4000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 2.8894018478272426e-02 3.3534698701154796e-02 9.9901979944303410e-01 0 0 0 +397 1 2.5000000000000000e+00 5.7000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 9.3989438861432593e-03 2.6644762521588490e-02 9.9960077855311480e-01 0 0 0 +18 1 2.5000000000000000e+00 0.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -6.5828744882500166e-03 1.9561861499557524e-02 9.9978697697966856e-01 0 0 0 +38 1 2.5000000000000000e+00 3.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -2.0009637034407939e-02 2.4184841732588204e-02 9.9950723251816498e-01 0 0 0 +58 1 2.5000000000000000e+00 6.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -3.4047077037887570e-02 3.4047077037887563e-02 9.9884012388887966e-01 0 0 0 +78 1 2.5000000000000000e+00 9.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -4.8498220596720300e-02 5.0241530269051239e-02 9.9755887607457827e-01 0 0 0 +98 1 2.5000000000000000e+00 1.2000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -6.2196104012276252e-02 7.3954811425103573e-02 9.9532021506285684e-01 0 0 0 +118 1 2.5000000000000000e+00 1.5000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -7.2649992877525812e-02 1.0567933713226434e-01 9.9174283775491956e-01 0 0 0 +138 1 2.5000000000000000e+00 1.8000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -7.6126593015943753e-02 1.4398087111736468e-01 9.8664798717073843e-01 0 0 0 +158 1 2.5000000000000000e+00 2.1000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -6.8709104650143085e-02 1.8428174194944066e-01 9.8046891767268962e-01 0 0 0 +178 1 2.5000000000000000e+00 2.4000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -4.8457456104349608e-02 2.1884669159068451e-01 9.7455528346405618e-01 0 0 0 +198 1 2.5000000000000000e+00 2.7000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -1.7543173966404604e-02 2.3902270727461422e-01 9.7085548999544669e-01 0 0 0 +218 1 2.5000000000000000e+00 3.0000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 1.7543173966404566e-02 2.3902270727461419e-01 9.7085548999544657e-01 0 0 0 +238 1 2.5000000000000000e+00 3.3000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 4.8457456104349608e-02 2.1884669159068451e-01 9.7455528346405618e-01 0 0 0 +258 1 2.5000000000000000e+00 3.6000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 6.8709104650143071e-02 1.8428174194944066e-01 9.8046891767268962e-01 0 0 0 +278 1 2.5000000000000000e+00 3.9000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 7.6126593015943766e-02 1.4398087111736474e-01 9.8664798717073843e-01 0 0 0 +298 1 2.5000000000000000e+00 4.2000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 7.2649992877525799e-02 1.0567933713226434e-01 9.9174283775491956e-01 0 0 0 +318 1 2.5000000000000000e+00 4.5000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 6.2196104012276245e-02 7.3954811425103587e-02 9.9532021506285684e-01 0 0 0 +338 1 2.5000000000000000e+00 4.8000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 4.8498220596720293e-02 5.0241530269051232e-02 9.9755887607457827e-01 0 0 0 +358 1 2.5000000000000000e+00 5.1000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 3.4047077037887570e-02 3.4047077037887570e-02 9.9884012388887977e-01 0 0 0 +378 1 2.5000000000000000e+00 5.4000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 2.0009637034407935e-02 2.4184841732588200e-02 9.9950723251816487e-01 0 0 0 +398 1 2.5000000000000000e+00 5.7000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 6.5828744882500193e-03 1.9561861499557524e-02 9.9978697697966856e-01 0 0 0 +19 1 2.5000000000000000e+00 0.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -4.8145058779812486e-03 1.1868011343002475e-02 9.9991798205648519e-01 0 0 0 +39 1 2.5000000000000000e+00 3.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -1.4489047587394143e-02 1.4489047587394136e-02 9.9979004545955585e-01 0 0 0 +59 1 2.5000000000000000e+00 6.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -2.4184841732588200e-02 2.0009637034407932e-02 9.9950723251816498e-01 0 0 0 +79 1 2.5000000000000000e+00 9.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -3.3534698701154803e-02 2.8894018478272433e-02 9.9901979944303421e-01 0 0 0 +99 1 2.5000000000000000e+00 1.2000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.1631298256624205e-02 4.1569375222726870e-02 9.9826791095830603e-01 0 0 0 +119 1 2.5000000000000000e+00 1.5000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.6947676140268450e-02 5.8031121465001771e-02 9.9721026100143129e-01 0 0 0 +139 1 2.5000000000000000e+00 1.8000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.7535409319668043e-02 7.7312985281705840e-02 9.9587302763336372e-01 0 0 0 +159 1 2.5000000000000000e+00 2.1000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.1653952417990810e-02 9.7059251840902694e-02 9.9440658177630958e-01 0 0 0 +179 1 2.5000000000000000e+00 2.4000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -2.8752729368399278e-02 1.1365104497068095e-01 9.9310458690459180e-01 0 0 0 +199 1 2.5000000000000000e+00 2.7000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -1.0293413501576094e-02 1.2321728304286254e-01 9.9232633079951105e-01 0 0 0 +219 1 2.5000000000000000e+00 3.0000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 1.0293413501576077e-02 1.2321728304286257e-01 9.9232633079951116e-01 0 0 0 +239 1 2.5000000000000000e+00 3.3000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 2.8752729368399284e-02 1.1365104497068095e-01 9.9310458690459180e-01 0 0 0 +259 1 2.5000000000000000e+00 3.6000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.1653952417990817e-02 9.7059251840902749e-02 9.9440658177630958e-01 0 0 0 +279 1 2.5000000000000000e+00 3.9000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.7535409319668036e-02 7.7312985281705868e-02 9.9587302763336383e-01 0 0 0 +299 1 2.5000000000000000e+00 4.2000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.6947676140268443e-02 5.8031121465001785e-02 9.9721026100143129e-01 0 0 0 +319 1 2.5000000000000000e+00 4.5000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.1631298256624191e-02 4.1569375222726877e-02 9.9826791095830603e-01 0 0 0 +339 1 2.5000000000000000e+00 4.8000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 3.3534698701154803e-02 2.8894018478272433e-02 9.9901979944303410e-01 0 0 0 +359 1 2.5000000000000000e+00 5.1000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 2.4184841732588204e-02 2.0009637034407932e-02 9.9950723251816498e-01 0 0 0 +379 1 2.5000000000000000e+00 5.4000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 1.4489047587394145e-02 1.4489047587394140e-02 9.9979004545955585e-01 0 0 0 +399 1 2.5000000000000000e+00 5.7000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.8145058779812486e-03 1.1868011343002480e-02 9.9991798205648519e-01 0 0 0 +20 1 2.5000000000000000e+00 0.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -3.9693242391277937e-03 3.9693242391277764e-03 9.9998424434096445e-01 0 0 0 +40 1 2.5000000000000000e+00 3.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -1.1868011343002482e-02 4.8145058779812460e-03 9.9991798205648519e-01 0 0 0 +60 1 2.5000000000000000e+00 6.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -1.9561861499557517e-02 6.5828744882500097e-03 9.9978697697966856e-01 0 0 0 +80 1 2.5000000000000000e+00 9.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -2.6644762521588487e-02 9.3989438861432437e-03 9.9960077855311491e-01 0 0 0 +100 1 2.5000000000000000e+00 1.2000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.2364838887478306e-02 1.3362272507461690e-02 9.9938679542868891e-01 0 0 0 +120 1 2.5000000000000000e+00 1.5000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.5634992015801822e-02 1.8429703183501404e-02 9.9919492261750509e-01 0 0 0 +140 1 2.5000000000000000e+00 1.8000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.5235119566844240e-02 2.4270277420221090e-02 9.9908430073895971e-01 0 0 0 +160 1 2.5000000000000000e+00 2.1000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.0237916900163146e-02 3.0163850736159105e-02 9.9908748890690546e-01 0 0 0 +180 1 2.5000000000000000e+00 2.4000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -2.0551704657275894e-02 3.5058787503171394e-02 9.9917391321755789e-01 0 0 0 +200 1 2.5000000000000000e+00 2.7000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -7.2971667669136028e-03 3.7860607272964010e-02 9.9925638640646086e-01 0 0 0 +220 1 2.5000000000000000e+00 3.0000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 7.2971667669136037e-03 3.7860607272964024e-02 9.9925638640646097e-01 0 0 0 +240 1 2.5000000000000000e+00 3.3000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 2.0551704657275890e-02 3.5058787503171394e-02 9.9917391321755777e-01 0 0 0 +260 1 2.5000000000000000e+00 3.6000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.0237916900163159e-02 3.0163850736159115e-02 9.9908748890690535e-01 0 0 0 +280 1 2.5000000000000000e+00 3.9000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.5235119566844234e-02 2.4270277420221094e-02 9.9908430073895960e-01 0 0 0 +300 1 2.5000000000000000e+00 4.2000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.5634992015801836e-02 1.8429703183501414e-02 9.9919492261750498e-01 0 0 0 +320 1 2.5000000000000000e+00 4.5000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.2364838887478299e-02 1.3362272507461701e-02 9.9938679542868891e-01 0 0 0 +340 1 2.5000000000000000e+00 4.8000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 2.6644762521588480e-02 9.3989438861432611e-03 9.9960077855311480e-01 0 0 0 +360 1 2.5000000000000000e+00 5.1000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 1.9561861499557527e-02 6.5828744882500097e-03 9.9978697697966845e-01 0 0 0 +380 1 2.5000000000000000e+00 5.4000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 1.1868011343002492e-02 4.8145058779812391e-03 9.9991798205648519e-01 0 0 0 +400 1 2.5000000000000000e+00 5.7000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.9693242391277937e-03 3.9693242391277851e-03 9.9998424434096445e-01 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +281 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +301 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +321 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +341 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +361 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +381 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +282 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +302 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +322 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +342 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +362 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +283 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +303 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +323 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +343 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +363 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +284 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +324 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +344 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +364 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +384 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +285 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +305 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +325 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +345 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +385 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +286 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +306 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +326 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +346 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +366 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +386 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +287 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +307 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +327 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +367 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +288 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +308 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +328 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +368 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +289 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +309 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +329 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +349 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +369 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +389 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +290 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +310 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +330 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +350 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +370 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +390 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +291 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +311 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +331 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +292 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +312 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +332 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +372 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +392 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +293 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +313 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +333 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +353 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +373 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +393 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +294 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +314 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +354 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +374 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +315 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +355 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +375 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +296 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +336 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +356 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +376 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +396 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +297 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +317 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +337 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +357 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +377 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +397 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +298 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +318 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +338 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +378 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +398 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +299 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +319 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +339 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +399 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +300 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +320 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +340 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +360 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +380 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +400 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 5dcd27ef2b..d981962a70 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -283,7 +283,7 @@ void NEB_spin::run() fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " - "GradV0dottan ... GradVNdottan\n"); + "GradV0dottan DN0 ... GradVNdottan DNN\n"); } else { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " @@ -296,7 +296,7 @@ void NEB_spin::run() fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " - "GradV0dottan ... GradVNdottan\n"); + "GradV0dottan DN0 ... GradVNdottan DNN\n"); } else { fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " @@ -368,7 +368,7 @@ void NEB_spin::run() fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " - "GradV0dottan ... GradVNdottan\n"); + "GradV0dottan DN0... GradVNdottan DNN\n"); } else { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " @@ -381,7 +381,7 @@ void NEB_spin::run() fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " - "GradV0dottan ... GradVNdottan\n"); + "GradV0dottan DN0 ... GradVNdottan DNN\n"); } else { fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " @@ -873,8 +873,9 @@ void NEB_spin::print_status() for (int i = 0; i < nreplica; i++) fprintf(uscreen,"%12.8g %12.8g ",rdist[i],all[i][0]); if (verbose) { - for (int i = 0; i < nreplica; i++) - fprintf(uscreen,"%12.8g ",all[i][5]); + for (int i = 0; i < nreplica-1; i++) + fprintf(uscreen,"%12.8g %12.8g ",all[i][2],all[i][5]); + fprintf(uscreen,"%12.8g %12.8g ",NAN,all[nreplica-1][5]); } fprintf(uscreen,"\n"); } @@ -888,8 +889,9 @@ void NEB_spin::print_status() for (int i = 0; i < nreplica; i++) fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); if (verbose) { - for (int i = 0; i < nreplica; i++) - fprintf(ulogfile,"%12.8g ",all[i][5]); + for (int i = 0; i < nreplica-1; i++) + fprintf(ulogfile,"%12.8g %12.8g ",all[i][2],all[i][5]); + fprintf(ulogfile,"%12.8g %12.8g ",NAN,all[nreplica-1][5]); } fprintf(ulogfile,"\n"); fflush(ulogfile); From b1badb6555f595d5bd8a44597ed2a18552b1ef26 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 22:09:58 -0400 Subject: [PATCH 068/372] update all-on and all-off presets for recently added and removed packages --- cmake/presets/all_off.cmake | 4 ---- cmake/presets/all_on.cmake | 4 ---- 2 files changed, 8 deletions(-) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index b434796d7c..cdcf5fc675 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -11,10 +11,6 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) -set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI - USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) - set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) foreach(PKG ${ALL_PACKAGES}) diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 3a1100f337..1351eb8315 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -11,10 +11,6 @@ set(USER_PACKAGES USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVA USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK) -set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI - USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) - set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) foreach(PKG ${ALL_PACKAGES}) From 719a74a02fc8ab2f84652b9edcb2a7054cf3729f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 22:10:55 -0400 Subject: [PATCH 069/372] must include omp.h header when using OpenMP API functions --- src/KOKKOS/pair_exp6_rx_kokkos.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index fa10c6d30f..0a6372fdf8 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -36,6 +36,10 @@ #include "atom_kokkos.h" #include "kokkos.h" +#ifdef _OPENMP +#include +#endif + using namespace LAMMPS_NS; using namespace MathConst; using namespace MathSpecialKokkos; From 2fc7395c140224d493c19de02ef7f660bdb03702 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 22:22:31 -0400 Subject: [PATCH 070/372] add some comments to updated all-on / all-off presets --- cmake/presets/all_off.cmake | 3 +++ cmake/presets/all_on.cmake | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index cdcf5fc675..80a12c6991 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -1,3 +1,6 @@ +# preset that turns on all existing packages off. can be used to reset +# an existing package selection without losing any other settings + set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC MOLECULE MPIIO MSCG OPT PERI POEMS diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 1351eb8315..b66434df63 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -1,3 +1,7 @@ +# preset that turns on all existing packages. using the combination +# this preset with the nolib.cmake preset should configure a LAMMPS +# binary, that can be compiled with just a working C++ compiler. + set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC MOLECULE MPIIO MSCG OPT PERI POEMS From c044eeb482467ff4687cb3b35883120ff0ef0b86 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 1 Apr 2019 22:23:36 -0400 Subject: [PATCH 071/372] update nolib.cmake and change it so it disables all packages requiring some external library or equivalent --- cmake/presets/nolib.cmake | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index 4c02fb6210..663f87122b 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -1,21 +1,10 @@ -set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC - MOLECULE MPIIO MSCG OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI) +# preset that turns off all packages that require some form of external +# library or special compiler (fortran or cuda) or equivalent. -set(USER_PACKAGES 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-MESO - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK) - -set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI - USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) - -set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) +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-NETCDF USER-PLUMED USER-QMMM USER-QUIP + USER-SMD USER-VTK) foreach(PKG ${PACKAGES_WITH_LIB}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) From d3ea115436d0f795b2b6a7a369558fd15cc0a5c7 Mon Sep 17 00:00:00 2001 From: "Dan S. Bolintineanu" Date: Mon, 1 Apr 2019 22:13:49 -0600 Subject: [PATCH 072/372] Tweaks to doc page --- doc/src/pair_granular.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index 7a58435a83..fc235ed301 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -346,16 +346,17 @@ option by an additional factor of {a}, the radius of the contact region. The tan Here, {a} is the radius of the contact region, given by \(a = \delta R\) for all normal contact models, except for {jkr}, where it is given implicitly by \(\delta = a^2/R - 2\sqrt\{\pi \gamma a/E\}\), -see discussion above. To match the Mindlin solution, one should set \(k_t = 8G\), where -\(G\) is the shear modulus, related to Young's modulus \(E\) by \(G = E/(2(1+\nu))\), where \(\nu\) -is Poisson's ratio. This can also be achieved by specifying {NULL} for \(k_t\), in which case -a normal contact model that specifies material parameters \(E\) and \(\nu\) is required (e.g. {hertz/material}, -{dmt} or {jkr}). In this case, mixing of shear moduli for different particle types {i} and {j} is done according -to: +see discussion above. To match the Mindlin solution, one should set \(k_t = 8G^*\), where +\(G^*\) is the effective shear modulus, which relates to material properties according to: + \begin\{equation\} -1/G = 2(2-\nu_i)(1+\nu_i)/E_i + 2(2-\nu_j)(1+\nu_j)/E_j +1/G^* = 2(2-\nu_i)(1+\nu_i)/E_i + 2(2-\nu_j)(1+\nu_j)/E_j \end\{equation\} +This can also be achieved by specifying {NULL} for \(k_t\), in which case +a normal contact model that specifies material parameters \(E\) and \(\nu\) is required (e.g. {hertz/material}, +{dmt} or {jkr}). + The {mindlin_rescale} option uses the same form as {mindlin}, but the magnitude of the tangential displacement is re-scaled as the contact unloads, i.e. if \(a < a_\{t_\{n-1\}\}\): \begin\{equation\} From d1cb8970d541c9e2c85e778fea0d1114a5175d92 Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Tue, 2 Apr 2019 09:29:27 +0300 Subject: [PATCH 073/372] fix elstop: Remove unused includes --- src/USER-MISC/fix_elstop.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/USER-MISC/fix_elstop.cpp b/src/USER-MISC/fix_elstop.cpp index 842c2f4e1a..ac73753a62 100644 --- a/src/USER-MISC/fix_elstop.cpp +++ b/src/USER-MISC/fix_elstop.cpp @@ -27,10 +27,7 @@ #include "region.h" #include "group.h" #include "force.h" -#include "pair.h" #include "fix.h" -#include "compute.h" -#include "modify.h" #include "memory.h" #include "comm.h" #include "error.h" From 91f3a948510bf75128c8765e5aa28fee6b6bc4d6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 05:49:25 -0400 Subject: [PATCH 074/372] fix typo in docs --- doc/src/velocity.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/velocity.txt b/doc/src/velocity.txt index 96d3fa6dc4..decdf2a923 100644 --- a/doc/src/velocity.txt +++ b/doc/src/velocity.txt @@ -134,7 +134,7 @@ The {mom} and {rot} keywords are used by {create}. If mom = yes, the linear momentum of the newly created ensemble of velocities is zeroed; if rot = yes, the angular momentum is zeroed. -*line +:line If specified, the {temp} keyword is used by {create} and {scale} to specify a "compute"_compute.html that calculates temperature in a From 800f3a81b1152895b8e9af89a957172f505ca781 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 06:59:19 -0400 Subject: [PATCH 075/372] update documentation for changes in USER-INTEL support in CMake --- cmake/README.md | 21 +++++++++++++++++---- doc/src/Build_extras.txt | 25 ++++++++++++++++++------- doc/src/Speed_intel.txt | 2 +- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/cmake/README.md b/cmake/README.md index 1c37ecc92e..a635f3e06d 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -155,11 +155,13 @@ make The CMake build exposes a lot of different options. In the old build system some of the package selections were possible by using special make target like -`make yes-std` or `make no-lib`. Achieving the same result with cmake requires +`make yes-std` or `make no-lib`. Achieving a similar result with cmake requires specifying all options manually. This can quickly become a very long command line that is hard to handle. While these could be stored in a simple script file, there is another way of defining "presets" to compile LAMMPS in a certain -way. +way. Since the cmake build process - contrary to the conventional build system - +includes the compilation of the bundled libraries into the standard build process, +the grouping of those presets is somewhat different. A preset is a regular CMake script file that can use constructs such as variables, lists and for-loops to manipulate configuration options and create @@ -171,10 +173,10 @@ Such a file can then be passed to cmake via the `-C` flag. Several examples of presets can be found in the `cmake/presets` folder. ```bash -# build LAMMPS with all "standard" packages which don't use libraries and enable GPU package +# build LAMMPS with all packages enabled which don't use external libraries and enable GPU package mkdir build cd build -cmake -C ../cmake/presets/std_nolib.cmake -D PKG_GPU=on ../cmake +cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GPU=on ../cmake ``` # Reference @@ -1429,6 +1431,17 @@ TODO + + INTEL_LRT_MODE + How to support Long-range thread mode in Verlet integration + +
+
threads (default, if pthreads available)
+
none (default, if pthreads not available)
+
c++11
+
+ + diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 2aa304faff..17d18243f2 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -859,23 +859,34 @@ file. USER-INTEL package :h4,link(user-intel) To build with this package, you must choose which hardware you want to -build for, either Intel CPUs or Intel KNLs. You should also typically -"install the USER-OMP package"_#user-omp, as it can be used in tandem -with the USER-INTEL package to good effect, as explained on the "Speed -intel"_Speed_intel.html doc page. +build for, either x86 CPUs or Intel KNLs in offload mode. You should +also typically "install the USER-OMP package"_#user-omp, as it can be +used in tandem with the USER-INTEL package to good effect, as explained +on the "Speed intel"_Speed_intel.html doc page. [CMake build]: -D INTEL_ARCH=value # value = cpu (default) or knl --D BUILD_OMP=yes # also required to build with the USER-INTEl package :pre +-D INTEL_LRT_MODE=value # value = threads, none, or c++11 :pre -Requires an Intel compiler as well as the Intel TBB and MKL libraries. +In Long-range thread mode (LRT) a modified verlet style is used, that +operates the Kspace calculation in a separate thread concurrently to +other calculations. This has to be enabled in the "package intel"_package.html +command at runtime. With the setting "threads" it used the pthreads +library, while c++11 will use the built-in thread support of C++11 +compilers. The option "none" skips compilation of this feature. The +default is to use "threads" if pthreads is available and otherwise "none". + +Best performance is achieved with Intel hardware, Intel compilers, as well as +the Intel TBB and MKL libraries. However, the code also compiles, links, and +runs with other compilers and without TBB and MKL. [Traditional make]: Choose which hardware to compile for in Makefile.machine via the following settings. See src/MAKE/OPTIONS/Makefile.intel_cpu* and -Makefile.knl files for examples. +Makefile.knl files for examples. and src/USER-INTEL/README for +additional information. For CPUs: diff --git a/doc/src/Speed_intel.txt b/doc/src/Speed_intel.txt index dc38cb0956..2688b43e6f 100644 --- a/doc/src/Speed_intel.txt +++ b/doc/src/Speed_intel.txt @@ -24,7 +24,7 @@ LAMMPS to run on the CPU cores and co-processor cores simultaneously. Angle Styles: charmm, harmonic :ulb,l Bond Styles: fene, fourier, harmonic :l -Dihedral Styles: charmm, harmonic, opls :l +Dihedral Styles: charmm, fourier, harmonic, opls :l Fixes: nve, npt, nvt, nvt/sllod, nve/asphere :l Improper Styles: cvff, harmonic :l Pair Styles: airebo, airebo/morse, buck/coul/cut, buck/coul/long, From 0ab65c0343bfefb88618cad078fa70583d928f65 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 07:12:55 -0400 Subject: [PATCH 076/372] update docs for building LAMMPS for windows --- doc/src/Build_windows.txt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/src/Build_windows.txt b/doc/src/Build_windows.txt index bf1ec265a1..b3dbf775c9 100644 --- a/doc/src/Build_windows.txt +++ b/doc/src/Build_windows.txt @@ -51,11 +51,10 @@ provides a unix/linux interface to low-level Windows functions, so LAMMPS can be compiled on Windows. The necessary (minor) modifications to LAMMPS are included, but may not always up-to-date for recently added functionality and the corresponding new code. A machine makefile for using cygwin for -the old build system is provided. The CMake build system is untested -for this; you will have to request that makefiles are generated and -manually set the compiler. +the old build system is provided. Using CMake for this mode of compilation +is untested and not likely to work. -When compiling for Windows [not] set the -DLAMMPS_MEMALIGN define +When compiling for Windows do [not] set the -DLAMMPS_MEMALIGN define in the LMP_INC makefile variable and add -lwsock32 -lpsapi to the linker flags in LIB makefile variable. Try adding -static-libgcc or -static or both to the linker flags when your resulting LAMMPS Windows executable @@ -79,7 +78,13 @@ probably the currently best tested and supported way to build LAMMPS executables for Windows. There are makefiles provided for the traditional build system, but CMake has also been successfully tested using the mingw32-cmake and mingw64-cmake wrappers that are bundled -with the cross-compiler environment on Fedora machines. +with the cross-compiler environment on Fedora machines. A CMake preset +selecting all packages compatible with this cross-compilation build +is provided. You likely need to disable the GPU package unless you +download and install the contents of the pre-compiled "OpenCL ICD loader +library"_https://download.lammps.org/thirdparty/opencl-win-devel.tar.gz +into your MinGW64 cross-compiler environment. The cross-compilation +currently will only produce non-MPI serial binaries. Please keep in mind, though, that this only applies to compiling LAMMPS. Whether the resulting binaries do work correctly is no tested by the From ef184c9b1b73f0e55f7393d8320250f925edbe0e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 09:34:03 -0400 Subject: [PATCH 077/372] remove presets, that try to mimic settings from the conventional build, but make little sense with cmake --- cmake/presets/manual_selection.cmake | 71 ---------------------------- cmake/presets/std.cmake | 22 --------- cmake/presets/std_nolib.cmake | 26 ---------- cmake/presets/user.cmake | 22 --------- 4 files changed, 141 deletions(-) delete mode 100644 cmake/presets/manual_selection.cmake delete mode 100644 cmake/presets/std.cmake delete mode 100644 cmake/presets/std_nolib.cmake delete mode 100644 cmake/presets/user.cmake diff --git a/cmake/presets/manual_selection.cmake b/cmake/presets/manual_selection.cmake deleted file mode 100644 index 6db41b708c..0000000000 --- a/cmake/presets/manual_selection.cmake +++ /dev/null @@ -1,71 +0,0 @@ -set(PKG_ASPHERE OFF CACHE BOOL "" FORCE) -set(PKG_BODY OFF CACHE BOOL "" FORCE) -set(PKG_CLASS2 OFF CACHE BOOL "" FORCE) -set(PKG_COLLOID OFF CACHE BOOL "" FORCE) -set(PKG_COMPRESS OFF CACHE BOOL "" FORCE) -set(PKG_CORESHELL OFF CACHE BOOL "" FORCE) -set(PKG_DIPOLE OFF CACHE BOOL "" FORCE) -set(PKG_GPU OFF CACHE BOOL "" FORCE) -set(PKG_GRANULAR OFF CACHE BOOL "" FORCE) -set(PKG_KIM OFF CACHE BOOL "" FORCE) -set(PKG_KOKKOS OFF CACHE BOOL "" FORCE) -set(PKG_KSPACE OFF CACHE BOOL "" FORCE) -set(PKG_LATTE OFF CACHE BOOL "" FORCE) -set(PKG_LIB OFF CACHE BOOL "" FORCE) -set(PKG_MANYBODY OFF CACHE BOOL "" FORCE) -set(PKG_MC OFF CACHE BOOL "" FORCE) -set(PKG_MEAM OFF CACHE BOOL "" FORCE) -set(PKG_MISC OFF CACHE BOOL "" FORCE) -set(PKG_MOLECULE OFF CACHE BOOL "" FORCE) -set(PKG_MPIIO OFF CACHE BOOL "" FORCE) -set(PKG_MSCG OFF CACHE BOOL "" FORCE) -set(PKG_OPT OFF CACHE BOOL "" FORCE) -set(PKG_PERI OFF CACHE BOOL "" FORCE) -set(PKG_POEMS OFF CACHE BOOL "" FORCE) -set(PKG_PYTHOFF OFF CACHE BOOL "" FORCE) -set(PKG_QEQ OFF CACHE BOOL "" FORCE) -set(PKG_REAX OFF CACHE BOOL "" FORCE) -set(PKG_REPLICA OFF CACHE BOOL "" FORCE) -set(PKG_RIGID OFF CACHE BOOL "" FORCE) -set(PKG_SHOCK OFF CACHE BOOL "" FORCE) -set(PKG_SNAP OFF CACHE BOOL "" FORCE) -set(PKG_SRD OFF CACHE BOOL "" FORCE) -set(PKG_VOROFFOI OFF CACHE BOOL "" FORCE) - -set(PKG_USER OFF CACHE BOOL "" FORCE) -set(PKG_USER-ATC OFF CACHE BOOL "" FORCE) -set(PKG_USER-AWPMD OFF CACHE BOOL "" FORCE) -set(PKG_USER-BOCS OFF CACHE BOOL "" FORCE) -set(PKG_USER-CGDNA OFF CACHE BOOL "" FORCE) -set(PKG_USER-CGSDK OFF CACHE BOOL "" FORCE) -set(PKG_USER-COLVARS OFF CACHE BOOL "" FORCE) -set(PKG_USER-DIFFRACTIOFF OFF CACHE BOOL "" FORCE) -set(PKG_USER-DPD OFF CACHE BOOL "" FORCE) -set(PKG_USER-DRUDE OFF CACHE BOOL "" FORCE) -set(PKG_USER-EFF OFF CACHE BOOL "" FORCE) -set(PKG_USER-FEP OFF CACHE BOOL "" FORCE) -set(PKG_USER-H5MD OFF CACHE BOOL "" FORCE) -set(PKG_USER-INTEL OFF CACHE BOOL "" FORCE) -set(PKG_USER-LB OFF CACHE BOOL "" FORCE) -set(PKG_USER-MANIFOLD OFF CACHE BOOL "" FORCE) -set(PKG_USER-MEAMC OFF CACHE BOOL "" FORCE) -set(PKG_USER-MESO OFF CACHE BOOL "" FORCE) -set(PKG_USER-MGPT OFF CACHE BOOL "" FORCE) -set(PKG_USER-MISC OFF CACHE BOOL "" FORCE) -set(PKG_USER-MOFFF OFF CACHE BOOL "" FORCE) -set(PKG_USER-MOLFILE OFF CACHE BOOL "" FORCE) -set(PKG_USER-NETCDF OFF CACHE BOOL "" FORCE) -set(PKG_USER-OMP OFF CACHE BOOL "" FORCE) -set(PKG_USER-PHONON OFF CACHE BOOL "" FORCE) -set(PKG_USER-PLUMED OFF CACHE BOOL "" FORCE) -set(PKG_USER-QMMM OFF CACHE BOOL "" FORCE) -set(PKG_USER-QTB OFF CACHE BOOL "" FORCE) -set(PKG_USER-QUIP OFF CACHE BOOL "" FORCE) -set(PKG_USER-REAXC OFF CACHE BOOL "" FORCE) -set(PKG_USER-SDPD OFF CACHE BOOL "" FORCE) -set(PKG_USER-SMD OFF CACHE BOOL "" FORCE) -set(PKG_USER-SMTBQ OFF CACHE BOOL "" FORCE) -set(PKG_USER-SPH OFF CACHE BOOL "" FORCE) -set(PKG_USER-TALLY OFF CACHE BOOL "" FORCE) -set(PKG_USER-UEF OFF CACHE BOOL "" FORCE) -set(PKG_USER-VTK OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/std.cmake b/cmake/presets/std.cmake deleted file mode 100644 index 4176aba44e..0000000000 --- a/cmake/presets/std.cmake +++ /dev/null @@ -1,22 +0,0 @@ -set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC - MOLECULE MPIIO MSCG OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI) - -set(USER_PACKAGES 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-MESO - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK) - -set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI - USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-QMMM USER-QUIP USER-SMD USER-VTK) - -set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) - -foreach(PKG ${STANDARD_PACKAGES}) - set(PKG_${PKG} ON CACHE BOOL "" FORCE) -endforeach() diff --git a/cmake/presets/std_nolib.cmake b/cmake/presets/std_nolib.cmake deleted file mode 100644 index aa067f2ba0..0000000000 --- a/cmake/presets/std_nolib.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC - MOLECULE MPIIO MSCG OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI) - -set(USER_PACKAGES 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-MESO - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK) - -set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI - USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-QMMM USER-QUIP USER-SMD USER-VTK) - -set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) - -foreach(PKG ${STANDARD_PACKAGES}) - set(PKG_${PKG} ON CACHE BOOL "" FORCE) -endforeach() - -foreach(PKG ${PACKAGES_WITH_LIB}) - set(PKG_${PKG} OFF CACHE BOOL "" FORCE) -endforeach() diff --git a/cmake/presets/user.cmake b/cmake/presets/user.cmake deleted file mode 100644 index af606203e9..0000000000 --- a/cmake/presets/user.cmake +++ /dev/null @@ -1,22 +0,0 @@ -set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC - MOLECULE MPIIO MSCG OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI) - -set(USER_PACKAGES 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-MESO - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK) - -set(PACKAGES_WITH_LIB COMPRESS GPU KIM KOKKOS LATTE MEAM MPIIO MSCG POEMS PYTHON REAX VORONOI - USER-ATC USER-AWPMD USER-COLVARS USER-H5MD USER-LB USER-MOLFILE - USER-NETCDF USER-PLUMED USER-QMMM USER-QUIP USER-SMD USER-VTK) - -set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) - -foreach(PKG ${USER_PACKAGES}) - set(PKG_${PKG} ON CACHE BOOL "" FORCE) -endforeach() From 764fb2522b705130929df8a3af1e5051fffc78ab Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 11:21:25 -0400 Subject: [PATCH 078/372] abort already in cmake when including USER-INTEL with -DLAMMPS_BIGBIG --- cmake/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9402ec0663..39d1e4e382 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1060,6 +1060,9 @@ if(PKG_OPT) endif() if(PKG_USER-INTEL) + if(LAMMPS_SIZES STREQUAL BIGBIG) + message(FATAL_ERROR "The USER-INTEL Package is not compatible with -DLAMMPS_BIGBIG") + endif() add_definitions(-DLMP_USER_INTEL) set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") @@ -1068,7 +1071,6 @@ if(PKG_USER-INTEL) validate_option(INTEL_ARCH INTEL_ARCH_VALUES) string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) - # add_definitions(-DLMP_INTEL_USELRT) find_package(Threads QUIET) if(Threads_FOUND) set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)") From fd7c680654ba57cfa1302b90cf97e22fd6de367c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 11:39:46 -0400 Subject: [PATCH 079/372] the lammps_gather_atom*() and lammps_scatter_atom() library functions are not compatible with -DLAMMPS_BIGBIG. divert to dummy functions resulting in error exists. --- src/library.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/library.cpp b/src/library.cpp index d8c55159a2..da4ebaf479 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -801,6 +801,13 @@ void lammps_reset_box(void *ptr, double *boxlo, double *boxhi, Allreduce to sum vector into data across all procs ------------------------------------------------------------------------- */ +#if defined(LAMMPS_BIGBIG) +void lammps_gather_atoms(void * /*ptr*/, char * /*name */, + int /*type*/, int /*count*/, void * /*data*/) +{ + lmp->error->all(FLERR,"Library function lammps_gather_atoms() not compatible with -DLAMMPS_BIGBIG"); +} +#else void lammps_gather_atoms(void *ptr, char *name, int type, int count, void *data) { @@ -905,6 +912,7 @@ void lammps_gather_atoms(void *ptr, char *name, } END_CAPTURE } +#endif /* ---------------------------------------------------------------------- gather the named atom-based entity for all atoms @@ -927,6 +935,13 @@ void lammps_gather_atoms(void *ptr, char *name, Allgather Nlocal atoms from each proc into data ------------------------------------------------------------------------- */ +#if defined(LAMMPS_BIGBIG) +void lammps_gather_atoms_concat(void * /*ptr*/, char * /*name */, + int /*type*/, int /*count*/, void * /*data*/) +{ + lmp->error->all(FLERR,"Library function lammps_gather_atoms_concat() not compatible with -DLAMMPS_BIGBIG"); +} +#else void lammps_gather_atoms_concat(void *ptr, char *name, int type, int count, void *data) { @@ -1047,6 +1062,7 @@ void lammps_gather_atoms_concat(void *ptr, char *name, } END_CAPTURE } +#endif /* ---------------------------------------------------------------------- gather the named atom-based entity for a subset of atoms @@ -1071,6 +1087,14 @@ void lammps_gather_atoms_concat(void *ptr, char *name, Allreduce to sum vector into data across all procs ------------------------------------------------------------------------- */ +#if defined(LAMMPS_BIGBIG) +void lammps_gather_atoms_subset(void * /*ptr*/, char * /*name */, + int /*type*/, int /*count*/, + int /*ndata*/, int * /*ids*/, void * /*data*/) +{ + lmp->error->all(FLERR,"Library function lammps_gather_atoms_subset() not compatible with -DLAMMPS_BIGBIG"); +} +#else void lammps_gather_atoms_subset(void *ptr, char *name, int type, int count, int ndata, int *ids, void *data) @@ -1188,6 +1212,7 @@ void lammps_gather_atoms_subset(void *ptr, char *name, } END_CAPTURE } +#endif /* ---------------------------------------------------------------------- scatter the named atom-based entity in data to all atoms @@ -1205,6 +1230,13 @@ void lammps_gather_atoms_subset(void *ptr, char *name, loop over Natoms, if I own atom ID, set its values from data ------------------------------------------------------------------------- */ +#if defined(LAMMPS_BIGBIG) +void lammps_scatter_atoms(void * /*ptr*/, char * /*name */, + int /*type*/, int /*count*/, void * /*data*/) +{ + lmp->error->all(FLERR,"Library function lammps_scatter_atoms() not compatible with -DLAMMPS_BIGBIG"); +} +#else void lammps_scatter_atoms(void *ptr, char *name, int type, int count, void *data) { @@ -1299,6 +1331,7 @@ void lammps_scatter_atoms(void *ptr, char *name, } END_CAPTURE } +#endif /* ---------------------------------------------------------------------- scatter the named atom-based entity in data to a subset of atoms @@ -1318,6 +1351,14 @@ void lammps_scatter_atoms(void *ptr, char *name, loop over Ndata, if I own atom ID, set its values from data ------------------------------------------------------------------------- */ +#if defined(LAMMPS_BIGBIG) +void lammps_scatter_atoms_subset(void * /*ptr*/, char * /*name */, + int /*type*/, int /*count*/, + int /*ndata*/, int * /*ids*/, void * /*data*/) +{ + lmp->error->all(FLERR,"Library function lammps_scatter_atoms_subset() not compatible with -DLAMMPS_BIGBIG"); +} +#else void lammps_scatter_atoms_subset(void *ptr, char *name, int type, int count, int ndata, int *ids, void *data) @@ -1420,6 +1461,7 @@ void lammps_scatter_atoms_subset(void *ptr, char *name, } END_CAPTURE } +#endif /* ---------------------------------------------------------------------- create N atoms and assign them to procs based on coords From 3eab343821792d9f82d6d0be1f2485a1e5ba244c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 11:49:08 -0400 Subject: [PATCH 080/372] give access to LAMMPS object and wrap in macros for optional exception handling --- src/library.cpp | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index da4ebaf479..a653b83adb 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -802,10 +802,14 @@ void lammps_reset_box(void *ptr, double *boxlo, double *boxhi, ------------------------------------------------------------------------- */ #if defined(LAMMPS_BIGBIG) -void lammps_gather_atoms(void * /*ptr*/, char * /*name */, +void lammps_gather_atoms(void *ptr, char * /*name */, int /*type*/, int /*count*/, void * /*data*/) { + LAMMPS *lmp = (LAMMPS *) ptr; + + BEGIN_CAPTURE lmp->error->all(FLERR,"Library function lammps_gather_atoms() not compatible with -DLAMMPS_BIGBIG"); + END_CAPTURE } #else void lammps_gather_atoms(void *ptr, char *name, @@ -936,10 +940,14 @@ void lammps_gather_atoms(void *ptr, char *name, ------------------------------------------------------------------------- */ #if defined(LAMMPS_BIGBIG) -void lammps_gather_atoms_concat(void * /*ptr*/, char * /*name */, +void lammps_gather_atoms_concat(void *ptr, char * /*name */, int /*type*/, int /*count*/, void * /*data*/) { + LAMMPS *lmp = (LAMMPS *) ptr; + + BEGIN_CAPTURE lmp->error->all(FLERR,"Library function lammps_gather_atoms_concat() not compatible with -DLAMMPS_BIGBIG"); + END_CAPTURE } #else void lammps_gather_atoms_concat(void *ptr, char *name, @@ -1088,11 +1096,15 @@ void lammps_gather_atoms_concat(void *ptr, char *name, ------------------------------------------------------------------------- */ #if defined(LAMMPS_BIGBIG) -void lammps_gather_atoms_subset(void * /*ptr*/, char * /*name */, +void lammps_gather_atoms_subset(void *ptr, char * /*name */, int /*type*/, int /*count*/, int /*ndata*/, int * /*ids*/, void * /*data*/) { + LAMMPS *lmp = (LAMMPS *) ptr; + + BEGIN_CAPTURE lmp->error->all(FLERR,"Library function lammps_gather_atoms_subset() not compatible with -DLAMMPS_BIGBIG"); + END_CAPTURE } #else void lammps_gather_atoms_subset(void *ptr, char *name, @@ -1231,10 +1243,14 @@ void lammps_gather_atoms_subset(void *ptr, char *name, ------------------------------------------------------------------------- */ #if defined(LAMMPS_BIGBIG) -void lammps_scatter_atoms(void * /*ptr*/, char * /*name */, +void lammps_scatter_atoms(void *ptr, char * /*name */, int /*type*/, int /*count*/, void * /*data*/) { + LAMMPS *lmp = (LAMMPS *) ptr; + + BEGIN_CAPTURE lmp->error->all(FLERR,"Library function lammps_scatter_atoms() not compatible with -DLAMMPS_BIGBIG"); + END_CAPTURE } #else void lammps_scatter_atoms(void *ptr, char *name, @@ -1352,11 +1368,15 @@ void lammps_scatter_atoms(void *ptr, char *name, ------------------------------------------------------------------------- */ #if defined(LAMMPS_BIGBIG) -void lammps_scatter_atoms_subset(void * /*ptr*/, char * /*name */, +void lammps_scatter_atoms_subset(void *ptr, char * /*name */, int /*type*/, int /*count*/, int /*ndata*/, int * /*ids*/, void * /*data*/) { + LAMMPS *lmp = (LAMMPS *) ptr; + + BEGIN_CAPTURE lmp->error->all(FLERR,"Library function lammps_scatter_atoms_subset() not compatible with -DLAMMPS_BIGBIG"); + END_CAPTURE } #else void lammps_scatter_atoms_subset(void *ptr, char *name, From 74ce164457494ddb4ced33721214199ab729ee2e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 12:06:51 -0400 Subject: [PATCH 081/372] restore lost edit to all_on.cmake and all_off.cmake that syncs the list of packages --- cmake/presets/all_off.cmake | 25 +++++++++++-------------- cmake/presets/all_on.cmake | 25 +++++++++++-------------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 80a12c6991..0e37611da4 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -1,20 +1,17 @@ # preset that turns on all existing packages off. can be used to reset # an existing package selection without losing any other settings -set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC - MOLECULE MPIIO MSCG OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI) - -set(USER_PACKAGES 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-MESO - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK) - -set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) +set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU + GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MOLECULE MPIIO + MSCG OPT PERI 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-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO + 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-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 b66434df63..a24403c847 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -2,20 +2,17 @@ # this preset with the nolib.cmake preset should configure a LAMMPS # binary, that can be compiled with just a working C++ compiler. -set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MEAM MISC - MOLECULE MPIIO MSCG OPT PERI POEMS - PYTHON QEQ REAX REPLICA RIGID SHOCK SNAP SRD VORONOI) - -set(USER_PACKAGES 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-MESO - USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE - USER-NETCDF USER-OMP USER-PHONON USER-QMMM USER-QTB - USER-QUIP USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY - USER-UEF USER-VTK) - -set(ALL_PACKAGES ${STANDARD_PACKAGES} ${USER_PACKAGES}) +set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU + GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MOLECULE MPIIO + MSCG OPT PERI 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-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO + 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-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) From cb5c3f900ef3edf4268b071779f819b951f5142a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 12:41:12 -0400 Subject: [PATCH 082/372] add minimal.cmake and most.cmake presets --- cmake/presets/all_on.cmake | 5 +++-- cmake/presets/minimal.cmake | 8 ++++++++ cmake/presets/most.cmake | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 cmake/presets/minimal.cmake create mode 100644 cmake/presets/most.cmake diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index a24403c847..57f1228abe 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -1,6 +1,7 @@ # preset that turns on all existing packages. using the combination -# this preset with the nolib.cmake preset should configure a LAMMPS -# binary, that can be compiled with just a working C++ compiler. +# this preset followed by the nolib.cmake preset should configure a +# LAMMPS binary, with as many packages included, that can be compiled +# with just a working C++ compiler and an MPI library. set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MOLECULE MPIIO diff --git a/cmake/presets/minimal.cmake b/cmake/presets/minimal.cmake new file mode 100644 index 0000000000..e9ce6d6103 --- /dev/null +++ b/cmake/presets/minimal.cmake @@ -0,0 +1,8 @@ +# preset that turns on just a few, frequently used packages +# this will be compiled quickly and handle a lot of common inputs. + +set(ALL_PACKAGES KSPACE MANYBODY MOLECULE RIGID) + +foreach(PKG ${ALL_PACKAGES}) + set(PKG_${PKG} ON CACHE BOOL "" FORCE) +endforeach() diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake new file mode 100644 index 0000000000..eed4599670 --- /dev/null +++ b/cmake/presets/most.cmake @@ -0,0 +1,15 @@ +# preset that turns on a wide range of packages none of which require +# external libraries. Some more unusual packages are removed as well. +# The resulting binary should be able to run most inputs. + +set(ALL_PACKAGES ASPHERE CLASS2 COLLOID CORESHELL DIPOLE + GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI + QEQ REPLICA RIGID SHOCK SRD + USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD + USER-DRUDE USER-FEP USER-MEAMC USER-MESO + USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REAXC + USER-SPH USER-UEF USER-YAFF) + +foreach(PKG ${ALL_PACKAGES}) + set(PKG_${PKG} ON CACHE BOOL "" FORCE) +endforeach() From 5a751254262718bc8f3a4293c3311b923b82a735 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 14:30:34 -0400 Subject: [PATCH 083/372] add some popular packages requiring libraries to most.cmake preset --- cmake/presets/most.cmake | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index eed4599670..35ad7ba55c 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -1,14 +1,14 @@ -# preset that turns on a wide range of packages none of which require -# external libraries. Some more unusual packages are removed as well. -# The resulting binary should be able to run most inputs. +# preset that turns on a wide range of packages, some of which require +# external libraries. Compared to all_on.cmake some more unusual packages +# are removed. The resulting binary should be able to run most inputs. set(ALL_PACKAGES ASPHERE CLASS2 COLLOID CORESHELL DIPOLE GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI - QEQ REPLICA RIGID SHOCK SRD + PYTHON QEQ REPLICA RIGID SHOCK SRD VORONOI USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-FEP USER-MEAMC USER-MESO - USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REAXC - USER-SPH USER-UEF USER-YAFF) + USER-MISC USER-MOFFF USER-OMP USER-PLUMED USER-PHONON USER-REAXC + USER-SPH USER-SMD USER-UEF USER-YAFF) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) From 4824992a1e2f367f026daefeeb4ed19857df4124 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 14:31:13 -0400 Subject: [PATCH 084/372] update documentation for recent changes to CMake presets --- doc/src/Build_cmake.txt | 3 ++- doc/src/Build_package.txt | 28 +++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index 5c29e11280..69d5d31f54 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -108,7 +108,8 @@ command-line options. Several useful ones are: -D CMAKE_BUILD_TYPE=type # type = Release or Debug -G output # style of output CMake generates -DVARIABLE=value # setting for a LAMMPS feature to enable --D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir :pre +-D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir +-C path/to/preset/file # load some CMake settings before configuring :pre All the LAMMPS-specific -D variables that a LAMMPS build supports are described on the pages linked to from the "Build"_Build.html doc page. diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index c5eca96edb..774cdda6a1 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -149,26 +149,32 @@ system. Using these files you can enable/disable portions of the available packages in LAMMPS. If you need a custom preset you can take one of them as a starting point and customize it to your needs. -cmake -C ../cmake/presets/all_on.cmake \[OPTIONS\] ../cmake | enable all packages +cmake -C ../cmake/presets/all_on.cmake \[OPTIONS\] ../cmake | enable all packages cmake -C ../cmake/presets/all_off.cmake \[OPTIONS\] ../cmake | disable all packages -cmake -C ../cmake/presets/std.cmake \[OPTIONS\] ../cmake | enable standard packages -cmake -C ../cmake/presets/user.cmake \[OPTIONS\] ../cmake | enable user packages -cmake -C ../cmake/presets/std_nolib.cmake \[OPTIONS\] ../cmake | enable standard packages that do not require extra libraries -cmake -C ../cmake/presets/nolib.cmake \[OPTIONS\] ../cmake | disable all packages that do not require extra libraries -cmake -C ../cmake/presets/manual_selection.cmake \[OPTIONS\] ../cmake | example of how to create a manual selection of packages :tb(s=|,a=l) +cmake -C ../cmake/presets/minimal.cmake \[OPTIONS\] ../cmake | enable just a few core packages +cmake -C ../cmake/presets/most.cmake \[OPTIONS\] ../cmake | enable most common packages +cmake -C ../cmake/presets/nolib.cmake \[OPTIONS\] ../cmake | disable packages that do require extra libraries or tools +cmake -C ../cmake/presets/mingw.cmake \[OPTIONS\] ../cmake | enable all packages compatible with MinGW (cross-)compilation on Windows :tb(s=|,a=l)s NOTE: Running cmake this way manipulates the variable cache in your -current build directory. You can combine presets and options with -multiple cmake runs. +current build directory. You can combine multiple presets and options +with multiple cmake runs. [Example:] -# build LAMMPS with all "standard" packages which don't -# use libraries and enable GPU package +# build LAMMPS with most commonly used packages, but then remove +# those requiring additional library or tools, but still enable +# GPU package and configure it for using CUDA. You can run. mkdir build cd build -cmake -C ../cmake/presets/std_nolib.cmake -D PKG_GPU=on ../cmake :pre +cmake -C ../cmake/presets/most.cmake -C ../cmake/presets/nolib.cmake -D PKG_GPU=on -D GPU_API=cuda ../cmake :pre +# to add another package, say BODY to the previous configuration you can run: +cmake -D PKG_BODY=on . :pre + +# to reset the package selection from above to the default of no packages +# but leaving all other settings untouched. You can run: +cmake -C ../cmake/presets/no_all.cmake . :pre :line [Make shortcuts for installing many packages]: From 98bd720c684cd3f56c4925b763b070a0270cffb7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 14:56:51 -0400 Subject: [PATCH 085/372] improved formatting of cmake settings and presets related docs --- doc/src/Build_cmake.txt | 5 +++-- doc/src/Build_package.txt | 21 ++++++++++++++------- doc/src/Build_settings.txt | 13 ++++++++----- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index 69d5d31f54..265c16e3d4 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -28,7 +28,7 @@ Makefile(s). Example: cd lammps # change to the LAMMPS distribution directory mkdir build; cd build # create a new directory (folder) for build -cmake ../cmake \[options ...\] # configuration with (command-line) cmake +cmake \[options ...\] ../cmake # configuration with (command-line) cmake make # compilation :pre The cmake command will detect available features, enable selected @@ -41,7 +41,8 @@ If your machine has multiple CPU cores (most do these days), using a command like "make -jN" (with N being the number of available local CPU cores) can be much faster. If you plan to do development on LAMMPS or need to re-compile LAMMPS repeatedly, installation of the -ccache (= Compiler Cache) software may speed up compilation even more. +ccache (= Compiler Cache) software may speed up repeated compilation +even more. After compilation, you can optionally copy the LAMMPS executable and library into your system folders (by default under $HOME/.local) with: diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index 774cdda6a1..e37936e052 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -149,16 +149,23 @@ system. Using these files you can enable/disable portions of the available packages in LAMMPS. If you need a custom preset you can take one of them as a starting point and customize it to your needs. -cmake -C ../cmake/presets/all_on.cmake \[OPTIONS\] ../cmake | enable all packages -cmake -C ../cmake/presets/all_off.cmake \[OPTIONS\] ../cmake | disable all packages -cmake -C ../cmake/presets/minimal.cmake \[OPTIONS\] ../cmake | enable just a few core packages -cmake -C ../cmake/presets/most.cmake \[OPTIONS\] ../cmake | enable most common packages -cmake -C ../cmake/presets/nolib.cmake \[OPTIONS\] ../cmake | disable packages that do require extra libraries or tools -cmake -C ../cmake/presets/mingw.cmake \[OPTIONS\] ../cmake | enable all packages compatible with MinGW (cross-)compilation on Windows :tb(s=|,a=l)s +cmake -C ../cmake/presets/all_on.cmake \[OPTIONS\] ../cmake | + enable all packages | +cmake -C ../cmake/presets/all_off.cmake \[OPTIONS\] ../cmake | + disable all packages | +cmake -C ../cmake/presets/minimal.cmake \[OPTIONS\] ../cmake | + enable just a few core packages | +cmake -C ../cmake/presets/most.cmake \[OPTIONS\] ../cmake | + enable most common packages | +cmake -C ../cmake/presets/nolib.cmake \[OPTIONS\] ../cmake | + disable packages that do require extra libraries or tools | +cmake -C ../cmake/presets/mingw.cmake \[OPTIONS\] ../cmake | + enable all packages compatible with MinGW compilers :tb(c=2,s=|,a=l) NOTE: Running cmake this way manipulates the variable cache in your current build directory. You can combine multiple presets and options -with multiple cmake runs. +in a single cmake run, or change settings incrementally by running +cmake with new flags. [Example:] diff --git a/doc/src/Build_settings.txt b/doc/src/Build_settings.txt index f1db9f0130..287cd39ff6 100644 --- a/doc/src/Build_settings.txt +++ b/doc/src/Build_settings.txt @@ -57,10 +57,10 @@ FFT_INC = -DFFT_SINGLE # do not specify for double precision FFT_INC = -DFFT_PACK_ARRAY # or -DFFT_PACK_POINTER or -DFFT_PACK_MEMCPY :pre # default is FFT_PACK_ARRAY if not specified -FFT_INC = -I/usr/local/include +FFT_INC = -I/usr/local/include FFT_PATH = -L/usr/local/lib -FFT_LIB = -lfftw3 # FFTW3 double precision -FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision +FFT_LIB = -lfftw3 # FFTW3 double precision +FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision FFT_LIB = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core # MKL with Intel compiler FFT_LIB = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core # MKL with GNU compier :pre @@ -179,8 +179,11 @@ e.g. from 511 to -512, which can cause diagnostics like the mean-squared displacement, as calculated by the "compute msd"_compute_msd.html command, to be faulty. -Note that the USER-ATC package is not currently compatible with the -"bigbig" setting. +Note that the USER-ATC package and the USER-INTEL package are currently +not compatible with the "bigbig" setting. Also, there are limitations +when using the library interface. Some functions with known issues +have been replaced by dummy calls printing a corresponding error rather +than crashing randomly or corrupting data. Also note that the GPU package requires its lib/gpu library to be compiled with the same size setting, or the link will fail. A CMake From 978b52ee8c90a74ee316e3f9578d05ce2409a5fd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 15:06:56 -0400 Subject: [PATCH 086/372] add warning/status messages about skipping TBB malloc and MKL RNG --- cmake/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 39d1e4e382..dd693255a6 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1106,16 +1106,21 @@ if(PKG_USER-INTEL) list(APPEND LAMMPS_LINK_LIBS ${TBB_MALLOC_LIBRARIES}) else() add_definitions(-DLMP_INTEL_NO_TBB) + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(WARNING "USER-INTEL with Intel compilers should use TBB malloc libraries") + endif() endif() find_package(MKL QUIET) if(MKL_FOUND) add_definitions(-DLMP_USE_MKL_RNG) list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) + else() + message(STATUS "Pair style dpd/intel will be faster with MKL libraries") endif() if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) - message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256") + message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256 on this platform") endif() if(INTEL_ARCH STREQUAL "KNL") From 34b023456b6c0b0f57ab7a7fb6d37e03eeee16f9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 15:28:48 -0400 Subject: [PATCH 087/372] add message about -DLAMMPS_BIGBIG incompatibility of scatter/gather functions --- doc/src/Howto_library.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/src/Howto_library.txt b/doc/src/Howto_library.txt index 40a8bf0a70..7bbf08a964 100644 --- a/doc/src/Howto_library.txt +++ b/doc/src/Howto_library.txt @@ -166,9 +166,6 @@ void lammps_gather_atoms_subset(void *, char *, int, int, int, int *, void *) void lammps_scatter_atoms(void *, char *, int, int, void *) void lammps_scatter_atoms_subset(void *, char *, int, int, int, int *, void *) :pre -void lammps_create_atoms(void *, int, tagint *, int *, double *, double *, - imageint *, int) :pre - The gather functions collect peratom info of the requested type (atom coords, atom types, forces, etc) from all processors, and returns the same vector of values to each calling processor. The scatter @@ -176,6 +173,11 @@ functions do the inverse. They distribute a vector of peratom values, passed by all calling processors, to individual atoms, which may be owned by different processors. +IMPORTANT NOTE: These functions are not compatible with the +-DLAMMPS_BIGBIG setting when compiling LAMMPS. Dummy functions +that result in an error message and abort will be subsituted +instead of resulting in random crashes and memory corruption. + The lammps_gather_atoms() function does this for all N atoms in the system, ordered by atom ID, from 1 to N. The lammps_gather_atoms_concat() function does it for all N atoms, but @@ -196,6 +198,9 @@ those values to each atom in the system. The lammps_scatter_atoms_subset() function takes a subset of IDs as an argument and only scatters those values to the owning atoms. +void lammps_create_atoms(void *, int, tagint *, int *, double *, double *, + imageint *, int) :pre + The lammps_create_atoms() function takes a list of N atoms as input with atom types and coords (required), an optionally atom IDs and velocities and image flags. It uses the coords of each atom to assign From 365166fef0f0b898b61dbf6de818e8f4f2c804fd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 16:01:42 -0400 Subject: [PATCH 088/372] print warning messages about calls to self only once --- src/STUBS/mpi.c | 60 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c index 053108fee8..09bb48ecdc 100644 --- a/src/STUBS/mpi.c +++ b/src/STUBS/mpi.c @@ -200,7 +200,11 @@ int MPI_Request_free(MPI_Request *request) int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) { - printf("MPI Stub WARNING: Should not send message to self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not send message to self\n"); + ++callcount; + } return 0; } @@ -209,7 +213,11 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request) { - printf("MPI Stub WARNING: Should not send message to self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not send message to self\n"); + ++callcount; + } return 0; } @@ -218,7 +226,11 @@ int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) { - printf("MPI Stub WARNING: Should not rsend message to self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not rsend message to self\n"); + ++callcount; + } return 0; } @@ -227,7 +239,11 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) { - printf("MPI Stub WARNING: Should not recv message from self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not recv message from self\n"); + ++callcount; + } return 0; } @@ -236,7 +252,11 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request) { - printf("MPI Stub WARNING: Should not recv message from self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not recv message from self\n"); + ++callcount; + } return 0; } @@ -244,7 +264,11 @@ int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int MPI_Wait(MPI_Request *request, MPI_Status *status) { - printf("MPI Stub WARNING: Should not wait on message from self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not wait on message from self\n"); + ++callcount; + } return 0; } @@ -252,7 +276,11 @@ int MPI_Wait(MPI_Request *request, MPI_Status *status) int MPI_Waitall(int n, MPI_Request *request, MPI_Status *status) { - printf("MPI Stub WARNING: Should not wait on message from self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not wait on message from self\n"); + ++callcount; + } return 0; } @@ -261,7 +289,11 @@ int MPI_Waitall(int n, MPI_Request *request, MPI_Status *status) int MPI_Waitany(int count, MPI_Request *request, int *index, MPI_Status *status) { - printf("MPI Stub WARNING: Should not wait on message from self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not wait on message from self\n"); + ++callcount; + } return 0; } @@ -272,7 +304,11 @@ int MPI_Sendrecv(const void *sbuf, int scount, MPI_Datatype sdatatype, MPI_Datatype rdatatype, int source, int rtag, MPI_Comm comm, MPI_Status *status) { - printf("MPI Stub WARNING: Should not send message to self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not send message to self\n"); + ++callcount; + } return 0; } @@ -280,7 +316,11 @@ int MPI_Sendrecv(const void *sbuf, int scount, MPI_Datatype sdatatype, int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count) { - printf("MPI Stub WARNING: Should not get count of message to self\n"); + static int callcount=0; + if (callcount == 0) { + printf("MPI Stub WARNING: Should not get count of message to self\n"); + ++callcount; + } return 0; } From 4a003644feb7d7c9fb2fdd034803da7c364132f3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 16:41:02 -0400 Subject: [PATCH 089/372] fix typo --- doc/src/Howto_library.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Howto_library.txt b/doc/src/Howto_library.txt index 7bbf08a964..7695fd59e2 100644 --- a/doc/src/Howto_library.txt +++ b/doc/src/Howto_library.txt @@ -175,7 +175,7 @@ owned by different processors. IMPORTANT NOTE: These functions are not compatible with the -DLAMMPS_BIGBIG setting when compiling LAMMPS. Dummy functions -that result in an error message and abort will be subsituted +that result in an error message and abort will be substiuted instead of resulting in random crashes and memory corruption. The lammps_gather_atoms() function does this for all N atoms in the From 6411ff8359cfbb1d05ec943bf86017ac119d6773 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 17:25:26 -0400 Subject: [PATCH 090/372] transfer MPI/OpenMP selection from LAMMPS to downloaded Plumed library configuration --- cmake/CMakeLists.txt | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index dd693255a6..59caf8ca9f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -560,6 +560,20 @@ if(PKG_USER-PLUMED) option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" OFF) if(DOWNLOAD_PLUMED) + if(BUILD_MPI) + set(PLUMED_CONFIG_MPI "--enable-mpi") + set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) + set(PLUMED_CONFIG_CXX ${CMAKE_MPI_CXX_COMPILER}) + else() + set(PLUMED_CONFIG_MPI "--disable-mpi") + set(PLUMED_CONFIG_CC ${CMAKE_C_COMPILER}) + set(PLUMED_CONFIG_CXX ${CMAKE_CXX_COMPILER}) + endif() + if(BUILD_OMP) + set(PLUMED_CONFIG_OMP "--enable-openmp") + else() + set(PLUMED_CONFIG_OMP "--disable-openmp") + endif() message(STATUS "PLUMED download requested - we will build our own") include(ExternalProject) ExternalProject_Add(plumed_build @@ -568,9 +582,11 @@ if(PKG_USER-PLUMED) BUILD_IN_SOURCE 1 CONFIGURE_COMMAND /configure --prefix= ${CONFIGURE_REQUEST_PIC} - --enable-modules=all - CXX=${CMAKE_MPI_CXX_COMPILER} - CC=${CMAKE_MPI_C_COMPILER} + --enable-modules=all + ${PLUMED_CONFIG_MPI} + ${PLUMED_CONFIG_OMP} + CXX=${PLUMED_CONFIG_CXX} + CC=${PLUMED_CONFIG_CC} ) ExternalProject_get_property(plumed_build INSTALL_DIR) set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) From bd923d8bd4c2b07a830fdd92b8cb50c41d4a799f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 17:33:35 -0400 Subject: [PATCH 091/372] fix second typo in the same word. i need a break... :-( --- doc/src/Howto_library.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Howto_library.txt b/doc/src/Howto_library.txt index 7695fd59e2..ba009cfad9 100644 --- a/doc/src/Howto_library.txt +++ b/doc/src/Howto_library.txt @@ -175,7 +175,7 @@ owned by different processors. IMPORTANT NOTE: These functions are not compatible with the -DLAMMPS_BIGBIG setting when compiling LAMMPS. Dummy functions -that result in an error message and abort will be substiuted +that result in an error message and abort will be substituted instead of resulting in random crashes and memory corruption. The lammps_gather_atoms() function does this for all N atoms in the From 778537e73490d8e6c53f4bc2dd5bd5addcbb0246 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 22:32:15 -0400 Subject: [PATCH 092/372] update micelle example for improved reproducibility --- examples/micelle/in.micelle | 4 +- examples/micelle/in.micelle-rigid | 87 ++++++ examples/micelle/log.28Feb2019.micelle.g++.1 | 259 ---------------- examples/micelle/log.28Feb2019.micelle.g++.4 | 259 ---------------- .../micelle/log.28Feb2019.micelle.rigid.g++.1 | 290 ------------------ .../micelle/log.28Feb2019.micelle.rigid.g++.4 | 290 ------------------ .../micelle/log.29Mar2019.micelle-rigid.g++.1 | 260 ++++++++++++++++ .../micelle/log.29Mar2019.micelle-rigid.g++.4 | 260 ++++++++++++++++ examples/micelle/log.29Mar2019.micelle.g++.1 | 218 +++++++++++++ examples/micelle/log.29Mar2019.micelle.g++.4 | 218 +++++++++++++ 10 files changed, 1045 insertions(+), 1100 deletions(-) create mode 100644 examples/micelle/in.micelle-rigid delete mode 100644 examples/micelle/log.28Feb2019.micelle.g++.1 delete mode 100644 examples/micelle/log.28Feb2019.micelle.g++.4 delete mode 100644 examples/micelle/log.28Feb2019.micelle.rigid.g++.1 delete mode 100644 examples/micelle/log.28Feb2019.micelle.rigid.g++.4 create mode 100644 examples/micelle/log.29Mar2019.micelle-rigid.g++.1 create mode 100644 examples/micelle/log.29Mar2019.micelle-rigid.g++.4 create mode 100644 examples/micelle/log.29Mar2019.micelle.g++.1 create mode 100644 examples/micelle/log.29Mar2019.micelle.g++.4 diff --git a/examples/micelle/in.micelle b/examples/micelle/in.micelle index 2abdd18734..34bc9ad359 100644 --- a/examples/micelle/in.micelle +++ b/examples/micelle/in.micelle @@ -58,7 +58,7 @@ pair_coeff 1 4 1.0 1.0 1.12246 pair_coeff 2 3 1.0 0.88 1.12246 pair_coeff 2 4 1.0 0.75 1.12246 -thermo 1000 +thermo 50 #dump 1 all atom 2000 dump.micelle @@ -69,4 +69,4 @@ thermo 1000 #dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 reset_timestep 0 -run 60000 +run 1000 diff --git a/examples/micelle/in.micelle-rigid b/examples/micelle/in.micelle-rigid new file mode 100644 index 0000000000..93cb2655f8 --- /dev/null +++ b/examples/micelle/in.micelle-rigid @@ -0,0 +1,87 @@ +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle +special_bonds fene + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 500 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 50 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +group solvent molecule 0 +group solute subtract all solvent +unfix 1 +unfix 2 +unfix 4 +fix 1 solvent nve +fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0 +fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211 +fix 4 all enforce2d +run 500 +unfix 2 +unfix 4 +unfix 5 +fix 5 solute rigid/small molecule +fix 4 all enforce2d +run 500 diff --git a/examples/micelle/log.28Feb2019.micelle.g++.1 b/examples/micelle/log.28Feb2019.micelle.g++.1 deleted file mode 100644 index c2bbc7cde4..0000000000 --- a/examples/micelle/log.28Feb2019.micelle.g++.1 +++ /dev/null @@ -1,259 +0,0 @@ -LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) - using 1 OpenMP thread(s) per MPI task -# 2d micelle simulation - -dimension 2 - -neighbor 0.3 bin -neigh_modify delay 5 - -atom_style bond - -# Soft potential push-off - -read_data data.micelle - orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 1200 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 300 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.000394821 secs - read_data CPU = 0.00212336 secs -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.00018549 secs - -pair_style soft 1.12246 -pair_coeff * * 0.0 1.12246 - -bond_style harmonic -bond_coeff 1 50.0 0.75 - -velocity all create 0.45 2349852 - -variable prefactor equal ramp(1.0,20.0) - -fix 1 all nve -fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 -fix 3 all adapt 1 pair soft a * * v_prefactor -fix 4 all enforce2d - -thermo 50 -run 1000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.42246 - ghost atom cutoff = 1.42246 - binsize = 0.71123, bins = 51 51 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair soft, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 - 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 - 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 - 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 - 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 - 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 - 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 - 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 - 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 - 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 - 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 - 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 - 600 0.45 0.58193041 0.088386617 1.119942 5.131481 - 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 - 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 - 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 - 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 - 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 - 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 - 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 - 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 -Loop time of 0.113919 on 1 procs for 1000 steps with 1200 atoms - -Performance: 3792167.464 tau/day, 8778.165 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.076825 | 0.076825 | 0.076825 | 0.0 | 67.44 -Bond | 0.0041864 | 0.0041864 | 0.0041864 | 0.0 | 3.67 -Neigh | 0.017061 | 0.017061 | 0.017061 | 0.0 | 14.98 -Comm | 0.0019042 | 0.0019042 | 0.0019042 | 0.0 | 1.67 -Output | 0.00017285 | 0.00017285 | 0.00017285 | 0.0 | 0.15 -Modify | 0.011218 | 0.011218 | 0.011218 | 0.0 | 9.85 -Other | | 0.002551 | | | 2.24 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 195 ave 195 max 195 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3136 ave 3136 max 3136 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3136 -Ave neighs/atom = 2.61333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 92 -Dangerous builds = 0 - -unfix 3 - -# Main run - -pair_style lj/cut 2.5 - -# solvent/head - full-size and long-range - -pair_coeff 1 1 1.0 1.0 2.5 -pair_coeff 2 2 1.0 1.0 2.5 -pair_coeff 1 2 1.0 1.0 2.5 - -# tail/tail - size-averaged and long-range - -pair_coeff 3 3 1.0 0.75 2.5 -pair_coeff 4 4 1.0 0.50 2.5 -pair_coeff 3 4 1.0 0.67 2.5 - -# solvent/tail - full-size and repulsive - -pair_coeff 1 3 1.0 1.0 1.12246 -pair_coeff 1 4 1.0 1.0 1.12246 - -# head/tail - size-averaged and repulsive - -pair_coeff 2 3 1.0 0.88 1.12246 -pair_coeff 2 4 1.0 0.75 1.12246 - -thermo 1000 - -#dump 1 all atom 2000 dump.micelle - -#dump 2 all image 2000 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -#dump 3 all movie 2000 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -reset_timestep 0 -run 60000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 26 26 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.024 | 4.024 | 4.024 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 - 1000 0.45 -1.9727644 0.05860769 -1.4645317 1.9982326 - 2000 0.46143408 -1.9889684 0.058103225 -1.4698156 1.7806269 - 3000 0.44459291 -1.9997961 0.068724164 -1.4868496 1.4369618 - 4000 0.46939549 -2.0330437 0.073499424 -1.4905399 1.3780016 - 5000 0.44411088 -2.0339936 0.05862049 -1.5316323 1.2544164 - 6000 0.44034597 -2.0265475 0.066481992 -1.5200864 1.2362891 - 7000 0.45097378 -2.0331083 0.058467565 -1.5240428 1.2762333 - 8000 0.45797632 -2.0330255 0.060048036 -1.5153828 1.3862396 - 9000 0.45297811 -2.0383417 0.067056519 -1.5186845 1.2762554 - 10000 0.45 -2.0628269 0.065650067 -1.5475518 1.0566213 - 11000 0.44466757 -2.0593977 0.06190999 -1.5531907 1.1452469 - 12000 0.46743534 -2.0684295 0.061056278 -1.5403274 1.0824225 - 13000 0.45601091 -2.0689708 0.054868536 -1.5584713 0.96703283 - 14000 0.44111882 -2.0553174 0.058249816 -1.5563164 1.0986427 - 15000 0.43894405 -2.0866829 0.064117804 -1.5839869 0.90031836 - 16000 0.43856814 -2.0879319 0.056024166 -1.593705 0.96387323 - 17000 0.45977841 -2.103188 0.058097306 -1.5856955 0.83352919 - 18000 0.43423341 -2.0813151 0.066623991 -1.5808196 0.98157638 - 19000 0.44245939 -2.0851261 0.057637655 -1.5853978 0.84228341 - 20000 0.43144678 -2.0895403 0.06536727 -1.5930858 0.88177768 - 21000 0.45014968 -2.106686 0.059137572 -1.5977739 0.89408935 - 22000 0.4575126 -2.1024115 0.063013023 -1.5822672 0.84886734 - 23000 0.45 -2.10897 0.06724784 -1.5920971 0.66205013 - 24000 0.43055602 -2.0894725 0.061566464 -1.5977089 0.81764789 - 25000 0.4366384 -2.0926743 0.059609321 -1.5967905 0.85549875 - 26000 0.4521714 -2.0963996 0.062031863 -1.5825731 0.80137118 - 27000 0.45734834 -2.1060987 0.061712636 -1.5874188 0.82899415 - 28000 0.44803467 -2.0859226 0.061871856 -1.5763894 0.97007526 - 29000 0.45 -2.1106243 0.063825481 -1.5971738 0.63798376 - 30000 0.44932806 -2.1006036 0.053053934 -1.598596 0.63907113 - 31000 0.44713779 -2.1096164 0.066470416 -1.5963808 0.66832708 - 32000 0.4373357 -2.0941237 0.058871613 -1.5982808 0.78176106 - 33000 0.44030485 -2.105644 0.058804306 -1.6069017 0.66286458 - 34000 0.43781175 -2.1233209 0.064611206 -1.6212628 0.56342584 - 35000 0.45670132 -2.1059408 0.053049584 -1.5965705 0.73992396 - 36000 0.45555427 -2.1149877 0.057627709 -1.6021854 0.85854939 - 37000 0.44134236 -2.1106202 0.064444306 -1.6052013 0.74674603 - 38000 0.44812623 -2.1003681 0.057266258 -1.5953491 0.78239359 - 39000 0.44167062 -2.11141 0.055354 -1.6147534 0.7066385 - 40000 0.46103176 -2.1166687 0.062155412 -1.5938657 0.73620955 - 41000 0.44537102 -2.0993898 0.05631213 -1.5980778 0.87348756 - 42000 0.44752506 -2.1115212 0.057506521 -1.6068625 0.72999561 - 43000 0.4483886 -2.1184719 0.066943915 -1.6035131 0.78112063 - 44000 0.45944897 -2.0916657 0.055242781 -1.5773568 0.98660473 - 45000 0.46238513 -2.1163075 0.0530031 -1.6013046 0.74416054 - 46000 0.45979064 -2.1165545 0.060657581 -1.5964895 0.63516974 - 47000 0.45936546 -2.1140678 0.049931919 -1.6051532 0.76425182 - 48000 0.45424613 -2.1122681 0.061885599 -1.5965149 0.71981142 - 49000 0.44449524 -2.1147361 0.06626748 -1.6043438 0.78720467 - 50000 0.4641185 -2.1114668 0.055104874 -1.5926302 0.70195865 - 51000 0.44220655 -2.1075773 0.0589109 -1.6068283 0.73806859 - 52000 0.43097906 -2.1189493 0.061502241 -1.6268271 0.69622593 - 53000 0.45 -2.137688 0.053631829 -1.6344311 0.48269158 - 54000 0.43777118 -2.1089246 0.047098534 -1.6244197 0.70423814 - 55000 0.46061985 -2.1129502 0.062520353 -1.5901938 0.72492307 - 56000 0.4524841 -2.1195648 0.06580089 -1.6016569 0.52709892 - 57000 0.44914574 -2.1041993 0.061040876 -1.594387 0.7979988 - 58000 0.46446286 -2.1181238 0.055741995 -1.598306 0.51009146 - 59000 0.4632674 -2.1169321 0.050672678 -1.6033781 0.83110911 - 60000 0.46340478 -2.122846 0.058485209 -1.6013422 0.69966471 -Loop time of 8.01683 on 1 procs for 60000 steps with 1200 atoms - -Performance: 3233199.903 tau/day, 7484.259 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 5.4027 | 5.4027 | 5.4027 | 0.0 | 67.39 -Bond | 0.23585 | 0.23585 | 0.23585 | 0.0 | 2.94 -Neigh | 1.5188 | 1.5188 | 1.5188 | 0.0 | 18.95 -Comm | 0.14452 | 0.14452 | 0.14452 | 0.0 | 1.80 -Output | 0.00060487 | 0.00060487 | 0.00060487 | 0.0 | 0.01 -Modify | 0.56352 | 0.56352 | 0.56352 | 0.0 | 7.03 -Other | | 0.1508 | | | 1.88 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 395 ave 395 max 395 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 9652 ave 9652 max 9652 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 9652 -Ave neighs/atom = 8.04333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 4886 -Dangerous builds = 0 -Total wall time: 0:00:08 diff --git a/examples/micelle/log.28Feb2019.micelle.g++.4 b/examples/micelle/log.28Feb2019.micelle.g++.4 deleted file mode 100644 index 6af9051ed2..0000000000 --- a/examples/micelle/log.28Feb2019.micelle.g++.4 +++ /dev/null @@ -1,259 +0,0 @@ -LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) - using 1 OpenMP thread(s) per MPI task -# 2d micelle simulation - -dimension 2 - -neighbor 0.3 bin -neigh_modify delay 5 - -atom_style bond - -# Soft potential push-off - -read_data data.micelle - orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 1200 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 300 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.000130415 secs - read_data CPU = 0.00132132 secs -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - special bonds CPU = 4.76837e-05 secs - -pair_style soft 1.12246 -pair_coeff * * 0.0 1.12246 - -bond_style harmonic -bond_coeff 1 50.0 0.75 - -velocity all create 0.45 2349852 - -variable prefactor equal ramp(1.0,20.0) - -fix 1 all nve -fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 -fix 3 all adapt 1 pair soft a * * v_prefactor -fix 4 all enforce2d - -thermo 50 -run 1000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.42246 - ghost atom cutoff = 1.42246 - binsize = 0.71123, bins = 51 51 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair soft, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 - 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 - 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 - 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 - 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 - 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 - 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 - 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 - 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 - 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 - 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 - 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 - 600 0.45 0.58193041 0.088386617 1.119942 5.131481 - 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 - 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 - 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 - 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 - 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 - 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 - 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 - 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 -Loop time of 0.0377742 on 4 procs for 1000 steps with 1200 atoms - -Performance: 11436375.633 tau/day, 26473.092 timesteps/s -96.6% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.016871 | 0.017299 | 0.018185 | 0.4 | 45.80 -Bond | 0.0010128 | 0.0010633 | 0.001116 | 0.1 | 2.81 -Neigh | 0.004832 | 0.0048565 | 0.0048807 | 0.0 | 12.86 -Comm | 0.0066509 | 0.0077528 | 0.0084352 | 0.8 | 20.52 -Output | 0.00022054 | 0.00028259 | 0.00046587 | 0.0 | 0.75 -Modify | 0.0035386 | 0.0036086 | 0.0036943 | 0.1 | 9.55 -Other | | 0.002912 | | | 7.71 - -Nlocal: 300 ave 305 max 292 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 100.25 ave 108 max 93 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Neighs: 784 ave 815 max 739 min -Histogram: 1 0 0 0 0 0 1 1 0 1 - -Total # of neighbors = 3136 -Ave neighs/atom = 2.61333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 92 -Dangerous builds = 0 - -unfix 3 - -# Main run - -pair_style lj/cut 2.5 - -# solvent/head - full-size and long-range - -pair_coeff 1 1 1.0 1.0 2.5 -pair_coeff 2 2 1.0 1.0 2.5 -pair_coeff 1 2 1.0 1.0 2.5 - -# tail/tail - size-averaged and long-range - -pair_coeff 3 3 1.0 0.75 2.5 -pair_coeff 4 4 1.0 0.50 2.5 -pair_coeff 3 4 1.0 0.67 2.5 - -# solvent/tail - full-size and repulsive - -pair_coeff 1 3 1.0 1.0 1.12246 -pair_coeff 1 4 1.0 1.0 1.12246 - -# head/tail - size-averaged and repulsive - -pair_coeff 2 3 1.0 0.88 1.12246 -pair_coeff 2 4 1.0 0.75 1.12246 - -thermo 1000 - -#dump 1 all atom 2000 dump.micelle - -#dump 2 all image 2000 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -#dump 3 all movie 2000 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -reset_timestep 0 -run 60000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 26 26 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.001 | 4.032 | 4.124 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 - 1000 0.45 -1.9727652 0.058608073 -1.4645321 1.9982444 - 2000 0.44428815 -1.9902282 0.064240544 -1.4820698 1.7051263 - 3000 0.46641766 -1.9856844 0.065017468 -1.4546379 1.6939772 - 4000 0.45734058 -2.0242583 0.070494626 -1.4968042 1.3474276 - 5000 0.44904747 -2.0086954 0.058801142 -1.501221 1.4632351 - 6000 0.44961405 -2.0334509 0.05721299 -1.5269985 1.3093586 - 7000 0.45474928 -2.0453645 0.064725006 -1.5262692 1.1581035 - 8000 0.44274767 -2.0375379 0.062216035 -1.5329431 1.312914 - 9000 0.46176571 -2.0473031 0.065581966 -1.5203402 1.2013868 - 10000 0.45046977 -2.0540466 0.065402724 -1.5385495 0.95819581 - 11000 0.45016671 -2.0610028 0.056993955 -1.5542172 1.0433435 - 12000 0.43823039 -2.073155 0.065171939 -1.5701178 1.1400059 - 13000 0.44482161 -2.0678338 0.063901045 -1.5594819 0.97993813 - 14000 0.45 -2.0892562 0.061753632 -1.5778776 0.89841778 - 15000 0.44328626 -2.0859346 0.059956258 -1.5830615 0.90664821 - 16000 0.45666508 -2.0859262 0.059582346 -1.5700593 0.9702235 - 17000 0.44832038 -2.0762124 0.059153394 -1.5691122 0.93020504 - 18000 0.4555831 -2.0844959 0.057986324 -1.5713062 0.87398232 - 19000 0.45257867 -2.0671736 0.062190389 -1.5527816 0.89208496 - 20000 0.44010419 -2.1020944 0.062053708 -1.6003033 0.84140973 - 21000 0.45239369 -2.0820308 0.060981799 -1.5690323 0.98502522 - 22000 0.44607468 -2.0820602 0.051731316 -1.5846259 0.86120529 - 23000 0.45088473 -2.0865286 0.05727778 -1.5787418 1.1479844 - 24000 0.45526919 -2.1086678 0.057378327 -1.5963997 0.86944138 - 25000 0.46536624 -2.1055425 0.05665328 -1.5839108 0.72895438 - 26000 0.46716668 -2.1035267 0.057498747 -1.5792505 0.85105386 - 27000 0.44374699 -2.0932213 0.060937242 -1.5889069 0.93200759 - 28000 0.45944001 -2.0968869 0.053052954 -1.5847768 0.78909249 - 29000 0.4543632 -2.10493 0.061511018 -1.5894345 0.85862527 - 30000 0.44987776 -2.0942536 0.062431086 -1.5823197 0.7349894 - 31000 0.43829016 -2.0951259 0.060245682 -1.5969553 0.86702973 - 32000 0.45416601 -2.0991679 0.055978905 -1.5894015 0.75777153 - 33000 0.4605079 -2.1118364 0.058205688 -1.5935066 0.86041104 - 34000 0.43638213 -2.0925345 0.067533519 -1.5889825 0.85100425 - 35000 0.46912252 -2.1082718 0.051646432 -1.5878938 0.73613751 - 36000 0.45 -2.0966442 0.052507159 -1.5945121 0.88722487 - 37000 0.44970507 -2.1029685 0.065454263 -1.588184 0.76033821 - 38000 0.44910233 -2.097751 0.05767009 -1.5913528 0.95830923 - 39000 0.4322161 -2.1060426 0.062453704 -1.611733 0.74681695 - 40000 0.46143858 -2.1328575 0.057333011 -1.6144704 0.58326322 - 41000 0.43180549 -2.1070656 0.064150563 -1.6114694 0.82842684 - 42000 0.46738909 -2.1067947 0.058017036 -1.5817781 0.73292362 - 43000 0.43699124 -2.1171964 0.062817262 -1.6177521 0.73354741 - 44000 0.45262916 -2.1281307 0.055228619 -1.6206502 0.64167946 - 45000 0.43905419 -2.088789 0.055597999 -1.5945027 0.8002542 - 46000 0.44485569 -2.1035061 0.067828181 -1.5911929 0.71861494 - 47000 0.44496824 -2.0968296 0.0632326 -1.5889996 0.75202899 - 48000 0.46567244 -2.1235948 0.061032118 -1.5972783 0.64094556 - 49000 0.43202506 -2.0986097 0.053464022 -1.6134806 0.83857984 - 50000 0.45454698 -2.1263344 0.058119708 -1.6140465 0.67030037 - 51000 0.43702766 -2.1292347 0.074047424 -1.6185238 0.52896462 - 52000 0.46367081 -2.1177288 0.06726625 -1.5871781 0.74343227 - 53000 0.45 -2.1341074 0.062769314 -1.6217131 0.51130365 - 54000 0.44862492 -2.1272108 0.057723381 -1.6212364 0.54735429 - 55000 0.44926027 -2.1350444 0.066186625 -1.6199719 0.66821299 - 56000 0.4544227 -2.1325537 0.065298628 -1.6132111 0.63597556 - 57000 0.45697003 -2.1323238 0.053312855 -1.6224218 0.55572633 - 58000 0.45698902 -2.1043208 0.055835989 -1.5918766 0.63502658 - 59000 0.4425306 -2.1120353 0.056617261 -1.6132563 0.65681272 - 60000 0.44319296 -2.1171981 0.058330294 -1.6160442 0.63602511 -Loop time of 2.63918 on 4 procs for 60000 steps with 1200 atoms - -Performance: 9821248.084 tau/day, 22734.371 timesteps/s -97.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1742 | 1.278 | 1.3471 | 5.9 | 48.43 -Bond | 0.046621 | 0.06565 | 0.081322 | 5.1 | 2.49 -Neigh | 0.46642 | 0.46917 | 0.47105 | 0.3 | 17.78 -Comm | 0.47295 | 0.55928 | 0.67758 | 10.5 | 21.19 -Output | 0.00073624 | 0.00173 | 0.0047016 | 4.1 | 0.07 -Modify | 0.14511 | 0.15226 | 0.15887 | 1.5 | 5.77 -Other | | 0.1131 | | | 4.28 - -Nlocal: 300 ave 309 max 281 min -Histogram: 1 0 0 0 0 0 0 1 0 2 -Nghost: 232.75 ave 234 max 231 min -Histogram: 1 0 0 1 0 0 0 0 0 2 -Neighs: 2450.25 ave 2576 max 2179 min -Histogram: 1 0 0 0 0 0 0 0 1 2 - -Total # of neighbors = 9801 -Ave neighs/atom = 8.1675 -Ave special neighs/atom = 0.5 -Neighbor list builds = 4887 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/micelle/log.28Feb2019.micelle.rigid.g++.1 b/examples/micelle/log.28Feb2019.micelle.rigid.g++.1 deleted file mode 100644 index ec0079818d..0000000000 --- a/examples/micelle/log.28Feb2019.micelle.rigid.g++.1 +++ /dev/null @@ -1,290 +0,0 @@ -LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) - using 1 OpenMP thread(s) per MPI task -# 2d micelle simulation - -dimension 2 - -neighbor 0.3 bin -neigh_modify delay 5 - -atom_style bond - -# Soft potential push-off - -read_data data.micelle - orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 1200 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 300 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.000271559 secs - read_data CPU = 0.00115585 secs -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - special bonds CPU = 8.39233e-05 secs - -pair_style soft 1.12246 -pair_coeff * * 0.0 1.12246 - -bond_style harmonic -bond_coeff 1 50.0 0.75 - -velocity all create 0.45 2349852 - -variable prefactor equal ramp(1.0,20.0) - -fix 1 all nve -fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 -fix 3 all adapt 1 pair soft a * * v_prefactor -fix 4 all enforce2d - -thermo 50 -run 1000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.42246 - ghost atom cutoff = 1.42246 - binsize = 0.71123, bins = 51 51 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair soft, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 - 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 - 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 - 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 - 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 - 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 - 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 - 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 - 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 - 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 - 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 - 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 - 600 0.45 0.58193041 0.088386617 1.119942 5.131481 - 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 - 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 - 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 - 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 - 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 - 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 - 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 - 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 -Loop time of 0.107201 on 1 procs for 1000 steps with 1200 atoms - -Performance: 4029800.456 tau/day, 9328.242 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.072035 | 0.072035 | 0.072035 | 0.0 | 67.20 -Bond | 0.0039918 | 0.0039918 | 0.0039918 | 0.0 | 3.72 -Neigh | 0.016078 | 0.016078 | 0.016078 | 0.0 | 15.00 -Comm | 0.0018375 | 0.0018375 | 0.0018375 | 0.0 | 1.71 -Output | 0.00016379 | 0.00016379 | 0.00016379 | 0.0 | 0.15 -Modify | 0.010665 | 0.010665 | 0.010665 | 0.0 | 9.95 -Other | | 0.002429 | | | 2.27 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 195 ave 195 max 195 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 3136 ave 3136 max 3136 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 3136 -Ave neighs/atom = 2.61333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 92 -Dangerous builds = 0 - -unfix 3 - -# Main run - -pair_style lj/cut 2.5 - -# solvent/head - full-size and long-range - -pair_coeff 1 1 1.0 1.0 2.5 -pair_coeff 2 2 1.0 1.0 2.5 -pair_coeff 1 2 1.0 1.0 2.5 - -# tail/tail - size-averaged and long-range - -pair_coeff 3 3 1.0 0.75 2.5 -pair_coeff 4 4 1.0 0.50 2.5 -pair_coeff 3 4 1.0 0.67 2.5 - -# solvent/tail - full-size and repulsive - -pair_coeff 1 3 1.0 1.0 1.12246 -pair_coeff 1 4 1.0 1.0 1.12246 - -# head/tail - size-averaged and repulsive - -pair_coeff 2 3 1.0 0.88 1.12246 -pair_coeff 2 4 1.0 0.75 1.12246 - -thermo 1000 - -#dump 1 all atom 2000 dump.micelle - -#dump 2 all image 2000 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -#dump 3 all movie 2000 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -reset_timestep 0 -group solvent molecule 0 -750 atoms in group solvent -group solute subtract all solvent -450 atoms in group solute -unfix 1 -unfix 2 -unfix 4 -fix 1 solvent nve -fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0 -fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211 -150 rigid bodies with 450 atoms -fix 4 all enforce2d -run 20000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 26 26 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.274 | 5.274 | 5.274 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.44603578 -1.7056163 0.08808163 -1.2555023 3.4039736 - 1000 0.46008168 -1.9040837 0.08808163 -1.4425691 0.93225457 - 2000 0.44520658 -1.9317253 0.08808163 -1.4822843 3.8192896 - 3000 0.43988556 -1.945898 0.08808163 -1.5007759 3.0371634 - 4000 0.4646519 -1.9753553 0.08808163 -1.5101312 -1.8041178 - 5000 0.4362993 -1.9763715 0.08808163 -1.5341603 1.5037284 - 6000 0.47007384 -1.9833154 0.08808163 -1.5136905 2.1227653 - 7000 0.44854623 -1.9914288 0.08808163 -1.5392772 3.9458099 - 8000 0.43841372 -1.9779603 0.08808163 -1.5340328 -4.5429769 - 9000 0.4518303 -1.9834387 0.08808163 -1.5286215 4.4230447 - 10000 0.43562904 -2.001471 0.08808163 -1.5598038 1.8919582 - 11000 0.44014575 -1.9820611 0.08808163 -1.5367278 -2.1189418 - 12000 0.44466956 -2.0134014 0.08808163 -1.5643963 -2.5218497 - 13000 0.45274369 -2.021443 0.08808163 -1.5658844 2.4795173 - 14000 0.44742645 -2.011108 0.08808163 -1.5598653 -0.74697767 - 15000 0.4674843 -2.024737 0.08808163 -1.5572139 -1.9539999 - 16000 0.45610154 -2.0401029 0.08808163 -1.5818189 -0.53082066 - 17000 0.44679292 -2.0365577 0.08808163 -1.5858291 -6.5040295 - 18000 0.44279107 -2.0500326 0.08808163 -1.6025522 -0.051597102 - 19000 0.45603993 -2.0306289 0.08808163 -1.5723948 1.0986608 - 20000 0.44519606 -2.0412229 0.08808163 -1.5917904 -1.0406746 -Loop time of 3.68102 on 1 procs for 20000 steps with 1200 atoms - -Performance: 2347175.802 tau/day, 5433.277 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.7349 | 1.7349 | 1.7349 | 0.0 | 47.13 -Bond | 0.079483 | 0.079483 | 0.079483 | 0.0 | 2.16 -Neigh | 0.49063 | 0.49063 | 0.49063 | 0.0 | 13.33 -Comm | 0.049093 | 0.049093 | 0.049093 | 0.0 | 1.33 -Output | 0.00022578 | 0.00022578 | 0.00022578 | 0.0 | 0.01 -Modify | 1.273 | 1.273 | 1.273 | 0.0 | 34.58 -Other | | 0.05369 | | | 1.46 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 395 ave 395 max 395 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 8915 ave 8915 max 8915 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 8915 -Ave neighs/atom = 7.42917 -Ave special neighs/atom = 0.5 -Neighbor list builds = 1580 -Dangerous builds = 0 -unfix 5 -unfix 4 -fix 5 solute rigid/small molecule langevin 0.45 0.45 0.5 112211 - create bodies CPU = 0.00012517 secs -150 rigid bodies with 450 atoms - 1.04536 = max distance from body owner to body atom -fix 4 all enforce2d -run 20000 -Per MPI rank memory allocation (min/avg/max) = 8.633 | 8.633 | 8.633 Mbytes -Step Temp E_pair E_mol TotEng Press - 20000 0.44519606 -2.0412229 0.08808163 -1.5917904 1.3058893 - 21000 0.4353376 -2.0483342 0.08808163 -1.6069035 0.53023317 - 22000 0.44034324 -2.0416876 0.08808163 -1.5961941 4.0327077 - 23000 0.4685403 -2.05295 0.08808163 -1.5845698 3.6792349 - 24000 0.44872075 -2.0320623 0.08808163 -1.579769 -2.0476923 - 25000 0.46829594 -2.0671408 0.08808163 -1.5989589 2.180811 - 26000 0.45257544 -2.0418792 0.08808163 -1.5864572 3.3924018 - 27000 0.44269664 -2.0409905 0.08808163 -1.5935868 -0.17012673 - 28000 0.46961216 -2.0552479 0.08808163 -1.5859978 -7.2870888 - 29000 0.46683129 -2.0438334 0.08808163 -1.5768404 3.0583141 - 30000 0.44262228 -2.036737 0.08808163 -1.5893937 0.087520915 - 31000 0.43517227 -2.0479672 0.08808163 -1.6066708 -0.3426009 - 32000 0.44543779 -2.0538031 0.08808163 -1.6041744 -0.2093148 - 33000 0.44629079 -2.0409901 0.08808163 -1.5906691 3.310113 - 34000 0.43058831 -2.0713827 0.08808163 -1.6338069 0.14128843 - 35000 0.44546512 -2.0427068 0.08808163 -1.593056 -3.1386697 - 36000 0.42971129 -2.0527435 0.08808163 -1.6158795 -2.7334963 - 37000 0.44707969 -2.0461803 0.08808163 -1.595219 -3.8777678 - 38000 0.43150818 -2.0435276 0.08808163 -1.6052052 0.2905487 - 39000 0.44463343 -2.0522113 0.08808163 -1.6032355 3.543123 - 40000 0.44582593 -2.052213 0.08808163 -1.6022693 1.1486536 -Loop time of 3.69012 on 1 procs for 20000 steps with 1200 atoms - -Performance: 2341388.948 tau/day, 5419.882 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.756 | 1.756 | 1.756 | 0.0 | 47.59 -Bond | 0.079221 | 0.079221 | 0.079221 | 0.0 | 2.15 -Neigh | 0.49085 | 0.49085 | 0.49085 | 0.0 | 13.30 -Comm | 0.048317 | 0.048317 | 0.048317 | 0.0 | 1.31 -Output | 0.0002315 | 0.0002315 | 0.0002315 | 0.0 | 0.01 -Modify | 1.2616 | 1.2616 | 1.2616 | 0.0 | 34.19 -Other | | 0.05386 | | | 1.46 - -Nlocal: 1200 ave 1200 max 1200 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 393 ave 393 max 393 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 9091 ave 9091 max 9091 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 9091 -Ave neighs/atom = 7.57583 -Ave special neighs/atom = 0.5 -Neighbor list builds = 1582 -Dangerous builds = 0 -Total wall time: 0:00:07 diff --git a/examples/micelle/log.28Feb2019.micelle.rigid.g++.4 b/examples/micelle/log.28Feb2019.micelle.rigid.g++.4 deleted file mode 100644 index a6687a3c00..0000000000 --- a/examples/micelle/log.28Feb2019.micelle.rigid.g++.4 +++ /dev/null @@ -1,290 +0,0 @@ -LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) - using 1 OpenMP thread(s) per MPI task -# 2d micelle simulation - -dimension 2 - -neighbor 0.3 bin -neigh_modify delay 5 - -atom_style bond - -# Soft potential push-off - -read_data data.micelle - orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 1200 atoms - scanning bonds ... - 1 = max bonds/atom - reading bonds ... - 300 bonds - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.000175714 secs - read_data CPU = 0.00145626 secs -special_bonds fene - 2 = max # of 1-2 neighbors - 2 = max # of special neighbors - special bonds CPU = 7.22408e-05 secs - -pair_style soft 1.12246 -pair_coeff * * 0.0 1.12246 - -bond_style harmonic -bond_coeff 1 50.0 0.75 - -velocity all create 0.45 2349852 - -variable prefactor equal ramp(1.0,20.0) - -fix 1 all nve -fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 -fix 3 all adapt 1 pair soft a * * v_prefactor -fix 4 all enforce2d - -thermo 50 -run 1000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.42246 - ghost atom cutoff = 1.42246 - binsize = 0.71123, bins = 51 51 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair soft, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 - 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 - 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 - 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 - 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 - 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 - 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 - 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 - 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 - 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 - 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 - 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 - 600 0.45 0.58193041 0.088386617 1.119942 5.131481 - 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 - 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 - 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 - 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 - 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 - 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 - 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 - 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 -Loop time of 0.0389124 on 4 procs for 1000 steps with 1200 atoms - -Performance: 11101855.138 tau/day, 25698.739 timesteps/s -95.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.016776 | 0.017405 | 0.018435 | 0.5 | 44.73 -Bond | 0.0010033 | 0.0011995 | 0.0015519 | 0.6 | 3.08 -Neigh | 0.0044944 | 0.0045093 | 0.0045218 | 0.0 | 11.59 -Comm | 0.0080328 | 0.0093863 | 0.010242 | 0.9 | 24.12 -Output | 0.00021577 | 0.00027579 | 0.00045323 | 0.0 | 0.71 -Modify | 0.0034575 | 0.0036355 | 0.0040002 | 0.4 | 9.34 -Other | | 0.002501 | | | 6.43 - -Nlocal: 300 ave 305 max 292 min -Histogram: 1 0 0 0 0 0 1 0 1 1 -Nghost: 100.25 ave 108 max 93 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Neighs: 784 ave 815 max 739 min -Histogram: 1 0 0 0 0 0 1 1 0 1 - -Total # of neighbors = 3136 -Ave neighs/atom = 2.61333 -Ave special neighs/atom = 0.5 -Neighbor list builds = 92 -Dangerous builds = 0 - -unfix 3 - -# Main run - -pair_style lj/cut 2.5 - -# solvent/head - full-size and long-range - -pair_coeff 1 1 1.0 1.0 2.5 -pair_coeff 2 2 1.0 1.0 2.5 -pair_coeff 1 2 1.0 1.0 2.5 - -# tail/tail - size-averaged and long-range - -pair_coeff 3 3 1.0 0.75 2.5 -pair_coeff 4 4 1.0 0.50 2.5 -pair_coeff 3 4 1.0 0.67 2.5 - -# solvent/tail - full-size and repulsive - -pair_coeff 1 3 1.0 1.0 1.12246 -pair_coeff 1 4 1.0 1.0 1.12246 - -# head/tail - size-averaged and repulsive - -pair_coeff 2 3 1.0 0.88 1.12246 -pair_coeff 2 4 1.0 0.75 1.12246 - -thermo 1000 - -#dump 1 all atom 2000 dump.micelle - -#dump 2 all image 2000 image.*.jpg type type zoom 1.6 -#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -#dump 3 all movie 2000 movie.mpg type type zoom 1.6 -#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 - -reset_timestep 0 -group solvent molecule 0 -750 atoms in group solvent -group solute subtract all solvent -450 atoms in group solute -unfix 1 -unfix 2 -unfix 4 -fix 1 solvent nve -fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0 -fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211 -150 rigid bodies with 450 atoms -fix 4 all enforce2d -run 20000 -Neighbor list info ... - update every 1 steps, delay 5 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 26 26 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.251 | 5.282 | 5.374 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0.44603578 -1.7056163 0.08808163 -1.2555023 3.4039736 - 1000 0.46008163 -1.9040835 0.08808163 -1.4425689 0.93225869 - 2000 0.44943348 -1.9355135 0.08808163 -1.4826417 3.8399671 - 3000 0.4448437 -1.9480307 0.08808163 -1.4988842 2.5506553 - 4000 0.46013872 -1.9783821 0.08808163 -1.5168212 -1.8963215 - 5000 0.45520233 -1.9659462 0.08808163 -1.5083921 1.9238897 - 6000 0.44942049 -1.9663403 0.08808163 -1.513479 3.0633512 - 7000 0.45975758 -1.988462 0.08808163 -1.5272105 4.8267309 - 8000 0.45125238 -1.9913522 0.08808163 -1.5370041 -4.6644852 - 9000 0.45863606 -1.9792375 0.08808163 -1.5188962 4.3655071 - 10000 0.46264541 -1.9864611 0.08808163 -1.5228656 2.2176464 - 11000 0.45048361 -1.9907235 0.08808163 -1.5369994 -0.055360699 - 12000 0.44536719 -2.012875 0.08808163 -1.5633037 -0.2583823 - 13000 0.44212663 -2.0060111 0.08808163 -1.55907 3.3616171 - 14000 0.44984353 -2.0335408 0.08808163 -1.5803361 -0.21585645 - 15000 0.44896672 -2.0385265 0.08808163 -1.5860335 -4.6186206 - 16000 0.46694997 -2.032795 0.08808163 -1.5657056 0.53443281 - 17000 0.43208201 -2.0272255 0.08808163 -1.5884373 -6.5239975 - 18000 0.43281873 -2.0331268 0.08808163 -1.5937406 -0.048319943 - 19000 0.44704527 -2.0286742 0.08808163 -1.5777408 1.6356417 - 20000 0.44279735 -2.0443561 0.08808163 -1.5968706 -3.8337952 -Loop time of 1.71924 on 4 procs for 20000 steps with 1200 atoms - -Performance: 5025468.853 tau/day, 11633.030 timesteps/s -98.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.39864 | 0.40873 | 0.42192 | 1.6 | 23.77 -Bond | 0.02118 | 0.021816 | 0.022785 | 0.4 | 1.27 -Neigh | 0.13931 | 0.14031 | 0.14117 | 0.2 | 8.16 -Comm | 0.13974 | 0.15328 | 0.16884 | 3.3 | 8.92 -Output | 0.00026131 | 0.00044435 | 0.00099206 | 0.0 | 0.03 -Modify | 0.93275 | 0.94138 | 0.95072 | 0.7 | 54.76 -Other | | 0.05327 | | | 3.10 - -Nlocal: 300 ave 303 max 298 min -Histogram: 1 0 1 0 1 0 0 0 0 1 -Nghost: 218.5 ave 226 max 215 min -Histogram: 2 1 0 0 0 0 0 0 0 1 -Neighs: 2258.75 ave 2283 max 2216 min -Histogram: 1 0 0 0 0 0 1 0 1 1 - -Total # of neighbors = 9035 -Ave neighs/atom = 7.52917 -Ave special neighs/atom = 0.5 -Neighbor list builds = 1580 -Dangerous builds = 0 -unfix 5 -unfix 4 -fix 5 solute rigid/small molecule langevin 0.45 0.45 0.5 112211 - create bodies CPU = 5.43594e-05 secs -150 rigid bodies with 450 atoms - 0.916597 = max distance from body owner to body atom -fix 4 all enforce2d -run 20000 -Per MPI rank memory allocation (min/avg/max) = 8.568 | 8.6 | 8.691 Mbytes -Step Temp E_pair E_mol TotEng Press - 20000 0.44279735 -2.0443561 0.08808163 -1.5968706 -1.033643 - 21000 0.4529129 -2.049461 0.08808163 -1.5937651 0.93160285 - 22000 0.45039188 -2.0530092 0.08808163 -1.5993595 -0.10608965 - 23000 0.45261583 -2.0336042 0.08808163 -1.5781494 -2.5769871 - 24000 0.4608331 -2.0404645 0.08808163 -1.57834 3.1931675 - 25000 0.43479001 -2.0617104 0.08808163 -1.6207242 2.8190122 - 26000 0.47009651 -2.0754873 0.08808163 -1.605844 -0.9158501 - 27000 0.45002704 -2.0782104 0.08808163 -1.6248568 0.98629661 - 28000 0.45126136 -2.0592619 0.08808163 -1.6049065 0.03305448 - 29000 0.44355328 -2.0572858 0.08808163 -1.6091868 -6.0797989 - 30000 0.45053899 -2.0530953 0.08808163 -1.5993261 0.38382951 - 31000 0.46931923 -2.0718827 0.08808163 -1.6028703 2.2346891 - 32000 0.45348857 -2.0744024 0.08808163 -1.6182393 4.5028966 - 33000 0.44767742 -2.0597127 0.08808163 -1.6082662 -2.8021641 - 34000 0.45287544 -2.0857303 0.08808163 -1.6300648 -5.384091 - 35000 0.44743898 -2.0927246 0.08808163 -1.6414717 1.4800508 - 36000 0.45627028 -2.0720546 0.08808163 -1.6136336 -2.9961696 - 37000 0.4641334 -2.0701098 0.08808163 -1.6053065 8.4186854 - 38000 0.45922901 -2.0962331 0.08808163 -1.6354106 0.38361763 - 39000 0.4692834 -2.0573815 0.08808163 -1.5883982 -2.2177345 - 40000 0.46206931 -2.057851 0.08808163 -1.5947231 -1.0405727 -Loop time of 1.25476 on 4 procs for 20000 steps with 1200 atoms - -Performance: 6885775.862 tau/day, 15939.296 timesteps/s -98.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.40627 | 0.43037 | 0.45515 | 2.6 | 34.30 -Bond | 0.020504 | 0.021573 | 0.022739 | 0.5 | 1.72 -Neigh | 0.14337 | 0.14438 | 0.1453 | 0.2 | 11.51 -Comm | 0.13776 | 0.16647 | 0.19351 | 5.0 | 13.27 -Output | 0.00025082 | 0.00052994 | 0.0013635 | 0.0 | 0.04 -Modify | 0.45467 | 0.45822 | 0.46259 | 0.5 | 36.52 -Other | | 0.03321 | | | 2.65 - -Nlocal: 300 ave 304 max 293 min -Histogram: 1 0 0 0 0 1 0 0 0 2 -Nghost: 215.25 ave 217 max 213 min -Histogram: 1 0 0 0 0 1 0 1 0 1 -Neighs: 2340 ave 2378 max 2290 min -Histogram: 1 0 0 1 0 0 0 0 0 2 - -Total # of neighbors = 9360 -Ave neighs/atom = 7.8 -Ave special neighs/atom = 0.5 -Neighbor list builds = 1579 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/micelle/log.29Mar2019.micelle-rigid.g++.1 b/examples/micelle/log.29Mar2019.micelle-rigid.g++.1 new file mode 100644 index 0000000000..f1001e6cea --- /dev/null +++ b/examples/micelle/log.29Mar2019.micelle-rigid.g++.1 @@ -0,0 +1,260 @@ +LAMMPS (29 Mar 2019) + using 1 OpenMP thread(s) per MPI task +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle + orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1200 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 300 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000473022 secs + read_data CPU = 0.0024147 secs +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.00022316 secs + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 500 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.42246 + ghost atom cutoff = 1.42246 + binsize = 0.71123, bins = 51 51 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair soft, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 + 50 0.54981866 0.93548899 0.068440043 1.5532895 1.9232786 + 100 0.45 0.99659327 0.079228519 1.5254468 3.2135679 + 150 0.86965411 0.90456016 0.07493355 1.8484231 4.3821925 + 200 0.45 1.01454 0.10663502 1.5708 4.7598476 + 250 0.79636561 0.82567712 0.12105337 1.7424325 5.4983899 + 300 0.45 0.86475538 0.11819875 1.4325791 5.8554758 + 350 0.72135464 0.70693069 0.10912636 1.5368106 6.0388247 + 400 0.45 0.75067331 0.14165013 1.3419484 6.3840708 + 450 0.64839221 0.62402486 0.14173679 1.4136135 6.4791009 + 500 0.45 0.66669513 0.13695201 1.2532721 6.807146 +Loop time of 0.103162 on 1 procs for 500 steps with 1200 atoms + +Performance: 2093802.885 tau/day, 4846.766 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.068308 | 0.068308 | 0.068308 | 0.0 | 66.21 +Bond | 0.004235 | 0.004235 | 0.004235 | 0.0 | 4.11 +Neigh | 0.014069 | 0.014069 | 0.014069 | 0.0 | 13.64 +Comm | 0.0019219 | 0.0019219 | 0.0019219 | 0.0 | 1.86 +Output | 0.00017262 | 0.00017262 | 0.00017262 | 0.0 | 0.17 +Modify | 0.011728 | 0.011728 | 0.011728 | 0.0 | 11.37 +Other | | 0.002726 | | | 2.64 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 197 ave 197 max 197 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3094 ave 3094 max 3094 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3094 +Ave neighs/atom = 2.57833 +Ave special neighs/atom = 0.5 +Neighbor list builds = 52 +Dangerous builds = 0 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 50 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +group solvent molecule 0 +750 atoms in group solvent +group solute subtract all solvent +450 atoms in group solute +unfix 1 +unfix 2 +unfix 4 +fix 1 solvent nve +fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0 +fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211 +150 rigid bodies with 450 atoms +fix 4 all enforce2d +run 500 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 26 26 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.274 | 5.274 | 5.274 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45318168 -1.3753652 0.13695201 -0.8705807 1.975423 + 50 0.77871641 -1.6955252 0.13695201 -0.92651507 0.64222539 + 100 0.5336062 -1.7124572 0.13695201 -1.1423948 -0.11959696 + 150 0.58789067 -1.7926109 0.13695201 -1.1784877 1.2592743 + 200 0.47864796 -1.8040298 0.13695201 -1.2785752 3.6739793 + 250 0.51124651 -1.8614797 0.13695201 -1.309566 2.5817722 + 300 0.45695639 -1.8708384 0.13695201 -1.3629901 3.0833794 + 350 0.477504 -1.8924359 0.13695201 -1.3679098 -5.1605926 + 400 0.45328205 -1.87754 0.13695201 -1.372674 -4.0355858 + 450 0.47465031 -1.9071924 0.13695201 -1.3849826 3.1949617 + 500 0.45533691 -1.9072316 0.13695201 -1.4006978 0.48079061 +Loop time of 0.178806 on 1 procs for 500 steps with 1200 atoms + +Performance: 1208012.705 tau/day, 2796.326 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.086131 | 0.086131 | 0.086131 | 0.0 | 48.17 +Bond | 0.0042472 | 0.0042472 | 0.0042472 | 0.0 | 2.38 +Neigh | 0.021317 | 0.021317 | 0.021317 | 0.0 | 11.92 +Comm | 0.0025985 | 0.0025985 | 0.0025985 | 0.0 | 1.45 +Output | 0.000175 | 0.000175 | 0.000175 | 0.0 | 0.10 +Modify | 0.061408 | 0.061408 | 0.061408 | 0.0 | 34.34 +Other | | 0.00293 | | | 1.64 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 416 ave 416 max 416 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 8769 ave 8769 max 8769 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8769 +Ave neighs/atom = 7.3075 +Ave special neighs/atom = 0.5 +Neighbor list builds = 47 +Dangerous builds = 2 +unfix 2 +unfix 4 +unfix 5 +fix 5 solute rigid/small molecule + create bodies CPU = 0.00015378 secs +150 rigid bodies with 450 atoms + 1.30435 = max distance from body owner to body atom +fix 4 all enforce2d +run 500 +Per MPI rank memory allocation (min/avg/max) = 8.64 | 8.64 | 8.64 Mbytes +Step Temp E_pair E_mol TotEng Press + 500 0.45533691 -1.9072316 0.13695201 -1.4006978 2.4545793 + 550 0.45627282 -1.912409 0.13695201 -1.4051155 2.1845065 + 600 0.44734553 -1.8890695 0.13695201 -1.389022 2.3458965 + 650 0.46444648 -1.9042462 0.13695201 -1.3903185 2.1609319 + 700 0.47113236 -1.8977576 0.13695201 -1.3784032 2.2420351 + 750 0.48554548 -1.9253545 0.13695201 -1.3943015 2.143907 + 800 0.46350091 -1.8865749 0.13695201 -1.3734146 2.294431 + 850 0.4766104 -1.9094039 0.13695201 -1.3856031 2.2077157 + 900 0.48988467 -1.9051538 0.13695201 -1.3705787 2.0107056 + 950 0.48351943 -1.9162485 0.13695201 -1.3868399 2.1891332 + 1000 0.49033701 -1.9115165 0.13695201 -1.3765742 2.1508141 +Loop time of 0.166502 on 1 procs for 500 steps with 1200 atoms + +Performance: 1297278.008 tau/day, 3002.958 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.085767 | 0.085767 | 0.085767 | 0.0 | 51.51 +Bond | 0.0042562 | 0.0042562 | 0.0042562 | 0.0 | 2.56 +Neigh | 0.018039 | 0.018039 | 0.018039 | 0.0 | 10.83 +Comm | 0.0024002 | 0.0024002 | 0.0024002 | 0.0 | 1.44 +Output | 0.00018239 | 0.00018239 | 0.00018239 | 0.0 | 0.11 +Modify | 0.052717 | 0.052717 | 0.052717 | 0.0 | 31.66 +Other | | 0.003141 | | | 1.89 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 415 ave 415 max 415 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 8743 ave 8743 max 8743 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8743 +Ave neighs/atom = 7.28583 +Ave special neighs/atom = 0.5 +Neighbor list builds = 40 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/micelle/log.29Mar2019.micelle-rigid.g++.4 b/examples/micelle/log.29Mar2019.micelle-rigid.g++.4 new file mode 100644 index 0000000000..e65f67a527 --- /dev/null +++ b/examples/micelle/log.29Mar2019.micelle-rigid.g++.4 @@ -0,0 +1,260 @@ +LAMMPS (29 Mar 2019) + using 1 OpenMP thread(s) per MPI task +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle + orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 1200 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 300 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000422001 secs + read_data CPU = 0.00473404 secs +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000183344 secs + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 500 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.42246 + ghost atom cutoff = 1.42246 + binsize = 0.71123, bins = 51 51 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair soft, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 + 50 0.54981866 0.93548899 0.068440043 1.5532895 1.9232786 + 100 0.45 0.99659327 0.079228519 1.5254468 3.2135679 + 150 0.86965411 0.90456016 0.07493355 1.8484231 4.3821925 + 200 0.45 1.01454 0.10663502 1.5708 4.7598476 + 250 0.79636561 0.82567712 0.12105337 1.7424325 5.4983899 + 300 0.45 0.86475538 0.11819875 1.4325791 5.8554758 + 350 0.72135464 0.70693069 0.10912636 1.5368106 6.0388247 + 400 0.45 0.75067331 0.14165013 1.3419484 6.3840708 + 450 0.64839221 0.62402486 0.14173679 1.4136135 6.4791009 + 500 0.45 0.66669513 0.13695201 1.2532721 6.807146 +Loop time of 0.0426326 on 4 procs for 500 steps with 1200 atoms + +Performance: 5066547.720 tau/day, 11728.120 timesteps/s +98.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.016784 | 0.019254 | 0.022154 | 1.5 | 45.16 +Bond | 0.0010612 | 0.0012558 | 0.0014153 | 0.4 | 2.95 +Neigh | 0.0046048 | 0.0046697 | 0.0047245 | 0.1 | 10.95 +Comm | 0.0064592 | 0.0097114 | 0.012527 | 2.4 | 22.78 +Output | 0.00022507 | 0.00026393 | 0.00033951 | 0.0 | 0.62 +Modify | 0.0041659 | 0.0048084 | 0.0053945 | 0.8 | 11.28 +Other | | 0.002669 | | | 6.26 + +Nlocal: 300 ave 304 max 292 min +Histogram: 1 0 0 0 0 0 0 0 2 1 +Nghost: 103.5 ave 108 max 98 min +Histogram: 1 0 0 1 0 0 0 0 0 2 +Neighs: 773.5 ave 792 max 735 min +Histogram: 1 0 0 0 0 0 0 0 2 1 + +Total # of neighbors = 3094 +Ave neighs/atom = 2.57833 +Ave special neighs/atom = 0.5 +Neighbor list builds = 52 +Dangerous builds = 0 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 50 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +group solvent molecule 0 +750 atoms in group solvent +group solute subtract all solvent +450 atoms in group solute +unfix 1 +unfix 2 +unfix 4 +fix 1 solvent nve +fix 2 solvent temp/rescale 100 0.45 0.45 0.02 1.0 +fix 5 solute rigid molecule langevin 0.45 0.45 0.5 112211 +150 rigid bodies with 450 atoms +fix 4 all enforce2d +run 500 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 26 26 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.251 | 5.282 | 5.374 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45318168 -1.3753652 0.13695201 -0.8705807 1.975423 + 50 0.77871641 -1.6955252 0.13695201 -0.92651507 0.64222539 + 100 0.5336062 -1.7124572 0.13695201 -1.1423948 -0.11959696 + 150 0.58789067 -1.7926109 0.13695201 -1.1784877 1.2592743 + 200 0.47864796 -1.8040298 0.13695201 -1.2785752 3.6739793 + 250 0.51124651 -1.8614797 0.13695201 -1.309566 2.5817722 + 300 0.45695639 -1.8708384 0.13695201 -1.3629901 3.0833794 + 350 0.477504 -1.8924359 0.13695201 -1.3679098 -5.1605926 + 400 0.45328205 -1.87754 0.13695201 -1.372674 -4.0355858 + 450 0.47465031 -1.9071924 0.13695201 -1.3849826 3.1949617 + 500 0.45533691 -1.9072316 0.13695201 -1.4006978 0.48079061 +Loop time of 0.0887392 on 4 procs for 500 steps with 1200 atoms + +Performance: 2434100.210 tau/day, 5634.491 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.022611 | 0.022839 | 0.023082 | 0.1 | 25.74 +Bond | 0.0010793 | 0.0011569 | 0.0012515 | 0.2 | 1.30 +Neigh | 0.0064609 | 0.0064996 | 0.0065265 | 0.0 | 7.32 +Comm | 0.0071712 | 0.0073687 | 0.0077734 | 0.3 | 8.30 +Output | 0.00023389 | 0.00025356 | 0.00030327 | 0.0 | 0.29 +Modify | 0.047258 | 0.047683 | 0.048503 | 0.2 | 53.73 +Other | | 0.002938 | | | 3.31 + +Nlocal: 300 ave 309 max 291 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 218.75 ave 223 max 216 min +Histogram: 1 0 2 0 0 0 0 0 0 1 +Neighs: 2192.25 ave 2251 max 2113 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 8769 +Ave neighs/atom = 7.3075 +Ave special neighs/atom = 0.5 +Neighbor list builds = 47 +Dangerous builds = 2 +unfix 2 +unfix 4 +unfix 5 +fix 5 solute rigid/small molecule + create bodies CPU = 7.70092e-05 secs +150 rigid bodies with 450 atoms + 1.30435 = max distance from body owner to body atom +fix 4 all enforce2d +run 500 +Per MPI rank memory allocation (min/avg/max) = 8.565 | 8.597 | 8.69 Mbytes +Step Temp E_pair E_mol TotEng Press + 500 0.45533691 -1.9072316 0.13695201 -1.4006978 2.4545793 + 550 0.45627282 -1.912409 0.13695201 -1.4051155 2.1845065 + 600 0.44734553 -1.8890695 0.13695201 -1.389022 2.3458965 + 650 0.46444648 -1.9042462 0.13695201 -1.3903185 2.1609319 + 700 0.47113236 -1.8977576 0.13695201 -1.3784032 2.2420351 + 750 0.48554548 -1.9253545 0.13695201 -1.3943015 2.143907 + 800 0.46350091 -1.8865749 0.13695201 -1.3734146 2.294431 + 850 0.4766104 -1.9094039 0.13695201 -1.3856031 2.2077157 + 900 0.48988467 -1.9051538 0.13695201 -1.3705787 2.0107056 + 950 0.48351942 -1.9162485 0.13695201 -1.3868399 2.1891332 + 1000 0.490337 -1.9115164 0.13695201 -1.3765742 2.1508141 +Loop time of 0.0588261 on 4 procs for 500 steps with 1200 atoms + +Performance: 3671840.233 tau/day, 8499.630 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.022407 | 0.022631 | 0.0229 | 0.1 | 38.47 +Bond | 0.0010669 | 0.0011355 | 0.0012124 | 0.2 | 1.93 +Neigh | 0.0052333 | 0.00528 | 0.0053182 | 0.0 | 8.98 +Comm | 0.0063677 | 0.0066406 | 0.0068488 | 0.2 | 11.29 +Output | 0.00023055 | 0.00024778 | 0.00028086 | 0.0 | 0.42 +Modify | 0.020577 | 0.020651 | 0.020834 | 0.1 | 35.11 +Other | | 0.00224 | | | 3.81 + +Nlocal: 300 ave 303 max 295 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 219 ave 224 max 215 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 2185.75 ave 2244 max 2143 min +Histogram: 1 1 0 0 0 1 0 0 0 1 + +Total # of neighbors = 8743 +Ave neighs/atom = 7.28583 +Ave special neighs/atom = 0.5 +Neighbor list builds = 40 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/micelle/log.29Mar2019.micelle.g++.1 b/examples/micelle/log.29Mar2019.micelle.g++.1 new file mode 100644 index 0000000000..d482d6c890 --- /dev/null +++ b/examples/micelle/log.29Mar2019.micelle.g++.1 @@ -0,0 +1,218 @@ +LAMMPS (29 Mar 2019) + using 1 OpenMP thread(s) per MPI task +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle + orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1200 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 300 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.00037837 secs + read_data CPU = 0.00206876 secs +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000177383 secs + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.42246 + ghost atom cutoff = 1.42246 + binsize = 0.71123, bins = 51 51 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair soft, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.799 | 3.799 | 3.799 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 + 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 + 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 + 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 + 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 + 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 + 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 + 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 + 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 + 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 + 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 + 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 + 600 0.45 0.58193041 0.088386617 1.119942 5.131481 + 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 + 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 + 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 + 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 + 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 + 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 + 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 + 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 +Loop time of 0.208895 on 1 procs for 1000 steps with 1200 atoms + +Performance: 2068027.282 tau/day, 4787.100 timesteps/s +99.4% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.14142 | 0.14142 | 0.14142 | 0.0 | 67.70 +Bond | 0.008441 | 0.008441 | 0.008441 | 0.0 | 4.04 +Neigh | 0.025716 | 0.025716 | 0.025716 | 0.0 | 12.31 +Comm | 0.0036864 | 0.0036864 | 0.0036864 | 0.0 | 1.76 +Output | 0.0003562 | 0.0003562 | 0.0003562 | 0.0 | 0.17 +Modify | 0.023699 | 0.023699 | 0.023699 | 0.0 | 11.35 +Other | | 0.00558 | | | 2.67 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 195 ave 195 max 195 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3136 ave 3136 max 3136 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3136 +Ave neighs/atom = 2.61333 +Ave special neighs/atom = 0.5 +Neighbor list builds = 92 +Dangerous builds = 0 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 50 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 26 26 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.024 | 4.024 | 4.024 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 + 50 0.59734982 -1.8103783 0.076066922 -1.1374593 3.2770557 + 100 0.45 -1.8347112 0.093132329 -1.2919539 3.024661 + 150 0.51924311 -1.8943977 0.076004124 -1.2995832 2.5570373 + 200 0.45 -1.8918672 0.082422107 -1.3598201 2.5629655 + 250 0.50281134 -1.920406 0.074011331 -1.3440023 2.3518682 + 300 0.45 -1.9351047 0.075337265 -1.4101424 2.3249947 + 350 0.47650026 -1.9313687 0.072115117 -1.3831504 2.1987532 + 400 0.45 -1.9554318 0.081603939 -1.4242028 2.0787066 + 450 0.47220236 -1.9468502 0.065625624 -1.4094157 2.0984288 + 500 0.4684673 -1.9444333 0.076696283 -1.3996601 2.0528682 + 550 0.47683128 -1.958676 0.070589719 -1.4116523 2.0856022 + 600 0.46851243 -1.9338267 0.07060548 -1.3950992 2.26405 + 650 0.46874142 -1.9462493 0.069134685 -1.4087638 2.1070263 + 700 0.46437384 -1.9309953 0.071977522 -1.3950309 2.2256923 + 750 0.47326225 -1.9484255 0.075435845 -1.4001218 2.0880254 + 800 0.45 -1.9646005 0.064159585 -1.4508159 2.0612696 + 850 0.46748307 -1.970559 0.060384874 -1.4430806 1.9472879 + 900 0.46909484 -1.953723 0.062470295 -1.4225488 2.0222909 + 950 0.45631531 -1.9387753 0.067536568 -1.4153037 2.0638421 + 1000 0.45 -1.9727646 0.058607721 -1.4645318 1.9982315 +Loop time of 0.252254 on 1 procs for 1000 steps with 1200 atoms + +Performance: 1712557.882 tau/day, 3964.254 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.17177 | 0.17177 | 0.17177 | 0.0 | 68.09 +Bond | 0.0084555 | 0.0084555 | 0.0084555 | 0.0 | 3.35 +Neigh | 0.03991 | 0.03991 | 0.03991 | 0.0 | 15.82 +Comm | 0.0049119 | 0.0049119 | 0.0049119 | 0.0 | 1.95 +Output | 0.00039077 | 0.00039077 | 0.00039077 | 0.0 | 0.15 +Modify | 0.021131 | 0.021131 | 0.021131 | 0.0 | 8.38 +Other | | 0.005685 | | | 2.25 + +Nlocal: 1200 ave 1200 max 1200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 415 ave 415 max 415 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 8586 ave 8586 max 8586 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8586 +Ave neighs/atom = 7.155 +Ave special neighs/atom = 0.5 +Neighbor list builds = 86 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/micelle/log.29Mar2019.micelle.g++.4 b/examples/micelle/log.29Mar2019.micelle.g++.4 new file mode 100644 index 0000000000..f3a54970cf --- /dev/null +++ b/examples/micelle/log.29Mar2019.micelle.g++.4 @@ -0,0 +1,218 @@ +LAMMPS (29 Mar 2019) + using 1 OpenMP thread(s) per MPI task +# 2d micelle simulation + +dimension 2 + +neighbor 0.3 bin +neigh_modify delay 5 + +atom_style bond + +# Soft potential push-off + +read_data data.micelle + orthogonal box = (0 0 -0.1) to (35.8569 35.8569 0.1) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 1200 atoms + scanning bonds ... + 1 = max bonds/atom + reading bonds ... + 300 bonds + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000413656 secs + read_data CPU = 0.00487924 secs +special_bonds fene + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000178576 secs + +pair_style soft 1.12246 +pair_coeff * * 0.0 1.12246 + +bond_style harmonic +bond_coeff 1 50.0 0.75 + +velocity all create 0.45 2349852 + +variable prefactor equal ramp(1.0,20.0) + +fix 1 all nve +fix 2 all temp/rescale 100 0.45 0.45 0.02 1.0 +fix 3 all adapt 1 pair soft a * * v_prefactor +fix 4 all enforce2d + +thermo 50 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.42246 + ghost atom cutoff = 1.42246 + binsize = 0.71123, bins = 51 51 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair soft, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.758 | 3.85 | 4.126 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 0.40003481 2.2200223e-06 0.84966203 0.78952518 + 50 0.47411013 0.67721272 0.057404514 1.2083323 1.3375852 + 100 0.45 0.73046745 0.054836584 1.234929 2.3196516 + 150 0.67521742 0.72402001 0.043490075 1.4421648 2.8744416 + 200 0.45 0.78481891 0.076931503 1.3113754 3.0412388 + 250 0.66479018 0.69790602 0.081075564 1.4432178 3.6917024 + 300 0.45 0.76820218 0.066727591 1.2845548 3.7861054 + 350 0.67619136 0.625715 0.072722727 1.3740656 4.2861621 + 400 0.45 0.68527759 0.090724527 1.2256271 4.4725214 + 450 0.56702844 0.64402767 0.080555563 1.2911391 4.7402211 + 500 0.45 0.64883009 0.078376672 1.1768318 4.7919294 + 550 0.564664 0.58260368 0.080779475 1.2275766 4.9855705 + 600 0.45 0.58193041 0.088386617 1.119942 5.131481 + 650 0.52110993 0.5415273 0.097683746 1.1598867 5.2500294 + 700 0.45 0.50856787 0.088471208 1.0466641 5.2550165 + 750 0.51510855 0.47441291 0.089429375 1.0785216 5.375763 + 800 0.45 0.49926696 0.085958476 1.0348504 5.4665914 + 850 0.50688494 0.46614429 0.088962292 1.0615691 5.556932 + 900 0.45 0.47785593 0.10150857 1.0289895 5.7765975 + 950 0.49590559 0.46050477 0.096404887 1.052402 5.8649245 + 1000 0.45 0.47691182 0.08808163 1.0146185 6.0177568 +Loop time of 0.0906248 on 4 procs for 1000 steps with 1200 atoms + +Performance: 4766906.584 tau/day, 11034.506 timesteps/s +98.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.036572 | 0.039266 | 0.041216 | 1.0 | 43.33 +Bond | 0.0023205 | 0.0024512 | 0.0025697 | 0.2 | 2.70 +Neigh | 0.0088909 | 0.0089301 | 0.0089679 | 0.0 | 9.85 +Comm | 0.022308 | 0.024047 | 0.027175 | 1.3 | 26.53 +Output | 0.00057411 | 0.00061274 | 0.00071025 | 0.0 | 0.68 +Modify | 0.0083182 | 0.0092374 | 0.0098341 | 0.6 | 10.19 +Other | | 0.006081 | | | 6.71 + +Nlocal: 300 ave 305 max 292 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 100.25 ave 108 max 93 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Neighs: 784 ave 815 max 739 min +Histogram: 1 0 0 0 0 0 1 1 0 1 + +Total # of neighbors = 3136 +Ave neighs/atom = 2.61333 +Ave special neighs/atom = 0.5 +Neighbor list builds = 92 +Dangerous builds = 0 + +unfix 3 + +# Main run + +pair_style lj/cut 2.5 + +# solvent/head - full-size and long-range + +pair_coeff 1 1 1.0 1.0 2.5 +pair_coeff 2 2 1.0 1.0 2.5 +pair_coeff 1 2 1.0 1.0 2.5 + +# tail/tail - size-averaged and long-range + +pair_coeff 3 3 1.0 0.75 2.5 +pair_coeff 4 4 1.0 0.50 2.5 +pair_coeff 3 4 1.0 0.67 2.5 + +# solvent/tail - full-size and repulsive + +pair_coeff 1 3 1.0 1.0 1.12246 +pair_coeff 1 4 1.0 1.0 1.12246 + +# head/tail - size-averaged and repulsive + +pair_coeff 2 3 1.0 0.88 1.12246 +pair_coeff 2 4 1.0 0.75 1.12246 + +thermo 50 + +#dump 1 all atom 2000 dump.micelle + +#dump 2 all image 2000 image.*.jpg type type zoom 1.6 +#dump_modify 2 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +#dump 3 all movie 2000 movie.mpg type type zoom 1.6 +#dump_modify 3 pad 5 adiam 1 0.5 adiam 2 1.5 adiam 3 1.0 adiam 4 0.75 + +reset_timestep 0 +run 1000 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 26 26 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.001 | 4.032 | 4.124 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0.45 -1.7056163 0.08808163 -1.1679097 3.9431686 + 50 0.59734982 -1.8103783 0.076066922 -1.1374593 3.2770557 + 100 0.45 -1.8347112 0.093132329 -1.2919539 3.024661 + 150 0.51924311 -1.8943977 0.076004124 -1.2995832 2.5570373 + 200 0.45 -1.8918672 0.082422107 -1.3598201 2.5629655 + 250 0.50281134 -1.920406 0.074011331 -1.3440023 2.3518682 + 300 0.45 -1.9351047 0.075337265 -1.4101424 2.3249947 + 350 0.47650026 -1.9313687 0.072115117 -1.3831504 2.1987532 + 400 0.45 -1.9554318 0.081603939 -1.4242028 2.0787066 + 450 0.47220236 -1.9468502 0.065625625 -1.4094157 2.0984288 + 500 0.4684673 -1.9444333 0.076696285 -1.3996601 2.0528682 + 550 0.47683128 -1.958676 0.070589721 -1.4116523 2.0856023 + 600 0.46851245 -1.9338267 0.070605469 -1.3950992 2.26405 + 650 0.46874143 -1.9462493 0.069134686 -1.4087638 2.1070262 + 700 0.4643739 -1.9309953 0.071977511 -1.3950309 2.225692 + 750 0.47326259 -1.9484258 0.075435808 -1.4001218 2.0880235 + 800 0.45 -1.9646003 0.06415956 -1.4508158 2.0612703 + 850 0.46748278 -1.9705588 0.06038513 -1.4430804 1.9472884 + 900 0.46909438 -1.9537221 0.062470305 -1.4225483 2.0223008 + 950 0.45631508 -1.9387742 0.067536066 -1.4153033 2.063854 + 1000 0.45 -1.9727651 0.058608085 -1.464532 1.9982447 +Loop time of 0.0878521 on 4 procs for 1000 steps with 1200 atoms + +Performance: 4917357.613 tau/day, 11382.772 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.043517 | 0.044455 | 0.046903 | 0.7 | 50.60 +Bond | 0.0020199 | 0.0022303 | 0.0024347 | 0.4 | 2.54 +Neigh | 0.012207 | 0.012335 | 0.012512 | 0.1 | 14.04 +Comm | 0.014938 | 0.018265 | 0.020068 | 1.5 | 20.79 +Output | 0.00061369 | 0.00064814 | 0.00073504 | 0.0 | 0.74 +Modify | 0.0052264 | 0.0053691 | 0.0055039 | 0.2 | 6.11 +Other | | 0.00455 | | | 5.18 + +Nlocal: 300 ave 305 max 296 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Nghost: 219.5 ave 228 max 214 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Neighs: 2146.5 ave 2201 max 2114 min +Histogram: 1 1 0 1 0 0 0 0 0 1 + +Total # of neighbors = 8586 +Ave neighs/atom = 7.155 +Ave special neighs/atom = 0.5 +Neighbor list builds = 86 +Dangerous builds = 0 +Total wall time: 0:00:00 From b1070f4703d6b0cf70cae82ceea0e13853fde3c1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 23:10:59 -0400 Subject: [PATCH 093/372] must add USER-SCAFACOS to nolib.cmake preset, as it requires GSL --- cmake/presets/nolib.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/presets/nolib.cmake b/cmake/presets/nolib.cmake index 663f87122b..c0968a8d82 100644 --- a/cmake/presets/nolib.cmake +++ b/cmake/presets/nolib.cmake @@ -4,7 +4,7 @@ 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-NETCDF USER-PLUMED USER-QMMM USER-QUIP - USER-SMD USER-VTK) + USER-SCAFACOS USER-SMD USER-VTK) foreach(PKG ${PACKAGES_WITH_LIB}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) From a149fdb4201d958bb8915ff582c195780a3b4851 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 23:19:37 -0400 Subject: [PATCH 094/372] forgot MESSAGE package in all_on/off.cmake preset --- cmake/presets/all_off.cmake | 6 +++--- cmake/presets/all_on.cmake | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 0e37611da4..9d03be99ec 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -2,9 +2,9 @@ # an existing package selection without losing any other settings set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MOLECULE MPIIO - MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD - VORONOI + GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MOLECULE + MPIIO MSCG OPT PERI 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-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 57f1228abe..2ff107975a 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -4,9 +4,9 @@ # with just a working C++ compiler and an MPI library. set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MOLECULE MPIIO - MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD - VORONOI + GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MOLECULE + MPIIO MSCG OPT PERI 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-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO From 6cb120d691b656e32a5619005041768842683d6b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 23:20:53 -0400 Subject: [PATCH 095/372] get rid of "using" in USER-REAXC header --- src/USER-REAXC/reaxc_types.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index 2666fcf85c..ff922e012c 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -392,8 +392,6 @@ typedef struct double ghost_cutoff; } boundary_cutoff; -using LAMMPS_NS::Pair; - struct _reax_system { reax_interaction reax_param; @@ -411,7 +409,7 @@ struct _reax_system boundary_cutoff bndry_cuts; reax_atom *my_atoms; - class Pair *pair_ptr; + class LAMMPS_NS::Pair *pair_ptr; int my_bonds; int mincap; double safezone, saferzone; From 40f1662c93e0e4ffa35890830cdfc63e6fb39ef9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 2 Apr 2019 23:44:00 -0400 Subject: [PATCH 096/372] reduce compiler warnings --- src/MESSAGE/fix_client_md.cpp | 6 ++---- src/MESSAGE/message.cpp | 12 +++--------- src/MESSAGE/server_mc.cpp | 4 ++-- src/MESSAGE/server_md.cpp | 2 +- src/special.cpp | 2 +- 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/MESSAGE/fix_client_md.cpp b/src/MESSAGE/fix_client_md.cpp index 9c1bfcc796..727481dcc0 100644 --- a/src/MESSAGE/fix_client_md.cpp +++ b/src/MESSAGE/fix_client_md.cpp @@ -89,7 +89,7 @@ FixClientMD::~FixClientMD() int nfield; int *fieldID,*fieldtype,*fieldlen; - int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + cs->recv(nfield,fieldID,fieldtype,fieldlen); // clean-up @@ -173,8 +173,6 @@ void FixClientMD::min_setup(int vflag) void FixClientMD::post_force(int vflag) { - int i,j,m; - // energy and virial setup if (vflag) v_setup(vflag); @@ -286,7 +284,7 @@ void FixClientMD::receive_fev(int vflag) int nfield; int *fieldID,*fieldtype,*fieldlen; - int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + cs->recv(nfield,fieldID,fieldtype,fieldlen); double *forces = (double *) cs->unpack(FORCES); double **f = atom->f; diff --git a/src/MESSAGE/message.cpp b/src/MESSAGE/message.cpp index e9bff7d38a..61221ca26e 100644 --- a/src/MESSAGE/message.cpp +++ b/src/MESSAGE/message.cpp @@ -22,10 +22,6 @@ using namespace LAMMPS_NS; using namespace CSLIB_NS; -// customize by adding a new server protocol enum - -enum{MD,MC}; - /* ---------------------------------------------------------------------- */ void Message::command(int narg, char **arg) @@ -38,12 +34,10 @@ void Message::command(int narg, char **arg) else error->all(FLERR,"Illegal message command"); lmp->clientserver = clientserver; - // customize by adding a new server protocol + // validate supported protocols - int protocol; - if (strcmp(arg[1],"md") == 0) protocol = MD; - else if (strcmp(arg[1],"mc") == 0) protocol = MC; - else error->all(FLERR,"Unknown message protocol"); + if ((strcmp(arg[1],"md") != 0) && (strcmp(arg[1],"mc") != 0)) + error->all(FLERR,"Unknown message protocol"); // instantiate CSlib with chosen communication mode diff --git a/src/MESSAGE/server_mc.cpp b/src/MESSAGE/server_mc.cpp index 8e9a297912..8152b1f772 100644 --- a/src/MESSAGE/server_mc.cpp +++ b/src/MESSAGE/server_mc.cpp @@ -37,8 +37,8 @@ ServerMC::ServerMC(LAMMPS *lmp) : Pointers(lmp) {} void ServerMC::loop() { - int i,j,m; - double xold[3],xnew[3]; + int m; + double xold[3]; tagint atomid; CSlib *cs = (CSlib *) lmp->cslib; diff --git a/src/MESSAGE/server_md.cpp b/src/MESSAGE/server_md.cpp index 8debd3a987..bef327616e 100644 --- a/src/MESSAGE/server_md.cpp +++ b/src/MESSAGE/server_md.cpp @@ -78,7 +78,7 @@ ServerMD::~ServerMD() void ServerMD::loop() { - int i,j,m; + int j,m; // cs = instance of CSlib diff --git a/src/special.cpp b/src/special.cpp index ab3764a156..7f855163e0 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -1225,7 +1225,7 @@ void Special::dihedral_trim() ------------------------------------------------------------------------- */ int Special::rendezvous_ids(int n, char *inbuf, - int &flag, int *&proclist, char *&outbuf, + int &flag, int *& /*proclist*/, char *& /*outbuf*/, void *ptr) { Special *sptr = (Special *) ptr; From f02b364e6efe7770716c9f826a81d2add9237ec7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 00:03:34 -0400 Subject: [PATCH 097/372] remove "using namespace" from header and include required header --- src/USER-SMD/smd_material_models.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/USER-SMD/smd_material_models.h b/src/USER-SMD/smd_material_models.h index acb498c04d..557612bdf5 100644 --- a/src/USER-SMD/smd_material_models.h +++ b/src/USER-SMD/smd_material_models.h @@ -22,10 +22,10 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#ifndef SMD_MATERIAL_MODELS_H_ -#define SMD_MATERIAL_MODELS_H_ +#ifndef SMD_MATERIAL_MODELS_H +#define SMD_MATERIAL_MODELS_H -using namespace Eigen; +#include /* * EOS models @@ -42,22 +42,22 @@ void PerfectGasEOS(const double gamma, const double vol, const double mass, cons /* * Material strength models */ -void LinearStrength(const double mu, const Matrix3d sigmaInitial_dev, const Matrix3d d_dev, const double dt, - Matrix3d &sigmaFinal_dev__, Matrix3d &sigma_dev_rate__); -void LinearPlasticStrength(const double G, const double yieldStress, const Matrix3d sigmaInitial_dev, const Matrix3d d_dev, - const double dt, Matrix3d &sigmaFinal_dev__, Matrix3d &sigma_dev_rate__, double &plastic_strain_increment); +void LinearStrength(const double mu, const Eigen::Matrix3d sigmaInitial_dev, const Eigen::Matrix3d d_dev, const double dt, + Eigen::Matrix3d &sigmaFinal_dev__, Eigen::Matrix3d &sigma_dev_rate__); +void LinearPlasticStrength(const double G, const double yieldStress, const Eigen::Matrix3d sigmaInitial_dev, const Eigen::Matrix3d d_dev, + const double dt, Eigen::Matrix3d &sigmaFinal_dev__, Eigen::Matrix3d &sigma_dev_rate__, double &plastic_strain_increment); void JohnsonCookStrength(const double G, const double cp, const double espec, const double A, const double B, const double a, const double C, const double epdot0, const double T0, const double Tmelt, const double M, const double dt, const double ep, - const double epdot, const Matrix3d sigmaInitial_dev, const Matrix3d d_dev, Matrix3d &sigmaFinal_dev__, - Matrix3d &sigma_dev_rate__, double &plastic_strain_increment); + const double epdot, const Eigen::Matrix3d sigmaInitial_dev, const Eigen::Matrix3d d_dev, Eigen::Matrix3d &sigmaFinal_dev__, + Eigen::Matrix3d &sigma_dev_rate__, double &plastic_strain_increment); /* * Damage models */ -bool IsotropicMaxStrainDamage(const Matrix3d E, const double maxStrain); -bool IsotropicMaxStressDamage(const Matrix3d E, const double maxStrain); -double JohnsonCookFailureStrain(const double p, const Matrix3d Sdev, const double d1, const double d2, const double d3, +bool IsotropicMaxStrainDamage(const Eigen::Matrix3d E, const double maxStrain); +bool IsotropicMaxStressDamage(const Eigen::Matrix3d E, const double maxStrain); +double JohnsonCookFailureStrain(const double p, const Eigen::Matrix3d Sdev, const double d1, const double d2, const double d3, const double d4, const double epdot0, const double epdot); From 52a13f31b3d21a6256faeea5691ec6f2cefd6a5d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 00:04:12 -0400 Subject: [PATCH 098/372] remove "using namespace" from header --- src/USER-SMD/smd_math.h | 97 +++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 62 deletions(-) diff --git a/src/USER-SMD/smd_math.h b/src/USER-SMD/smd_math.h index cea9e9dbc7..52e7c983d5 100644 --- a/src/USER-SMD/smd_math.h +++ b/src/USER-SMD/smd_math.h @@ -9,14 +9,11 @@ * * ----------------------------------------------------------------------- */ -//test -#ifndef SMD_MATH_H_ -#define SMD_MATH_H_ +#ifndef SMD_MATH_H +#define SMD_MATH_H #include #include -using namespace Eigen; -using namespace std; namespace SMD_Math { static inline void LimitDoubleMagnitude(double &x, const double limit) { @@ -31,8 +28,8 @@ static inline void LimitDoubleMagnitude(double &x, const double limit) { /* * deviator of a tensor */ -static inline Matrix3d Deviator(const Matrix3d M) { - Matrix3d eye; +static inline Eigen::Matrix3d Deviator(const Eigen::Matrix3d M) { + Eigen::Matrix3d eye; eye.setIdentity(); eye *= M.trace() / 3.0; return M - eye; @@ -53,14 +50,14 @@ static inline Matrix3d Deviator(const Matrix3d M) { * obtained again from an SVD. The rotation should proper now, i.e., det(R) = +1. */ -static inline bool PolDec(Matrix3d M, Matrix3d &R, Matrix3d &T, bool scaleF) { +static inline bool PolDec(Eigen::Matrix3d M, Eigen::Matrix3d &R, Eigen::Matrix3d &T, bool scaleF) { - JacobiSVD svd(M, ComputeFullU | ComputeFullV); // SVD(A) = U S V* - Vector3d S_eigenvalues = svd.singularValues(); - Matrix3d S = svd.singularValues().asDiagonal(); - Matrix3d U = svd.matrixU(); - Matrix3d V = svd.matrixV(); - Matrix3d eye; + Eigen::JacobiSVD svd(M, Eigen::ComputeFullU | Eigen::ComputeFullV); // SVD(A) = U S V* + Eigen::Vector3d S_eigenvalues = svd.singularValues(); + Eigen::Matrix3d S = svd.singularValues().asDiagonal(); + Eigen::Matrix3d U = svd.matrixU(); + Eigen::Matrix3d V = svd.matrixV(); + Eigen::Matrix3d eye; eye.setIdentity(); // now do polar decomposition into M = R * T, where R is rotation @@ -105,16 +102,12 @@ static inline bool PolDec(Matrix3d M, Matrix3d &R, Matrix3d &T, bool scaleF) { * Pseudo-inverse via SVD */ -static inline void pseudo_inverse_SVD(Matrix3d &M) { +static inline void pseudo_inverse_SVD(Eigen::Matrix3d &M) { - //JacobiSVD < Matrix3d > svd(M, ComputeFullU | ComputeFullV); - JacobiSVD svd(M, ComputeFullU); // one Eigevector base is sufficient because matrix is square and symmetric + Eigen::JacobiSVD svd(M, Eigen::ComputeFullU); // one Eigevector base is sufficient because matrix is square and symmetric - Vector3d singularValuesInv; - Vector3d singularValues = svd.singularValues(); - -//cout << "Here is the matrix V:" << endl << V * singularValues.asDiagonal() * U << endl; -//cout << "Its singular values are:" << endl << singularValues << endl; + Eigen::Vector3d singularValuesInv; + Eigen::Vector3d singularValues = svd.singularValues(); double pinvtoler = 1.0e-16; // 2d machining example goes unstable if this value is increased (1.0e-16). for (int row = 0; row < 3; row++) { @@ -126,39 +119,19 @@ static inline void pseudo_inverse_SVD(Matrix3d &M) { } M = svd.matrixU() * singularValuesInv.asDiagonal() * svd.matrixU().transpose(); - -// JacobiSVD < Matrix3d > svd(M, ComputeFullU | ComputeFullV); -// -// Vector3d singularValuesInv; -// Vector3d singularValues = svd.singularValues(); -// -// //cout << "Here is the matrix V:" << endl << V * singularValues.asDiagonal() * U << endl; -// //cout << "Its singular values are:" << endl << singularValues << endl; -// -// double pinvtoler = 1.0e-16; // 2d machining example goes unstable if this value is increased (1.0e-16). -// for (int row = 0; row < 3; row++) { -// if (singularValues(row) > pinvtoler) { -// singularValuesInv(row) = 1.0 / singularValues(row); -// } else { -// singularValuesInv(row) = 0.0; -// } -// } -// -// M = svd.matrixU() * singularValuesInv.asDiagonal() * svd.matrixV().transpose(); - } /* * test if two matrices are equal */ -static inline double TestMatricesEqual(Matrix3d A, Matrix3d B, double eps) { - Matrix3d diff; +static inline double TestMatricesEqual(Eigen::Matrix3d A, Eigen::Matrix3d B, double eps) { + Eigen::Matrix3d diff; diff = A - B; double norm = diff.norm(); if (norm > eps) { - printf("Matrices A and B are not equal! The L2-norm difference is: %g\n", norm); - cout << "Here is matrix A:" << endl << A << endl; - cout << "Here is matrix B:" << endl << B << endl; + std::cout << "Matrices A and B are not equal! The L2-norm difference is: " << norm << "\n" + << "Here is matrix A:\n" << A << "\n" + << "Here is matrix B:\n" << B << std::endl; } return norm; } @@ -167,12 +140,12 @@ static inline double TestMatricesEqual(Matrix3d A, Matrix3d B, double eps) { Limit eigenvalues of a matrix to upper and lower bounds. ------------------------------------------------------------------------- */ -static inline Matrix3d LimitEigenvalues(Matrix3d S, double limitEigenvalue) { +static inline Eigen::Matrix3d LimitEigenvalues(Eigen::Matrix3d S, double limitEigenvalue) { /* * compute Eigenvalues of matrix S */ - SelfAdjointEigenSolver < Matrix3d > es; + Eigen::SelfAdjointEigenSolver < Eigen::Matrix3d > es; es.compute(S); double max_eigenvalue = es.eigenvalues().maxCoeff(); @@ -183,17 +156,17 @@ static inline Matrix3d LimitEigenvalues(Matrix3d S, double limitEigenvalue) { if ((amax_eigenvalue > limitEigenvalue) || (amin_eigenvalue > limitEigenvalue)) { if (amax_eigenvalue > amin_eigenvalue) { // need to scale with max_eigenvalue double scale = amax_eigenvalue / limitEigenvalue; - Matrix3d V = es.eigenvectors(); - Matrix3d S_diag = V.inverse() * S * V; // diagonalized input matrix + Eigen::Matrix3d V = es.eigenvectors(); + Eigen::Matrix3d S_diag = V.inverse() * S * V; // diagonalized input matrix S_diag /= scale; - Matrix3d S_scaled = V * S_diag * V.inverse(); // undiagonalize matrix + Eigen::Matrix3d S_scaled = V * S_diag * V.inverse(); // undiagonalize matrix return S_scaled; } else { // need to scale using min_eigenvalue double scale = amin_eigenvalue / limitEigenvalue; - Matrix3d V = es.eigenvectors(); - Matrix3d S_diag = V.inverse() * S * V; // diagonalized input matrix + Eigen::Matrix3d V = es.eigenvectors(); + Eigen::Matrix3d S_diag = V.inverse() * S * V; // diagonalized input matrix S_diag /= scale; - Matrix3d S_scaled = V * S_diag * V.inverse(); // undiagonalize matrix + Eigen::Matrix3d S_scaled = V * S_diag * V.inverse(); // undiagonalize matrix return S_scaled; } } else { // limiting does not apply @@ -201,17 +174,17 @@ static inline Matrix3d LimitEigenvalues(Matrix3d S, double limitEigenvalue) { } } -static inline bool LimitMinMaxEigenvalues(Matrix3d &S, double min, double max) { +static inline bool LimitMinMaxEigenvalues(Eigen::Matrix3d &S, double min, double max) { /* * compute Eigenvalues of matrix S */ - SelfAdjointEigenSolver < Matrix3d > es; + Eigen::SelfAdjointEigenSolver < Eigen::Matrix3d > es; es.compute(S); if ((es.eigenvalues().maxCoeff() > max) || (es.eigenvalues().minCoeff() < min)) { - Matrix3d S_diag = es.eigenvalues().asDiagonal(); - Matrix3d V = es.eigenvectors(); + Eigen::Matrix3d S_diag = es.eigenvalues().asDiagonal(); + Eigen::Matrix3d V = es.eigenvectors(); for (int i = 0; i < 3; i++) { if (S_diag(i, i) < min) { //printf("limiting eigenvalue %f --> %f\n", S_diag(i, i), min); @@ -229,10 +202,10 @@ static inline bool LimitMinMaxEigenvalues(Matrix3d &S, double min, double max) { } } -static inline void reconstruct_rank_deficient_shape_matrix(Matrix3d &K) { +static inline void reconstruct_rank_deficient_shape_matrix(Eigen::Matrix3d &K) { - JacobiSVD svd(K, ComputeFullU | ComputeFullV); - Vector3d singularValues = svd.singularValues(); + Eigen::JacobiSVD svd(K, Eigen::ComputeFullU | Eigen::ComputeFullV); + Eigen::Vector3d singularValues = svd.singularValues(); for (int i = 0; i < 3; i++) { if (singularValues(i) < 1.0e-8) { From 537704fdaa7e5e285d1e93edf118f09c857607d7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 00:13:52 -0400 Subject: [PATCH 099/372] eliminate the use of the "using" keyword in headers of the KOKKOS package --- src/KOKKOS/domain_kokkos.h | 10 ++++++---- src/KOKKOS/pair_snap_kokkos_impl.h | 3 ++- src/KOKKOS/sna_kokkos_impl.h | 4 +++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/KOKKOS/domain_kokkos.h b/src/KOKKOS/domain_kokkos.h index 7b8504dba8..eccc36a021 100644 --- a/src/KOKKOS/domain_kokkos.h +++ b/src/KOKKOS/domain_kokkos.h @@ -36,10 +36,12 @@ class DomainKokkos : public Domain { void image_flip(int, int, int); void x2lamda(int); void lamda2x(int); - // these lines bring in the x2lamda signatures from Domain - // that are not overloaded here - using Domain::x2lamda; - using Domain::lamda2x; + // forward remaining x2lamda() and lambda2x() variants to parent class + void x2lamda(double *a, double *b) { Domain::x2lamda(a,b); } + void lamda2x(double *a, double *b) { Domain::lamda2x(a,b); } + void x2lamda(double *a, double *b, double *c, double *d) { + Domain::x2lamda(a,b,c,d); + } int closest_image(const int, int) const; diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 569783f926..bb2a5e9171 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -32,7 +32,7 @@ #define MAXLINE 1024 #define MAXWORD 3 -using namespace LAMMPS_NS; +namespace LAMMPS_NS { // Outstanding issues with quadratic term // 1. there seems to a problem with compute_optimized energy calc @@ -674,3 +674,4 @@ double PairSNAPKokkos::memory_usage() bytes += snaKK.memory_usage(); return bytes; } +} diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 6a19c57829..0f2a450a3d 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -20,7 +20,7 @@ #include #include -using namespace LAMMPS_NS; +namespace LAMMPS_NS { static const double MY_PI = 3.14159265358979323846; // pi @@ -1300,3 +1300,5 @@ double SNAKokkos::memory_usage() bytes += jdim * jdim * jdim * jdim * jdim * sizeof(std::complex); return bytes; } + +} // namespace LAMMPS_NS From f17aff6331db0bbef287991084f5e1f6c7f0d982 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 00:24:36 -0400 Subject: [PATCH 100/372] add some missing entries to src/USER-MISC/README --- src/USER-MISC/README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 13e406d42f..8e821c03a9 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -67,14 +67,17 @@ improper_style distance, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 pair_style agni, Axel Kohlmeyer, akohlmey at gmail.com, 9 Nov 16 pair_style buck/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 pair_style coul/diel, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11 +pair_style coul/shield, Wengen Ouyang (Tel Aviv University), w.g.ouyang at gmail dot com, 30 Mar 18 pair_style dipole/sf, Mario Orsi, orsimario at gmail.com, 8 Aug 11 pair_style edip, Luca Ferraro, luca.ferraro at caspur.it, 15 Sep 11 pair_style extep, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Nov 17 pair_style gauss/cut, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11 +pair_style ilp/graphene/hbn, Wengen Ouyang (Tel Aviv University), w.g.ouyang at gmail dot com, 30 Mar 18 pair_style lebedeva/z, Zbigniew Koziol (National Center for Nuclear Research), softquake at gmail dot com, 4 Jan 19 pair_style lennard/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 pair_style list, Axel Kohlmeyer (Temple U), akohlmey at gmail.com, 1 Jun 13 pair_style lj/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 +pair_style kolmogorov/crespi/full, Wengen Ouyang (Tel Aviv University), w.g.ouyang at gmail dot com, 30 Mar 18 pair_style kolmogorov/crespi/z, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Feb 17 pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12 pair_style meam/sw/spline, Robert Rudd (LLNL), robert.rudd at llnl.gov, 1 Oct 12 From 7372e8fde1a02d605873d2591d395517cf789f78 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 00:41:03 -0400 Subject: [PATCH 101/372] must add STUBS_MPI to cslib includes when compiling without MPI --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 59caf8ca9f..fd93814574 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -728,6 +728,7 @@ if(PKG_MESSAGE) set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") else() target_compile_definitions(cslib PRIVATE -DMPI_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI) set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") endif() From 1696432e8220906c38c2603879a3fb7fba490a76 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 01:00:53 -0400 Subject: [PATCH 102/372] resolve conflict between src/STUBS/mpi.h and lib/message/cslib/src/STUBS_MPI/mpi.h --- lib/message/cslib/src/STUBS_MPI/{mpi.h => mpi_dummy.h} | 0 lib/message/cslib/src/cslib.cpp | 4 ++++ lib/message/cslib/src/cslib_wrap.cpp | 4 ++++ lib/message/cslib/src/msg.cpp | 4 ++++ lib/message/cslib/src/msg.h | 6 +++++- lib/message/cslib/src/msg_file.cpp | 4 ++++ lib/message/cslib/src/msg_mpi_one.cpp | 4 ++++ lib/message/cslib/src/msg_mpi_two.cpp | 4 ++++ lib/message/cslib/src/msg_zmq.cpp | 4 ++++ 9 files changed, 33 insertions(+), 1 deletion(-) rename lib/message/cslib/src/STUBS_MPI/{mpi.h => mpi_dummy.h} (100%) diff --git a/lib/message/cslib/src/STUBS_MPI/mpi.h b/lib/message/cslib/src/STUBS_MPI/mpi_dummy.h similarity index 100% rename from lib/message/cslib/src/STUBS_MPI/mpi.h rename to lib/message/cslib/src/STUBS_MPI/mpi_dummy.h diff --git a/lib/message/cslib/src/cslib.cpp b/lib/message/cslib/src/cslib.cpp index 874333607e..336ba87588 100644 --- a/lib/message/cslib/src/cslib.cpp +++ b/lib/message/cslib/src/cslib.cpp @@ -12,7 +12,11 @@ See the README file in the top-level CSlib directory. ------------------------------------------------------------------------- */ +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include diff --git a/lib/message/cslib/src/cslib_wrap.cpp b/lib/message/cslib/src/cslib_wrap.cpp index c2d69eaf0d..64b4d53b25 100644 --- a/lib/message/cslib/src/cslib_wrap.cpp +++ b/lib/message/cslib/src/cslib_wrap.cpp @@ -14,7 +14,11 @@ // C style library interface to CSlib class +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include diff --git a/lib/message/cslib/src/msg.cpp b/lib/message/cslib/src/msg.cpp index da22c81850..ff654ecbcf 100644 --- a/lib/message/cslib/src/msg.cpp +++ b/lib/message/cslib/src/msg.cpp @@ -12,7 +12,11 @@ See the README file in the top-level CSlib directory. ------------------------------------------------------------------------- */ +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include diff --git a/lib/message/cslib/src/msg.h b/lib/message/cslib/src/msg.h index f75942b027..81c2d21cb9 100644 --- a/lib/message/cslib/src/msg.h +++ b/lib/message/cslib/src/msg.h @@ -15,7 +15,11 @@ #ifndef MSG_H #define MSG_H +#ifdef MPI_YES #include +#else +#include +#endif namespace CSLIB_NS { @@ -37,7 +41,7 @@ class Msg { int nfield; int *fieldID,*fieldtype,*fieldlen; int lengths[2]; - + void init(int); void allocate(int, int &, int *&, int, int &, char *&); void *smalloc(int); diff --git a/lib/message/cslib/src/msg_file.cpp b/lib/message/cslib/src/msg_file.cpp index d97e249fad..31cdfef544 100644 --- a/lib/message/cslib/src/msg_file.cpp +++ b/lib/message/cslib/src/msg_file.cpp @@ -12,7 +12,11 @@ See the README file in the top-level CSlib directory. ------------------------------------------------------------------------- */ +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include diff --git a/lib/message/cslib/src/msg_mpi_one.cpp b/lib/message/cslib/src/msg_mpi_one.cpp index db11735b27..c6fbd8732f 100644 --- a/lib/message/cslib/src/msg_mpi_one.cpp +++ b/lib/message/cslib/src/msg_mpi_one.cpp @@ -12,7 +12,11 @@ See the README file in the top-level CSlib directory. ------------------------------------------------------------------------- */ +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include diff --git a/lib/message/cslib/src/msg_mpi_two.cpp b/lib/message/cslib/src/msg_mpi_two.cpp index e9a9e87eeb..2a4fa65ff7 100644 --- a/lib/message/cslib/src/msg_mpi_two.cpp +++ b/lib/message/cslib/src/msg_mpi_two.cpp @@ -12,7 +12,11 @@ See the README file in the top-level CSlib directory. ------------------------------------------------------------------------- */ +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include diff --git a/lib/message/cslib/src/msg_zmq.cpp b/lib/message/cslib/src/msg_zmq.cpp index c2d408f3a5..8bee3aebde 100644 --- a/lib/message/cslib/src/msg_zmq.cpp +++ b/lib/message/cslib/src/msg_zmq.cpp @@ -12,7 +12,11 @@ See the README file in the top-level CSlib directory. ------------------------------------------------------------------------- */ +#ifdef MPI_YES #include +#else +#include +#endif #include #include #include From f2f49e60bf42dd1ce1391e69c747c478fc03f288 Mon Sep 17 00:00:00 2001 From: mkanski Date: Wed, 3 Apr 2019 18:12:12 +0200 Subject: [PATCH 103/372] Make some errors more elaborate + change some error->all to error->one --- src/USER-REAXC/pair_reaxc.cpp | 1 + src/USER-REAXC/reaxc_ffield.cpp | 17 +++++++++++------ src/USER-REAXC/reaxc_forces.cpp | 2 +- src/USER-REAXC/reaxc_init_md.cpp | 29 +++++++---------------------- src/USER-REAXC/reaxc_list.cpp | 2 +- src/USER-REAXC/reaxc_tool_box.cpp | 6 +++--- src/USER-REAXC/reaxc_traj.cpp | 4 ++-- src/USER-REAXC/reaxc_types.h | 6 ++---- 8 files changed, 28 insertions(+), 39 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 8b36019881..18e7ef2f04 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -431,6 +431,7 @@ void PairReaxC::setup( ) int *num_hbonds = fix_reax->num_hbonds; control->vlist_cut = neighbor->cutneighmax; + control->me = comm->me; // determine the local and total capacity diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 36b7105ce8..13e928ad08 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -61,7 +61,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, n = atoi(tmp[0]); if (n < 1) { if (me == 0) - control->error_ptr->warning( FLERR, "Number of globals in ffield file is 0" ); + control->error_ptr->warning( FLERR, "Number of globals in ffield file is 0. The file will not be read." ); fclose(fp); free(s); free(tmp); @@ -141,6 +141,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, reax->gp.vdw_type = 0; + char errmsg[1024]; for( i = 0; i < reax->num_atom_types; i++ ) { /* line one */ @@ -152,7 +153,8 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, control->error_ptr->all(FLERR, "Force field file requires using 'lgvdw yes'"); if (c < 9) { - control->error_ptr->all(FLERR,"Inconsistent ffield file"); + snprintf (errmsg, 1024, "Missing parameter(s) in line %s", s); + control->error_ptr->all(FLERR, errmsg); } for( j = 0; j < (int)(strlen(tmp[0])); ++j ) @@ -174,7 +176,8 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - control->error_ptr->all(FLERR,"Inconsistent ffield file"); + snprintf (errmsg, 1024, "Missing parameter(s) in line %s", s); + control->error_ptr->all(FLERR, errmsg); } val = atof(tmp[0]); reax->sbp[i].alpha = val; @@ -192,7 +195,8 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - control->error_ptr->all(FLERR,"Inconsistent ffield file"); + snprintf (errmsg, 1024, "Missing parameter(s) in line %s", s); + control->error_ptr->all(FLERR, errmsg); } val = atof(tmp[0]); reax->sbp[i].r_pi_pi = val; @@ -210,7 +214,8 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity check */ if (c < 8) { - control->error_ptr->all(FLERR,"Inconsistent ffield file"); + snprintf (errmsg, 1024, "Missing parameter(s) in line %s", s); + control->error_ptr->all(FLERR, errmsg); } val = atof(tmp[0]); reax->sbp[i].p_ovun2 = val; @@ -287,7 +292,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, } } else { char errmsg[256]; - snprintf(errmsg, 256, "Inconsistent vdWaals-parameters " + snprintf(errmsg, 256, "Inconsistent vdWaals-parameters: " "No shielding or inner-wall set for element %s", reax->sbp[i].name); control->error_ptr->all(FLERR, errmsg); diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 8c602e9156..186cde681a 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -168,7 +168,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l char errmsg[256]; snprintf(errmsg, 256, "step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n", step, Hindex, End_Index(Hindex,hbonds), comp ); - system->error_ptr->all(FLERR, errmsg); + system->error_ptr->one(FLERR, errmsg); } } } diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 8ac9f0e53c..c1239e0cbb 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -223,49 +223,34 @@ void Initialize( reax_system *system, control_params *control, if (Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE) { - - snprintf(errmsg, 128, "Could not create datatypes on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"Could not create datatypes"); } if (Init_System(system, control, msg) == FAILURE) { - snprintf(errmsg, 128, "System could not be initialized on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"System could not be initialized"); } if (Init_Simulation_Data( system, control, data, msg ) == FAILURE) { - snprintf(errmsg, 128, "Sim_data could not be initialized on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"Sim_data could not be initialized"); } if (Init_Workspace( system, control, workspace, msg ) == FAILURE) { - snprintf(errmsg, 128, "Workspace could not be initialized on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"Workspace could not be initialized"); } if (Init_Lists( system, control, data, workspace, lists, mpi_data, msg ) == FAILURE) { - snprintf(errmsg, 128, "System could not be initialized on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"Lists could not be initialized"); } if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) { - snprintf(errmsg, 128, "Could not open output files on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"Could not open output files"); } if (control->tabulate) { if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) { - snprintf(errmsg, 128, "Lookup table could not be created on thread %d", - system->my_rank); - control->error_ptr->one(FLERR,errmsg); + control->error_ptr->one(FLERR,"Lookup table could not be created"); } } diff --git a/src/USER-REAXC/reaxc_list.cpp b/src/USER-REAXC/reaxc_list.cpp index 2e86c3c06b..cd4f815286 100644 --- a/src/USER-REAXC/reaxc_list.cpp +++ b/src/USER-REAXC/reaxc_list.cpp @@ -91,7 +91,7 @@ int Make_List(int n, int num_intrs, int type, reax_list *l ) default: char errmsg[128]; snprintf(errmsg, 128, "No %d list type defined", l->type); - l->error_ptr->all(FLERR,errmsg); + l->error_ptr->one(FLERR,errmsg); } return SUCCESS; diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index df8d7c85bf..b6058b2516 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -66,7 +66,7 @@ void *smalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, const char *name ) if (n <= 0) { snprintf(errmsg, 256, "Trying to allocate %ld bytes for array %s. " "returning NULL.", n, name); - error_ptr->warning(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); return NULL; } @@ -89,14 +89,14 @@ void *scalloc( LAMMPS_NS::Error *error_ptr, rc_bigint n, rc_bigint size, const c if (n <= 0) { snprintf(errmsg, 256, "Trying to allocate %ld elements for array %s. " "returning NULL.\n", n, name ); - error_ptr->warning(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); return NULL; } if (size <= 0) { snprintf(errmsg, 256, "Elements size for array %s is %ld. " "returning NULL", name, size ); - error_ptr->warning(FLERR,errmsg); + error_ptr->one(FLERR,errmsg); return NULL; } diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index d25221512e..5adc0cfbb9 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -531,7 +531,7 @@ int Write_Atoms( reax_system *system, control_params * /*control*/, p_atom->f[0], p_atom->f[1], p_atom->f[2], p_atom->q ); break; default: - system->error_ptr->all(FLERR,"Write_traj_atoms: unknown atom trajectory format"); + system->error_ptr->one(FLERR,"Write_traj_atoms: unknown atom trajectory format"); } strncpy( out_control->buffer + i*line_len, out_control->line, line_len+1 ); @@ -617,7 +617,7 @@ int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds, bo_ij->bo_data.BO_pi, bo_ij->bo_data.BO_pi2 ); break; default: - system->error_ptr->all(FLERR, "Write_traj_bonds: FATAL! invalid bond_info option"); + system->error_ptr->one(FLERR, "Write_traj_bonds: FATAL! invalid bond_info option"); } strncpy( out_control->buffer + my_bonds*line_len, out_control->line, line_len+1 ); diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index d390768ac6..cdc2916a66 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -395,8 +395,6 @@ typedef struct double ghost_cutoff; } boundary_cutoff; -using LAMMPS_NS::Pair; - struct _reax_system { reax_interaction reax_param; @@ -414,8 +412,8 @@ struct _reax_system boundary_cutoff bndry_cuts; reax_atom *my_atoms; - class LAMMPS_NS::Error *error_ptr; - class Pair *pair_ptr; + class LAMMPS_NS::Error *error_ptr; + class LAMMPS_NS::Pair *pair_ptr; int my_bonds; int mincap; double safezone, saferzone; From 1a105253c13937857fd24766b1d24ec8c35f289d Mon Sep 17 00:00:00 2001 From: mkanski Date: Wed, 3 Apr 2019 18:24:38 +0200 Subject: [PATCH 104/372] Check the MPI rank differently --- src/USER-REAXC/pair_reaxc.cpp | 1 - src/USER-REAXC/reaxc_init_md.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 18e7ef2f04..8b36019881 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -431,7 +431,6 @@ void PairReaxC::setup( ) int *num_hbonds = fix_reax->num_hbonds; control->vlist_cut = neighbor->cutneighmax; - control->me = comm->me; // determine the local and total capacity diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index c1239e0cbb..dfd92ec7a3 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -91,13 +91,13 @@ void Init_Taper( control_params *control, storage *workspace ) swa = control->nonb_low; swb = control->nonb_cut; - if (fabs( swa ) > 0.01 && control->me == 0) + if (fabs( swa ) > 0.01 && control->my_rank == 0) control->error_ptr->warning( FLERR, "Non-zero lower Taper-radius cutoff" ); if (swb < 0) { control->error_ptr->all(FLERR,"Negative upper Taper-radius cutoff"); } - else if( swb < 5 && control->me == 0) { + else if( swb < 5 && control->my_rank == 0) { char errmsg[256]; snprintf(errmsg, 256, "Very low Taper-radius cutoff: %f", swb ); control->error_ptr->warning( FLERR, errmsg ); From d7a5bf4e164bd0c7ea9e18812685584e8fcc54c3 Mon Sep 17 00:00:00 2001 From: mkanski Date: Wed, 3 Apr 2019 18:52:14 +0200 Subject: [PATCH 105/372] Repair last commit --- src/USER-REAXC/pair_reaxc.cpp | 1 + src/USER-REAXC/reaxc_init_md.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 8b36019881..1f30cdad43 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -91,6 +91,7 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) memory->smalloc(sizeof(mpi_datatypes),"reax:mpi"); MPI_Comm_rank(world,&system->my_rank); + control->me = system->my_rank; system->my_coords[0] = 0; system->my_coords[1] = 0; diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index dfd92ec7a3..c1239e0cbb 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -91,13 +91,13 @@ void Init_Taper( control_params *control, storage *workspace ) swa = control->nonb_low; swb = control->nonb_cut; - if (fabs( swa ) > 0.01 && control->my_rank == 0) + if (fabs( swa ) > 0.01 && control->me == 0) control->error_ptr->warning( FLERR, "Non-zero lower Taper-radius cutoff" ); if (swb < 0) { control->error_ptr->all(FLERR,"Negative upper Taper-radius cutoff"); } - else if( swb < 5 && control->my_rank == 0) { + else if( swb < 5 && control->me == 0) { char errmsg[256]; snprintf(errmsg, 256, "Very low Taper-radius cutoff: %f", swb ); control->error_ptr->warning( FLERR, errmsg ); From e45e92b1cbf0cb4823d80eed07d6049c136ee61a Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 3 Apr 2019 11:24:37 -0600 Subject: [PATCH 106/372] Commit JT 040319 - improved examples - start rework gneb init. (Rodrigues' formula) --- examples/SPIN/gneb/README | 7 +- examples/SPIN/gneb/iron/in.gneb.iron | 2 +- examples/SPIN/gneb/skyrmion/in.gneb.skyrmion | 16 +- src/SPIN/neb_spin.cpp | 152 ++++++++++--------- 4 files changed, 89 insertions(+), 88 deletions(-) diff --git a/examples/SPIN/gneb/README b/examples/SPIN/gneb/README index 7d388d898e..6f5db6d388 100644 --- a/examples/SPIN/gneb/README +++ b/examples/SPIN/gneb/README @@ -1,5 +1,10 @@ +Perform geodesic NEB calculations for spin configurations. +The two examples are: +- the magnetic switching of an iron nanoisland +- the collapse of a magnetic skyrmion + Run those examples as: -mpirun -np 4 lmp_mpi -in in.gneb.iron -partition 4x1 +mpirun -np 3 lmp_mpi -in in.gneb.iron -partition 3x1 You should be able to use any number of replicas >= 3. diff --git a/examples/SPIN/gneb/iron/in.gneb.iron b/examples/SPIN/gneb/iron/in.gneb.iron index 4cfbd723b7..c794292cfb 100644 --- a/examples/SPIN/gneb/iron/in.gneb.iron +++ b/examples/SPIN/gneb/iron/in.gneb.iron @@ -1,4 +1,3 @@ -# bcc iron in a 3d periodic box units metal dimension 3 @@ -11,6 +10,7 @@ atom_modify map array read_data initial.iron_spin # setting mass, mag. moments, and interactions for bcc iron +# (mass not necessary for fixed lattice calculation) mass 1 55.845 diff --git a/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion index aab6376e98..cbab56631b 100644 --- a/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion +++ b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion @@ -1,4 +1,3 @@ -# bcc iron in a 3d periodic box units metal dimension 3 @@ -8,17 +7,12 @@ atom_style spin # necessary for the serial algorithm (sametag) atom_modify map array -#lattice sc 3.0 -#region box block 0.0 20.0 0.0 20.0 0.0 1.0 -#create_box 1 box -#create_atoms 1 box - read_data initial.skyrmion # setting mass, mag. moments, and interactions for bcc iron +# (mass not necessary for fixed lattice calculation) mass 1 55.845 -#set group all spin 2.2 -1.0 0.0 0.0 pair_style hybrid/overlay spin/exchange 3.1 spin/dmi 3.1 pair_coeff * * spin/exchange exchange 3.1 0.01593 0.06626915552 1.211 @@ -31,10 +25,8 @@ fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 5e-05 0.0 0.0 1.0 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 fix 3 all neb/spin 1.0 -#fix 4 all nve/spin lattice no timestep 0.0001 -#run 0 compute out_mag all spin variable magx equal c_out_mag[1] @@ -49,10 +41,8 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz variable u universe 1 2 3 4 -#dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] dump 1 all custom 1 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] min_style spin -min_modify alpha_damp 1.0 discret_factor 10.0 -neb/spin 1.0e-16 1.0e-16 1000 1000 10 final final.skyrmion -#neb/spin 1.0e-16 1.0e-16 10 10 10 final final.skyrmion +min_modify alpha_damp 1.0 discrete_factor 10.0 +neb/spin 1.0e-12 1.0e-12 10000 10000 10 final final.skyrmion diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index d981962a70..69c59e0484 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -637,52 +637,9 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) // initial, final and inter ang. values - double itheta,iphi,ftheta,fphi,ktheta,kphi; - double spix,spiy,spiz,spfx,spfy,spfz; - double spkx,spky,spkz,iknorm; - - spix = spi[0]; - spiy = spi[1]; - spiz = spi[2]; - - spfx = sploc[0]; - spfy = sploc[1]; - spfz = sploc[2]; - - iphi = itheta = fphi = ftheta = 0.0; - - iphi = acos(spiz); - if (sin(iphi) != 0.0) - itheta = acos(spix/sin(iphi)); - - fphi = acos(spfz); - if (sin(fphi) != 0.0) - ftheta = acos(spfx/sin(fphi)); - - kphi = iphi + fraction*(fphi-iphi); - ktheta = itheta + fraction*(ftheta-itheta); - - spkx = cos(ktheta)*sin(kphi); - spky = sin(ktheta)*sin(kphi); - spkz = cos(kphi); - - double knormsq = spkx*spkx + spky*spky + spkz*spkz; - if (knormsq != 0.0) - iknorm = 1.0/sqrt(knormsq); - - spkx *= iknorm; - spky *= iknorm; - spkz *= iknorm; - - //sploc[0] = spkx; - //sploc[1] = spky; - //sploc[2] = spkz; - - //double kx,ky,kz; + //double itheta,iphi,ftheta,fphi,ktheta,kphi; //double spix,spiy,spiz,spfx,spfy,spfz; - //double kcrossx,kcrossy,kcrossz,knormsq; - //double spkx,spky,spkz; - //double sdot,omega,iknorm; + //double spkx,spky,spkz,iknorm; //spix = spi[0]; //spiy = spi[1]; @@ -691,40 +648,89 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) //spfx = sploc[0]; //spfy = sploc[1]; //spfz = sploc[2]; - // - //kx = spiy*spfz - spiz*spfy; - //ky = spiz*spfx - spix*spfz; - //kz = spix*spfy - spiy*spfx; - //knormsq = kx*kx+ky*ky+kz*kz; - // - //if (knormsq != 0.0) { + //iphi = itheta = fphi = ftheta = 0.0; + + //iphi = acos(spiz); + //if (sin(iphi) != 0.0) + // itheta = acos(spix/sin(iphi)); + + //fphi = acos(spfz); + //if (sin(fphi) != 0.0) + // ftheta = acos(spfx/sin(fphi)); + + //kphi = iphi + fraction*(fphi-iphi); + //ktheta = itheta + fraction*(ftheta-itheta); + + //spkx = cos(ktheta)*sin(kphi); + //spky = sin(ktheta)*sin(kphi); + //spkz = cos(kphi); + + //double knormsq = spkx*spkx + spky*spky + spkz*spkz; + //if (knormsq != 0.0) // iknorm = 1.0/sqrt(knormsq); - // kx *= iknorm; - // ky *= iknorm; - // kz *= iknorm; - //} - // - //kcrossx = ky*spiz - kz*spiy; - //kcrossy = kz*spix - kx*spiz; - //kcrossz = kx*spiy - ky*spix; - - //sdot = spix*spfx + spiy*spfy + spiz*spfz; - - //omega = acos(sdot); - //omega *= fraction; - - //spkx = spix*cos(omega) + kcrossx*sin(omega); - //spky = spiy*cos(omega) + kcrossy*sin(omega); - //spkz = spiz*cos(omega) + kcrossz*sin(omega); - // - //iknorm = 1.0/sqrt(spkx*spkx+spky*spky+spkz*spkz); - //if (iknorm == 0.0) - // error->all(FLERR,"Incorrect rotation operation"); //spkx *= iknorm; //spky *= iknorm; //spkz *= iknorm; + + //sploc[0] = spkx; + //sploc[1] = spky; + //sploc[2] = spkz; + + double kx,ky,kz; + double spix,spiy,spiz,spfx,spfy,spfz; + double kcrossx,kcrossy,kcrossz,knormsq; + double kdots; + double spkx,spky,spkz; + double sdot,omega,iknorm,isnorm; + + spix = spi[0]; + spiy = spi[1]; + spiz = spi[2]; + + spfx = sploc[0]; + spfy = sploc[1]; + spfz = sploc[2]; + + kx = spiy*spfz - spiz*spfy; + ky = spiz*spfx - spix*spfz; + kz = spix*spfy - spiy*spfx; + + knormsq = kx*kx+ky*ky+kz*kz; + + if (knormsq != 0.0) { + iknorm = 1.0/sqrt(knormsq); + kx *= iknorm; + ky *= iknorm; + kz *= iknorm; + } + + kcrossx = ky*spiz - kz*spiy; + kcrossy = kz*spix - kx*spiz; + kcrossz = kx*spiy - ky*spix; + + kdots = kx*spix + ky*spiz + kz*spiz; + sdot = spix*spfx + spiy*spfy + spiz*spfz; + + omega = acos(sdot); + omega *= fraction; + + spkx = spix*cos(omega) + kcrossx*sin(omega); + spky = spiy*cos(omega) + kcrossy*sin(omega); + spkz = spiz*cos(omega) + kcrossz*sin(omega); + + spkx += kx*kdots*(1.0-cos(omega)); + spky += ky*kdots*(1.0-cos(omega)); + spkz += kz*kdots*(1.0-cos(omega)); + + isnorm = 1.0/sqrt(spkx*spkx+spky*spky+spkz*spkz); + if (isnorm == 0.0) + error->all(FLERR,"Incorrect rotation operation"); + + spkx *= isnorm; + spky *= isnorm; + spkz *= isnorm; sploc[0] = spkx; sploc[1] = spky; From d4a495151e53744ecafa1c40f1f4dd894447c2e1 Mon Sep 17 00:00:00 2001 From: mkanski Date: Wed, 3 Apr 2019 19:40:40 +0200 Subject: [PATCH 107/372] Simplify access to error in reax/c/omp --- src/USER-OMP/pair_reaxc_omp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index 9e198186fd..92ba31048d 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -113,7 +113,7 @@ PairReaxCOMP::~PairReaxCOMP() if (setup_flag) { reax_list * bonds = lists+BONDS; for (int i=0; inum_intrs; ++i) - sfree(LAMMPS_NS::Pointers::lmp->error, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); + sfree(error, bonds->select.bond_list[i].bo_data.CdboReduction, "CdboReduction"); } memory->destroy(num_nbrs_offset); From 8820467a8bb76a3405ea89623cdd930847526798 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Apr 2019 15:15:40 -0400 Subject: [PATCH 108/372] fix wrong column size assignment bug when using optional arguments in some local computes --- src/BODY/compute_body_local.cpp | 5 +++-- src/RIGID/compute_rigid_local.cpp | 7 ++++--- src/compute_improper_local.cpp | 6 +++--- src/compute_pair_local.cpp | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/BODY/compute_body_local.cpp b/src/BODY/compute_body_local.cpp index df8a76d0fe..20f7d76708 100644 --- a/src/BODY/compute_body_local.cpp +++ b/src/BODY/compute_body_local.cpp @@ -39,8 +39,6 @@ ComputeBodyLocal::ComputeBodyLocal(LAMMPS *lmp, int narg, char **arg) : local_flag = 1; nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; which = new int[nvalues]; index = new int[nvalues]; @@ -66,6 +64,9 @@ ComputeBodyLocal::ComputeBodyLocal(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Invalid index in compute body/local command"); } + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + nmax = 0; vector = NULL; array = NULL; diff --git a/src/RIGID/compute_rigid_local.cpp b/src/RIGID/compute_rigid_local.cpp index bcb778ab86..ec2799b6bc 100644 --- a/src/RIGID/compute_rigid_local.cpp +++ b/src/RIGID/compute_rigid_local.cpp @@ -40,8 +40,6 @@ ComputeRigidLocal::ComputeRigidLocal(LAMMPS *lmp, int narg, char **arg) : local_flag = 1; nvalues = narg - 4; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; int n = strlen(arg[3]) + 1; idrigid = new char[n]; @@ -88,7 +86,10 @@ ComputeRigidLocal::ComputeRigidLocal(LAMMPS *lmp, int narg, char **arg) : else error->all(FLERR,"Invalid keyword in compute rigid/local command"); } - ncount = nmax = 0; + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + +ncount = nmax = 0; vlocal = NULL; alocal = NULL; } diff --git a/src/compute_improper_local.cpp b/src/compute_improper_local.cpp index f54cb67535..2861850c79 100644 --- a/src/compute_improper_local.cpp +++ b/src/compute_improper_local.cpp @@ -46,9 +46,6 @@ ComputeImproperLocal::ComputeImproperLocal(LAMMPS *lmp, int narg, char **arg) : local_flag = 1; nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; - cflag = -1; nvalues = 0; @@ -57,6 +54,9 @@ ComputeImproperLocal::ComputeImproperLocal(LAMMPS *lmp, int narg, char **arg) : else error->all(FLERR,"Invalid keyword in compute improper/local command"); } + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + nmax = 0; vlocal = NULL; alocal = NULL; diff --git a/src/compute_pair_local.cpp b/src/compute_pair_local.cpp index e4cbabfd3d..c356a08be9 100644 --- a/src/compute_pair_local.cpp +++ b/src/compute_pair_local.cpp @@ -43,9 +43,6 @@ ComputePairLocal::ComputePairLocal(LAMMPS *lmp, int narg, char **arg) : local_flag = 1; nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; - pstyle = new int[nvalues]; pindex = new int[nvalues]; @@ -96,6 +93,9 @@ ComputePairLocal::ComputePairLocal(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nvalues; i++) if (pstyle[i] != DIST) singleflag = 1; + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + nmax = 0; vlocal = NULL; alocal = NULL; From 0d78c7b43d6b462b62effac2b0463c9b3a37a2d7 Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Thu, 4 Apr 2019 09:57:15 +0300 Subject: [PATCH 109/372] fix elstop: Rename to fix electron/stopping --- doc/src/Commands_fix.txt | 2 +- doc/src/fix.txt | 2 +- ...x_elstop.txt => fix_electron_stopping.txt} | 28 +++---- doc/src/fixes.txt | 2 +- doc/src/lammps.book | 2 +- doc/utils/sphinx-config/false_positives.txt | 1 - .../Si.Si.elstop | 0 .../misc/{elstop => electron_stopping}/Si.sw | 0 .../{elstop => electron_stopping}/in.elstop | 4 +- .../in.elstop.only | 6 +- .../log.20Mar19.elstop.g++.1 | 30 ++++---- .../log.20Mar19.elstop.g++.4 | 30 ++++---- .../log.20Mar19.elstop.only.g++.1 | 32 ++++---- .../log.20Mar19.elstop.only.g++.4 | 34 ++++----- src/USER-MISC/README | 2 +- ...x_elstop.cpp => fix_electron_stopping.cpp} | 75 ++++++++++--------- .../{fix_elstop.h => fix_electron_stopping.h} | 38 +++++----- 17 files changed, 143 insertions(+), 145 deletions(-) rename doc/src/{fix_elstop.txt => fix_electron_stopping.txt} (87%) rename examples/USER/misc/{elstop => electron_stopping}/Si.Si.elstop (100%) rename examples/USER/misc/{elstop => electron_stopping}/Si.sw (100%) rename examples/USER/misc/{elstop => electron_stopping}/in.elstop (87%) rename examples/USER/misc/{elstop => electron_stopping}/in.elstop.only (79%) rename examples/USER/misc/{elstop => electron_stopping}/log.20Mar19.elstop.g++.1 (97%) rename examples/USER/misc/{elstop => electron_stopping}/log.20Mar19.elstop.g++.4 (97%) rename examples/USER/misc/{elstop => electron_stopping}/log.20Mar19.elstop.only.g++.1 (89%) rename examples/USER/misc/{elstop => electron_stopping}/log.20Mar19.elstop.only.g++.4 (89%) rename src/USER-MISC/{fix_elstop.cpp => fix_electron_stopping.cpp} (75%) rename src/USER-MISC/{fix_elstop.h => fix_electron_stopping.h} (66%) diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index ad884f7bd8..0406c12ca1 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -61,7 +61,7 @@ OPT. "edpd/source"_fix_dpd_source.html, "efield"_fix_efield.html, "ehex"_fix_ehex.html, -"elstop"_fix_elstop.html, +"electron/stopping"_fix_electron_stopping.html, "enforce2d (k)"_fix_enforce2d.html, "eos/cv"_fix_eos_cv.html, "eos/table"_fix_eos_table.html, diff --git a/doc/src/fix.txt b/doc/src/fix.txt index fa34dc17de..39f4405a0b 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -199,7 +199,7 @@ accelerated styles exist. "edpd/source"_fix_dpd_source.html - "efield"_fix_efield.html - impose electric field on system "ehex"_fix_ehex.html - enhanced heat exchange algorithm -"elstop"_fix_elstop.html - electronic stopping power as a friction force +"electron/stopping"_fix_electron_stopping.html - electronic stopping power as a friction force "enforce2d"_fix_enforce2d.html - zero out z-dimension velocity and force "eos/cv"_fix_eos_cv.html - "eos/table"_fix_eos_table.html - diff --git a/doc/src/fix_elstop.txt b/doc/src/fix_electron_stopping.txt similarity index 87% rename from doc/src/fix_elstop.txt rename to doc/src/fix_electron_stopping.txt index 53779e0953..096629c330 100644 --- a/doc/src/fix_elstop.txt +++ b/doc/src/fix_electron_stopping.txt @@ -6,14 +6,14 @@ :line -fix elstop command :h3 +fix electron/stopping command :h3 [Syntax:] -fix ID group-ID elstop Ecut file keyword value ... :pre +fix ID group-ID electron/stopping Ecut file keyword value ... :pre ID, group-ID are documented in "fix"_fix.html command :ulb,l -elstop = style name of this fix command :l +electron/stopping = style name of this fix command :l Ecut = minimum kinetic energy for electronic stopping (energy units) :l file = name of the file containing the electronic stopping power table :l zero or more keyword/value pairs may be appended to args :l @@ -21,14 +21,14 @@ keyword = {region} or {minneigh} :l {region} value = region-ID region-ID = region, whose atoms will be affected by this fix {minneigh} value = minneigh - minneigh = minimum number of neighbors for atoms to have elstop applied :pre + minneigh = minimum number of neighbors an atom to have stopping applied :pre :ule [Examples:] -fix el all elstop 10.0 elstop-table.txt -fix el all elstop 10.0 elstop-table.txt minneigh 3 -fix el mygroup elstop 1.0 elstop-table.txt region bulk :pre +fix el all electron/stopping 10.0 elstop-table.txt +fix el all electron/stopping 10.0 elstop-table.txt minneigh 3 +fix el mygroup electron/stopping 1.0 elstop-table.txt region bulk :pre [Description:] @@ -48,9 +48,9 @@ to each atom as: \vec\{F\}_i = \vec\{F\}^0_i - \frac\{\vec\{v\}_i\}\{\|\vec\{v\}_i\|\} \cdot S_e \end\{equation\} -where \(\vec\{F\}_i\) is the resulting total force on the atom. \(\vec\{F\}^0_i\) -is the original force applied to the atom, \(\vec\{v\}_i\) is its velocity and -\(S_e\) is the stopping power of the ion. +where \(\vec\{F\}_i\) is the resulting total force on the atom. +\(\vec\{F\}^0_i\) is the original force applied to the atom, \(\vec\{v\}_i\) is +its velocity and \(S_e\) is the stopping power of the ion. NOTE: In addition to electronic stopping, atomic cascades and irradiation simulations require the use of an adaptive timestep (see @@ -79,10 +79,10 @@ in bulk material. An alternative is to disable the check for neighbors by setting {minneigh} to zero and using the {region} keyword. This is necessary when running simulations of cluster bombardment. -If the {region} keyword is used, the atom must also be in the specified geometric -"region"_region.html in order to have electronic stopping applied to it. This is -useful if the position of the bulk material is fixed. By default the electronic -stopping is applied everywhere in the simulation cell. +If the {region} keyword is used, the atom must also be in the specified +geometric "region"_region.html in order to have electronic stopping applied to +it. This is useful if the position of the bulk material is fixed. By default +the electronic stopping is applied everywhere in the simulation cell. :line diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index 7bbf269a2c..d77acf946d 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -40,7 +40,7 @@ Fixes :h1 fix_dt_reset fix_efield fix_ehex - fix_elstop + fix_electron_stopping fix_enforce2d fix_eos_cv fix_eos_table diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 692ffcd712..6a2ca03ba8 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -264,7 +264,7 @@ fix_drude_transform.html fix_dt_reset.html fix_efield.html fix_ehex.html -fix_elstop.html +fix_electron_stopping.html fix_enforce2d.html fix_eos_cv.html fix_eos_table.html diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 65d0d16908..f168ff038a 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -692,7 +692,6 @@ elong Elsevier Elsner Elstner -elstop elt emacs emax diff --git a/examples/USER/misc/elstop/Si.Si.elstop b/examples/USER/misc/electron_stopping/Si.Si.elstop similarity index 100% rename from examples/USER/misc/elstop/Si.Si.elstop rename to examples/USER/misc/electron_stopping/Si.Si.elstop diff --git a/examples/USER/misc/elstop/Si.sw b/examples/USER/misc/electron_stopping/Si.sw similarity index 100% rename from examples/USER/misc/elstop/Si.sw rename to examples/USER/misc/electron_stopping/Si.sw diff --git a/examples/USER/misc/elstop/in.elstop b/examples/USER/misc/electron_stopping/in.elstop similarity index 87% rename from examples/USER/misc/elstop/in.elstop rename to examples/USER/misc/electron_stopping/in.elstop index e31e6d8a65..beaffbb821 100644 --- a/examples/USER/misc/elstop/in.elstop +++ b/examples/USER/misc/electron_stopping/in.elstop @@ -1,4 +1,4 @@ -# Test case / example for the electronic stopping fix elstop +# Test case / example for fix electron/stopping # Perfect Si lattice with one primary knock-on atom. # # Also uses fix dt/reset, as one should when energies are high @@ -26,7 +26,7 @@ pair_style sw pair_coeff * * Si.sw Si fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 -fix fel all elstop 1.0 Si.Si.elstop +fix fel all electron/stopping 1.0 Si.Si.elstop fix fnve all nve thermo 10 diff --git a/examples/USER/misc/elstop/in.elstop.only b/examples/USER/misc/electron_stopping/in.elstop.only similarity index 79% rename from examples/USER/misc/elstop/in.elstop.only rename to examples/USER/misc/electron_stopping/in.elstop.only index 1d09fa11f9..3e9650802c 100644 --- a/examples/USER/misc/elstop/in.elstop.only +++ b/examples/USER/misc/electron_stopping/in.elstop.only @@ -1,6 +1,6 @@ -# Test case / example for the electronic stopping fix elstop +# Test case / example for fix electron/stopping # One fast atom, no other interactions. -# Elstop only applied in a smaller box in the middle. +# Stopping only applied in a smaller box in the middle. # # Also uses fix dt/reset, as one should when energies are high # enough to require electronic stopping. @@ -25,7 +25,7 @@ pair_style zero 1 pair_coeff * * 1 fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 -fix fel all elstop 1.0 Si.Si.elstop minneigh 0 region rsmallbox +fix fel all electron/stopping 1.0 Si.Si.elstop minneigh 0 region rsmallbox fix fnve all nve compute ek all ke/atom diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.g++.1 similarity index 97% rename from examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 rename to examples/USER/misc/electron_stopping/log.20Mar19.elstop.g++.1 index 3547ced959..cbe70373af 100644 --- a/examples/USER/misc/elstop/log.20Mar19.elstop.g++.1 +++ b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.g++.1 @@ -1,7 +1,7 @@ LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task -# Test case / example for the electronic stopping fix elstop +# Test case / example for fix electron/stopping # Perfect Si lattice with one primary knock-on atom. # # Also uses fix dt/reset, as one should when energies are high @@ -23,7 +23,7 @@ mass 1 28.0855 create_atoms 1 box Created 32000 atoms - Time spent = 0.00365901 secs + create_atoms CPU = 0.00282311 secs velocity all create 300 42534 mom yes rot yes @@ -36,7 +36,7 @@ pair_coeff * * Si.sw Si Reading potential file Si.sw with DATE: 2007-06-11 fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 -fix fel all elstop 1.0 Si.Si.elstop +fix fel all electron/stopping 1.0 Si.Si.elstop fix fnve all nve thermo 10 @@ -58,7 +58,7 @@ Neighbor list info ... pair build: full/bin/atomonly stencil: full/bin/3d bin: standard - (2) fix elstop, occasional, copy from (1) + (2) fix electron/stopping, occasional, copy from (1) attributes: full, newton on pair build: copy stencil: none @@ -566,20 +566,20 @@ Step Time Dt f_fel 4980 0.014568876 3.9720495e-08 6777.8926 4990 0.014569265 3.7726941e-08 6778.0636 5000 0.014569634 3.5910753e-08 6778.2261 -Loop time of 27.2739 on 1 procs for 5000 steps with 32000 atoms +Loop time of 24.155 on 1 procs for 5000 steps with 32000 atoms -Performance: 0.001 ns/day, 42193.880 hours/ns, 183.326 timesteps/s -96.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.001 ns/day, 37368.951 hours/ns, 206.996 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 17.626 | 17.626 | 17.626 | 0.0 | 64.62 -Neigh | 1.5828 | 1.5828 | 1.5828 | 0.0 | 5.80 -Comm | 0.78596 | 0.78596 | 0.78596 | 0.0 | 2.88 -Output | 0.0082562 | 0.0082562 | 0.0082562 | 0.0 | 0.03 -Modify | 6.414 | 6.414 | 6.414 | 0.0 | 23.52 -Other | | 0.8573 | | | 3.14 +Pair | 15.795 | 15.795 | 15.795 | 0.0 | 65.39 +Neigh | 1.5182 | 1.5182 | 1.5182 | 0.0 | 6.29 +Comm | 0.58555 | 0.58555 | 0.58555 | 0.0 | 2.42 +Output | 0.0064323 | 0.0064323 | 0.0064323 | 0.0 | 0.03 +Modify | 5.619 | 5.619 | 5.619 | 0.0 | 23.26 +Other | | 0.6313 | | | 2.61 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -594,4 +594,4 @@ Total # of neighbors = 576016 Ave neighs/atom = 18.0005 Neighbor list builds = 68 Dangerous builds = 42 -Total wall time: 0:00:27 +Total wall time: 0:00:24 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.g++.4 similarity index 97% rename from examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 rename to examples/USER/misc/electron_stopping/log.20Mar19.elstop.g++.4 index 4b06000522..e0f45ef460 100644 --- a/examples/USER/misc/elstop/log.20Mar19.elstop.g++.4 +++ b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.g++.4 @@ -1,7 +1,7 @@ LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task -# Test case / example for the electronic stopping fix elstop +# Test case / example for fix electron/stopping # Perfect Si lattice with one primary knock-on atom. # # Also uses fix dt/reset, as one should when energies are high @@ -23,7 +23,7 @@ mass 1 28.0855 create_atoms 1 box Created 32000 atoms - Time spent = 0.000838995 secs + create_atoms CPU = 0.000856161 secs velocity all create 300 42534 mom yes rot yes @@ -36,7 +36,7 @@ pair_coeff * * Si.sw Si Reading potential file Si.sw with DATE: 2007-06-11 fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 -fix fel all elstop 1.0 Si.Si.elstop +fix fel all electron/stopping 1.0 Si.Si.elstop fix fnve all nve thermo 10 @@ -58,7 +58,7 @@ Neighbor list info ... pair build: full/bin/atomonly stencil: full/bin/3d bin: standard - (2) fix elstop, occasional, copy from (1) + (2) fix electron/stopping, occasional, copy from (1) attributes: full, newton on pair build: copy stencil: none @@ -566,20 +566,20 @@ Step Time Dt f_fel 4980 0.014615386 1.0814135e-07 6805.2899 4990 0.014616494 1.1414984e-07 6805.7869 5000 0.014617666 1.2114278e-07 6806.313 -Loop time of 20.4871 on 4 procs for 5000 steps with 32000 atoms +Loop time of 9.26846 on 4 procs for 5000 steps with 32000 atoms -Performance: 0.003 ns/day, 9395.278 hours/ns, 244.056 timesteps/s -80.0% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.006 ns/day, 4250.474 hours/ns, 539.464 timesteps/s +96.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.3304 | 5.3747 | 5.4481 | 1.9 | 26.23 -Neigh | 0.47764 | 0.49529 | 0.50484 | 1.5 | 2.42 -Comm | 7.3264 | 7.6698 | 8.0174 | 11.5 | 37.44 -Output | 0.020597 | 0.064879 | 0.11197 | 13.7 | 0.32 -Modify | 4.3321 | 4.7499 | 5.1576 | 18.4 | 23.18 -Other | | 2.132 | | | 10.41 +Pair | 4.6281 | 4.7789 | 5.1937 | 11.0 | 51.56 +Neigh | 0.40488 | 0.41576 | 0.43895 | 2.1 | 4.49 +Comm | 0.8478 | 1.2799 | 1.4349 | 22.1 | 13.81 +Output | 0.0048099 | 0.016429 | 0.050251 | 15.2 | 0.18 +Modify | 2.1042 | 2.1347 | 2.1706 | 1.6 | 23.03 +Other | | 0.6427 | | | 6.93 Nlocal: 8000 ave 8033 max 7977 min Histogram: 1 0 1 1 0 0 0 0 0 1 @@ -594,4 +594,4 @@ Total # of neighbors = 576008 Ave neighs/atom = 18.0003 Neighbor list builds = 67 Dangerous builds = 38 -Total wall time: 0:00:20 +Total wall time: 0:00:09 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.only.g++.1 similarity index 89% rename from examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 rename to examples/USER/misc/electron_stopping/log.20Mar19.elstop.only.g++.1 index e586fb5afb..a3370204b7 100644 --- a/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.1 +++ b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.only.g++.1 @@ -1,9 +1,9 @@ LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task -# Test case / example for the electronic stopping fix elstop +# Test case / example for fix electron/stopping # One fast atom, no other interactions. -# Elstop only applied in a smaller box in the middle. +# Stopping only applied in a smaller box in the middle. # # Also uses fix dt/reset, as one should when energies are high # enough to require electronic stopping. @@ -26,14 +26,14 @@ mass 1 28.0855 create_atoms 1 single 0 0 0 Created 1 atoms - Time spent = 3.09944e-06 secs + create_atoms CPU = 4.05312e-06 secs velocity all set 1120 1620 389 pair_style zero 1 pair_coeff * * 1 fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 -fix fel all elstop 1.0 Si.Si.elstop minneigh 0 region rsmallbox +fix fel all electron/stopping 1.0 Si.Si.elstop minneigh 0 region rsmallbox fix fnve all nve compute ek all ke/atom @@ -45,8 +45,6 @@ thermo_style custom step time dt f_fel c_ektot #dump mydump all custom 200 elstop.only.dump id x y z vx vy vz fx fy fz c_ek run 10000 -WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) -WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -59,7 +57,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard - (2) fix elstop, occasional + (2) fix electron/stopping, occasional attributes: full, newton on pair build: full/bin/atomonly stencil: full/bin/3d @@ -167,20 +165,20 @@ Step Time Dt f_fel c_ektot 9800 0.57677384 6.0949329e-05 1947.6558 3917.8967 9900 0.58286878 6.0949329e-05 1947.6558 3917.8967 10000 0.58896371 6.0949329e-05 1947.6558 3917.8967 -Loop time of 1.81749 on 1 procs for 10000 steps with 1 atoms +Loop time of 1.25184 on 1 procs for 10000 steps with 1 atoms -Performance: 28.974 ns/day, 0.828 hours/ns, 5502.087 timesteps/s -95.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 42.066 ns/day, 0.571 hours/ns, 7988.216 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.00068855 | 0.00068855 | 0.00068855 | 0.0 | 0.04 -Neigh | 1.777 | 1.777 | 1.777 | 0.0 | 97.77 -Comm | 0.028521 | 0.028521 | 0.028521 | 0.0 | 1.57 -Output | 0.0020428 | 0.0020428 | 0.0020428 | 0.0 | 0.11 -Modify | 0.0063827 | 0.0063827 | 0.0063827 | 0.0 | 0.35 -Other | | 0.002891 | | | 0.16 +Pair | 0.0005827 | 0.0005827 | 0.0005827 | 0.0 | 0.05 +Neigh | 1.2134 | 1.2134 | 1.2134 | 0.0 | 96.93 +Comm | 0.02822 | 0.02822 | 0.02822 | 0.0 | 2.25 +Output | 0.0017159 | 0.0017159 | 0.0017159 | 0.0 | 0.14 +Modify | 0.0052147 | 0.0052147 | 0.0052147 | 0.0 | 0.42 +Other | | 0.002664 | | | 0.21 Nlocal: 1 ave 1 max 1 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.only.g++.4 similarity index 89% rename from examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 rename to examples/USER/misc/electron_stopping/log.20Mar19.elstop.only.g++.4 index 5ed0d86f1c..e8bd45b20f 100644 --- a/examples/USER/misc/elstop/log.20Mar19.elstop.only.g++.4 +++ b/examples/USER/misc/electron_stopping/log.20Mar19.elstop.only.g++.4 @@ -1,9 +1,9 @@ LAMMPS (28 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task -# Test case / example for the electronic stopping fix elstop +# Test case / example for fix electron/stopping # One fast atom, no other interactions. -# Elstop only applied in a smaller box in the middle. +# Stopping only applied in a smaller box in the middle. # # Also uses fix dt/reset, as one should when energies are high # enough to require electronic stopping. @@ -26,14 +26,14 @@ mass 1 28.0855 create_atoms 1 single 0 0 0 Created 1 atoms - Time spent = 2.00272e-05 secs + create_atoms CPU = 1.19209e-05 secs velocity all set 1120 1620 389 pair_style zero 1 pair_coeff * * 1 fix fdt all dt/reset 1 NULL 0.001 0.1 emax 20.0 -fix fel all elstop 1.0 Si.Si.elstop minneigh 0 region rsmallbox +fix fel all electron/stopping 1.0 Si.Si.elstop minneigh 0 region rsmallbox fix fnve all nve compute ek all ke/atom @@ -45,8 +45,6 @@ thermo_style custom step time dt f_fel c_ektot #dump mydump all custom 200 elstop.only.dump id x y z vx vy vz fx fy fz c_ek run 10000 -WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) -WARNING: More than one compute ke/atom (src/compute_ke_atom.cpp:55) Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -59,7 +57,7 @@ Neighbor list info ... pair build: half/bin/atomonly/newton stencil: half/bin/3d/newton bin: standard - (2) fix elstop, occasional + (2) fix electron/stopping, occasional attributes: full, newton on pair build: full/bin/atomonly stencil: full/bin/3d @@ -167,20 +165,20 @@ Step Time Dt f_fel c_ektot 9800 0.57677384 6.0949329e-05 1947.6558 3917.8967 9900 0.58286878 6.0949329e-05 1947.6558 3917.8967 10000 0.58896371 6.0949329e-05 1947.6558 3917.8967 -Loop time of 3.82192 on 4 procs for 10000 steps with 1 atoms +Loop time of 1.38891 on 4 procs for 10000 steps with 1 atoms -Performance: 13.778 ns/day, 1.742 hours/ns, 2616.487 timesteps/s -76.8% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 37.915 ns/day, 0.633 hours/ns, 7199.876 timesteps/s +94.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0006454 | 0.00077975 | 0.001003 | 0.0 | 0.02 -Neigh | 1.3094 | 1.3771 | 1.441 | 4.0 | 36.03 -Comm | 0.13665 | 0.16207 | 0.20281 | 6.1 | 4.24 -Output | 0.036584 | 0.046189 | 0.060792 | 4.2 | 1.21 -Modify | 2.1326 | 2.212 | 2.3096 | 4.3 | 57.88 -Other | | 0.02382 | | | 0.62 +Pair | 0.0004971 | 0.00060463 | 0.00069618 | 0.0 | 0.04 +Neigh | 1.1005 | 1.1507 | 1.2839 | 7.2 | 82.85 +Comm | 0.025918 | 0.026382 | 0.027041 | 0.3 | 1.90 +Output | 0.0016336 | 0.005001 | 0.01507 | 8.2 | 0.36 +Modify | 0.059378 | 0.20196 | 0.25453 | 18.3 | 14.54 +Other | | 0.00422 | | | 0.30 Nlocal: 0.25 ave 1 max 0 min Histogram: 3 0 0 0 0 0 0 0 0 1 @@ -195,4 +193,4 @@ Total # of neighbors = 0 Ave neighs/atom = 0 Neighbor list builds = 960 Dangerous builds = 568 -Total wall time: 0:00:03 +Total wall time: 0:00:01 diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 43deda0bdb..2ecbdc4128 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -45,7 +45,7 @@ dihedral_style table/cut, Mike Salerno, ksalerno@pha.jhu.edu, 11 May 18 fix addtorque, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 fix ave/correlate/long, Jorge Ramirez (UPM Madrid), jorge.ramirez at upm.es, 21 Oct 2015 fix bond/react, Jacob Gissinger (CU Boulder), info at disarmmd.org, 24 Feb 2018 -fix elstop, Konstantin Avchaciov, k.avchachov at gmail.com, 26 Feb 2019 +fix electron/stopping, Konstantin Avchaciov, k.avchachov at gmail.com, 26 Feb 2019 fix ffl, David Wilkins (EPFL Lausanne), david.wilkins @ epfl.ch, 28 Sep 2018 fix filter/corotate, Lukas Fath (KIT), lukas.fath at kit.edu, 15 Mar 2017 fix flow/gauss, Joel Eaves (CU Boulder), Joel.Eaves@Colorado.edu, 23 Aug 2016 diff --git a/src/USER-MISC/fix_elstop.cpp b/src/USER-MISC/fix_electron_stopping.cpp similarity index 75% rename from src/USER-MISC/fix_elstop.cpp rename to src/USER-MISC/fix_electron_stopping.cpp index ac73753a62..0831ebcf89 100644 --- a/src/USER-MISC/fix_elstop.cpp +++ b/src/USER-MISC/fix_electron_stopping.cpp @@ -19,7 +19,7 @@ #include #include #include -#include "fix_elstop.h" +#include "fix_electron_stopping.h" #include "mpi.h" #include "atom.h" #include "update.h" @@ -42,7 +42,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ -FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : +FixElectronStopping::FixElectronStopping(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { scalar_flag = 1; // Has compute_scalar @@ -51,16 +51,17 @@ FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : nevery = 1; // Run fix every step - // args: 0 = fix ID, 1 = group ID, 2 = "elstop" + // args: 0 = fix ID, 1 = group ID, 2 = "electron/stopping" // 3 = Ecut, 4 = file path // optional rest: "region" // "minneigh" - if (narg < 5) - error->all(FLERR, "Illegal fix elstop command: too few arguments"); + if (narg < 5) error->all(FLERR, + "Illegal fix electron/stopping command: too few arguments"); Ecut = force->numeric(FLERR, arg[3]); - if (Ecut <= 0.0) error->all(FLERR, "Illegal fix elstop command: Ecut <= 0"); + if (Ecut <= 0.0) error->all(FLERR, + "Illegal fix electron/stopping command: Ecut <= 0"); int iarg = 5; iregion = -1; @@ -69,27 +70,28 @@ FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : while (iarg < narg) { if (strcmp(arg[iarg], "region") == 0) { - if (iregion >= 0) - error->all(FLERR, "Illegal fix elstop command: region given twice"); - if (iarg+2 > narg) - error->all(FLERR, "Illegal fix elstop command: region name missing"); + if (iregion >= 0) error->all(FLERR, + "Illegal fix electron/stopping command: region given twice"); + if (iarg+2 > narg) error->all(FLERR, + "Illegal fix electron/stopping command: region name missing"); iregion = domain->find_region(arg[iarg+1]); - if (iregion < 0) - error->all(FLERR, "Region ID for fix elstop does not exist"); + if (iregion < 0) error->all(FLERR, + "Region ID for fix electron/stopping does not exist"); iarg += 2; } else if (strcmp(arg[iarg], "minneigh") == 0) { - if (minneighflag) - error->all(FLERR, "Illegal fix elstop command: minneigh given twice"); + if (minneighflag) error->all(FLERR, + "Illegal fix electron/stopping command: minneigh given twice"); minneighflag = true; - if (iarg+2 > narg) - error->all(FLERR, "Illegal fix elstop command: minneigh number missing"); + if (iarg+2 > narg) error->all(FLERR, + "Illegal fix electron/stopping command: minneigh number missing"); minneigh = force->inumeric(FLERR, arg[iarg+1]); - if (minneigh < 0) - error->all(FLERR, "Illegal fix elstop command: minneigh < 0"); + if (minneigh < 0) error->all(FLERR, + "Illegal fix electron/stopping command: minneigh < 0"); iarg += 2; } - else error->all(FLERR, "Illegal fix elstop command: unknown argument"); + else error->all(FLERR, + "Illegal fix electron/stopping command: unknown argument"); } @@ -98,7 +100,7 @@ FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : const int ncol = atom->ntypes + 1; if (comm->me == 0) { maxlines = 300; - memory->create(elstop_ranges, ncol, maxlines, "elstop:tabs"); + memory->create(elstop_ranges, ncol, maxlines, "electron/stopping:table"); read_table(arg[4]); } @@ -106,21 +108,21 @@ FixElstop::FixElstop(LAMMPS *lmp, int narg, char **arg) : MPI_Bcast(&table_entries, 1 , MPI_INT, 0, world); if (comm->me != 0) - memory->create(elstop_ranges, ncol, maxlines, "elstop:tabs"); + memory->create(elstop_ranges, ncol, maxlines, "electron/stopping:table"); MPI_Bcast(&elstop_ranges[0][0], ncol*maxlines, MPI_DOUBLE, 0, world); } /* ---------------------------------------------------------------------- */ -FixElstop::~FixElstop() +FixElectronStopping::~FixElectronStopping() { memory->destroy(elstop_ranges); } /* ---------------------------------------------------------------------- */ -int FixElstop::setmask() +int FixElectronStopping::setmask() { int mask = 0; mask |= POST_FORCE; @@ -129,7 +131,7 @@ int FixElstop::setmask() /* ---------------------------------------------------------------------- */ -void FixElstop::init() +void FixElectronStopping::init() { SeLoss_sync_flag = 0; SeLoss = 0.0; @@ -145,14 +147,14 @@ void FixElstop::init() /* ---------------------------------------------------------------------- */ -void FixElstop::init_list(int /*id*/, NeighList *ptr) +void FixElectronStopping::init_list(int /*id*/, NeighList *ptr) { list = ptr; } /* ---------------------------------------------------------------------- */ -void FixElstop::post_force(int /*vflag*/) +void FixElectronStopping::post_force(int /*vflag*/) { SeLoss_sync_flag = 0; @@ -183,8 +185,8 @@ void FixElstop::post_force(int /*vflag*/) if (energy < Ecut) continue; if (energy < elstop_ranges[0][0]) continue; - if (energy > elstop_ranges[0][table_entries - 1]) - error->one(FLERR, "Atom kinetic energy too high for fix elstop"); + if (energy > elstop_ranges[0][table_entries - 1]) error->one(FLERR, + "Atom kinetic energy too high for fix electron/stopping"); if (iregion >= 0) { // Only apply in the given region @@ -207,7 +209,7 @@ void FixElstop::post_force(int /*vflag*/) double E_lo = elstop_ranges[0][idown]; double E_hi = elstop_ranges[0][iup]; - // Get elstop with a simple linear interpolation + // Get electronic stopping with a simple linear interpolation double Se = (Se_hi - Se_lo) / (E_hi - E_lo) * (energy - E_lo) + Se_lo; double vabs = sqrt(v2); @@ -223,7 +225,7 @@ void FixElstop::post_force(int /*vflag*/) /* ---------------------------------------------------------------------- */ -double FixElstop::compute_scalar() +double FixElectronStopping::compute_scalar() { // only sum across procs when changed since last call @@ -236,7 +238,7 @@ double FixElstop::compute_scalar() /* ---------------------------------------------------------------------- */ -void FixElstop::read_table(const char *file) +void FixElectronStopping::read_table(const char *file) { char line[MAXLINE]; @@ -266,30 +268,31 @@ void FixElstop::read_table(const char *file) } if (i != ncol || pch != NULL) // too short or too long - error->one(FLERR, "fix elstop: Invalid table line"); + error->one(FLERR, "fix electron/stopping: Invalid table line"); if (l >= 1 && elstop_ranges[0][l] <= elstop_ranges[0][l-1]) - error->one(FLERR, "fix elstop: Energies must be in ascending order"); + error->one(FLERR, + "fix electron/stopping: Energies must be in ascending order"); l++; } table_entries = l; if (table_entries == 0) - error->one(FLERR, "Did not find any data in elstop table file"); + error->one(FLERR, "Did not find any data in electron/stopping table file"); fclose(fp); } /* ---------------------------------------------------------------------- */ -void FixElstop::grow_table() +void FixElectronStopping::grow_table() { const int ncol = atom->ntypes + 1; int new_maxlines = 2 * maxlines; double **new_array; - memory->create(new_array, ncol, new_maxlines, "elstop:tabscopy"); + memory->create(new_array, ncol, new_maxlines, "electron/stopping:table"); for (int i = 0; i < ncol; i++) memcpy(new_array[i], elstop_ranges[i], maxlines*sizeof(double)); diff --git a/src/USER-MISC/fix_elstop.h b/src/USER-MISC/fix_electron_stopping.h similarity index 66% rename from src/USER-MISC/fix_elstop.h rename to src/USER-MISC/fix_electron_stopping.h index afb9fd813a..f0f47698c6 100644 --- a/src/USER-MISC/fix_elstop.h +++ b/src/USER-MISC/fix_electron_stopping.h @@ -18,22 +18,22 @@ #ifdef FIX_CLASS -FixStyle(elstop,FixElstop) +FixStyle(electron/stopping,FixElectronStopping) #else -#ifndef LMP_FIX_ELSTOP_H -#define LMP_FIX_ELSTOP_H +#ifndef LMP_FIX_ELECTRON_STOPPING_H +#define LMP_FIX_ELECTRON_STOPPING_H #include "fix.h" namespace LAMMPS_NS { -class FixElstop : public Fix { +class FixElectronStopping : public Fix { public: - FixElstop(class LAMMPS *, int, char **); - ~FixElstop(); + FixElectronStopping(class LAMMPS *, int, char **); + ~FixElectronStopping(); int setmask(); void init(); void post_force(int); @@ -72,33 +72,33 @@ Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. -E: Region ID for fix elstop does not exist +E: Region ID for fix electron/stopping does not exist Self-explanatory. -E: Atom kinetic energy too high for fix elstop +E: Atom kinetic energy too high for fix electron/stopping -The group given in the fix elstop command includes an atom that has -a kinetic energy higher than the largest energy in the elstop table. -Reconsider whether the table is physically applicable to your system. +The group given in the fix electron/stopping command includes an atom +that has a kinetic energy higher than the largest energy in the stopping +table. Reconsider whether the table is physically applicable to your system. E: Cannot open stopping range table ... -The file containing the elstop table could not be opened. Chck the -given path and the file's permissions. +The file containing the electronic stopping table could not be opened. +Check the given path and the file's permissions. -E: fix elstop: Invalid table line +E: fix electron/stopping: Invalid table line -A line in the elstop table file contained too many or too few columns. +A line in the stopping table file contained too many or too few columns. -E: fix elstop: Energies must be in ascending order +E: fix electron/stopping: Energies must be in ascending order -The first column in the elstop table must be sorted from the smallest +The first column in the stopping table must be sorted from the smallest energy to the largest. -E: Did not find any data in elstop table file +E: Did not find any data in electronic stopping table file -Parsing the elstop table file produced no lines that were identifiable +Parsing the stopping table file produced no lines that were identifiable as energies/stopping powers. Most likely the file is empty or contains only comments. From 6ff1fee6d656a084c95a70f372a5b46c79c3df0e Mon Sep 17 00:00:00 2001 From: mkanski Date: Thu, 4 Apr 2019 09:54:39 +0200 Subject: [PATCH 110/372] more simplifications --- src/USER-REAXC/pair_reaxc.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index c87bb410ce..6bb2b9a197 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -109,8 +109,8 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) system->bndry_cuts.ghost_cutoff = 0; system->my_atoms = NULL; system->pair_ptr = this; - system->error_ptr = this->lmp->error; - control->error_ptr = this->lmp->error; + system->error_ptr = error; + control->error_ptr = error; system->omp_active = 0; @@ -447,7 +447,7 @@ void PairReaxC::setup( ) if(!Make_List(system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR, lists+FAR_NBRS)) error->one(FLERR,"Pair reax/c problem in far neighbor list"); - (lists+FAR_NBRS)->error_ptr=lmp->error; + (lists+FAR_NBRS)->error_ptr=error; write_reax_lists(); Initialize( system, control, data, workspace, &lists, out_control, From da77dde04de70a75a215a7bd0044e757d189352a Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Thu, 4 Apr 2019 14:32:49 +0300 Subject: [PATCH 111/372] MC/fix_bond_break: Use TAGINT_FORMAT where appropriate --- src/MC/fix_bond_break.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp index a1c9bb3ab0..05edc0509e 100644 --- a/src/MC/fix_bond_break.cpp +++ b/src/MC/fix_bond_break.cpp @@ -800,26 +800,27 @@ void FixBondBreak::print_bb() for (int i = 0; i < atom->nlocal; i++) { printf("TAG " TAGINT_FORMAT ": %d nbonds: ",atom->tag[i],atom->num_bond[i]); for (int j = 0; j < atom->num_bond[i]; j++) { - printf(" %d",atom->bond_atom[i][j]); + printf(" " TAGINT_FORMAT, atom->bond_atom[i][j]); } printf("\n"); printf("TAG " TAGINT_FORMAT ": %d nangles: ",atom->tag[i],atom->num_angle[i]); for (int j = 0; j < atom->num_angle[i]; j++) { - printf(" %d %d %d,",atom->angle_atom1[i][j], - atom->angle_atom2[i][j],atom->angle_atom3[i][j]); + printf(" " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT ",", + atom->angle_atom1[i][j],atom->angle_atom2[i][j], + atom->angle_atom3[i][j]); } printf("\n"); printf("TAG " TAGINT_FORMAT ": %d ndihedrals: ",atom->tag[i],atom->num_dihedral[i]); for (int j = 0; j < atom->num_dihedral[i]; j++) { - printf(" %d %d %d %d,",atom->dihedral_atom1[i][j], - atom->dihedral_atom2[i][j],atom->dihedral_atom3[i][j], - atom->dihedral_atom4[i][j]); + printf(" " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT ",", + atom->dihedral_atom1[i][j],atom->dihedral_atom2[i][j], + atom->dihedral_atom3[i][j],atom->dihedral_atom4[i][j]); } printf("\n"); printf("TAG " TAGINT_FORMAT ": %d %d %d nspecial: ",atom->tag[i], atom->nspecial[i][0],atom->nspecial[i][1],atom->nspecial[i][2]); for (int j = 0; j < atom->nspecial[i][2]; j++) { - printf(" %d",atom->special[i][j]); + printf(" " TAGINT_FORMAT, atom->special[i][j]); } printf("\n"); } @@ -830,7 +831,7 @@ void FixBondBreak::print_bb() void FixBondBreak::print_copy(const char *str, tagint m, int n1, int n2, int n3, int *v) { - printf("%s %i: %d %d %d nspecial: ",str,m,n1,n2,n3); + printf("%s " TAGINT_FORMAT ": %d %d %d nspecial: ",str,m,n1,n2,n3); for (int j = 0; j < n3; j++) printf(" %d",v[j]); printf("\n"); } From 66794692201d4345cde7aaa5573b4cf4f06cdea7 Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Thu, 4 Apr 2019 15:35:44 +0300 Subject: [PATCH 112/372] USER-MANIFOLD: Use TAGINT_FORMAT where appropriate --- src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp b/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp index 794a324f03..de134e32ed 100644 --- a/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp +++ b/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp @@ -559,7 +559,8 @@ void FixNVEManifoldRattle::rattle_manifold_x(double *x, double *v, if (iters >= max_iter && res > tolerance) { char msg[2048]; - sprintf(msg,"Failed to constrain atom %d (x = (%f, %f, %f)! res = %e, iters = %d\n", + sprintf(msg,"Failed to constrain atom " TAGINT_FORMAT + " (x = (%f, %f, %f)! res = %e, iters = %d\n", tagi, x[0], x[1], x[2], res, iters); error->one(FLERR,msg); } @@ -652,7 +653,8 @@ void FixNVEManifoldRattle::rattle_manifold_v(double *v, double *f, if (iters >= max_iter && res >= tolerance) { char msg[2048]; - sprintf(msg,"Failed to constrain atom %d (x = (%f, %f, %f)! res = %e, iters = %d\n", + sprintf(msg,"Failed to constrain atom " TAGINT_FORMAT + " (x = (%f, %f, %f)! res = %e, iters = %d\n", tagi, x[0], x[1], x[2], res, iters); error->all(FLERR,msg); } From 2aa7a150b48fbbf080087000d9f7096d8d449e42 Mon Sep 17 00:00:00 2001 From: Risto Toijala Date: Thu, 4 Apr 2019 15:38:53 +0300 Subject: [PATCH 113/372] USER-SMD: Use TAGINT_FORMAT where appropriate --- src/USER-SMD/pair_smd_tlsph.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-SMD/pair_smd_tlsph.cpp b/src/USER-SMD/pair_smd_tlsph.cpp index ac67a3279a..1d7bbca780 100644 --- a/src/USER-SMD/pair_smd_tlsph.cpp +++ b/src/USER-SMD/pair_smd_tlsph.cpp @@ -308,7 +308,7 @@ void PairTlsph::PreCompute() { */ if ((detF[i] < DETF_MIN) || (detF[i] > DETF_MAX) || (numNeighsRefConfig[i] == 0)) { - printf("deleting particle [%d] because det(F)=%f is outside stable range %f -- %f \n", tag[i], + printf("deleting particle [" TAGINT_FORMAT "] because det(F)=%f is outside stable range %f -- %f \n", tag[i], Fincr[i].determinant(), DETF_MIN, DETF_MAX); printf("nn = %d, damage=%f\n", numNeighsRefConfig[i], damage[i]); From 8c03f510203f3aebd9b2e44854b904477711d438 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 09:01:39 -0400 Subject: [PATCH 114/372] fix 32-bit/64-bit overflow issue in expression --- src/irregular.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/irregular.cpp b/src/irregular.cpp index 848d853f2a..1865f9cbf6 100644 --- a/src/irregular.cpp +++ b/src/irregular.cpp @@ -921,7 +921,7 @@ void Irregular::exchange_data(char *sendbuf, int nbytes, char *recvbuf) // post all receives, starting after self copies - bigint offset = num_self*nbytes; + bigint offset = num_self*(bigint)nbytes; for (int irecv = 0; irecv < nrecv_proc; irecv++) { MPI_Irecv(&recvbuf[offset],num_recv[irecv]*nbytes,MPI_CHAR, proc_recv[irecv],0,world,&request[irecv]); @@ -964,13 +964,6 @@ void Irregular::exchange_data(char *sendbuf, int nbytes, char *recvbuf) // wait on all incoming messages if (nrecv_proc) MPI_Waitall(nrecv_proc,request,status); - - // approximate memory tally - // DEBUG lines - - //bigint irregular_bytes = 2*nprocs*sizeof(int); - //irregular_bytes += maxindex*sizeof(int); - //irregular_bytes += maxbuf; } /* ---------------------------------------------------------------------- From 88d160f86eba2ae19322a8335fafc1228650f3c4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 09:13:18 -0400 Subject: [PATCH 115/372] avoid segfault in Special::angle_trim() if only angles or only dihedrals are defined --- src/special.cpp | 201 ++++++++++++++++++++++++++---------------------- 1 file changed, 107 insertions(+), 94 deletions(-) diff --git a/src/special.cpp b/src/special.cpp index 7f855163e0..903794c0f6 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -821,21 +821,26 @@ void Special::angle_trim() int nsend = 0; for (i = 0; i < nlocal; i++) { - for (j = 0; j < num_angle[i]; j++) { - if (tag[i] != angle_atom2[i][j]) continue; - m = atom->map(angle_atom1[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(angle_atom3[i][j]); - if (m < 0 || m >= nlocal) nsend++; + if (num_angle) { + for (j = 0; j < num_angle[i]; j++) { + if (tag[i] != angle_atom2[i][j]) continue; + m = atom->map(angle_atom1[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(angle_atom3[i][j]); + if (m < 0 || m >= nlocal) nsend++; + } } - for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(dihedral_atom3[i][j]); - if (m < 0 || m >= nlocal) nsend++; - m = atom->map(dihedral_atom4[i][j]); - if (m < 0 || m >= nlocal) nsend++; + + if (num_dihedral) { + for (j = 0; j < num_dihedral[i]; j++) { + if (tag[i] != dihedral_atom2[i][j]) continue; + m = atom->map(dihedral_atom1[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(dihedral_atom3[i][j]); + if (m < 0 || m >= nlocal) nsend++; + m = atom->map(dihedral_atom4[i][j]); + if (m < 0 || m >= nlocal) nsend++; + } } } @@ -852,51 +857,55 @@ void Special::angle_trim() nsend = 0; for (i = 0; i < nlocal; i++) { - for (j = 0; j < num_angle[i]; j++) { - if (tag[i] != angle_atom2[i][j]) continue; + if (num_angle) { + for (j = 0; j < num_angle[i]; j++) { + if (tag[i] != angle_atom2[i][j]) continue; - m = atom->map(angle_atom1[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = angle_atom1[i][j] % nprocs; - inbuf[nsend].atomID = angle_atom1[i][j]; - inbuf[nsend].partnerID = angle_atom3[i][j]; - nsend++; - } + m = atom->map(angle_atom1[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = angle_atom1[i][j] % nprocs; + inbuf[nsend].atomID = angle_atom1[i][j]; + inbuf[nsend].partnerID = angle_atom3[i][j]; + nsend++; + } - m = atom->map(angle_atom3[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = angle_atom3[i][j] % nprocs; - inbuf[nsend].atomID = angle_atom3[i][j]; - inbuf[nsend].partnerID = angle_atom1[i][j]; - nsend++; + m = atom->map(angle_atom3[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = angle_atom3[i][j] % nprocs; + inbuf[nsend].atomID = angle_atom3[i][j]; + inbuf[nsend].partnerID = angle_atom1[i][j]; + nsend++; + } } } - for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; + if (num_dihedral) { + for (j = 0; j < num_dihedral[i]; j++) { + if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom1[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom1[i][j]; - inbuf[nsend].partnerID = dihedral_atom3[i][j]; - nsend++; - } + m = atom->map(dihedral_atom1[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom1[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom1[i][j]; + inbuf[nsend].partnerID = dihedral_atom3[i][j]; + nsend++; + } - m = atom->map(dihedral_atom3[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom3[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom3[i][j]; - inbuf[nsend].partnerID = dihedral_atom1[i][j]; - nsend++; - } + m = atom->map(dihedral_atom3[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom3[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom3[i][j]; + inbuf[nsend].partnerID = dihedral_atom1[i][j]; + nsend++; + } - m = atom->map(dihedral_atom4[i][j]); - if (m < 0 || m >= nlocal) { - proclist[nsend] = dihedral_atom4[i][j] % nprocs; - inbuf[nsend].atomID = dihedral_atom4[i][j]; - inbuf[nsend].partnerID = dihedral_atom2[i][j]; - nsend++; + m = atom->map(dihedral_atom4[i][j]); + if (m < 0 || m >= nlocal) { + proclist[nsend] = dihedral_atom4[i][j] % nprocs; + inbuf[nsend].atomID = dihedral_atom4[i][j]; + inbuf[nsend].partnerID = dihedral_atom2[i][j]; + nsend++; + } } } } @@ -932,56 +941,60 @@ void Special::angle_trim() // output datums = pairs of atoms that are 1-3 neighbors for (i = 0; i < nlocal; i++) { - for (j = 0; j < num_angle[i]; j++) { - if (tag[i] != angle_atom2[i][j]) continue; + if (num_angle) { + for (j = 0; j < num_angle[i]; j++) { + if (tag[i] != angle_atom2[i][j]) continue; - m = atom->map(angle_atom1[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == angle_atom3[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(angle_atom1[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == angle_atom3[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(angle_atom3[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == angle_atom1[i][j]) { - flag[m][k] = 1; - break; - } + m = atom->map(angle_atom3[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == angle_atom1[i][j]) { + flag[m][k] = 1; + break; + } + } } } - for (j = 0; j < num_dihedral[i]; j++) { - if (tag[i] != dihedral_atom2[i][j]) continue; + if (num_dihedral) { + for (j = 0; j < num_dihedral[i]; j++) { + if (tag[i] != dihedral_atom2[i][j]) continue; - m = atom->map(dihedral_atom1[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == dihedral_atom3[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom1[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == dihedral_atom3[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(dihedral_atom3[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == dihedral_atom1[i][j]) { - flag[m][k] = 1; - break; - } - } + m = atom->map(dihedral_atom3[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == dihedral_atom1[i][j]) { + flag[m][k] = 1; + break; + } + } - m = atom->map(dihedral_atom4[i][j]); - if (m >= 0 && m < nlocal) { - for (k = 0; k < nspecial[m][1]; k++) - if (onethree[m][k] == dihedral_atom2[i][j]) { - flag[m][k] = 1; - break; - } + m = atom->map(dihedral_atom4[i][j]); + if (m >= 0 && m < nlocal) { + for (k = 0; k < nspecial[m][1]; k++) + if (onethree[m][k] == dihedral_atom2[i][j]) { + flag[m][k] = 1; + break; + } + } } } } @@ -1012,7 +1025,7 @@ void Special::angle_trim() memory->destroy(flag); - // if no angles or dihedrals are defined, delete all 1-3 neighs + // if no angles or dihedrals are defined, delete all 1-3 neighs } else { for (i = 0; i < nlocal; i++) nspecial[i][1] = 0; From a9c376f20d735cccf3527fe42ea57988ed4e9286 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 09:38:28 -0400 Subject: [PATCH 116/372] use tagint instead of int when communicating atom ids --- src/USER-MISC/fix_pimd.cpp | 8 ++++---- src/USER-MISC/fix_pimd.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/USER-MISC/fix_pimd.cpp b/src/USER-MISC/fix_pimd.cpp index eba8ed5d0c..3929d47d6b 100644 --- a/src/USER-MISC/fix_pimd.cpp +++ b/src/USER-MISC/fix_pimd.cpp @@ -637,14 +637,14 @@ void FixPIMD::comm_exec(double **ptr) if(nsend > max_nsend) { max_nsend = nsend+200; - tag_send = (int*) memory->srealloc(tag_send, sizeof(int)*max_nsend, "FixPIMD:tag_send"); + tag_send = (tagint*) memory->srealloc(tag_send, sizeof(tagint)*max_nsend, "FixPIMD:tag_send"); buf_send = (double*) memory->srealloc(buf_send, sizeof(double)*max_nsend*3, "FixPIMD:x_send"); } // send tags - MPI_Sendrecv( atom->tag, nlocal, MPI_INT, plan_send[iplan], 0, - tag_send, nsend, MPI_INT, plan_recv[iplan], 0, universe->uworld, MPI_STATUS_IGNORE); + MPI_Sendrecv( atom->tag, nlocal, MPI_LMP_TAGINT, plan_send[iplan], 0, + tag_send, nsend, MPI_LMP_TAGINT, plan_recv[iplan], 0, universe->uworld, MPI_STATUS_IGNORE); // wrap positions @@ -661,7 +661,7 @@ void FixPIMD::comm_exec(double **ptr) sprintf(error_line, "Atom " TAGINT_FORMAT " is missing at world [%d] " "rank [%d] required by rank [%d] (" TAGINT_FORMAT ", " - TAGINT_FORMAT ", " TAGINT_FORMAT ").\n",tag_send[i], + TAGINT_FORMAT ", " TAGINT_FORMAT ").\n", tag_send[i], universe->iworld, comm->me, plan_recv[iplan], atom->tag[0], atom->tag[1], atom->tag[2]); diff --git a/src/USER-MISC/fix_pimd.h b/src/USER-MISC/fix_pimd.h index 411fa42c81..c298af0b69 100644 --- a/src/USER-MISC/fix_pimd.h +++ b/src/USER-MISC/fix_pimd.h @@ -68,7 +68,7 @@ class FixPIMD : public Fix { /* inter-partition communication */ int max_nsend; - int* tag_send; + tagint* tag_send; double *buf_send; int max_nlocal; From 50427ce05df76592752414c7c22194f245a112bb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 09:38:53 -0400 Subject: [PATCH 117/372] flag intended fallthrough cases for GNU compilers --- src/hashlittle.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/hashlittle.cpp b/src/hashlittle.cpp index 0abcd2bcc5..38f192ad76 100644 --- a/src/hashlittle.cpp +++ b/src/hashlittle.cpp @@ -23,6 +23,16 @@ # endif #endif +// declaration to indicate intended fallthrough cases in switch statements +// and thus silence the warnings produced by g++ -Wextra + +#if defined(__GNUC__) +#define _fallthrough __attribute__ ((fallthrough)) +#else +#define _fallthrough +#endif + + #define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) /* @@ -291,17 +301,17 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval) /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { - case 12: c+=((uint32_t)k[11])<<24; - case 11: c+=((uint32_t)k[10])<<16; - case 10: c+=((uint32_t)k[9])<<8; - case 9 : c+=k[8]; - case 8 : b+=((uint32_t)k[7])<<24; - case 7 : b+=((uint32_t)k[6])<<16; - case 6 : b+=((uint32_t)k[5])<<8; - case 5 : b+=k[4]; - case 4 : a+=((uint32_t)k[3])<<24; - case 3 : a+=((uint32_t)k[2])<<16; - case 2 : a+=((uint32_t)k[1])<<8; + case 12: c+=((uint32_t)k[11])<<24; _fallthrough; + case 11: c+=((uint32_t)k[10])<<16; _fallthrough; + case 10: c+=((uint32_t)k[9])<<8; _fallthrough; + case 9 : c+=k[8]; _fallthrough; + case 8 : b+=((uint32_t)k[7])<<24; _fallthrough; + case 7 : b+=((uint32_t)k[6])<<16; _fallthrough; + case 6 : b+=((uint32_t)k[5])<<8; _fallthrough; + case 5 : b+=k[4]; _fallthrough; + case 4 : a+=((uint32_t)k[3])<<24; _fallthrough; + case 3 : a+=((uint32_t)k[2])<<16; _fallthrough; + case 2 : a+=((uint32_t)k[1])<<8; _fallthrough; case 1 : a+=k[0]; break; case 0 : return c; From 81dd96f970250616d4663a0f824bf100a1008f47 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 12:42:54 -0400 Subject: [PATCH 118/372] print more meaningful error message when trying to access individual data from a local array produced by a compute */local --- src/variable.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/variable.cpp b/src/variable.cpp index c0e4dae7d0..ed3b41bd00 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -1578,6 +1578,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) newtree->nextra = 0; treestack[ntreestack++] = newtree; + } else if (nbracket == 1 && compute->local_flag) { + print_var_error(FLERR,"Cannot access local data via indexing",ivar); } else print_var_error(FLERR, "Mismatched compute in variable formula",ivar); From 265ad4512dfa6f8be1cb0f28abfb4b9d3ffbf4d4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 13:18:27 -0400 Subject: [PATCH 119/372] add sanity check on plumed pre-installed path location --- lib/plumed/Install.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 70296b35d3..2ae5aadd03 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -75,6 +75,8 @@ if pathflag: if not os.path.isdir(plumedpath): sys.exit("Plumed2 path %s does not exist" % plumedpath) homedir = fullpath(plumedpath) + if not os.path.isdir(os.path.join(homedir, 'include', 'plumed', 'core')): + sys.exit("No Plumed2 installation found at %s" % plumedpath) # download and unpack plumed2 tarball From c52a330a79b674c28cced21879a562fb180c896f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 14:04:12 -0400 Subject: [PATCH 120/372] update USER-PLUMED support for version 2.5.1 and fix bug in Install.py script --- cmake/CMakeLists.txt | 11 +++++------ lib/plumed/Install.py | 6 ++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index fd93814574..b9a93a110e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -367,7 +367,7 @@ if(PKG_KSPACE) endif() endif() -if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) +if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-PLUMED OR PKG_USER-QUIP OR PKG_LATTE) find_package(LAPACK) find_package(BLAS) if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) @@ -577,8 +577,8 @@ if(PKG_USER-PLUMED) message(STATUS "PLUMED download requested - we will build our own") include(ExternalProject) ExternalProject_Add(plumed_build - URL https://github.com/plumed/plumed2/releases/download/v2.4.4/plumed-src-2.4.4.tgz - URL_MD5 71ed465bdc7c2059e282dbda8d564e71 + URL https://github.com/plumed/plumed2/releases/download/v2.5.1/plumed-src-2.5.1.tgz + URL_MD5 c2a7b519e32197a120cdf47e0f194f81 BUILD_IN_SOURCE 1 CONFIGURE_COMMAND /configure --prefix= ${CONFIGURE_REQUEST_PIC} @@ -593,10 +593,9 @@ if(PKG_USER-PLUMED) list(APPEND LAMMPS_DEPS plumed_build) if(PLUMED_MODE STREQUAL "STATIC") add_definitions(-D__PLUMED_WRAPPER_CXX=1) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/plumed/obj/kernel.o - "${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o" ${GSL_LIBRARIES} ${CMAKE_DL_LIBS}) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.a ${GSL_LIBRARIES} ${LAPACK_LIBRARIES} ${CMAKE_DL_LIBS}) elseif(PLUMED_MODE STREQUAL "SHARED") - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${CMAKE_DL_LIBS}) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so ${CMAKE_DL_LIBS}) elseif(PLUMED_MODE STREQUAL "RUNTIME") add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so) list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a -rdynamic ${CMAKE_DL_LIBS}) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index 2ae5aadd03..3623a8cff0 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -17,7 +17,7 @@ parser = ArgumentParser(prog='Install.py', # settings -version = "2.4.4" +version = "2.5.1" mode = "static" # help message @@ -43,6 +43,7 @@ checksums = { \ '2.4.3' : 'b1be7c48971627febc11c61b70767fc5', \ '2.4.4' : '71ed465bdc7c2059e282dbda8d564e71', \ '2.5.0' : '6224cd089493661e19ceacccd35cf911', \ + '2.5.1' : 'c2a7b519e32197a120cdf47e0f194f81', \ } # parse and process arguments @@ -67,6 +68,7 @@ if not args.build and not args.path: buildflag = args.build pathflag = args.path is not None plumedpath = args.path +mode = args.mode homepath = fullpath('.') homedir = "%s/plumed2" % (homepath) @@ -129,7 +131,7 @@ if os.path.isfile("Makefile.lammps.%s" % mode): lines1 = open(plumedinc, 'r').readlines() lines2 = open("Makefile.lammps.%s" % mode, 'r').readlines() fp = open("Makefile.lammps", 'w') - fp.write(os.path.join("PLUMED_LIBDIR=", homedir, "lib\n")) + fp.write("PLUMED_LIBDIR=" + os.path.join(homedir, "lib\n")) for line in lines1: fp.write(line) for line in lines2: From 78bab6ee395f39fad5374dfdd90d4953353b7c8c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 16:36:57 -0400 Subject: [PATCH 121/372] make format macros in USER-REAXC compatible with -DLAMMPS_BIGBIG --- src/USER-REAXC/reaxc_traj.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/USER-REAXC/reaxc_traj.h b/src/USER-REAXC/reaxc_traj.h index 72c56637eb..b04a190965 100644 --- a/src/USER-REAXC/reaxc_traj.h +++ b/src/USER-REAXC/reaxc_traj.h @@ -42,7 +42,7 @@ #define SCI_LINE "%-37s%-24g\n" #define REAL3_LINE "%-32s%9.3f,%9.3f,%9.3f\n" -#define INIT_DESC "%9d%3d%9s%10.3f\n" //AtomID - AtomType, AtomName, AtomMass +#define INIT_DESC TAGINT_FORMAT "%3d%9s%10.3f\n" //AtomID - AtomType, AtomName, AtomMass #define INIT_DESC_LEN 32 #define SIZE_INFO_LINE2 "%-10d%-10d\n" @@ -51,21 +51,21 @@ #define SIZE_INFO_LINE3 "%-10d%-10d%-10d\n" #define SIZE_INFO_LEN3 31 -#define ATOM_BASIC "%9d%10.3f%10.3f%10.3f%10.3f\n" //AtomID AtomType (X Y Z) Charge +#define ATOM_BASIC TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f\n" //AtomID AtomType (X Y Z) Charge #define ATOM_BASIC_LEN 50 -#define ATOM_wV "%9d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) Charge +#define ATOM_wV TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) Charge #define ATOM_wV_LEN 80 -#define ATOM_wF "%9d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Fx Fy Fz) Charge +#define ATOM_wF TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Fx Fy Fz) Charge #define ATOM_wF_LEN 80 -#define ATOM_FULL "%9d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) (Fx Fy Fz) Charge +#define ATOM_FULL TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) (Fx Fy Fz) Charge #define ATOM_FULL_LEN 110 -#define BOND_BASIC "%9d%9d%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO +#define BOND_BASIC TAGINT_FORMAT " " TAGINT_FORMAT " %10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO #define BOND_BASIC_LEN 39 -#define BOND_FULL "%9d%9d%10.3f%10.3f%10.3f%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO BOs BOpi BOpi2 +#define BOND_FULL TAGINT_FORMAT " " TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO BOs BOpi BOpi2 #define BOND_FULL_LEN 69 -#define ANGLE_BASIC "%9d%9d%9d%10.3f\n" // Atom1 Atom2 Atom3 Theta +#define ANGLE_BASIC TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " %10.3f\n" // Atom1 Atom2 Atom3 Theta #define ANGLE_BASIC_LEN 38 enum ATOM_LINE_OPTS { OPT_NOATOM = 0, OPT_ATOM_BASIC = 4, OPT_ATOM_wF = 5, OPT_ATOM_wV = 6, OPT_ATOM_FULL = 7, NR_OPT_ATOM = 8 }; From ab5c3b038623b2e77a24470fc3eca9e3eb53eff4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 16:51:37 -0400 Subject: [PATCH 122/372] protect against possible buffer overflow --- src/KSPACE/fix_tune_kspace.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/KSPACE/fix_tune_kspace.cpp b/src/KSPACE/fix_tune_kspace.cpp index 3e90988cba..0c726985dc 100644 --- a/src/KSPACE/fix_tune_kspace.cpp +++ b/src/KSPACE/fix_tune_kspace.cpp @@ -99,8 +99,8 @@ void FixTuneKspace::init() error->all(FLERR,"Cannot use fix tune/kspace with dipole long-range solver"); double old_acc = force->kspace->accuracy/force->kspace->two_charge_force; - char old_acc_str[12]; - sprintf(old_acc_str,"%g",old_acc); + char old_acc_str[16]; + snprintf(old_acc_str,16,"%g",old_acc); strcpy(new_acc_str,old_acc_str); int itmp; @@ -210,8 +210,8 @@ void FixTuneKspace::store_old_kspace_settings() strcpy(old_kspace_style,force->kspace_style); strcpy(new_kspace_style,old_kspace_style); double old_acc = force->kspace->accuracy_relative; - char old_acc_str[12]; - sprintf(old_acc_str,"%g",old_acc); + char old_acc_str[16]; + snprintf(old_acc_str,16,"%g",old_acc); strcpy(new_pair_style,force->pair_style); strcpy(base_pair_style,force->pair_style); char *trunc; From 4003387fb10e73badd1709fd709fe182d5991999 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 16:51:59 -0400 Subject: [PATCH 123/372] dead code removal --- src/REPLICA/fix_hyper_global.cpp | 2 -- src/REPLICA/fix_hyper_local.cpp | 8 ++------ src/REPLICA/hyper.cpp | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index 6924fe2d93..0c76b29911 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -191,8 +191,6 @@ void FixHyperGlobal::pre_neighbor() for (i = 0; i < nall_old; i++) old2now[i] = -1; - double **x = atom->x; - for (m = 0; m < nblocal; m++) { iold = blist[m].iold; jold = blist[m].jold; diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index dc7a0b94b9..a6db4419f0 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -353,8 +353,6 @@ void FixHyperLocal::pre_neighbor() for (i = 0; i < nall_old; i++) old2now[i] = -1; - double **x = atom->x; - for (m = 0; m < nblocal; m++) { iold = blist[m].iold; jold = blist[m].jold; @@ -407,7 +405,7 @@ void FixHyperLocal::pre_neighbor() void FixHyperLocal::pre_reverse(int /* eflag */, int /* vflag */) { int i,j,m,ii,jj,inum,jnum,iold,jold,ibond,nbond,ijhalf,ncount; - double xtmp,ytmp,ztmp,delx,dely,delz; + double delx,dely,delz; double r,r0,estrain,emax,ebias,vbias,fbias,fbiasr; double halfstrain,selfstrain; int *ilist,*jlist,*numneigh,**firstneigh; @@ -811,7 +809,7 @@ void FixHyperLocal::min_pre_neighbor() void FixHyperLocal::build_bond_list(int natom) { int i,j,ii,jj,m,n,iold,jold,ilocal,jlocal,inum,jnum,nbond; - tagint itag,jtag; + tagint jtag; double xtmp,ytmp,ztmp,delx,dely,delz,rsq,distsq,oldcoeff; int *ilist,*jlist,*numneigh,**firstneigh; @@ -1006,7 +1004,6 @@ void FixHyperLocal::build_bond_list(int natom) ytmp = x[i][1]; ztmp = x[i][2]; - itag = tag[i]; tagold[i] = tag[i]; jlist = firstneigh[i]; @@ -1420,7 +1417,6 @@ double FixHyperLocal::compute_vector(int i) } if (i == 4) { - const int nlocal = atom->nlocal; bigint allneigh,thisneigh; thisneigh = listfull->ipage->ndatum; MPI_Allreduce(&thisneigh,&allneigh,1,MPI_LMP_BIGINT,MPI_SUM,world); diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 5d820b2e27..00b91684e9 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -268,7 +268,7 @@ void Hyper::command(int narg, char **arg) double nnewbond,avenbias,avebiascoeff,minbiascoeff,maxbiascoeff; double maxbondperatom,neighbondperbond,avebiasnow; double tbondbuild,rmaxever,rmaxeverbig,allghost_toofar; - double lostbond,lostbondcoeff,biasoverlap; + double biasoverlap; if (hyperenable) { t_hyper = fix_hyper->query(1); From df94e80bb1be510b9c6df8a73059719ae30f8c35 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 16:52:08 -0400 Subject: [PATCH 124/372] silence compiler warnings --- src/USER-COLVARS/fix_colvars.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-COLVARS/fix_colvars.cpp b/src/USER-COLVARS/fix_colvars.cpp index 0e4e151c3d..545ceb7b0e 100644 --- a/src/USER-COLVARS/fix_colvars.cpp +++ b/src/USER-COLVARS/fix_colvars.cpp @@ -645,7 +645,7 @@ void FixColvars::setup(int vflag) /* ---------------------------------------------------------------------- */ /* Main colvars handler: * Send coodinates and add colvar forces to atoms. */ -void FixColvars::post_force(int vflag) +void FixColvars::post_force(int /*vflag*/) { // some housekeeping: update status of the proxy as needed. if (me == 0) { @@ -816,7 +816,7 @@ void FixColvars::min_post_force(int vflag) } /* ---------------------------------------------------------------------- */ -void FixColvars::post_force_respa(int vflag, int ilevel, int iloop) +void FixColvars::post_force_respa(int vflag, int ilevel, int /*iloop*/) { /* only process colvar forces on the outmost RESPA level. */ if (ilevel == nlevels_respa-1) post_force(vflag); From dbbf198edb4edf36a06550ea20a1a3bf02784864 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 17:10:27 -0400 Subject: [PATCH 125/372] more accurate matching of styles using utils::strmatch() --- src/info.cpp | 3 ++- src/respa.cpp | 3 ++- src/velocity.cpp | 9 +++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index 3d8a8d7b9e..ac2ee4a96d 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -42,6 +42,7 @@ #include "variable.h" #include "update.h" #include "error.h" +#include "utils.h" #include #include @@ -397,7 +398,7 @@ void Info::command(int narg, char **arg) fprintf(out,"Atoms = " BIGINT_FORMAT ", types = %d, style = %s\n", atom->natoms, atom->ntypes, force->pair_style); - if (force->pair && strstr(force->pair_style,"hybrid")) { + if (force->pair && utils::strmatch(force->pair_style,"^hybrid")) { PairHybrid *hybrid = (PairHybrid *)force->pair; fprintf(out,"Hybrid sub-styles:"); for (int i=0; i < hybrid->nstyles; ++i) diff --git a/src/respa.cpp b/src/respa.cpp index 26bae5a1cb..6fa9959d78 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -38,6 +38,7 @@ #include "timer.h" #include "memory.h" #include "error.h" +#include "utils.h" #include "pair_hybrid.h" using namespace LAMMPS_NS; @@ -120,7 +121,7 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"hybrid") == 0) { // the hybrid keyword requires a hybrid pair style - if (!strstr(force->pair_style,"hybrid")) + if (!utils::strmatch(force->pair_style,"^hybrid")) error->all(FLERR,"Illegal run_style respa command"); PairHybrid *hybrid = (PairHybrid *) force->pair; nhybrid_styles = hybrid->nstyles; diff --git a/src/velocity.cpp b/src/velocity.cpp index 6d6027cc3c..32b08708cf 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -33,6 +33,7 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -709,19 +710,19 @@ void Velocity::zero(int /*narg*/, char **arg) { if (strcmp(arg[0],"linear") == 0) { if (rfix < 0) zero_momentum(); - else if (strcmp(modify->fix[rfix]->style,"rigid/small") == 0) { + else if (utils::strmatch(modify->fix[rfix]->style,"^rigid/small")) { modify->fix[rfix]->setup_pre_neighbor(); modify->fix[rfix]->zero_momentum(); - } else if (strstr(modify->fix[rfix]->style,"rigid")) { + } else if (utils::strmatch(modify->fix[rfix]->style,"^rigid")) { modify->fix[rfix]->zero_momentum(); } else error->all(FLERR,"Velocity rigid used with non-rigid fix-ID"); } else if (strcmp(arg[0],"angular") == 0) { if (rfix < 0) zero_rotation(); - else if (strcmp(modify->fix[rfix]->style,"rigid/small") == 0) { + else if (utils::strmatch(modify->fix[rfix]->style,"^rigid/small")) { modify->fix[rfix]->setup_pre_neighbor(); modify->fix[rfix]->zero_rotation(); - } else if (strstr(modify->fix[rfix]->style,"rigid")) { + } else if (utils::strmatch(modify->fix[rfix]->style,"^rigid")) { modify->fix[rfix]->zero_rotation(); } else error->all(FLERR,"Velocity rigid used with non-rigid fix-ID"); From e359e80118890a6330bb3c3c93e1d6637e16d5ed Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Apr 2019 22:39:58 -0400 Subject: [PATCH 126/372] fix bug reported in issue #1410 --- src/variable.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/variable.cpp b/src/variable.cpp index ed3b41bd00..56b66cad0d 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -2181,7 +2181,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (tree) { Tree *newtree = new Tree(); newtree->type = opprevious; - if (opprevious == UNARY) { + if ((opprevious == UNARY) || (opprevious == NOT)) { newtree->first = treestack[--ntreestack]; newtree->second = NULL; newtree->nextra = 0; From f4159ff5929b1d5ce62a75fd4afe315271160266 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 05:53:19 -0400 Subject: [PATCH 127/372] implement different -DLAMMPS_BIGBIG workaround without breaking format --- src/USER-REAXC/reaxc_traj.h | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/USER-REAXC/reaxc_traj.h b/src/USER-REAXC/reaxc_traj.h index b04a190965..4966bf11d8 100644 --- a/src/USER-REAXC/reaxc_traj.h +++ b/src/USER-REAXC/reaxc_traj.h @@ -42,7 +42,11 @@ #define SCI_LINE "%-37s%-24g\n" #define REAL3_LINE "%-32s%9.3f,%9.3f,%9.3f\n" -#define INIT_DESC TAGINT_FORMAT "%3d%9s%10.3f\n" //AtomID - AtomType, AtomName, AtomMass +#if defined(LAMMPS_BIGBIG) +#define INIT_DESC "%9ld%3d%9s%10.3f\n" //AtomID - AtomType, AtomName, AtomMass +#else +#define INIT_DESC "%9d%3d%9s%10.3f\n" //AtomID - AtomType, AtomName, AtomMass +#endif #define INIT_DESC_LEN 32 #define SIZE_INFO_LINE2 "%-10d%-10d\n" @@ -51,21 +55,33 @@ #define SIZE_INFO_LINE3 "%-10d%-10d%-10d\n" #define SIZE_INFO_LEN3 31 -#define ATOM_BASIC TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f\n" //AtomID AtomType (X Y Z) Charge +#if defined(LAMMPS_BIGBIG) +#define ATOM_BASIC "%9ld%10.3f%10.3f%10.3f%10.3f\n" //AtomID AtomType (X Y Z) Charge +#define ATOM_wV "%9ld%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) Charge +#define ATOM_wF "%9ld%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Fx Fy Fz) Charge +#define ATOM_FULL "%9ld%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) (Fx Fy Fz) Charge +#else +#define ATOM_BASIC "%9d%10.3f%10.3f%10.3f%10.3f\n" //AtomID AtomType (X Y Z) Charge +#define ATOM_wV "%9d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) Charge +#define ATOM_wF "%9d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Fx Fy Fz) Charge +#define ATOM_FULL "%9d%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) (Fx Fy Fz) Charge +#endif #define ATOM_BASIC_LEN 50 -#define ATOM_wV TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) Charge #define ATOM_wV_LEN 80 -#define ATOM_wF TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Fx Fy Fz) Charge #define ATOM_wF_LEN 80 -#define ATOM_FULL TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f%10.3f\n" //AtomID (X Y Z) (Vx Vy Vz) (Fx Fy Fz) Charge #define ATOM_FULL_LEN 110 -#define BOND_BASIC TAGINT_FORMAT " " TAGINT_FORMAT " %10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO +#if defined(LAMMPS_BIGBIG) +#define BOND_BASIC "%9ld%9ld%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO +#define BOND_FULL "%9ld%9ld%10.3f%10.3f%10.3f%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO BOs BOpi BOpi2 +#define ANGLE_BASIC "%9ld%9ld%9ld%10.3f\n" // Atom1 Atom2 Atom3 Theta +#else +#define BOND_BASIC "%9d%9d%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO +#define BOND_FULL "%9d%9d%10.3f%10.3f%10.3f%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO BOs BOpi BOpi2 +#define ANGLE_BASIC "%9d%9d%9d%10.3f\n" // Atom1 Atom2 Atom3 Theta +#endif #define BOND_BASIC_LEN 39 -#define BOND_FULL TAGINT_FORMAT " " TAGINT_FORMAT " %10.3f%10.3f%10.3f%10.3f%10.3f\n" // Atom1 Atom2 Dist Total_BO BOs BOpi BOpi2 #define BOND_FULL_LEN 69 - -#define ANGLE_BASIC TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " %10.3f\n" // Atom1 Atom2 Atom3 Theta #define ANGLE_BASIC_LEN 38 enum ATOM_LINE_OPTS { OPT_NOATOM = 0, OPT_ATOM_BASIC = 4, OPT_ATOM_wF = 5, OPT_ATOM_wV = 6, OPT_ATOM_FULL = 7, NR_OPT_ATOM = 8 }; From 4f026b9b3830afdbf2ede14fe9d6001be56e5604 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 06:11:06 -0400 Subject: [PATCH 128/372] remove trailing whitespace --- src/USER-REAXC/fix_reaxc.cpp | 2 +- src/USER-REAXC/reaxc_ffield.cpp | 4 ++-- src/USER-REAXC/reaxc_init_md.cpp | 8 ++++---- src/USER-REAXC/reaxc_reset_tools.cpp | 4 ++-- src/USER-REAXC/reaxc_types.h | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/USER-REAXC/fix_reaxc.cpp b/src/USER-REAXC/fix_reaxc.cpp index 361733f3ca..dc67ad6ffb 100644 --- a/src/USER-REAXC/fix_reaxc.cpp +++ b/src/USER-REAXC/fix_reaxc.cpp @@ -41,7 +41,7 @@ FixReaxC::FixReaxC(LAMMPS *lmp,int narg, char **arg) : { // perform initial allocation of atom-based arrays // register with atom class - + oldnmax = 0; num_bonds = NULL; num_hbonds = NULL; diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 13e928ad08..9534637645 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -151,7 +151,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, /* Sanity checks */ if (c == 2 && !lgflag) control->error_ptr->all(FLERR, "Force field file requires using 'lgvdw yes'"); - + if (c < 9) { snprintf (errmsg, 1024, "Missing parameter(s) in line %s", s); control->error_ptr->all(FLERR, errmsg); @@ -320,7 +320,7 @@ char Read_Force_Field( FILE *fp, reax_interaction *reax, if (c == 2 && !lgflag) { control->error_ptr->all(FLERR, "Force field file requires using 'lgvdw yes'"); } - + l = atoi(tmp[0]); /* a line of comments */ diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index c1239e0cbb..39b31c38b5 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -236,21 +236,21 @@ void Initialize( reax_system *system, control_params *control, if (Init_Workspace( system, control, workspace, msg ) == FAILURE) { - control->error_ptr->one(FLERR,"Workspace could not be initialized"); + control->error_ptr->one(FLERR,"Workspace could not be initialized"); } if (Init_Lists( system, control, data, workspace, lists, mpi_data, msg ) == FAILURE) { - control->error_ptr->one(FLERR,"Lists could not be initialized"); + control->error_ptr->one(FLERR,"Lists could not be initialized"); } if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) { - control->error_ptr->one(FLERR,"Could not open output files"); + control->error_ptr->one(FLERR,"Could not open output files"); } if (control->tabulate) { if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) { - control->error_ptr->one(FLERR,"Lookup table could not be created"); + control->error_ptr->one(FLERR,"Lookup table could not be created"); } } diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index 5439ee33a4..e00656694c 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -144,7 +144,7 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, if (total_bonds >= bonds->num_intrs * DANGER_ZONE) { workspace->realloc.bonds = 1; if (total_bonds >= bonds->num_intrs) { - char errmsg[256]; + char errmsg[256]; snprintf(errmsg, 256, "Not enough space for bonds! total=%d allocated=%d\n", total_bonds, bonds->num_intrs); control->error_ptr->one(FLERR, errmsg); @@ -170,7 +170,7 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, if (total_hbonds >= hbonds->num_intrs * 0.90/*DANGER_ZONE*/) { workspace->realloc.hbonds = 1; if (total_hbonds >= hbonds->num_intrs) { - char errmsg[256]; + char errmsg[256]; snprintf(errmsg, 256, "Not enough space for hbonds! total=%d allocated=%d\n", total_hbonds, hbonds->num_intrs); control->error_ptr->one(FLERR, errmsg); diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index cdc2916a66..b05f655040 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -491,7 +491,7 @@ typedef struct int lgflag; int enobondsflag; class LAMMPS_NS::Error *error_ptr; - int me; + int me; } control_params; From 42e8a7613e144e86b8ce0eac302b5fc87323779e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 06:29:38 -0400 Subject: [PATCH 129/372] stop with error or print a warning when the system or atom ids get to large for reax/c pair styles --- src/USER-OMP/pair_reaxc_omp.cpp | 9 +++++++++ src/USER-REAXC/pair_reaxc.cpp | 11 +++++++++-- src/USER-REAXC/reaxc_io_tools.cpp | 6 ++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index 92ba31048d..81e890538a 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -343,6 +343,15 @@ void PairReaxCOMP::init_style( ) if (force->newton_pair == 0) error->all(FLERR,"Pair style reax/c/omp requires newton pair on"); + if ((atom->map_max_tag > 99999999) && (comm->me == 0)) + error->warning(FLERR,"Some Atom-IDs are too large. Pair style reax/c/omp " + "native output files may get misformatted or corrupted"); + + // because system->bigN is an int, we cannot have more atoms than MAXSMALLINT + + if (atom->natoms > MAXSMALLINT) + error->all(FLERR,"Too many atoms for pair style reax/c/omp"); + // need a half neighbor list w/ Newton off and ghost neighbors // built whenever re-neighboring occurs diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 6bb2b9a197..3164280872 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -90,8 +90,7 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) mpi_data = (mpi_datatypes *) memory->smalloc(sizeof(mpi_datatypes),"reax:mpi"); - MPI_Comm_rank(world,&system->my_rank); - control->me = system->my_rank; + control->me = system->my_rank = comm->me; system->my_coords[0] = 0; system->my_coords[1] = 0; @@ -383,6 +382,14 @@ void PairReaxC::init_style( ) error->all(FLERR,"Pair style reax/c requires atom IDs"); if (force->newton_pair == 0) error->all(FLERR,"Pair style reax/c requires newton pair on"); + if ((atom->map_max_tag > 99999999) && (comm->me == 0)) + error->warning(FLERR,"Some Atom-IDs are too large. Pair style reax/c " + "native output files may get misformatted or corrupted"); + + // because system->bigN is an int, we cannot have more atoms than MAXSMALLINT + + if (atom->natoms > MAXSMALLINT) + error->all(FLERR,"Too many atoms for pair style reax/c"); // need a half neighbor list w/ Newton off and ghost neighbors // built whenever re-neighboring occurs diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp index f71fcbec8e..a4f0db7c7d 100644 --- a/src/USER-REAXC/reaxc_io_tools.cpp +++ b/src/USER-REAXC/reaxc_io_tools.cpp @@ -55,8 +55,7 @@ int Init_Output_Files( reax_system *system, control_params *control, sprintf( temp, "%s.pot", control->sim_name ); if ((out_control->pot = fopen( temp, "w" )) != NULL) { fflush( out_control->pot ); - } - else { + } else { strcpy( msg, "init_out_controls: .pot file could not be opened\n" ); return FAILURE; } @@ -74,8 +73,7 @@ int Init_Output_Files( reax_system *system, control_params *control, "step", "Pint/norm[x]", "Pint/norm[y]", "Pint/norm[z]", "Pext/Ptot[x]", "Pext/Ptot[y]", "Pext/Ptot[z]", "Pkin/V" ); fflush( out_control->prs ); - } - else { + } else { strcpy(msg,"init_out_controls: .prs file couldn't be opened\n"); return FAILURE; } From 8b2a8ad08bd1a2cb22ff3465db810c4735025753 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 06:32:59 -0400 Subject: [PATCH 130/372] fix stupid typo --- src/USER-OMP/pair_reaxc_omp.cpp | 2 +- src/USER-REAXC/pair_reaxc.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index 81e890538a..a98f7c89d9 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -343,7 +343,7 @@ void PairReaxCOMP::init_style( ) if (force->newton_pair == 0) error->all(FLERR,"Pair style reax/c/omp requires newton pair on"); - if ((atom->map_max_tag > 99999999) && (comm->me == 0)) + if ((atom->map_tag_max > 99999999) && (comm->me == 0)) error->warning(FLERR,"Some Atom-IDs are too large. Pair style reax/c/omp " "native output files may get misformatted or corrupted"); diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 3164280872..a65c738766 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -382,7 +382,7 @@ void PairReaxC::init_style( ) error->all(FLERR,"Pair style reax/c requires atom IDs"); if (force->newton_pair == 0) error->all(FLERR,"Pair style reax/c requires newton pair on"); - if ((atom->map_max_tag > 99999999) && (comm->me == 0)) + if ((atom->map_tag_max > 99999999) && (comm->me == 0)) error->warning(FLERR,"Some Atom-IDs are too large. Pair style reax/c " "native output files may get misformatted or corrupted"); From 383e206cc22fd91f0ed30318b9c8cd0055b8ab42 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 08:00:04 -0400 Subject: [PATCH 131/372] the GCC folks did it again. :-( --- src/hashlittle.cpp | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/hashlittle.cpp b/src/hashlittle.cpp index 38f192ad76..f612be9eeb 100644 --- a/src/hashlittle.cpp +++ b/src/hashlittle.cpp @@ -23,16 +23,6 @@ # endif #endif -// declaration to indicate intended fallthrough cases in switch statements -// and thus silence the warnings produced by g++ -Wextra - -#if defined(__GNUC__) -#define _fallthrough __attribute__ ((fallthrough)) -#else -#define _fallthrough -#endif - - #define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) /* @@ -301,17 +291,17 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval) /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { - case 12: c+=((uint32_t)k[11])<<24; _fallthrough; - case 11: c+=((uint32_t)k[10])<<16; _fallthrough; - case 10: c+=((uint32_t)k[9])<<8; _fallthrough; - case 9 : c+=k[8]; _fallthrough; - case 8 : b+=((uint32_t)k[7])<<24; _fallthrough; - case 7 : b+=((uint32_t)k[6])<<16; _fallthrough; - case 6 : b+=((uint32_t)k[5])<<8; _fallthrough; - case 5 : b+=k[4]; _fallthrough; - case 4 : a+=((uint32_t)k[3])<<24; _fallthrough; - case 3 : a+=((uint32_t)k[2])<<16; _fallthrough; - case 2 : a+=((uint32_t)k[1])<<8; _fallthrough; + case 12: c+=((uint32_t)k[11])<<24; /* fall through */ + case 11: c+=((uint32_t)k[10])<<16; /* fall through */ + case 10: c+=((uint32_t)k[9])<<8; /* fall through */ + case 9 : c+=k[8]; /* fall through */ + case 8 : b+=((uint32_t)k[7])<<24; /* fall through */ + case 7 : b+=((uint32_t)k[6])<<16; /* fall through */ + case 6 : b+=((uint32_t)k[5])<<8; /* fall through */ + case 5 : b+=k[4]; /* fall through */ + case 4 : a+=((uint32_t)k[3])<<24; /* fall through */ + case 3 : a+=((uint32_t)k[2])<<16; /* fall through */ + case 2 : a+=((uint32_t)k[1])<<8; /* fall through */ case 1 : a+=k[0]; break; case 0 : return c; From 5d3801cb1259ffc50b39a27e08842c9f0488b9de Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 5 Apr 2019 15:50:58 +0200 Subject: [PATCH 132/372] Include info for COMPASS in the Howto section --- doc/src/Howto_bioFF.txt | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/doc/src/Howto_bioFF.txt b/doc/src/Howto_bioFF.txt index deb5b31441..ee53420723 100644 --- a/doc/src/Howto_bioFF.txt +++ b/doc/src/Howto_bioFF.txt @@ -7,12 +7,12 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -CHARMM, AMBER, and DREIDING force fields :h3 +CHARMM, AMBER, COMPASS and DREIDING force fields :h3 A force field has 2 parts: the formulas that define it and the coefficients used for a particular system. Here we only discuss formulas implemented in LAMMPS that correspond to formulas commonly -used in the CHARMM, AMBER, and DREIDING force fields. Setting +used in the CHARMM, AMBER, COMPASS and DREIDING force fields. Setting coefficients is done in the input data file via the "read_data"_read_data.html command or in the input script with commands like "pair_coeff"_pair_coeff.html or @@ -50,6 +50,28 @@ older {charmm} styles. See discussion of the differences on the "pair charmm"_pair_charmm.html and "dihedral charmm"_dihedral_charmm.html doc pages. +COMPASS is a general force field for atomistic simulation of +common organic molecules, inorganic small molecules, and polymers which +was developed using ab initio and empirical parametrization techniques. +See the "Tools"_Tools.html doc page for the msi2lmp tool for creating +LAMMPS template input and data files from BIOVIA’s Materias Studio files. +See "(Sun)"_#howto-Sun for a description of the COMPASS force field. + +These style choices compute force field formulas that are consistent +with the COMPASS force field. See each command's +documentation for the formula it computes. + +"bond_style"_bond_class2.html class2 +"angle_style"_angle_class2.html class2 +"dihedral_style"_dihedral_class2.html class2 +"improper_style"_improper_class2.html class2 :ul + +"pair_style"_pair_class2.html lj/class2 +"pair_style"_pair_class2.html lj/class2/coul/cut +"pair_style"_pair_class2.html lj/class2/coul/long :ul + +"special_bonds"_special_bonds.html lj/coul 0 0 1 :ul + DREIDING is a generic force field developed by the "Goddard group"_http://www.wag.caltech.edu at Caltech and is useful for predicting structures and dynamics of organic, biological and @@ -100,6 +122,9 @@ Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998). [(Cornell)] Cornell, Cieplak, Bayly, Gould, Merz, Ferguson, Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995). +:link(howto-Sun) +[(Sun)] Sun, J. Phys. Chem. B, 102, 7338–7364 (1998). + :link(howto-Mayo) [(Mayo)] Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909 (1990). From 85a0461a48b16c1f383b7cfeb6fc1a69fa9a8bc2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 10:53:23 -0400 Subject: [PATCH 133/372] reword and reformat text in Howto_bioFF.txt a little bit. add warnings about msi2lmp's age and lack of maintenance --- doc/src/Howto_bioFF.txt | 78 ++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/doc/src/Howto_bioFF.txt b/doc/src/Howto_bioFF.txt index ee53420723..b6995920ae 100644 --- a/doc/src/Howto_bioFF.txt +++ b/doc/src/Howto_bioFF.txt @@ -7,29 +7,31 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -CHARMM, AMBER, COMPASS and DREIDING force fields :h3 +CHARMM, AMBER, COMPASS, and DREIDING force fields :h3 A force field has 2 parts: the formulas that define it and the coefficients used for a particular system. Here we only discuss formulas implemented in LAMMPS that correspond to formulas commonly -used in the CHARMM, AMBER, COMPASS and DREIDING force fields. Setting -coefficients is done in the input data file via the -"read_data"_read_data.html command or in the input script with +used in the CHARMM, AMBER, COMPASS, and DREIDING force fields. Setting +coefficients is done either from special sections in an input data file +via the "read_data"_read_data.html command or in the input script with commands like "pair_coeff"_pair_coeff.html or -"bond_coeff"_bond_coeff.html. See the "Tools"_Tools.html doc page for -additional tools that can use CHARMM or AMBER to assign force field -coefficients and convert their output into LAMMPS input. +"bond_coeff"_bond_coeff.html and so on. See the "Tools"_Tools.html doc +page for additional tools that can use CHARMM, AMBER, or Materials +Studio generated files to assign force field coefficients and convert +their output into LAMMPS input. See "(MacKerell)"_#howto-MacKerell for a description of the CHARMM force -field. See "(Cornell)"_#howto-Cornell for a description of the AMBER force -field. +field. See "(Cornell)"_#howto-Cornell for a description of the AMBER +force field. See "(Sun)"_#howto-Sun for a description of the COMPASS +force field. :link(charmm,http://www.scripps.edu/brooks) :link(amber,http://amber.scripps.edu) -These style choices compute force field formulas that are consistent -with common options in CHARMM or AMBER. See each command's -documentation for the formula it computes. +The interaction styles listed below compute force field formulas that +are consistent with common options in CHARMM or AMBER. See each +command's documentation for the formula it computes. "bond_style"_bond_harmonic.html harmonic "angle_style"_angle_charmm.html charmm @@ -44,21 +46,26 @@ documentation for the formula it computes. "special_bonds"_special_bonds.html charmm "special_bonds"_special_bonds.html amber :ul -NOTE: For CHARMM, newer {charmmfsw} or {charmmfsh} styles were -released in March 2017. We recommend they be used instead of the -older {charmm} styles. See discussion of the differences on the "pair -charmm"_pair_charmm.html and "dihedral charmm"_dihedral_charmm.html -doc pages. +NOTE: For CHARMM, newer {charmmfsw} or {charmmfsh} styles were released +in March 2017. We recommend they be used instead of the older {charmm} +styles. See discussion of the differences on the "pair +charmm"_pair_charmm.html and "dihedral charmm"_dihedral_charmm.html doc +pages. -COMPASS is a general force field for atomistic simulation of -common organic molecules, inorganic small molecules, and polymers which -was developed using ab initio and empirical parametrization techniques. -See the "Tools"_Tools.html doc page for the msi2lmp tool for creating -LAMMPS template input and data files from BIOVIA’s Materias Studio files. -See "(Sun)"_#howto-Sun for a description of the COMPASS force field. +COMPASS is a general force field for atomistic simulation of common +organic molecules, inorganic small molecules, and polymers which was +developed using ab initio and empirical parameterization techniques. +See the "Tools"_Tools.html doc page for the msi2lmp tool for creating +LAMMPS template input and data files from BIOVIA’s Materials Studio +files. Please note that the msi2lmp tool is very old and largely +unmaintained, so it does not support all features of Materials Studio +provided force field files, especially additions during the last decade. +You should watch the output carefully and compare results, where +possible. See "(Sun)"_#howto-Sun for a description of the COMPASS force +field. -These style choices compute force field formulas that are consistent -with the COMPASS force field. See each command's +These interaction styles listed below compute force field formulas that +are consistent with the COMPASS force field. See each command's documentation for the formula it computes. "bond_style"_bond_class2.html class2 @@ -74,20 +81,19 @@ documentation for the formula it computes. DREIDING is a generic force field developed by the "Goddard group"_http://www.wag.caltech.edu at Caltech and is useful for -predicting structures and dynamics of organic, biological and -main-group inorganic molecules. The philosophy in DREIDING is to use -general force constants and geometry parameters based on simple -hybridization considerations, rather than individual force constants -and geometric parameters that depend on the particular combinations of -atoms involved in the bond, angle, or torsion terms. DREIDING has an -"explicit hydrogen bond term"_pair_hbond_dreiding.html to describe -interactions involving a hydrogen atom on very electronegative atoms -(N, O, F). +predicting structures and dynamics of organic, biological and main-group +inorganic molecules. The philosophy in DREIDING is to use general force +constants and geometry parameters based on simple hybridization +considerations, rather than individual force constants and geometric +parameters that depend on the particular combinations of atoms involved +in the bond, angle, or torsion terms. DREIDING has an "explicit hydrogen +bond term"_pair_hbond_dreiding.html to describe interactions involving a +hydrogen atom on very electronegative atoms (N, O, F). See "(Mayo)"_#howto-Mayo for a description of the DREIDING force field -These style choices compute force field formulas that are consistent -with the DREIDING force field. See each command's +The interaction styles listed below compute force field formulas that +are consistent with the DREIDING force field. See each command's documentation for the formula it computes. "bond_style"_bond_harmonic.html harmonic From 2757e4e6e6e6ffb61493ae439f2a90efcdac8ae5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 10:53:41 -0400 Subject: [PATCH 134/372] two more false positives --- doc/utils/sphinx-config/false_positives.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 8c2ff43c3c..91ae3d6a6c 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1134,6 +1134,7 @@ infty inhomogeneities inhomogeneous init +initio initializations InP inregion @@ -2809,6 +2810,7 @@ unimodal unitless Universite unix +unmaintained unoptimized unpadded unphysical From 2e1da2958da1cf362a2185ed51db8902607a1218 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 11:04:11 -0400 Subject: [PATCH 135/372] resolve toctree and paper anchor issues --- doc/src/Howto.txt | 2 +- doc/src/Howto_tip3p.txt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/src/Howto.txt b/doc/src/Howto.txt index 36f6be7194..0df417af75 100644 --- a/doc/src/Howto.txt +++ b/doc/src/Howto.txt @@ -148,7 +148,7 @@ END_RST --> -"CHARMM, AMBER, and DREIDING force fields"_Howto_bioFF.html +"CHARMM, AMBER, COMPASS, and DREIDING force fields"_Howto_bioFF.html "TIP3P water model"_Howto_tip3p.html "TIP4P water model"_Howto_tip4p.html "SPC water model"_Howto_spc.html :all(b) diff --git a/doc/src/Howto_tip3p.txt b/doc/src/Howto_tip3p.txt index 942b42aea1..a34577c5e1 100644 --- a/doc/src/Howto_tip3p.txt +++ b/doc/src/Howto_tip3p.txt @@ -10,7 +10,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c TIP3P water model :h3 The TIP3P water model as implemented in CHARMM -"(MacKerell)"_#howto-MacKerell specifies a 3-site rigid water molecule with +"(MacKerell)"_#howto-tip3p specifies a 3-site rigid water molecule with charges and Lennard-Jones parameters assigned to each of the 3 atoms. In LAMMPS the "fix shake"_fix_shake.html command can be used to hold the two O-H bonds and the H-O-H angle rigid. A bond style of @@ -60,6 +60,10 @@ models"_http://en.wikipedia.org/wiki/Water_model. :line +:link(howto-tip3p) +[(MacKerell)] MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field, +Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998). + :link(Jorgensen1) [(Jorgensen)] Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem Phys, 79, 926 (1983). From 175f3ee648bf805e233c327eff93a402495e1b80 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Fri, 5 Apr 2019 10:14:45 -0500 Subject: [PATCH 136/372] Fix pointer assignment in pair_kim Bug only affects cases where neighbor list needs to be stripped. Thanks to Mingjian Wen (@mjwen) for finding and reporting this. --- src/KIM/pair_kim.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 84842f87cc..ea5f24a67e 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -481,7 +481,7 @@ void PairKIM::init_style() for (int i = 0; i < kim_number_of_neighbor_lists; ++i) { lmps_stripped_neigh_ptr[i] - = &(lmps_stripped_neigh_list[(i-1)*(neighbor->oneatom)]); + = &(lmps_stripped_neigh_list[i*(neighbor->oneatom)]); } } From 815ad4dab2b9782b11073816b4f84848013ac7b7 Mon Sep 17 00:00:00 2001 From: oywg11 Date: Fri, 5 Apr 2019 22:04:45 +0300 Subject: [PATCH 137/372] fix a bug in ILP --- doc/src/pair_ilp_graphene_hbn.txt | 19 ++++-- doc/src/pair_kolmogorov_crespi_full.txt | 14 +++-- src/USER-MISC/pair_ilp_graphene_hbn.cpp | 58 ++++++++++++------- src/USER-MISC/pair_kolmogorov_crespi_full.cpp | 36 ++++++++---- 4 files changed, 85 insertions(+), 42 deletions(-) diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index 76dda14ec6..5c44128edb 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -47,11 +47,16 @@ equation can be found in "(Leven1)"_#Leven1 and "(Maaravi)"_#Maaravi2. It is important to include all the pairs to build the neighbor list for calculating the normals. -NOTE: This potential is intended for interactions between two different -layers of graphene or hexagonal boron nitride. Therefore, to avoid -interaction within the same layers, each layer should have a separate -molecule id and is recommended to use "full" atom style in the data -file. +NOTE: This potential (ILP) is intended for interlayer interactions between two +different layers of graphene, hexagonal boron nitride (h-BN) and their heterojunctions. +To perform a realistic simulation, this potential must be used in combination with +intralyer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. +To keep the intralayer properties unaffected, the interlayer interaction +within the same layers should be avoided. Hence, each atom has to have a layer +identifier such that atoms residing on the same layer interact via the +appropriate intra-layer potential and atoms residing on different layers +interact via the ILP. Here, the molecule id is chosen as the layer identifier, +thus a data file with the "full" atom style is required to use this potential. The parameter file (e.g. BNCH.ILP), is intended for use with {metal} "units"_units.html, with energies in meV. Two additional parameters, @@ -62,6 +67,10 @@ list for calculating the normals for each atom pair. NOTE: The parameters presented in the parameter file (e.g. BNCH.ILP), are fitted with taper function by setting the cutoff equal to 16.0 Angstrom. Using different cutoff or taper function should be careful. +The parameters for atoms pairs between Boron and Nitrogen are fitted with +a screened Coulomb interaction "coul/shield"_pair_coul_shield.html. Therefore, +to simulated the properties of h-BN correclty, this potential must be used in +combination with the pair style "coul/shield"_pair_coul_shield.html. NOTE: Two new sets of parameters of ILP for two-dimensional hexagonal Materials are presented in "(Ouyang)"_#Ouyang. These parameters provide diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index 6d76a24bdb..c14bfc6511 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -42,10 +42,16 @@ the last term in the equation for {Vij} above. This is essential only when the tapper function is turned off. The formula of taper function can be found in pair style "ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. -NOTE: This potential is intended for interactions between two different -graphene layers. Therefore, to avoid interaction within the same layers, -each layer should have a separate molecule id and is recommended to use -"full" atom style in the data file. +NOTE: This potential (ILP) is intended for interlayer interactions between two +different layers of graphene. To perform a realistic simulation, this potential +must be used in combination with intralyer potential, such as +"AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. +To keep the intralayer properties unaffected, the interlayer interaction +within the same layers should be avoided. Hence, each atom has to have a layer +identifier such that atoms residing on the same layer interact via the +appropriate intra-layer potential and atoms residing on different layers +interact via the ILP. Here, the molecule id is chosen as the layer identifier, +thus a data file with the "full" atom style is required to use this potential. The parameter file (e.g. CH.KC), is intended for use with {metal} "units"_units.html, with energies in meV. Two additional parameters, {S}, diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index d1b8a3be38..c7d1c9c721 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -111,7 +111,7 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) tagint itag,jtag; double prodnorm1,prodnorm2,fkcx,fkcy,fkcz; double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2; - double rsq,r,Rcut,rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vkc; + double rsq,r,Rcut,rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vilp; double frho1,frho2,TSvdw,TSvdw2inv,Erep,fsum,rdsq1,rdsq2; int *ilist,*jlist,*numneigh,**firstneigh; int *ILP_neighs_i,*ILP_neighs_j; @@ -131,6 +131,10 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) double fp2[3] = {0.0, 0.0, 0.0}; double fprod1[3] = {0.0, 0.0, 0.0}; double fprod2[3] = {0.0, 0.0, 0.0}; + double fk[3] = {0.0, 0.0, 0.0}; + double fl[3] = {0.0, 0.0, 0.0}; + double delkj[3] = {0.0, 0.0, 0.0}; + double delli[3] = {0.0, 0.0, 0.0}; inum = list->inum; ilist = list->ilist; @@ -213,7 +217,7 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) frho1 = exp1*p.C; frho2 = exp2*p.C; Erep = p.epsilon + frho1 + frho2; - Vkc = -p.C6*r6inv/TSvdw + exp0*Erep; + Vilp = -p.C6*r6inv/TSvdw + exp0*Erep; // derivatives fpair = -6.0*p.C6*r8inv/TSvdw + p.d/p.seff*p.C6*(TSvdw-1.0)*TSvdw2inv*r8inv*r + p.lambda*exp0/r*Erep; @@ -240,9 +244,9 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) fprod2[0] = prodnorm2*dprodnorm2[0]*fpair2; fprod2[1] = prodnorm2*dprodnorm2[1]*fpair2; fprod2[2] = prodnorm2*dprodnorm2[2]*fpair2; - fkcx = (delx*fsum - fp1[0] - fp2[0])*Tap - Vkc*dTap*delx/r; - fkcy = (dely*fsum - fp1[1] - fp2[1])*Tap - Vkc*dTap*dely/r; - fkcz = (delz*fsum - fp1[2] - fp2[2])*Tap - Vkc*dTap*delz/r; + fkcx = (delx*fsum - fp1[0] - fp2[0])*Tap - Vilp*dTap*delx/r; + fkcy = (dely*fsum - fp1[1] - fp2[1])*Tap - Vilp*dTap*dely/r; + fkcz = (delz*fsum - fp1[2] - fp2[2])*Tap - Vilp*dTap*delz/r; f[i][0] += fkcx - fprod1[0]*Tap; f[i][1] += fkcy - fprod1[1]*Tap; @@ -260,9 +264,16 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) dprodnorm1[0] = dnormal[0][0][kk][i]*delx + dnormal[1][0][kk][i]*dely + dnormal[2][0][kk][i]*delz; dprodnorm1[1] = dnormal[0][1][kk][i]*delx + dnormal[1][1][kk][i]*dely + dnormal[2][1][kk][i]*delz; dprodnorm1[2] = dnormal[0][2][kk][i]*delx + dnormal[1][2][kk][i]*dely + dnormal[2][2][kk][i]*delz; - f[k][0] += (-prodnorm1*dprodnorm1[0]*fpair1)*Tap; - f[k][1] += (-prodnorm1*dprodnorm1[1]*fpair1)*Tap; - f[k][2] += (-prodnorm1*dprodnorm1[2]*fpair1)*Tap; + fk[0] = (-prodnorm1*dprodnorm1[0]*fpair1)*Tap; + fk[1] = (-prodnorm1*dprodnorm1[1]*fpair1)*Tap; + fk[2] = (-prodnorm1*dprodnorm1[2]*fpair1)*Tap; + f[k][0] += fk[0]; + f[k][1] += fk[1]; + f[k][2] += fk[2]; + delkj[0] = x[k][0] - x[j][0]; + delkj[1] = x[k][1] - x[j][1]; + delkj[2] = x[k][2] - x[j][2]; + if (evflag) ev_tally_xyz(k,j,nlocal,newton_pair,0.0,0.0,fk[0],fk[1],fk[2],delkj[0],delkj[1],delkj[2]); } // calculate the forces acted on the neighbors of atom j from atom i @@ -274,20 +285,24 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; - f[l][0] += (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; - f[l][1] += (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; - f[l][2] += (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; + fl[0] = (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; + fl[1] = (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; + fl[2] = (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; + f[l][0] += fl[0]; + f[l][1] += fl[1]; + f[l][2] += fl[2]; + delli[0] = x[l][0] - x[i][0]; + delli[1] = x[l][1] - x[i][1]; + delli[2] = x[l][2] - x[i][2]; + if (evflag) ev_tally_xyz(l,i,nlocal,newton_pair,0.0,0.0,fl[0],fl[1],fl[2],delli[0],delli[1],delli[2]); } if (eflag) { - if (tap_flag) evdwl = Tap*Vkc; - else evdwl = Vkc - offset[itype][jtype]; + if (tap_flag) evdwl = Tap*Vilp; + else evdwl = Vilp - offset[itype][jtype]; } - if (evflag){ - ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0, - fkcx,fkcy,fkcz,delx,dely,delz); - } + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0.0,fkcx,fkcy,fkcz,delx,dely,delz); } } } @@ -723,7 +738,6 @@ void PairILPGrapheneHBN::ILP_neigh() ILP_firstneigh[i] = neighptr; ILP_numneigh[i] = n; - if (n == 0) error->all(FLERR,"Could not build neighbor list to calculate normals, please check your configuration"); if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) @@ -1010,7 +1024,7 @@ double PairILPGrapheneHBN::single(int /*i*/, int /*j*/, int itype, int jtype, do double &fforce) { double r,r2inv,r6inv,r8inv,forcelj,philj,fpair; - double Tap,dTap,Vkc,TSvdw,TSvdw2inv; + double Tap,dTap,Vilp,TSvdw,TSvdw2inv; int iparam_ij = elem2param[map[itype]][map[jtype]]; Param& p = params[iparam_ij]; @@ -1028,13 +1042,13 @@ double PairILPGrapheneHBN::single(int /*i*/, int /*j*/, int itype, int jtype, do TSvdw = 1.0 + exp(-p.d*(r/p.seff - 1.0)); TSvdw2inv = pow(TSvdw,-2.0); - Vkc = -p.C6*r6inv/TSvdw; + Vilp = -p.C6*r6inv/TSvdw; // derivatives fpair = -6.0*p.C6*r8inv/TSvdw + p.d/p.seff*p.C6*(TSvdw - 1.0)*r6inv*TSvdw2inv/r; forcelj = fpair; - fforce = factor_lj*(forcelj*Tap - Vkc*dTap/r); + fforce = factor_lj*(forcelj*Tap - Vilp*dTap/r); - philj = Vkc*Tap; + philj = Vilp*Tap; return factor_lj*philj; } diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index 289ed19bd3..7b66a5b41d 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -129,6 +129,10 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) double fp2[3] = {0.0, 0.0, 0.0}; double fprod1[3] = {0.0, 0.0, 0.0}; double fprod2[3] = {0.0, 0.0, 0.0}; + double fk[3] = {0.0, 0.0, 0.0}; + double fl[3] = {0.0, 0.0, 0.0}; + double delkj[3] = {0.0, 0.0, 0.0}; + double delli[3] = {0.0, 0.0, 0.0}; inum = list->inum; ilist = list->ilist; @@ -259,9 +263,16 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) dprodnorm1[0] = dnormal[0][0][kk][i]*delx + dnormal[1][0][kk][i]*dely + dnormal[2][0][kk][i]*delz; dprodnorm1[1] = dnormal[0][1][kk][i]*delx + dnormal[1][1][kk][i]*dely + dnormal[2][1][kk][i]*delz; dprodnorm1[2] = dnormal[0][2][kk][i]*delx + dnormal[1][2][kk][i]*dely + dnormal[2][2][kk][i]*delz; - f[k][0] += (-prodnorm1*dprodnorm1[0]*fpair1)*Tap; - f[k][1] += (-prodnorm1*dprodnorm1[1]*fpair1)*Tap; - f[k][2] += (-prodnorm1*dprodnorm1[2]*fpair1)*Tap; + fk[0] = (-prodnorm1*dprodnorm1[0]*fpair1)*Tap; + fk[1] = (-prodnorm1*dprodnorm1[1]*fpair1)*Tap; + fk[2] = (-prodnorm1*dprodnorm1[2]*fpair1)*Tap; + f[k][0] += fk[0]; + f[k][1] += fk[1]; + f[k][2] += fk[2]; + delkj[0] = x[k][0] - x[j][0]; + delkj[1] = x[k][1] - x[j][1]; + delkj[2] = x[k][2] - x[j][2]; + if (evflag) ev_tally_xyz(k,j,nlocal,newton_pair,0.0,0.0,fk[0],fk[1],fk[2],delkj[0],delkj[1],delkj[2]); } // calculate the forces acted on the neighbors of atom j from atom i @@ -273,9 +284,16 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; - f[l][0] += (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; - f[l][1] += (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; - f[l][2] += (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; + fl[0] = (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; + fl[1] = (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; + fl[2] = (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; + f[l][0] += fl[0]; + f[l][1] += fl[1]; + f[l][2] += fl[2]; + delli[0] = x[l][0] - x[i][0]; + delli[1] = x[l][1] - x[i][1]; + delli[2] = x[l][2] - x[i][2]; + if (evflag) ev_tally_xyz(l,i,nlocal,newton_pair,0.0,0.0,fl[0],fl[1],fl[2],delli[0],delli[1],delli[2]); } if (eflag) { @@ -283,10 +301,7 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) else evdwl = Vkc - offset[itype][jtype]; } - if (evflag){ - ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0, - fkcx,fkcy,fkcz,delx,dely,delz); - } + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0,fkcx,fkcy,fkcz,delx,dely,delz); } } } @@ -727,7 +742,6 @@ void PairKolmogorovCrespiFull::KC_neigh() KC_firstneigh[i] = neighptr; KC_numneigh[i] = n; - if (n == 0) error->all(FLERR,"Could not build neighbor list to calculate normals, please check your configuration"); if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) From da16a7e50ba74aee5d6d08fe49f41d673fe3c551 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 5 Apr 2019 13:22:46 -0600 Subject: [PATCH 138/372] Commit JT 040519 - initial rotation with Rodrigues' formula + exception - worked on neb_spin documentation - removed pair/spin warning for neb/spin --- doc/src/Eqs/neb_spin_k.jpg | Bin 0 -> 8348 bytes doc/src/Eqs/neb_spin_k.tex | 16 + doc/src/Eqs/neb_spin_rodrigues_formula.jpg | Bin 0 -> 20271 bytes doc/src/Eqs/neb_spin_rodrigues_formula.tex | 16 + doc/src/neb_spin.txt | 430 +++++++++++++++++++ examples/SPIN/gneb/iron/in.gneb.iron | 3 +- examples/SPIN/gneb/skyrmion/in.gneb.skyrmion | 3 +- src/SPIN/fix_neb_spin.h | 30 +- src/SPIN/neb_spin.cpp | 140 +++--- src/SPIN/neb_spin.h | 2 +- src/SPIN/pair_spin_dmi.cpp | 3 +- src/SPIN/pair_spin_exchange.cpp | 2 +- src/SPIN/pair_spin_magelec.cpp | 3 +- src/SPIN/pair_spin_neel.cpp | 3 +- 14 files changed, 560 insertions(+), 91 deletions(-) create mode 100644 doc/src/Eqs/neb_spin_k.jpg create mode 100644 doc/src/Eqs/neb_spin_k.tex create mode 100644 doc/src/Eqs/neb_spin_rodrigues_formula.jpg create mode 100644 doc/src/Eqs/neb_spin_rodrigues_formula.tex create mode 100644 doc/src/neb_spin.txt diff --git a/doc/src/Eqs/neb_spin_k.jpg b/doc/src/Eqs/neb_spin_k.jpg new file mode 100644 index 0000000000000000000000000000000000000000..add309694f9f0a0901b33bce69d7ef1bdce600a1 GIT binary patch literal 8348 zcmcI}2UJsEv+oH>AoS2XhTf6hkx;}05b3=m(h(4(iV&ptE={SSD@{N^MT$u8Nbev; z5UF-v(EI=H_tv`W-uK>GZ}wj6%$fPk>^UcU?>T#NF>|p3z%|s->Hr8wf*?TvxR?i2 z0WcokWycW&*P$>d6as+~5fI?RNQg*Ch>3`aNy#YTq+}Fi#Kdq~I0Y3o4Gj$mIUPMM zH9aLY4fUlH5Ey3zff7QYgw&+Oq}2b{bkPY=zyME>6c|JS;8B3U6rhW4fC&Hr;LB)% ze-RX)00M^L;gr<>F8-^(m;*?_AOH^zh64cTd&yrZSV*F{0LOymxo(MV{gr`G>`5HD zBE`NqoS8t6&m0NxI*T3oS4l12xFXl5$|LP*i1seG4%1fD7E^e0Me&MCJ`zx;?yPk$ zzyUvAdngsI$eysUCXc)pByqG$f}9|U-j&vm-v@vj6umE{a3D}@{#K4{WXHYCWJ9u4 ztaC@tO@op5_NuZ2j{$IK-_5@v;(Ma$bZ}_cI=55-fR92mZ!Y9O>DM4T&IB6(h%$&0 zrvzAUQ`iDm3T&b(>N3D8Q2JHKj*Akv8R}AZNgM+VZn7|{nPf4rA8zDqMkiTvG0ys@ zvQJf5aQ7?sl1ocEZc=Z_l1e1kbz00y&2%ynMq#>1J(r>bp*LLYwR_ZRCG=a*(Eaa3n;aSndNW8)5c*j>_LfF4%%rTi6E zj~r)?Vck9aP6hvts$>v%M~Iwlm|H~MC*1rN^2RZM-(503hVm0<3)g4AF?%$%9-^T8 z1e{soQ{ih(M+cef{`HB-d(!8I&nY~ATEzlSn9{h*%h7He8*Fap;;qDE z`dE24_J48iSC6P zLo6t$#an3Y^hchjDVr;RoHi?3T?ylPpQO4@XUxIv^vUCM6-Z4(*Jh=*B8g%lm+)N2 z_yI}w(1!YhA=zJIZShZVJx9aO(*32`f402&>;BZDaL_fQXa7Yj70jt<62**J)Lb^} z+`F=xbUR_^Mr;DzKgHz6OVaPnOe{|byzHxb*;i50Y)4yN*JP4U65B+)KC|zCCU2#f z_#w&u#sB-w4OR9UOtTup9Fd^~97PAp>+O`fCgzw4$)ASSiHsqujUNX}^6cc^u_JU? zfMN+YI1yu{pf(o_7|X9Di9!<{;Ej4yXa&^hGl(_lNpwf*z9XSuJmuL*U>5?R-3% zwED)CyynE^)`Y+lg~a%JTFrQhQXRXormv$k*b88%#qC~gO_hFCOLftHrvJKjb!znNtOmwXVJ@y^w6v^%0;;3-l@{<6*a8{1KWEH6TT;3ic+Q^I*H0 zlJQk~H?8ANo`Skmy9sHYdDMNPkv)}){Jbo1Q*Lpr*YaZkvNB}%=5?l z6jXCo_b01ny-~s276?Iq zjs+u=xnP+Cp|S#F9b{Wl-J+5Dbr^2{gqrsf7&m|ML_v~g5IW(C5ANvij&Jm?<$lQ) z6=HYrpb4fq&CJw{qfN{lC!0$-S-b!)_j`(eO9OwFe)6AXj@t>8K(IIe4Fd092=wLl z0fIpBVMH*3Kkh(yU>NZ_+=3*I|&j_KY#2Z5t zK5Sp3T&s6RV<*|4{^`X-HOY;SPY0a8++N%bJyD6pte6<_@0O))CrV89i0M&POiwS; zyc_TuA-Gf6NTQ*a=L9Ix#BPZlcGNQ_ADH=kQpo!B%e_;@j-z(}0*HO}kbNe}_kFvl zt6&8OdG-9y7fN56F9267ig-ReI9^LXDt?6lTl}y&?d?DtIEn4WakIIzObpn_D#A=? zsoPX^9A36$5b0?MMnFTpuvVdxb9SzD#l8x^TG*pm-MZkcz0Hv69OiO5o!?|Wx`N7O zk=@DdOnxp^Vs~a*L#5Gfo|%TKxP=OPPUFp*%f1sLp3FsilECJ#Vf3_B&)=j?Sk*0$ zvyj-3Xs5-!F@j&!wVm_zOS0xTEPi$G>GO;Vof*nGw`o=IN9u&_eWs?_3SAbm+Ldyh zdXK77-jE|j9@_T#_@u^Xi(Q$@TO(+-+tBys248D~%fy>9Z)~6CwQD5PeUTtUu@{w0 zOg)=m@{y%AxDJtLd22ZNwZ+-O@KXcZUd>)T@$f3yiAY41OQ?~N{t=5RN!dHE9vxz< ztndZ~Rg|-6(GD%Xl5|M%Ub9Tsml+BFHp!n{C|}_k!kGaFms8@98vozu;XOsr* z0bbu`_8I~CSl5;xAvfQ34mhCs-sRgjEfIf}NuL(y8*fQ!!MC7%a6gw*mo1XIBuQOm zP$@ELpej}|WBc%IHvh`dqL;S#c{=&8-l~+*uKjj1Bj}2uXO-7i${XP(d8vC2vt#CW z85tKo+x?K5ZT2`17{Bthm$OQ;^;M~5dvmN#snCyiNE*4_`ytfhV{B5%`HcAd?nV=P z&5w-x)1oEL!qPVSUl%CeZxuHB9q3cIjr#pl7GfzMyivv)MW;#jJy;Tzd1T@sH~q@U zrz16+trD6Zp5a#YzB$$u=_aJ!qCeZVd9|wV%qY^n>G2>9HgtDtS1ER3m`Na@?`~lc zTtNBxIq{A7B#O-OnIn*<_2&D7%AZ+6%0QE+?f0slDl*3@r<4#W^BGkq)Q-$1zN3I`GE0=UzK46rO74O7gZpuV z?UjRV6Q>t|Q$qjQ(N|eg!5UpA&%OZvKv{j$6R*bJIc2ZuS+ns+v8l-ZL4r~2#N~vCM^`lHqo0Y}_+CO&7_rc#Q650b^6HhMwK_U6XAM z=J5goJTiO5Wiqua1$A@%*dvfRgGcbE57S>1l)S!^RP2}i44mJp=5?)19JyOGXbBtI zt}bZ1X_BGm{~@a1nKQQO?Sx|knQy~~#+(?xg$%yN19!wKGdXz_7vZ-)eoexYEq}06 zmIa-JZc$_Aa%Ms$SfaQ&V0LrLzvbv~5lV03)?P-G5bV}BVp)9L>=WpxDs+PGE^ZJu zrefTSJqAu_Uz(s#Y@78}ettfhuP6-h`{q{Xk4&Oz^)Z-CVB_i2wzQk;c@gJIJ1tag zp4+dT(ypvpssfu-uG6$OS<_3e*3ex-H`TfS8_MMGZFoS*7nRDE!bWm))vg{+xdNE;bNc3_>K)dUOvbYZNYvoQNz zUgN#$+9aQXatRTq8F$g9u(&P{n(be+w-kM1!x|o&_2{WOlP~kFk%vO9i98?QWDd|p zEDcKSjOlwzJbKC{3zH3ZK&ScD4)B#4c{%7SdsI3mJ!q|XqIkB8^*^7l%wAvq|06QU zmJTAR&oOkQHI$&$dhE$$d$K{BGwUH!JMToFUdjjvUWxwBDdsEGpzCgp zHf7eyTeKp^^Fu;bit5d^D2IHN^xHz4b^*Q4#-x0o`ZHfWzd>OnoY_rZo#5hmus^%= zjbZ7Y)hTm}(Xo@!TH)Pkv!8Ygt4}bgMNy1AC3BHoeM1y1c!DN#rle(v7x@=JjFhTY zp-^L(S}6zH5g4^*{(MfNc~2-r)Y;etMP8p?qsaCpM*c>cG1mx9$?8)n4KuQ`cW;}2 zs|-rCXhq0*O7Z0+5T1cu*O5_7u?Nvj8IEjnP*d_nyV9zX#Ii9R z^8_fq5m3nA51KUXDTMZvay}xjnY|00jR}+9JCaCzk9Co?>p8zS)ncZZW~Mf^J!zG~ z#-?dx`b{C+u=r(Qbzk(Xo{2+11ks-L+ya5avzZTpR4ioOy6KS-l!fD6x^LL*CeaC9 zL}-mktVHaIPlU{@NWi?eJ$I>uJ>IVNMD!0?%Q(J*Ju)KdTzcdF{0!QsD_f;9=^sB$ zo&UH$D?N0SgT4T6lAGC;oj-5R{N2tYM*M>0dT+Lh3&6K%XlPY49nSr&WXBBj8jPsil+PMyM(4AcxqVqgY zSiSq~s8TCKS1$F@R%w-;o>Z=|-yyTZG^I%Ny=W(! zABYC&&xp)8lhuN9H5f%>!Q+V3T8{f9S$HTPyPQ1wYK=Q4?>33i46niIoK~g1Ub!S` zjHzWOeGyb@ljS$zH)>_AjNb)1fA3qjsSCfwIZP@AE?LoKenuZl`7O)#itRmpR{ESc zeutptcEfpZ=n3Vk@l0rKjj}@qMmq=?}3M$GQ z>yv{o@*tlC@z(AJK|6KMV{7TK^{c*Y>Am!!Nl7VV%ACVec3ty_W38UV5X{3?kI@5d zeI99NtlaKBMz)5!FO>>gLGnuu%3pgI>Kxy^^VuG%{zSL&dKU&N6)dD9*<>1%`|V~N zro%)1y#vOluHw0dP1#e)r88I(-<7aR;7naO8`dAGyAhA7eLXVDZC42|4ThXmRmlho!UwM6^fP7Im&LZ`_>DJL;g$`H|X$>3jp^< z)J>HS`F^Vjp{_*g7l&ntG{cw^ZDI0#FCf(iJVaf`)51OmK`jEw#>oaLvNddRQZenP zAFG}`3w*hYyOeX(q8mfsCul2v*xA)+BHqR)`cLJ5V4ej=a2bCQlRz)NeA(`yE)H4w zqbPSHSgwX72-9D&De;lsr7+vFv5QDH=oxfqztwqHhegr{X(p|4z+xZrUc4>5k~c3% zzQt}hEnu6l^U*?CmfaK>+)6WI_+=*Gt4{XX3U@Xh9^o*v0NkKcH|r>g1r)S{YvWqz=9vmIlm?vPp(hUtK5BFsfA#1 z>USVfw%x+?!CN-z9BPW}3g2A?a`W!N8TlqNQ2lpC`vrp#(N40Ew@%XHv8cJ6Rj^Ck z#u!TTOq#t*UQObS^~YR|T*j<|nGSstCXdqum?C~%_U#@4E))MsmytoGwqZajxWLFXkgG-A8nfdulz4w~!-Mu1{n9 zTzNY6sa#s$d5EhmJ)|JhAkDn6{RUqk{`8j>7>2E(8-PNOZz5uXl z=xZmwM`AW>wlF!Zjp{IpyBMo?z8|h&%`Sie=Qw`K`q1vr3`BkrI;kCneAmO-3Qy@? z>%9-3&4~$OlFYV&7+Z=G?mS#=#^r`Tm307&tGvKd(VYM4n16Um9E1Evt_-16Mx-JU zsVK-L65ymnal&Dosmgx<0Dwcn|1tdQDjCh0jN}X@1OQyWB+gJY0uTL{#|a_Hm$nE> z!pl)`wm5t$3W3AGK{)1*TNH#6$(aoMGa{N3LkPJXSDBL%hr9$|8sZWD;nDvDhK8j5 zH-)3i(h~fCEG_*-aKmxA6%UtXq5u3}@h8W^m33{yz92-9UT;(C3jdX2;XlQT9y{-c z+kcY~hHKZdxVDHd;P)3XT%XI38TqDXLVFx2$>?~=pXav zkhOG#4MZCjfDG3h%Q`ftQrK*C!{sYJ+rpdEPRXrjy{Q{?`KKzCB}Y`!d2@m>iZSM) z#%ivL(9@ZeCvoy8Q95ayNEHFy0{xDZ=phOr%jc_)=JaNPIQ*_~wcHlGYP56S4UxUr zvxfM!Ac+3m&+<;lTsAz7yMUEqWA=;|N$@+w@SJ_`VH)gY*5ut?V}G^xNw$!u>Q6KDSEK#NnZdMEl8~ zCz$NXo2^k;9X8ed9{wF8zDkKxvCl6p`5MA5fL@!S>mAvov>cOf)4^2{ujRA_&b^vM zPoskml{QYa(_Dd3M~$Kfl*(P!btwi?;Lz1x@Dk?`De?YjzOjxBzbP~30X{tbc#zId z*IGw{VIY|-NDz@EdhVsGzkmPRjDTW0$u&4zTY}#6_<}dY=#VzERW{`xMmAkDVjSoj z0q?$vvM(xEOq=p6v@JJ1Yk7p|V403qSa046YVCSW+xD$vNu}>6aHk4e5TGu)0hz5b zNKgkM@YHgklhO{(;h4BKSV`crd%vR8Of6(XMIldtm~u{vnUwy;v>03&@L0(WHB_ZM z3-S@4^G+2@m3&?k3mQsy;YWgoh5~N{a@3|Kp2wLbm(KZ!U>?mT_Ngmk{6vaJ`I#0o z+-Npp)rhWG=q+mfM$``HDsZD`V!p~hL0!j0t2GJ|b@Zkl{}}f&zR$aD-PBi#YD!_U zktj?@V548TDJTXyynmzXbJvhP@qD?ye03$1h&U(C<#srsRRkJrPy`{YkHnK;BOuk0 zZ}%OOFHNjmE_KX$E^M~00HTe@6^fX&p8_MHjveAF42L9N@g+!;SP4mrc1hl@#z zt3v4!yM3E972b8fUca9Ya;4m68}1DK+of(XHztg|ZM|*%SjZS@FjGeFUSSg<0nk{2 zVnSf)>1H=lW)rK-)C+^cqUx`Fd#qE?D6t(A&9ltSO(_EAc(J*xk-E*w7(|6uNy$}s zP?vfoNNV&9neq(1TSyh#;dJJG#v+G)e{- zLkKudVA@V547#?jc3oWe{+Y*wlJ!x1~?J9H_EqYW|=yzN6FsB!2wSvA46ZEV1i3_~$UzIib z_MAHaCIcn4pixy$VrS|{jf87HcPeBlTJYF*R)*u1#a*ezur0*Mh0!GYk`+tuB=@s% zkZEv9$xQq6sM$9SG_t(8|C&`EUo-n2ekF?m=tpn%9x}%BOomiP>_ZPUlv~svW&>62 z>@f2{V}&-aX1)ue|f^jH4`LhWbD6mZHj?Z^y$_F*zmVTVmfeEn8l zECY9vH?TinIn4jW@O%`%70!bnx<3g=w(}%&`(ccVxq$GwV6sDT-M1Q?orwosa+C-{ zDr3-ayqhteYS{I9b`OfM+yn^%?Jv1I*5oYVhX`Io@p3_%SQ*E+Cm*wOP`-C?=eUUd zJiPKDc95Nf$ih4PhWRA&o1`vF?Q|ab-E$}8hM}dI5p42= zG_0dY%5-AuFDnyB*23+_@z~L)UZ20d+tGn*6BOP484$GoVC@13DC+m&aP1&mjvKyT zZGf3A0MkA}$8m_3IxVq1C$NhZs-@kz+oS5V>*I6*g!*!~FpoFG@Qz2{FHq^E)gxl+Btrq@C<`8+>618@ zFzQl&j+w`pL5u!8Y#Gkfei@_Y!tS?O*B+&KO_ I`Ni!20@5|3n*aa+ literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/neb_spin_k.tex b/doc/src/Eqs/neb_spin_k.tex new file mode 100644 index 0000000000..f0ce8e180e --- /dev/null +++ b/doc/src/Eqs/neb_spin_k.tex @@ -0,0 +1,16 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \vec{k}_i = + \frac{\vec{m}_i^I \times \vec{m}_i^F}{\left|\vec{m}_i^I + \times \vec{m}_i^F\right|} + %&{\rm ~if~}& \vec{m}_i^I \times \vec{m}_i^F + , \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Eqs/neb_spin_rodrigues_formula.jpg b/doc/src/Eqs/neb_spin_rodrigues_formula.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66070f7bc5b8050ec71d8947d3f2da3ec4e8ed38 GIT binary patch literal 20271 zcmb@t1$11!vL@PQ<~Fn4W@ct)W@d^RVu+cU9dpdgY{$&Z?3f{TVrI^B{(H~4GwZII zd8F3bU6QIkm3C{ZtF%jhR{!h(P-P`$BmrO_i5`p|0Qj>35CcGfga6GR3GyRD!9qbn zLPEjAz(B(y!XqLgz#||aA)})rA)_H9AfRHQqG13rF)YGu#H{_<%J21 zk$kWMAmJ$81C+CcCQ?CKbh&Wp!*RDBIxU0@Nl)AQg#FTl}O_ad|24)O^y9JWAGu#)@&yXEf!Na8Ze$fe3r>UK)(V00sEPr8avHlaU*s7x|y%q)wf_r`HAo=qRfq+`?2>3u=k7NhJ9Tz_3Dk z4W?N_JC+(gCo6ToT!ud-N&)-CSfMmDo-RDtqC<#`2{fx+7`*k7u0cF2P7)_;m~K3H zrZtr|OR^>T_^v2ZaoZhBp#`&=Gq0?SK8@7zLUu*)aa+n>gE!{l2Rdn5Q$T)&(iu#Z~JU=FjnK}6rOJVj(9QZ5> z8$X~m85-R_jNLW!i9lE6X>l`#`wi01nH{{_18*z~(`8RTuCeopW#5cD>SS0iZh?^F zhL~hZy)rX_6rS|hR=8iGZaB`>kQ+hd+HAPQYUs-i6CfW0y4&KAyBoWJq#+oOQ*CsY ztx+5le-evN6O^Ra#gmMD1v~sp#zL8~Xux`O*b=wyT*(K2x`CyC1^NLJ@ z&U8shwqSOhT#6tU6AD4&H?u4-lbWkZJS@VQ%fl!Vq4Z1)7sk@@H?*8} z!nvSw9R?_;Olr$K%aAd4^RON76c?v#NRw%WAe@@ykVFEDl1X<07_Z*XL4ag_>4Cgy zq=drckbEu5sCM8eK1HlsoUH4~q4-jh{4$`@n387CT~tzjkj?B)Iq^^2dKff zSEsN(0s!DRhxEpO+y9d!&Q_Wm^1SC)GW`Vch;kyzlt)Z8`vLnj_(q^Su{-Mi?PD!s zLIr?9f`k2CMIoU6k%a<>fP@Bs!Jq;$(Xp7(Fi0raIkCBfNy%80oj#T+*pI~v3<~@Y zU|fmVp$o`Tjc@i^u0+f4=$bUav6!u1*UURJX4*VbMe^lP$?pBy>tv4NyM6Y6zPE!- zU6=HP2T;j1ssF2}wa^tN#a=-`W3!pvmGc2xEh#paS!7{+wSA*T{rMESKw!J3P~b?y zbZ3bEW*lXl6`f$In3M^N_9JM_mcVJj96fe<)Iu04CaVF0E)7zL^t53Q=aIkR5J&Tk zCeR~9cs`%G{To69o*93Lez-|A^R&?)fM)&C1S4sDpOsXL*5&m?idoGcz=FmL>r_Ir zv3)ddkORzMrL5ACaR;Pi^uu?r19F7e>Nod!n+UP&AXysDcQdG2GIpb`jk{z^7mk7n zV~2KdrLD7pG#N|K+xZV3^E5NWEs~(GjO1*E#k`{4qVx?R(u&f@%^T``f{AcphwpOE z3{;~MW6Ro3R8|y8S551)+o*s(E{HviVyc3)lwFYoS=LMqUtL^LT=YH@@;#Boqf-Uh z76{>jcUxVxP-qeAaT|?0YYSL&IcT6W<&#uFY7s@G{Ma(3xqDaqR6M@7uEuw@ZsiAq zN||XzpK}<{%RQx3udzOz^%4ezK2u?D2bQn1gw`PsJBl2bc`%$JQU2X)xnHgCUFpiQ zvvr|ifAL;u^qicmQ<+LJ3wypF*c?+U{4CB5G#&yD%{>K;wt zS)}Z|d#g&3owsHcR1zWuw|Dr;bK5hXX^a62*oyFXu%EhOXDSv9E#5I?uhBv(4o|-; zntv(LY3;^V55ILQr3YSm&MfgOENit?ZD(C)#71hS7Sl<~p=YF4Ik;J+rP|nFUF3G$ z-P!%>;~qcYHZ96w3H@=YMbG#%sNJISE>1*sKCaaj8LAcrXVt`_6r|lv8{F0ms-}BQ zX)09P879XCj^9LT5k@$@8)eJb5%JCw+eXvaH_o4r>(y!o)fjufFphV)sB8B@jK(Yu z<65+x-MTKdyvS*Kq*a|UXft4B#eVfr-Slq4bcI-1^UzpGDj0?(98P%AtqfaHNfLN+ zYS#K$qmWP;T769?1`;jSwv>;TYYx2H0k7k(dwU=#PrdgL^@x;QV^oG~SbBokm)|y| z)x0wtTV@d>=5U0)^j>PBw>_YvE?{L#{o3>Cw~+$Yw|vvbImMb5(WL!SMBuFR$#yxn zxSPvtlkYE07!***`F~f5NM6#4dC5)vv$wNqYsGDKTl(U6ZDJw-9Yi!95~3F9T3A}G z(#@HErb^>s?+N8Udy=)XtZI~zBy1Ezw^kw+Tc<%QV1cU%T592uqe6{giT4WZ<4i=- z^F4yWb4O{-*6Ha);raHM?YMEc;j<(aEfnl(`5t&Jo|a#K!OU~P%$*fMQOPjU)oN56 zU@^Ot2qmcvm{9mN;)J{*GP%*2s?}Mw0RtJ;2Ikr5?@1VEHV2JBFsf1*F~WdoErD{- zA~h8Aps1<2R`ZjN?$e4BuKL6QK9ZnFAVfh0?3IO^7E{(sDO;NKy*nDqmxvt=slm14 z)J0M5VjH;Hbt#>>G-%W==i^eDWkUPqC)QVLrw&hS!!N|mLHqW_MaIqcajGX{FW1Q3 z*QCRHVZa@;^3C8RDb$N=ehc+gKIk@oZIq4xp97d zHaE+us9m-@G7HHU; zVyIQ=?8vq78f1~qS6VpdNt~KkJ{0|qn(MLOuPf{>3^oN(XuC-)>jo2s{-kZ~u_N_% zCaC66`PCYLW_SB|u(<%TuO0ZDAB+~*AFHhqZzdyMt?<7d!qkP#3TC0-205t;OdSyO zSVLI066?3o1J=tcZ|Ezx(nEBr-ga|B7k5Bu{xGNM4^H={xBU2~0s7bwPI8~DS;_CY zN+Y^r$5&35+>aIQo^4*$HoVhJD-Kj2zj=}424TH$^$^K`m58%gmV!}|*{8K^Rrb9v z`utZ;H)5t#UZZ`R9BKvV);UU}g=1HP_A4`6RxP}xI@`_QMEfLaWGaVaIcj@v9((p7 z>*%6u_949$Ln$EHRD%&XP!?iZ;zG*Z4~S{C6(_{bHw0|)3eg;ye4?+XWRM0H>ls6< zz1z+A2p09cT%#~#C0(8g_AI%9#wp(g9gPg&pa6JmsXu82l=VTe_#=M+mD=qnvh1ex z=X=haxD4cZv7h;KJ%+$rvG~r$O@+B#qU9rgJO)cKQzEY4@+=fb**^j`p3sFL1Dp=A zGSJ$upyQ0?ahs1_ONAhQF@x)6d_GnOlFP(^vwtoXj#FfRxTLPU2D$7DIQ4~K z1r&goGw9hg0+H(X3K8UPNs`Q!%3~;dpY!@Y{f_UWxB=f_B+KA&5y>fpsh{wxq7`-m zUU5`sT2wcVFtqPp>zCvW74|x}2}r?vGelQucJ+9S0RgVe7Pf%Th!8=3Yzm}dMOtR< z{7yInMelYMz2`fzaU78SVob4`q?9rwPVx-y5pnsj3pP;4_;yjQ@>UiEiZ;igkGIU{azK5B3l1|mg-0gzhC_9h6&wVLM*J}6@fvf<491EF8{SzBLj-Yl zp(%^JW9TeKe6fBXt-oFn`eC-~+|;pY_ZxGo^&}e36dw)M#CZ5t{12d4qYIg5#b){8 zYRXEL^s4ZMY#7l|T_GUY6*qn|88h-q*o~skysbZoXai?LugFpLef*WpJGPJb-kZIGK!D zZZq@O-$VN^H}D@53y}AZA@$)Q3V~q}|8F?J|IML>3IGTDu*@J~;NfAR{+eokOK1Qn zbPQ4!6;v`26CkUqb6{dVGzmE~8@s4!eIJNJ%q1zge{TL#T+J*frD699lT+B$jY3)7 zDLABY;6H6SXrT{V?nI_MH`j}1(cmD22JUBj{|q68JSuOv43#oO@Pz-HeiDd5`4=OZ zoWb|j{de8kH|{@xXrLUHijIu>61*y>xqTZEt2VkbegjTM3VQ62PdB@qj)JN&2&u`o z*l{BEQh#1aW>g&jcZcx@&^-p!!L(3if;00x-TJ|w8Zrybn&<*f_oWiGYb2wxO|eDSalu^Xd9u3W(vJ~+mIP9DawIQ;|ASCPg9 z6J>BY{Kc1Gqx1UoA!!BP5l*_bZ5e9-xMWW>V2?hQmvz$CO;Hg=83)EDfzR?JESQEB zRjr{~c+|)QeH8xNw+G$YdP!fzOoPoyQChHdEy&BI|IiM~T*E?6*Argb+bLC&f`hsk zOV1JF>kv{=G~sLEr!PlL3pf=M>Vf>UHC-l`Q9e>x;Zp5Y>5f|8`YDVmdQNKdtt*x^ zXa((9FCDD?S~o7#7;M{yT%#i#d$uz1IJ8i;m*jt7B%xH_`wW=4PT;1J&*5q2TS(dG z`6T;pO{yIH#*ky5YntvokCX!c@)K>b17>3QWYu%d*YECUfJhrZ>|>~DiOr!20W%XW z!M&*v++1s`k=5SzcO(@pR<-_4gQ+k^Znr9TO!%bkyZGpD!rNiqI`d8?Q$>%ZiHBFe zhU6E<`?-w`S$R$e{V)n09lB?RdOmj+jZMJ`qT{CdmR$+&f1*FbP?rHkBPy5IdkCca z!%$PUs#){4UJT?w<3(gy@gog$9lp2yFY3Dxl+={;%Ckfpdfiygsp5#>BbK%GbrRbM zpp-EscVOhlemb35g%v8<*$;^=JfUcd}a+iJaep4S|iTfJ-oFhG7ZKjTkY| zmlx?)MV|9ruLtw)Yke4&#m&a&Rv-}9&5$sY-$zo}I}vN!3%_AycLd!ox!=x~*iKE^ zpZX8r`ySLN_U;#`+S0HB5O3J3KBB$_ySXb`j6yoj4l6kdbP&aSU7W|6!+T6kIH9L&J>%86F%u=j1l#T+VN+wS6c|;VGk2u8Qt*mM|1zAY65EfZ6cN94q8Z;xN+v2rtv~H;msZowDc2BcP zskhSIyLn3JXK|kc9oo%Ckr(C}g?kWojhKsq3a$D|lZ5}_wvT^lQ{9@RQ{1sxamuacNs{TmNx9wH8bP)SPk=7OdL8no-C)MK0%y7_f zH#|-P1wWR)w8^xGDkFL#b*5g`Gd=F{?VDBS^a^pwiyWD;2cL$d3|qP_t^6yH zg5q{#k~yPy2G4COs-MI+?Veg+g*W6Ajlx=5z@T^TW3bGO`4r*8)Kic@CI}RHS>z9A z4JSninl`>ZoJm_H-EXu;Pyznd+tgcrGoBI;ag&yJORNDY%oGH2LmBbfCj>J418A0O zDU!K({uy&zm_o}!%jc)Z6Li>>N*V7k+|T<5Gv6ZqTls-6%~{rNY3#xO>qcOC(6+~W z#zDY(jVVd+&BhZIa8boGAy4l{pcK>Hz8^MINqNwC@+JWts3q8@@abmO%px( zg5Nl;OmrC|9RwY5VhYLRkQ+P(Cr1!fNyUGP3- z5X#pN+FQ2V8BrcRw9+e2eN`KgGo+mrz9iA?er0zl7>#3ZU~VH%zj~#o(}X93e_I!D)I@?_xva-p z9dRu5F@giRG`TLw$Kt@aqKm#g##YemK)a8GW$0^Gk$03hLl@$m% zZbl;wV7kZtGrM}jV*dc(%QH&K%lGR~Z=1uBCoV3=E6QoHGILY!8}$usvbx%`F1I6T zV=xv^TKm*WO8K6Q@zMMS<`@{%MYTa#v`*HIX=xQ{+kwj!zifmW9c#BYLZ@9*o0V>D z1?gmad>(Fpu7$dhOgKX^b{%5vfOpocIBL-=FaG4LsbsEBQ*n>c`p_ zM)KTYYkXQ#okn^pZi6`X_zyszIZ3i_-?>~zp^p%=S!$%L zCQa1W0QC>xu=Gg}&CmLH>g;36`#0kH=PLaHn3*w>$A|dMh)wZFBT6$)AN87DbrJs# z6T+W+Z!@NzIvx|+K#r=|fshWGD?c-9Gew+WmZ+JuQ&s@o#7d5Ms*LL4epe(7r%9|; zK;(po$Mt&4AZOD`%8jWWL!um7!9w7BZwtJFF*+{3&vNPVb~&0bd$Q1I66*aLL)LsFqr z|Me(6e?r(Y+lBxx=S@e+w0+4Z5?VkL*I__q8A&AV2yLWyW&#d9=^j5i%eYMLp9+*b0gndWVQ>15 zG2OB`cPL8uGX8YZ-9kWR|1hP^P;upmfOem`XGP+ZUC%nudP%U!`_kKDSz(zBsGy+9SH+%w6nnM7}YI z%>`$OWXSN_5smcir{IY6;3IFP%?kUt%QDDWMf*-_S#I2AcwbFOHk@_y?AK66He9SAu&?A27l3me|MFIj@MI* z0deTq*5au|nk*)KF@zXW737Lsol zv38FgO$Jk0!Ph;>9;Y{>_{N3}GNzUas} zyAzxrgJor)){#SEOivy4+Ad(aiIp{QxhPhh(xB?it>Es&?pMrlMz|pI<1WoBa4#z^ zGWqZ&9OdHCm}WHp0M2($%&RYHXo16V1a#ZK9`@jUtCCL>80XbI9ByW1en3-}omNz) zncVws;uQz+;AfF=Pr??5pea$lrC%$uhS_TC#1e=n<6J{?NGSpBr<9Qcx!+^e2u4;M zd%#jQrQ5jK=U$sXje!ULe(7q{9p`?}vf;KfQ>P^>NsC7G{ zA$whogFjpW%lHpK>4ocg^R0^qOSWghw$I0l{PUR)3#fJ}3PkS{Fl1>({rIWB{E+JV z+npKh#LQH~@hhX^{ps5`2U>lG{5Uf_fma`Aq2e-cW>;!98md^c)kl7pU|6nwla2rB zR;-ri2r~fXcZhbQK8+WI;hLAlV7dLObC`1;-De%QvGj78fzb_!b8K+2cWhmYciDcM zwA{W&X8ra8fxG>V{s-_{M@2kWVV3@U_OQd6RgMjV`$lLW?zTi$X$@Ijs`_abS@4tj zOs%Gl6kVm}yWA(O3Z~7O9)z!lsVs{}so!8=Lz}I8usKg5{KzBi2~bH?{J?~V3{9|1 z7|bW~dB)E6EW+K4cMpFO-jHV4}nxnId`99_gT9pTkryuAAj@*CS>R zzB9wZ50^BP{NkUt{?ZRyHT#$LZA_ld`t(eKU{;}_?1|94<6G+jlKRT>KgNU@x$%lzFGz7R^asA@Ilw+m|H zjqK{z0h2Ih$Ob$Izq@Qs%mQ+6%pOc=>5kSU&+Qd^j;Bhxg}m@R3^ z7n|8#_IOa1q}zs>v$R2P#E}*jD`cZFrs~5Fqf4nZuHlj<g6(3b`Raz%P4c1**YU!D))AQL50?Fh08#sox=S_|=BDELNSw5~SnIYoZ{D{jlsIYQSBZCV*y zf(zb9N*qHDevBS6JtI8Q&j3Y91AYdd; zULVe1#}!@lWnO}I%Pb(pM;EFNQcYHwnEU7U2r|w5uvmqZCH=Wq8s9YM_52uUAS70e zVI-?MBEKR`rXbc0k^^0L^UeM}TMmg{RSX!RoL82#eE!?vCI)v16y!RrqQO{eSf!yX zv!{S7cYWZDDIlfU5`C$&kj(h|St1Urq$NvzM^Bf>K&*QeS5HN1hde~gJ)ZC8VxSp{ zT1L+~G19U%d)Jn>XhBNO>o9I3cfkGihc5(%meS%^wz8x;iG$$R7jKHPj3x>6ua*J< zrlqW93Ya?C!^J6A8iHic-P>N-T7o&Ty1nQl{^}g>+g_@rl``4Xi73Vyp0!1e$3$py zp!?nCiq!7qUT^Uo=YHP=en+gMXwFeQ9m<$t zRlJEjdOVV(A@fRi#EC1guQs1^jIAiPVfPB$JQ+mNQ*6e^Ki1mq`Hc9fIH|(c z|Km^ICA{ro`=nO`Ox*$CVOp%Dnar(1M%2f8WhA{FUQ`{T0O4Vh8}?Pax^4WYn%+XN zw#yxpuPz56_Ujgog;;*I1!q^ih!nyXWI4qJbw$t4B$Ohb$LD7oazb1Ee2@8DSFWh; zz@CC6mgVAcY zwCG4v$`gu4^_a1dLRO_jaFP%fw~0k8(+ybckYfe&j67^&_(gpaGL zuPFE!%UeE5{K_i*+Ym_$O-mTLOrYQsqIbdWNLxyKH1XoKcw?OM$qEb!O)Hji3w{ly zi0;}}ls^E>P|M=*UGKqYy{RZ1LJx;ThJ~^7hsHq}u(_1f{Q*=lva)D~_#KTeCG-eH z??Od>yrop+m$KgN6@E=|HSE7$d?EHS2*nB!F!^DJ&A!rMl@z3^66%eYE4yuXymTFD zWC&yag2W&}cU0N_xgC)&m%x?gK(BbMl${&XU*p%AqUy;GQ4gj8dYXECRW#CpQPpji zVBbF;?T~?dh<1JmSk-qD!sQoFAjFk1)zT2NuTsI%yXhaooURS= zBKDCUiN=`0TvFb!14^X5Ue-&vR_+o>ZOyan4cd_K}g3?(Uxh>8iSb0A4#{v~sLpYYtSveVVS;*Nw!{{WVFC>{eKp*oH^;!uVA zA)I}_9X6d*5Ss^Yp5Vt{#sETGuuM~OfYe`AY*-w}L9o+0F{~|%Hu={r#AHG@6{vX< zRmno$pHATED+9#^z#=sQ7D-g6<9rc013Ig=uugDg^sj|SJEZFzUQLbbVp%i-?J2|L zH>*OJv@r0zYd!Y>Pql^qHUaxU(b2qg^cQun#X-2Vk-aoQ)$?)UpuHVPo>l)^{M`z>ay=8^_0u3{1@lvlN?M62{t87zD_hA_>`|N@a=S z^LlzP`hSBD8(4Z!U9Ka+|yXvO(!Tm^!>oY`ZWd!R=?~j3ZLfb zdl0wI;-- zc7|4c^aBYO;dqvky+Hg|qY$gDR6{p@=@oD zz~llCs9)TsGw}r37RZ$-9!kjoft}obcp}h6N;%%!t8tDXE3v zF;>0|$Om(6fOVL&Wt(g-4eo0xi?V!FXz-Z;-gQhG<`mnNfq+z0mph6`i5Nk1B3l)n z7^E{Q(f5vpszHHj&)}~}`*Sov0~4}7UPZU#u)%u1U;|D%0W`)oc#6HMCv=kb?|%n5 ze~ZP|GRH;NS`1kQT}=!x#y59Fh&z(177y~!jY0z$(?3F#Nao62D2jtYcsjju7?)|l zigbilAhxEcBa*Tb)3SovVl)3IEhrEOvEV+bSZ7PlQd(amn5p1&f5L9s%eIXpSb528 z>H|lN5M_@R`JV6+k0KHM#niTken2o%4J>bLRb)eTJRnl}WuYXT8x4vanzOcIqa-=e z;p?yJw~Vp=(R7}|^&?3!R}epOfG<_J;DYe#JSY|sLN)=@6qzi(RbB}Q<77>OCn~;G zEDs$_Wdh?Uk{gu5m7!mqEB8tWo z$U_S~Iflhsm&qy)wH5p(?~z0oB;rqMr^?cw)Q8y@GAz5goP;2v&qXt4Y>9RLsg^>| z^1)gbb`KjiT9cVG&vGd`wb~;)PILATpmAMdN#db;5_dX**Awn2O-_-I4uqh7ajZnH0Jx~th77I7!I{xOO-Dc?vCb5#tIcj zAqV+!PX|Je7bCV(-ZGE-mdHj?iH^}tuf*UhZBNCTqN|r=B4}u$>BWf*+=OG&o}ENx zDCVN4?UfC!xe=31+NH3=7((QTGD`d)R)yB`y^EcZa_{W3HuI^;BlO7_w0qYBvosks zo7Z~|)WD6mZZ{{($x?nZ=g>*BDAM-C!u0%w`-yib}E6 zwVk$sd;N?C{zpyt0R}z@M`A;GyuCBQW$1%?^~7HbR1@LIgLGf~?}Olj^cxlSWG;*x z-)Au=6C%+TkBhC;$M3+Nt2=CwnQ+~X((4lXmP$M74N`xNLlw{_>E=)_xz!y#m}dc~NR)6S6cw9z(y9FeoZ!a?NJ;6;l#CmPojq zjqZ5hY&Mf$Z7}w-oea0=7H^KAxE%{tj2*{4PNq*9wRxqw7LFY6U5=;dPW+(gYerc_ zbF=UnY_BmAa)2C~!=RsG%~*mix!SOL{4q?y*PWWz9k8fS3LU=i)OWWag_~K@A!2fQ z0M9M<&K;s<89KX6Yo1H7R-5NK4cwPo5BZ=uyj<2Ie_;V&57g(M07P{f+OZ$}wKs)B zL6PF&t5%Y~#Jx$P?mJPm<_ge8TyLYea1k#@n8CI>GuBx*DFx0K4^UqL4E-;v8ESptxyOuR77pb`m0z1lQ;`vWL}6TFsdJdO+_9~*#$$6~+2gY( z&gazh)$Iic7p{|86u8ykKs=$_b`jR0*M#yEGIvDz`=#Z~aX-=A%z{bP%l0a3jIK9P zvc)?cU#CRbE5fB9Nfr~1s(JkZu)|qd`kawscLaGAx&hYxD0o0|GLXGc5$2LIzs>>? z)6SunJX8#(ZL4{mOuJ#Rz>nSDx(t#@nj}kO%86%DB$)aPo_ZlL;bj{>qtLycKxX~S z6N?g*Ob56gGxZ&x1*E#sOyPzus=X{@idPgUH7hbA2ZT5~V6Uf)=fVOXL|pJ`GH&1S zRPI@1{f2Eagq}1GX@Kk57}R*N`0dFFqlYlR6($P0syG#+*^6}0q+jr~s7t(lIm1(& zs+)%*hB449cKI-Cf4s|Nj3#g~IbB)&*r#J2Z!4xpvwi+{9Rq*_3ohZSyM4}$;W_zH z?)s!g%cLxc3>`?*%5)5!ViC#>@8!ep!zYgBCnx})E_@*SA=O>_S{V2hU2VU>iSH^+ zESq2mpCqGQ-ed4yHYL287A6g^me(caM(5$X^18*Hb?l8Go{9YLya{~6oeY~1v>>=N z4-e$KhN?T#cF|lr!c}iy1@zPPvn|FRZ_YmeXpN3z3@TgxBXvDS`$_EiDx8tvp){8_LPyMkug;PtQ!tbFi5U=?J# zn%yemFWR(yNy_e@A_i|TE@ZNcDCjNd^mY~Oj2_i8axI;KsuKL`!F)7u7g|tQ>2;@c)dzPM$7T}b22fBm_;ntp0uFevlM0?qt_KTcVZVs#jbRE zEdNwqvQMztNMUuYVpC+Er7k0FJfE_;8D5LR16#3c_y*o%T| zXf!=-bCtcIgANLFva+3*V+SS{^me1^HS$h5+=AEq&SR&YW>DrNG&!OAO`VT0QH0t3 zSa1kQ_GMt34So9$;67%p) zM+K`K*12nT!b9rXsny3k8J-`w^xr2lC0%TZj5kmDm$_uIx88I_bvyTWOs*s#*L3PV z^m&TX)I@PWJ?8uvqQlDi~0%apqj z@4lLYD?utjti)TG#~#*q=OKrLpe01`(q}wTbUB%aIwCEmKOlb^GPFGzW@ij2c>I-G z0d_pBs5cKOleD<(L?wjmi|muXE!QcMIeke4dTRFPq7d!gzB93{bGJ5vc07#EN`_YT|HanHBy>cnbW984nTIG%zY`Ii$Is_goSnBOhRD`x6e>qRjb7_632pNpTd9T ztx82gL+fZ6HP0_#aN~Af8_-&K&-;z!;XpR<&Z2@Dvmbjxg8HmU zJCHth;i^PFUx|~thBV|-d5VuJ$;r#_SYCe#pl%UG$;V>qmm>^1`_;3MC30+fD9!12mMd|U*cc%NBv(~ z8k8Un2!Q(#0R@PF5&)nN9snE&9Tor%_=}JL2MQ2|43YtW!$E%3d=P(OMIce7NrGfZ z(Es)YLKg-FNPkFu6hR5FBnhw}aA`;YEMyWGAV>uCah3}GLkGBzz90i+K2DxNesmfH z2Lk`A9%Rx7tjGrf037x&au6&i=|hJPG-&`j;2#9Ak1Gkd3?ShHT!tjzLm%nCP~bA4 z5Bv{>!KEQTaDqetA8e>_puauBeTQc7WBUfNd6nLjQW2JS^f_WTGWrDV&LH5ALq+Hj_Ljl zf&P!}9aI$)=8s5alKj3);W=fe`rUu;?tDaDEHR_xhE(8)ol_DKyrudu03oG&uE)_- zz$BpjAo?WT1?bA_GFSE6>=&JfY^2L&6lm`BpwKxa7P)Gt(JH`9b(IO^40~>hVh0Ej zgu|HazE`6JrJ%Tw&>7A>lK`Jp2kLM9 z>I}Z&MElyOiQ$8#s(%};bi*Rnz`vxe+hb^`4DiSph-Bsr<`}MZ#MxmPq9L)Tk>s0t zUx6=SIMsp7e5TOLt9vfn4%7%ovrpBBXqqNQZ9f@r`HX$>4RfTAsh3z12TgcUFkoV& zGQbsAJlR-1S1Vwt(fyw!F-I zoXdNXZ|;n1V@wadva=Csi?A|1Xig++GLm8AkU*{TZdAMqx1>MLBnZW$&LC7(Mt#jz zI&#YBy4)?|$1etXkEK3JZx%@Y%9m!A&Km@)00s9d8*6Wd9JybUiGBGs5SCO;!m~}N z4bDcCdczSyn_1Hn7%GaGnEfN8B*j=>1(8I(3$3Y%WrH;1h}fsnv=71&=>98S`m=01jCg33LD~Opf7s zelhAMR$NOE>|(`&gvj_P!EW{_11Oa%AV>}Qht;-6{l^R9!lz!l{@?a)p1@C-A@85~ zh}b6i6Y6@SQY1WSJXk{*n<9&a5kWP;Z`YNxuggrJZe5q?g)urveYr2X#wT@(Z4U zcNE$>gA0iU367&mI=+8n=tW<~a+@5HEx9$?OBM zwvHqoiw1jX1Y+J^}z|x)Fsb% z7Q4$&E*Ts`VMqP4GBA0quXW3;^P;jy@nfO;q&lEG^Jr|L+2=>7lza(TLDSw`Vs}x+ zx!-~V@NJIn=9ldFOD2LryRs?WWrm8(e7(X%Xgn+lmzRnfZa7ExSbnK2LtvWFxX>zt zhayzdINw5~^AyM&j{enGC!l}|?~=h7Ris|A%3l!(z1kVx6eGYDc(Gihstm|Ptf~!F zo~@fuT#zz+#}pGCVBk|A^m+V3g>NB4+@SPMAb>^d=ETG_k~SH=^C~Sh)@QvF5$LDp zpZb-cH8AUe8fIJ2K@myoO{r7AD9_oY6lLJGwP*C!4fAZU175}r4>s*Cgag*&HFHEV zpF=iA+AV3WHuy`GB@&D@;bSGU^z3Ft!I!aP(**ZdgUCn#VN;#oafm&D$ZkqZng}Lw;7}D-3tJ) z!x*B%rg#xl9VSE-H2H^30ffC1CipsD5fgJ z{Y0>&mrLLL=RN1F?G$`yap2{E*8b&`DdOUe* zc7uC$xZYcOgLV#9=>Rk-JyUU`$!x?dH1jdAkIf0^fJ`QoFAg7&g1PurC*SB4M9N+% z8SAV}9a+aET&Wr7{jB1l&yEU9l>V)ukV)v7Bm97b1O_Z5pnn3zP2Fc>0Iv^e4v9tr za^0MC3WWCrWCD{?gy>EYt0TkXRo~aX5iI!zO}vr=d0_1g^NDVEVebADnD)T_P~N&h z0A$EGcl6#YhJ@%qQxKUAF}AROTTYMjTer<0K>pq34?3+MGso?`UTaz05i|c+qgEab zb)!Ik#@NZs7-Jd6*k_0kvP29sF=Wd`Mz-*wv1H5MFk>lYh-CX}EQ1&-A@x<(DBBEu zWU0)TC8?~Ht>yL3d4Ih3-~0ETbMLwL&wJ19+z&SF$?C0>x29`er&|6D_Y$(Pa82J$ zuy}o-Fqfpl%2m^<`v%I`5{pBVbJO)5Xe->wPeMlw;wVWkZ7U%HzKc0mu7P=Da=El( zQO^gh<1Z#)KZy201AFqAe!cRZWYOcg)L+1P^R)T>=q>vKOOAUQA{zejwomkzZxxpQ z>bX>F#K>T%et{)xYx~fOa#O*#0}XWS3@c?>XV$?Q^*9#snZ;!IpiMZuN>|J%I*@$! zK)~97iITqfzNA^?$$L6~CC1Q|`E<0-_+^Y5sObF2%KK;kmUyWt=Dr8vMcnR!WmzLd zW5dzIK0;{9J~K5Yuy*D2hWiro^DC_F6;VL z(Y!0}am{wieV$tCL`Wt288$b}7^QKmk`yu1L>TUH_QtRoVbyPisopsc`48!#MVJ7; zRRY(Ekj;$md3q9BG$XaEbnAD4rDjA~N@>o|&LLM1%^99{qK7B&nSV|0(-h0D{U2N) zPC`9_-;N8Y7irUZ0k42mwyP#oGNvR_&%rT-Sq;#g3HYL z)*ak0T;&ciTJZFTwK;x#YfoJBIA~G=pRln4HGV{5Q-?pW+UHy0QQIe_in;~2w&ncH zh_Qfith_Y4ZhSu@*7Cy7)8SW|!tCFaq}Sw5gg4y9+CGrCI{G-Q`)yf$Yq!sabuYH}Z|@BBm?;SQmk+-g&A3Fo)i{ z{7(=}&tE_EOd&jv1a78qxKK`rtXoghhgctc&62JyxE?+?jn4t3Q~d?p-w4Lw8XA74 z{4ElgcjDml zCiX)e2E}^v-D2Gq%tu3uRgw=)N=#b3IGX~gdwN{CNei9erdU31qWvJQp2Lwg9N@E_+Kfs1FMmM*hw-fLeIpue)Ul6KNrhe(5RHZ@K< zU!T<~lBN};`@%CRlY=Sfi`j_}+N*80n>tMxe|_B@+Pt)pt?Y0@S~B%e!p(Ne>Qc0) zkE?h%NARXVge~>s{D{>JUyUcffT+a+bq5#y44I5%YwO53^aGaUdl2^Y&D^kbI4enY zsw87L!yWUw99Fg5&{XBN*)0CF;zd}#@N#TP(35p@Yc++hLj~fEiG^O|^Y_QT;QlXa zX&ugw>SA~LMD4gi0P3*?-ae6hg9A3>Nvt!MWnD{h+M2qZSM|nga|_X3-S-%LQ!3`r zeq82WMN86E=A>i2N=6(5Q6 zi>gFxCj8hAu6-mO@i4Lg7+ghsa@STr@3T5hb@AlGQ=UEQRJ^*(7~WbT_-7jwVry#+6<=bX)$P{6iVC0!Q%k+Uy7PR#{)5s0$cLU| zF~lq5#SmYk#W*z8s1rD+0`Q4TYyc!kU565fzmVO9S=wW$zCJ`Ctdg)WbzKHe3Wwde z9u@Ru$-$j^+@_{iXDxk31pU6*J12-dTsA&?^(I560jyk)$|Ny86ytX75NU6IMwM`? zZ0Xaix4^Wrnw%4e5s(!^PR5Y{WxJ59mVNWpN-vdqtGMjJR>J_ug_R?0kE4M|*He#t zvdAb(o~H-x2HR01J``zOEAyEA$P{O3)fZ|sn)5I~Fw}3|$WKlREKbZ5Ec!(8dXp*h zw|G^H7@u{RtP0{lGLF`C_H;90Y!-<5Xm`e=m$p&m%vJP1OT0LAFgqZd!K(^G$zI>U2)b<{lL5hjyEgem1U@bbg#6OcAGra^zil*;N)=#hzn3<=};1ioO?Hm z60^X1CHURKWEkOYQn8s~BtgkhMpK{pNOOw?3-k^)y>yWP06{!G*MW0MIT6~g*68Hb z3|_x97*%^X`QhbL<+y8l?Q+Cyou^M!whg>VLei9c{i&9diV5>VP16Bqxa)pY0z-sH zFcsEHnK+ztbO)M;6TM~R_)gOFQQPxgg4FM4`0iEkCMbgBha@G&w5agxC?q3-Si&sQ zSaZ6V1v2nY>^2@%z`XUJ?<%9K$>2qOgsy#i?>-wLpDLM%8jHo-98Z$j4DHHO-AEyZ zx~t0u)Gp{xQmR9_U;xSRxi46)2zU?dT!(=-ZGp?gLo7&858<$^LCqQ0hAtUq9Nl?C zeOKD9At`U;$t0hFIiiIW+VOEf)*@mEwwg@?gA5ZKqtXoR_xRZdL!Ebn@;|w3l$W&U zM!SYsFRB(Ew(lvjM1KGMhi?-v5psO5z$~~24d~$ym7J72e8k<_(+wKNWQ-XZ9jwCE z;GqlAVap>H(Ozu==wn?gf&-{^I+ zI2J+fu{BQ5%=@&LYu}Wq*V_n3kUyUfZ~Eg@rU4wX$Cva}W}>u5-xLZ@^bMVXjt@zA zSe^Tc@wt=vH8|>ulPwGzmN^|%RR(uG6%uNXVy4Lw)=VBW26 z-RCI3r!am3QnRY;-~~MqT`#O(Tl>GE7yEFt1AV=lXcr+Mp)<+VC0Py_8kb&zA^1?* iulMl(Ejg6htkcF`;nw0ZWQ~!kwqP|rYY?6DYx-ZX9e?Qn literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/neb_spin_rodrigues_formula.tex b/doc/src/Eqs/neb_spin_rodrigues_formula.tex new file mode 100644 index 0000000000..4a8347cd79 --- /dev/null +++ b/doc/src/Eqs/neb_spin_rodrigues_formula.tex @@ -0,0 +1,16 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \vec{m}_i^{\nu} = \vec{m}_i^{I} \cos(\omega_i^{\nu}) + + (\vec{k}_i \times \vec{m}_i^{I}) \sin(\omega_i^{\nu}) + + (1.0-\cos(\omega_i^{\nu})) \vec{k}_i (\vec{k}_i\cdot + \vec{m}_i^{I}) + , \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt new file mode 100644 index 0000000000..33cb4cc2ed --- /dev/null +++ b/doc/src/neb_spin.txt @@ -0,0 +1,430 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +neb command :h3 + +[Syntax:] + +neb/spin etol ttol N1 N2 Nevery file-style arg keyword :pre + +etol = stopping tolerance for energy (energy units) :ulb,l +ttol = stopping tolerance for torque ( units) :l +N1 = max # of iterations (timesteps) to run initial NEB :l +N2 = max # of iterations (timesteps) to run barrier-climbing NEB :l +Nevery = print replica energies and reaction coordinates every this many timesteps :l +file-style = {final} or {each} or {none} :l + {final} arg = filename + filename = file with initial coords for final replica + coords for intermediate replicas are linearly interpolated + between first and last replica + {each} arg = filename + filename = unique filename for each replica (except first) + with its initial coords + {none} arg = no argument all replicas assumed to already have + their initial coords :pre +keyword = {verbose} +:ule + +[Examples:] + +neb/spin 0.1 0.0 1000 500 50 final coords.final +neb/spin 0.0 0.001 1000 500 50 each coords.initial.$i +neb/spin 0.0 0.001 1000 500 50 none verbose :pre + +[Description:] + +Perform a geodesic nudged elastic band (GNEB) calculation using multiple +replicas of a system. Two or more replicas must be used; the first +and last are the end points of the transition path. + +GNEB is a method for finding both the spin configurations and height +of the energy barrier associated with a transition state, e.g. +spins to perform a collective rotation from one energy basin to +another. +The implementation in LAMMPS follows the discussion in the +following paper: "(Bessarab)"_#Bessarab. + +Each replica runs on a partition of one or more processors. Processor +partitions are defined at run-time using the "-partition command-line +switch"_Run_options.html. Note that if you have MPI installed, you +can run a multi-replica simulation with more replicas (partitions) +than you have physical processors, e.g you can run a 10-replica +simulation on just one or two processors. You will simply not get the +performance speed-up you would see with one or more physical +processors per replica. See the "Howto replica"_Howto_replica.html +doc page for further discussion. + +NOTE: As explained below, a GNEB calculation performs a damped dynamics +minimization across all the replicas. The "spin"_min_spin.html +style minimizer has to be defined in your input script. + +When a GNEB calculation is performed, it is assumed that each replica +is running the same system, though LAMMPS does not check for this. +I.e. the simulation domain, the number of magnetic atoms, the +interaction potentials, and the starting configuration when the neb +command is issued should be the same for every replica. + +In a GNEB calculation each replica is connected to other replicas by +inter-replica nudging forces. These forces are imposed by the "fix +neb/spin"_fix_neb_spin.html command, which must be used in conjunction +with the neb command. +The group used to define the fix neb/spin command defines the +GNEB magnetic atoms which are the only ones that inter-replica springs +are applied to. +If the group does not include all magnetic atoms, then non-GNEB +magnetic atoms have no inter-replica springs and the torques they feel +and their precessional motion is computed in the usual way due only +to other magnetic atoms within their replica. +Conceptually, the non-GNEB atoms provide a background force field for +the GNEB atoms. +Their magnetic spins can be allowed to precess during the GNEB +minimization procedure. + +The initial spin configuration for each of the replicas can be +specified in different manners via the {file-style} setting, as +discussed below. Only atomic spins whose initial coordinates should +differ from the current configuration need to be specified. + +Conceptually, the initial and final configurations for the first +replica should be states on either side of an energy barrier. + +As explained below, the initial configurations of intermediate +replicas can be spin coordinates interpolated in a linear fashion +between the first and last replicas. This is often adequate for +simple transitions. For more complex transitions, it may lead to slow +convergence or even bad results if the minimum energy path (MEP, see +below) of states over the barrier cannot be correctly converged to +from such an initial path. In this case, you will want to generate +initial states for the intermediate replicas that are geometrically +closer to the MEP and read them in. + +################################################################### + +:line + +For a {file-style} setting of {final}, a filename is specified which +contains atomic and spin coordinates for zero or more atoms, in the +format described below. +For each atom that appears in the file, the new coordinates are +assigned to that atom in the final replica. Each intermediate replica +also assigns a new spin to that atom in an interpolated manner. +This is done by using the current direction of the spin at the starting +point and the read-in direction as the final point. +The angular distance between them is calculated, and the new direction +is assigned to be a fraction of the angular distance. + +NOTE: The "angular distance" between the starting and final point is +evaluated in the geodesic sense, as described in "(Bessarab)"_#Bessarab. + +NOTE: The angular interpolation between the starting and final point +is achieved using Rodrigues formula: + +:c,image(Eqs/neb_spin_rodrigues_formula.jpg) + +with m_i^I is the initial spin configuration for the spin i, +where the rotation and k_i is defined as: + +:c,image(Eqs/neb_spin_k.jpg) + +The distance between them is calculated, and the new position +is assigned to be a fraction of the distance. E.g. if there are 10 +replicas, the 2nd replica will assign a position that is 10% of the +distance along a line between the starting and final point, and the +9th replica will assign a position that is 90% of the distance along +the line. Note that for this procedure to produce consistent +coordinates across all the replicas, the current coordinates need to +be the same in all replicas. LAMMPS does not check for this, but +invalid initial configurations will likely result if it is not the +case. + +NOTE: The "distance" between the starting and final point is +calculated in a minimum-image sense for a periodic simulation box. +This means that if the two positions are on opposite sides of a box +(periodic in that dimension), the distance between them will be small, +because the periodic image of one of the atoms is close to the other. +Similarly, even if the assigned position resulting from the +interpolation is outside the periodic box, the atom will be wrapped +back into the box when the NEB calculation begins. + +For a {file-style} setting of {each}, a filename is specified which is +assumed to be unique to each replica. This can be done by using a +variable in the filename, e.g. + +variable i equal part +neb 0.0 0.001 1000 500 50 each coords.initial.$i :pre + +which in this case will substitute the partition ID (0 to N-1) for the +variable I, which is also effectively the replica ID. See the +"variable"_variable.html command for other options, such as using +world-, universe-, or uloop-style variables. + +Each replica (except the first replica) will read its file, formatted +as described below, and for any atom that appears in the file, assign +the specified coordinates to its atom. The various files do not need +to contain the same set of atoms. + +For a {file-style} setting of {none}, no filename is specified. Each +replica is assumed to already be in its initial configuration at the +time the neb command is issued. This allows each replica to define +its own configuration by reading a replica-specific data or restart or +dump file, via the "read_data"_read_data.html, +"read_restart"_read_restart.html, or "read_dump"_read_dump.html +commands. The replica-specific names of these files can be specified +as in the discussion above for the {each} file-style. Also see the +section below for how a NEB calculation can produce restart files, so +that a long calculation can be restarted if needed. + +NOTE: None of the {file-style} settings change the initial +configuration of any atom in the first replica. The first replica +must thus be in the correct initial configuration at the time the neb +command is issued. + +:line + +A NEB calculation proceeds in two stages, each of which is a +minimization procedure, performed via damped dynamics. To enable +this, you must first define a damped dynamics +"min_style"_min_style.html, such as {quickmin} or {fire}. The {cg}, +{sd}, and {hftn} styles cannot be used, since they perform iterative +line searches in their inner loop, which cannot be easily synchronized +across multiple replicas. + +The minimizer tolerances for energy and force are set by {etol} and +{ftol}, the same as for the "minimize"_minimize.html command. + +A non-zero {etol} means that the NEB calculation will terminate if the +energy criterion is met by every replica. The energies being compared +to {etol} do not include any contribution from the inter-replica +nudging forces, since these are non-conservative. A non-zero {ftol} +means that the NEB calculation will terminate if the force criterion +is met by every replica. The forces being compared to {ftol} include +the inter-replica nudging forces. + +The maximum number of iterations in each stage is set by {N1} and +{N2}. These are effectively timestep counts since each iteration of +damped dynamics is like a single timestep in a dynamics +"run"_run.html. During both stages, the potential energy of each +replica and its normalized distance along the reaction path (reaction +coordinate RD) will be printed to the screen and log file every +{Nevery} timesteps. The RD is 0 and 1 for the first and last replica. +For intermediate replicas, it is the cumulative distance (normalized +by the total cumulative distance) between adjacent replicas, where +"distance" is defined as the length of the 3N-vector of differences in +atomic coordinates, where N is the number of NEB atoms involved in the +transition. These outputs allow you to monitor NEB's progress in +finding a good energy barrier. {N1} and {N2} must both be multiples +of {Nevery}. + +In the first stage of NEB, the set of replicas should converge toward +a minimum energy path (MEP) of conformational states that transition +over a barrier. The MEP for a transition is defined as a sequence of +3N-dimensional states, each of which has a potential energy gradient +parallel to the MEP itself. The configuration of highest energy along +a MEP corresponds to a saddle point. The replica states will also be +roughly equally spaced along the MEP due to the inter-replica nudging +force added by the "fix neb"_fix_neb.html command. + +In the second stage of NEB, the replica with the highest energy is +selected and the inter-replica forces on it are converted to a force +that drives its atom coordinates to the top or saddle point of the +barrier, via the barrier-climbing calculation described in +"(HenkelmanB)"_#HenkelmanB. As before, the other replicas rearrange +themselves along the MEP so as to be roughly equally spaced. + +When both stages are complete, if the NEB calculation was successful, +the configurations of the replicas should be along (close to) the MEP +and the replica with the highest energy should be an atomic +configuration at (close to) the saddle point of the transition. The +potential energies for the set of replicas represents the energy +profile of the transition along the MEP. + +:line + +A few other settings in your input script are required or advised to +perform a NEB calculation. See the NOTE about the choice of timestep +at the beginning of this doc page. + +An atom map must be defined which it is not by default for "atom_style +atomic"_atom_style.html problems. The "atom_modify +map"_atom_modify.html command can be used to do this. + +The minimizers in LAMMPS operate on all atoms in your system, even +non-NEB atoms, as defined above. To prevent non-NEB atoms from moving +during the minimization, you should use the "fix +setforce"_fix_setforce.html command to set the force on each of those +atoms to 0.0. This is not required, and may not even be desired in +some cases, but if those atoms move too far (e.g. because the initial +state of your system was not well-minimized), it can cause problems +for the NEB procedure. + +The damped dynamics "minimizers"_min_style.html, such as {quickmin} +and {fire}), adjust the position and velocity of the atoms via an +Euler integration step. Thus you must define an appropriate +"timestep"_timestep.html to use with NEB. As mentioned above, NEB +will often converge more quickly if you use a timestep about 10x +larger than you would normally use for dynamics simulations. + +:line + +Each file read by the neb command containing atomic coordinates used +to initialize one or more replicas must be formatted as follows. + +The file can be ASCII text or a gzipped text file (detected by a .gz +suffix). The file can contain initial blank lines or comment lines +starting with "#" which are ignored. The first non-blank, non-comment +line should list N = the number of lines to follow. The N successive +lines contain the following information: + +ID1 x1 y1 z1 +ID2 x2 y2 z2 +... +IDN xN yN zN :pre + +The fields are the atom ID, followed by the x,y,z coordinates. The +lines can be listed in any order. Additional trailing information on +the line is OK, such as a comment. + +Note that for a typical NEB calculation you do not need to specify +initial coordinates for very many atoms to produce differing starting +and final replicas whose intermediate replicas will converge to the +energy barrier. Typically only new coordinates for atoms +geometrically near the barrier need be specified. + +Also note there is no requirement that the atoms in the file +correspond to the NEB atoms in the group defined by the "fix +neb"_fix_neb.html command. Not every NEB atom need be in the file, +and non-NEB atoms can be listed in the file. + +:line + +Four kinds of output can be generated during a NEB calculation: energy +barrier statistics, thermodynamic output by each replica, dump files, +and restart files. + +When running with multiple partitions (each of which is a replica in +this case), the print-out to the screen and master log.lammps file +contains a line of output, printed once every {Nevery} timesteps. It +contains the timestep, the maximum force per replica, the maximum +force per atom (in any replica), potential gradients in the initial, +final, and climbing replicas, the forward and backward energy +barriers, the total reaction coordinate (RDT), and the normalized +reaction coordinate and potential energy of each replica. + +The "maximum force per replica" is the two-norm of the 3N-length force +vector for the atoms in each replica, maximized across replicas, which +is what the {ftol} setting is checking against. In this case, N is +all the atoms in each replica. The "maximum force per atom" is the +maximum force component of any atom in any replica. The potential +gradients are the two-norm of the 3N-length force vector solely due to +the interaction potential i.e. without adding in inter-replica +forces. + +The "reaction coordinate" (RD) for each replica is the two-norm of the +3N-length vector of distances between its atoms and the preceding +replica's atoms, added to the RD of the preceding replica. The RD of +the first replica RD1 = 0.0; the RD of the final replica RDN = RDT, +the total reaction coordinate. The normalized RDs are divided by RDT, +so that they form a monotonically increasing sequence from zero to +one. When computing RD, N only includes the atoms being operated on by +the fix neb command. + +The forward (reverse) energy barrier is the potential energy of the +highest replica minus the energy of the first (last) replica. + +Supplementary information for all replicas can be printed out to the +screen and master log.lammps file by adding the verbose keyword. This +information include the following. The "path angle" (pathangle) for +the replica i which is the angle between the 3N-length vectors (Ri-1 - +Ri) and (Ri+1 - Ri) (where Ri is the atomic coordinates of replica +i). A "path angle" of 180 indicates that replicas i-1, i and i+1 are +aligned. "angletangrad" is the angle between the 3N-length tangent +vector and the 3N-length force vector at image i. The tangent vector +is calculated as in "(HenkelmanA)"_#HenkelmanA for all intermediate +replicas and at R2 - R1 and RM - RM-1 for the first and last replica, +respectively. "anglegrad" is the angle between the 3N-length energy +gradient vector of replica i and that of replica i+1. It is not +defined for the final replica and reads nan. gradV is the norm of the +energy gradient of image i. ReplicaForce is the two-norm of the +3N-length force vector (including nudging forces) for replica i. +MaxAtomForce is the maximum force component of any atom in replica i. + +When a NEB calculation does not converge properly, the supplementary +information can help understanding what is going wrong. For instance +when the path angle becomes acute, the definition of tangent used in +the NEB calculation is questionable and the NEB cannot may diverge +"(Maras)"_#Maras2. + + +When running on multiple partitions, LAMMPS produces additional log +files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For a +NEB calculation, these contain the thermodynamic output for each +replica. + +If "dump"_dump.html commands in the input script define a filename +that includes a {universe} or {uloop} style "variable"_variable.html, +then one dump file (per dump command) will be created for each +replica. At the end of the NEB calculation, the final snapshot in +each file will contain the sequence of snapshots that transition the +system over the energy barrier. Earlier snapshots will show the +convergence of the replicas to the MEP. + +Likewise, "restart"_restart.html filenames can be specified with a +{universe} or {uloop} style "variable"_variable.html, to generate +restart files for each replica. These may be useful if the NEB +calculation fails to converge properly to the MEP, and you wish to +restart the calculation from an intermediate point with altered +parameters. + +There are 2 Python scripts provided in the tools/python directory, +neb_combine.py and neb_final.py, which are useful in analyzing output +from a NEB calculation. Assume a NEB simulation with M replicas, and +the NEB atoms labeled with a specific atom type. + +The neb_combine.py script extracts atom coords for the NEB atoms from +all M dump files and creates a single dump file where each snapshot +contains the NEB atoms from all the replicas and one copy of non-NEB +atoms from the first replica (presumed to be identical in other +replicas). This can be visualized/animated to see how the NEB atoms +relax as the NEB calculation proceeds. + +The neb_final.py script extracts the final snapshot from each of the M +dump files to create a single dump file with M snapshots. This can be +visualized to watch the system make its transition over the energy +barrier. + +To illustrate, here are images from the final snapshot produced by the +neb_combine.py script run on the dump files produced by the two +example input scripts in examples/neb. Click on them to see a larger +image. + +:image(JPG/hop1_small.jpg,JPG/hop1.jpg) +:image(JPG/hop2_small.jpg,JPG/hop2.jpg) + +:line + +[Restrictions:] + +This command can only be used if LAMMPS was built with the SPIN +package. See the "Build package"_Build_package.html doc +page for more info. + +:line + +[Related commands:] + +"min/spin"_min_spin.html, "fix neb/spin"_fix_neb_spin.html + +[Default:] + +none + +:line + +:link(Bessarab) +[(Bessarab)] Bessarab, Uzdin, Jonsson, Comp Phys Comm, 196, +335-347 (2015). diff --git a/examples/SPIN/gneb/iron/in.gneb.iron b/examples/SPIN/gneb/iron/in.gneb.iron index c794292cfb..95e7071cb0 100644 --- a/examples/SPIN/gneb/iron/in.gneb.iron +++ b/examples/SPIN/gneb/iron/in.gneb.iron @@ -7,11 +7,10 @@ atom_style spin # necessary for the serial algorithm (sametag) atom_modify map array -read_data initial.iron_spin - # setting mass, mag. moments, and interactions for bcc iron # (mass not necessary for fixed lattice calculation) +read_data initial.iron_spin mass 1 55.845 pair_style spin/exchange 3.5 diff --git a/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion index cbab56631b..cf55c9d1d4 100644 --- a/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion +++ b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion @@ -7,11 +7,10 @@ atom_style spin # necessary for the serial algorithm (sametag) atom_modify map array -read_data initial.skyrmion - # setting mass, mag. moments, and interactions for bcc iron # (mass not necessary for fixed lattice calculation) +read_data initial.skyrmion mass 1 55.845 pair_style hybrid/overlay spin/exchange 3.1 spin/dmi 3.1 diff --git a/src/SPIN/fix_neb_spin.h b/src/SPIN/fix_neb_spin.h index 9bbacc8bf0..8e016b2e23 100644 --- a/src/SPIN/fix_neb_spin.h +++ b/src/SPIN/fix_neb_spin.h @@ -60,20 +60,20 @@ class FixNEB_spin : public Fix { double **spprev,**spnext,**fmnext; double **springF; double **tangent; - double **xsend,**xrecv; // coords to send/recv to/from other replica - double **fsend,**frecv; // coords to send/recv to/from other replica - double **spsend,**sprecv; // sp to send/recv to/from other replica - double **fmsend,**fmrecv; // fm to send/recv to/from other replica - tagint *tagsend,*tagrecv; // ditto for atom IDs + double **xsend,**xrecv; // coords to send/recv to/from other replica + double **fsend,**frecv; // coords to send/recv to/from other replica + double **spsend,**sprecv; // sp to send/recv to/from other replica + double **fmsend,**fmrecv; // fm to send/recv to/from other replica + tagint *tagsend,*tagrecv; // ditto for atom IDs - // info gathered from all procs in my replica - double **xsendall,**xrecvall; // coords to send/recv to/from other replica - double **fsendall,**frecvall; // force to send/recv to/from other replica - double **spsendall,**sprecvall; // sp to send/recv to/from other replica - double **fmsendall,**fmrecvall; // fm to send/recv to/from other replica - tagint *tagsendall,*tagrecvall; // ditto for atom IDs + // info gathered from all procs in my replica + double **xsendall,**xrecvall; // coords to send/recv to/from other replica + double **fsendall,**frecvall; // force to send/recv to/from other replica + double **spsendall,**sprecvall; // sp to send/recv to/from other replica + double **fmsendall,**fmrecvall; // fm to send/recv to/from other replica + tagint *tagsendall,*tagrecvall; // ditto for atom IDs - int *counts,*displacements; // used for MPI_Gather + int *counts,*displacements; // used for MPI_Gather double geodesic_distance(double *, double *); void inter_replica_comm(); @@ -97,16 +97,16 @@ E: Potential energy ID for fix neb does not exist Self-explanatory. -E: Too many active NEB atoms +E: Too many active GNEB atoms UNDOCUMENTED -E: Too many atoms for NEB +E: Too many atoms for GNEB UNDOCUMENTED U: Atom count changed in fix neb -This is not allowed in a NEB calculation. +This is not allowed in a GNEB calculation. */ diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 69c59e0484..77a94c5e84 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -111,6 +111,8 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, double **sp = atom->sp; int nlocal = atom->nlocal; + int temp_flag,rot_flag; + temp_flag = rot_flag = 0; int ii = 0; double spinit[3],spfinal[3]; for (int i = 0; i < nlocal; i++) { @@ -123,7 +125,7 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, spfinal[2] = buf_final[ii+2]; // interpolate intermediate spin states - + if (fraction == 0.0) { sp[i][0] = spinit[0]; sp[i][1] = spinit[1]; @@ -133,7 +135,8 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, sp[i][1] = spfinal[1]; sp[i][2] = spfinal[2]; } else { - initial_rotation(spinit,spfinal,fraction); + temp_flag = initial_rotation(spinit,spfinal,fraction); + rot_flag = MAX(temp_flag,rot_flag); sp[i][0] = spfinal[0]; sp[i][1] = spfinal[1]; sp[i][2] = spfinal[2]; @@ -141,6 +144,14 @@ NEB_spin::NEB_spin(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, ii += 3; } + + // warning message if one or more couples (spi,spf) were aligned + // this breaks Rodrigues' formula, and an arbitrary rotation + // vector has to be chosen + + if ((rot_flag > 0) && (comm->me == 0)) + error->warning(FLERR,"arbitrary initial rotation of one or more spin(s)"); + } /* ---------------------------------------------------------------------- */ @@ -494,6 +505,8 @@ void NEB_spin::readfile(char *file, int flag) int ncount = 0; + int temp_flag,rot_flag; + temp_flag = rot_flag = 0; int nread = 0; while (nread < nlines) { nchunk = MIN(nlines-nread,CHUNK); @@ -566,7 +579,8 @@ void NEB_spin::readfile(char *file, int flag) sp[m][1] = spfinal[1]; sp[m][2] = spfinal[2]; } else { - initial_rotation(spinit,spfinal,fraction); + temp_flag = initial_rotation(spinit,spfinal,fraction); + rot_flag = MAX(temp_flag,rot_flag); sp[m][0] = spfinal[0]; sp[m][1] = spfinal[1]; sp[m][2] = spfinal[2]; @@ -588,6 +602,13 @@ void NEB_spin::readfile(char *file, int flag) nread += nchunk; } + // warning message if one or more couples (spi,spf) were aligned + // this breaks Rodrigues' formula, and an arbitrary rotation + // vector has to be chosen + + if ((rot_flag > 0) && (comm->me == 0)) + error->warning(FLERR,"arbitrary initial rotation of one or more spin(s)"); + // check that all atom IDs in file were found by a proc if (flag == 0) { @@ -621,69 +642,24 @@ void NEB_spin::readfile(char *file, int flag) } /* ---------------------------------------------------------------------- - initial configuration of spin sploc using Rodrigues' formula + initial configuration of intermediate spins using Rodrigues' formula interpolates between initial (spi) and final (stored in sploc) ------------------------------------------------------------------------- */ -void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) +int NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) { - // implementing initial rotation using atan2 - // this may not be a sufficient routine, need more accurate verifications + // no interpolation for initial and final replica - // interpolation only for intermediate replica + if (fraction == 0.0 || fraction == 1.0) return 0; - if (fraction == 0.0 || fraction == 1.0) return; - - // initial, final and inter ang. values - - //double itheta,iphi,ftheta,fphi,ktheta,kphi; - //double spix,spiy,spiz,spfx,spfy,spfz; - //double spkx,spky,spkz,iknorm; - - //spix = spi[0]; - //spiy = spi[1]; - //spiz = spi[2]; - - //spfx = sploc[0]; - //spfy = sploc[1]; - //spfz = sploc[2]; - - //iphi = itheta = fphi = ftheta = 0.0; - - //iphi = acos(spiz); - //if (sin(iphi) != 0.0) - // itheta = acos(spix/sin(iphi)); - - //fphi = acos(spfz); - //if (sin(fphi) != 0.0) - // ftheta = acos(spfx/sin(fphi)); - - //kphi = iphi + fraction*(fphi-iphi); - //ktheta = itheta + fraction*(ftheta-itheta); - - //spkx = cos(ktheta)*sin(kphi); - //spky = sin(ktheta)*sin(kphi); - //spkz = cos(kphi); - - //double knormsq = spkx*spkx + spky*spky + spkz*spkz; - //if (knormsq != 0.0) - // iknorm = 1.0/sqrt(knormsq); - - //spkx *= iknorm; - //spky *= iknorm; - //spkz *= iknorm; - - //sploc[0] = spkx; - //sploc[1] = spky; - //sploc[2] = spkz; - + int rot_flag = 0; double kx,ky,kz; double spix,spiy,spiz,spfx,spfy,spfz; double kcrossx,kcrossy,kcrossz,knormsq; double kdots; double spkx,spky,spkz; - double sdot,omega,iknorm,isnorm; + double sidotsf,omega,iknorm,isnorm; spix = spi[0]; spiy = spi[1]; @@ -698,43 +674,73 @@ void NEB_spin::initial_rotation(double *spi, double *sploc, double fraction) kz = spix*spfy - spiy*spfx; knormsq = kx*kx+ky*ky+kz*kz; - - if (knormsq != 0.0) { - iknorm = 1.0/sqrt(knormsq); - kx *= iknorm; - ky *= iknorm; - kz *= iknorm; + sidotsf = spix*spfx + spiy*spfy + spiz*spfz; + + // if knormsq == 0.0, init and final spins are aligned + // Rodrigues' formula breaks, needs to define another axis k + + if (knormsq == 0.0) { + if (sidotsf > 0.0) { // spins aligned and in same direction + return 0; + } else if (sidotsf < 0.0) { // spins aligned and in opposite directions + + // defining a rotation axis + // first guess, k = spi x [100] + // second guess, k = spi x [010] + + if (spiy*spiy + spiz*spiz != 0.0) { // spin not along [100] + kx = 0.0; + ky = spiz; + kz = -spiy; + } else if (spix*spix + spiz*spiz != 0.0) { // spin not along [010] + kx = -spiz; + ky = 0.0; + kz = spix; + } else error->all(FLERR,"Incorrect initial rotation operation"); + rot_flag = 1; + } } - + kcrossx = ky*spiz - kz*spiy; kcrossy = kz*spix - kx*spiz; kcrossz = kx*spiy - ky*spix; kdots = kx*spix + ky*spiz + kz*spiz; - sdot = spix*spfx + spiy*spfy + spiz*spfz; - omega = acos(sdot); + omega = acos(sidotsf); omega *= fraction; - spkx = spix*cos(omega) + kcrossx*sin(omega); - spky = spiy*cos(omega) + kcrossy*sin(omega); - spkz = spiz*cos(omega) + kcrossz*sin(omega); + // applying Rodrigues' formula + + spkx = spix*cos(omega); + spky = spiy*cos(omega); + spkz = spiz*cos(omega); + + spkx += kcrossx*sin(omega); + spky += kcrossy*sin(omega); + spkz += kcrossz*sin(omega); spkx += kx*kdots*(1.0-cos(omega)); spky += ky*kdots*(1.0-cos(omega)); spkz += kz*kdots*(1.0-cos(omega)); + // normalizing resulting spin vector + isnorm = 1.0/sqrt(spkx*spkx+spky*spky+spkz*spkz); if (isnorm == 0.0) - error->all(FLERR,"Incorrect rotation operation"); + error->all(FLERR,"Incorrect initial rotation operation"); spkx *= isnorm; spky *= isnorm; spkz *= isnorm; + // returns rotated spin + sploc[0] = spkx; sploc[1] = spky; sploc[2] = spkz; + + return rot_flag; } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/neb_spin.h b/src/SPIN/neb_spin.h index 5988c04a3a..b7c20bc3a9 100644 --- a/src/SPIN/neb_spin.h +++ b/src/SPIN/neb_spin.h @@ -57,7 +57,7 @@ class NEB_spin : protected Pointers { double *fmaxatomInRepl; // force on an image void readfile(char *, int); - void initial_rotation(double *, double *, double); + int initial_rotation(double *, double *, double); void open(char *); void print_status(); }; diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 5e9ff7a39e..41430d230f 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -171,10 +171,11 @@ void PairSpinDmi::init_style() int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 71b4c2ebf6..0260a611cf 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -162,7 +162,7 @@ void PairSpinExchange::init_style() ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index 6ff003521d..1f1488b93c 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -164,10 +164,11 @@ void PairSpinMagelec::init_style() int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index a39d6f3461..03041da17f 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -171,10 +171,11 @@ void PairSpinNeel::init_style() int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin From 4f459a59a1bc69eedb27d3465598ee17dc189fd9 Mon Sep 17 00:00:00 2001 From: oywg11 Date: Fri, 5 Apr 2019 22:55:40 +0300 Subject: [PATCH 139/372] correct the spelling --- doc/src/pair_ilp_graphene_hbn.txt | 6 +++--- doc/src/pair_kolmogorov_crespi_full.txt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index 5c44128edb..e52a2a79af 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -48,9 +48,9 @@ It is important to include all the pairs to build the neighbor list for calculating the normals. NOTE: This potential (ILP) is intended for interlayer interactions between two -different layers of graphene, hexagonal boron nitride (h-BN) and their heterojunctions. +different layers of graphene, hexagonal boron nitride (h-BN) and their hetero-junction. To perform a realistic simulation, this potential must be used in combination with -intralyer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. +intra-layer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. To keep the intralayer properties unaffected, the interlayer interaction within the same layers should be avoided. Hence, each atom has to have a layer identifier such that atoms residing on the same layer interact via the @@ -69,7 +69,7 @@ are fitted with taper function by setting the cutoff equal to 16.0 Angstrom. Using different cutoff or taper function should be careful. The parameters for atoms pairs between Boron and Nitrogen are fitted with a screened Coulomb interaction "coul/shield"_pair_coul_shield.html. Therefore, -to simulated the properties of h-BN correclty, this potential must be used in +to simulated the properties of h-BN correctly, this potential must be used in combination with the pair style "coul/shield"_pair_coul_shield.html. NOTE: Two new sets of parameters of ILP for two-dimensional hexagonal diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index c14bfc6511..05effc5620 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -44,9 +44,9 @@ can be found in pair style "ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. NOTE: This potential (ILP) is intended for interlayer interactions between two different layers of graphene. To perform a realistic simulation, this potential -must be used in combination with intralyer potential, such as +must be used in combination with intra-layer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. -To keep the intralayer properties unaffected, the interlayer interaction +To keep the intra-layer properties unaffected, the interlayer interaction within the same layers should be avoided. Hence, each atom has to have a layer identifier such that atoms residing on the same layer interact via the appropriate intra-layer potential and atoms residing on different layers From 6e6d35057278023690ddaa1731b702714caf5164 Mon Sep 17 00:00:00 2001 From: oywg11 Date: Fri, 5 Apr 2019 23:01:28 +0300 Subject: [PATCH 140/372] correct the spelling --- doc/src/pair_ilp_graphene_hbn.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index e52a2a79af..3a5d4accd5 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -51,7 +51,7 @@ NOTE: This potential (ILP) is intended for interlayer interactions between two different layers of graphene, hexagonal boron nitride (h-BN) and their hetero-junction. To perform a realistic simulation, this potential must be used in combination with intra-layer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. -To keep the intralayer properties unaffected, the interlayer interaction +To keep the intra-layer properties unaffected, the interlayer interaction within the same layers should be avoided. Hence, each atom has to have a layer identifier such that atoms residing on the same layer interact via the appropriate intra-layer potential and atoms residing on different layers From 542d8aaf070ff36bbfa601292bbfc8cc19121b3c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 5 Apr 2019 14:16:25 -0600 Subject: [PATCH 141/372] Fix bug in fix_nh_kokkos --- src/KOKKOS/fix_nh_kokkos.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/KOKKOS/fix_nh_kokkos.cpp b/src/KOKKOS/fix_nh_kokkos.cpp index ba6e8919ea..fae9ef8f30 100644 --- a/src/KOKKOS/fix_nh_kokkos.cpp +++ b/src/KOKKOS/fix_nh_kokkos.cpp @@ -106,8 +106,8 @@ void FixNHKokkos::setup(int vflag) if (t0 == 0.0) { atomKK->sync(temperature->execution_space,temperature->datamask_read); - atomKK->modified(temperature->execution_space,temperature->datamask_modify); t0 = temperature->compute_scalar(); + atomKK->modified(temperature->execution_space,temperature->datamask_modify); if (t0 == 0.0) { if (strcmp(update->unit_style,"lj") == 0) t0 = 1.0; else t0 = 300.0; @@ -119,8 +119,8 @@ void FixNHKokkos::setup(int vflag) if (pstat_flag) compute_press_target(); atomKK->sync(temperature->execution_space,temperature->datamask_read); - atomKK->modified(temperature->execution_space,temperature->datamask_modify); t_current = temperature->compute_scalar(); + atomKK->modified(temperature->execution_space,temperature->datamask_modify); tdof = temperature->dof; if (pstat_flag) { @@ -250,10 +250,11 @@ void FixNHKokkos::final_integrate() // per-atom values are invalid if reneigh/comm occurred // since temp->compute() in initial_integrate() - if (which == BIAS && neighbor->ago == 0) + if (which == BIAS && neighbor->ago == 0) { atomKK->sync(temperature->execution_space,temperature->datamask_read); - atomKK->modified(temperature->execution_space,temperature->datamask_modify); t_current = temperature->compute_scalar(); + atomKK->modified(temperature->execution_space,temperature->datamask_modify); + } if (pstat_flag) nh_v_press(); @@ -261,8 +262,8 @@ void FixNHKokkos::final_integrate() // compute appropriately coupled elements of mvv_current atomKK->sync(temperature->execution_space,temperature->datamask_read); - atomKK->modified(temperature->execution_space,temperature->datamask_modify); t_current = temperature->compute_scalar(); + atomKK->modified(temperature->execution_space,temperature->datamask_modify); tdof = temperature->dof; if (pstat_flag) { @@ -476,8 +477,6 @@ void FixNHKokkos::remap() template void FixNHKokkos::nh_v_press() { - atomKK->sync(execution_space,V_MASK | MASK_MASK); - v = atomKK->k_v.view(); mask = atomKK->k_mask.view(); int nlocal = atomKK->nlocal; @@ -493,6 +492,8 @@ void FixNHKokkos::nh_v_press() atomKK->modified(temperature->execution_space,temperature->datamask_modify); } + atomKK->sync(execution_space,V_MASK | MASK_MASK); + copymode = 1; if (pstyle == TRICLINIC) Kokkos::parallel_for(Kokkos::RangePolicy >(0,nlocal),*this); @@ -536,7 +537,6 @@ template void FixNHKokkos::nve_v() { atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | MASK_MASK | RMASS_MASK | TYPE_MASK); - atomKK->modified(execution_space,V_MASK); v = atomKK->k_v.view(); f = atomKK->k_f.view(); @@ -553,6 +553,8 @@ void FixNHKokkos::nve_v() else Kokkos::parallel_for(Kokkos::RangePolicy >(0,nlocal),*this); copymode = 0; + + atomKK->modified(execution_space,V_MASK); } template @@ -616,8 +618,6 @@ void FixNHKokkos::operator()(TagFixNH_nve_x, const int &i) const { template void FixNHKokkos::nh_v_temp() { - atomKK->sync(execution_space,V_MASK | MASK_MASK); - v = atomKK->k_v.view(); mask = atomKK->k_mask.view(); int nlocal = atomKK->nlocal; @@ -629,6 +629,8 @@ void FixNHKokkos::nh_v_temp() atomKK->modified(temperature->execution_space,temperature->datamask_modify); } + atomKK->sync(execution_space,V_MASK | MASK_MASK); + copymode = 1; Kokkos::parallel_for(Kokkos::RangePolicy(0,nlocal),*this); copymode = 0; From e56d69a267a38796478f4840465aa85067f87854 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 15:51:32 -0400 Subject: [PATCH 142/372] silence compiler warnings --- src/RIGID/fix_shake.cpp | 2 +- src/USER-OMP/reaxc_forces_omp.cpp | 4 ++-- src/USER-REAXC/reaxc_traj.cpp | 4 ++-- src/group.cpp | 4 ++-- src/memory.h | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 1e8414d321..23ced2d0e7 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -1390,7 +1390,7 @@ void FixShake::shake_info(int *npartner, tagint **partner_tag, ------------------------------------------------------------------------- */ int FixShake::rendezvous_ids(int n, char *inbuf, - int &flag, int *&proclist, char *&outbuf, + int &flag, int *& /*proclist*/, char *& /*outbuf*/, void *ptr) { FixShake *fsptr = (FixShake *) ptr; diff --git a/src/USER-OMP/reaxc_forces_omp.cpp b/src/USER-OMP/reaxc_forces_omp.cpp index 1e1cf44f50..0a08bd6a46 100644 --- a/src/USER-OMP/reaxc_forces_omp.cpp +++ b/src/USER-OMP/reaxc_forces_omp.cpp @@ -262,8 +262,8 @@ void Compute_Total_ForceOMP( reax_system *system, control_params *control, /* ---------------------------------------------------------------------- */ -void Validate_ListsOMP( reax_system *system, storage * /*workspace */, reax_list **lists, - int step, int n, int N, int numH, MPI_Comm comm ) +void Validate_ListsOMP(reax_system *system, storage * /*workspace*/, reax_list **lists, + int step, int n, int N, int numH, MPI_Comm /*comm*/) { int i, comp, Hindex; reax_list *bonds, *hbonds; diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index 5adc0cfbb9..356d7b6eeb 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -58,7 +58,7 @@ void Write_Skip_Line( output_controls *out_control, mpi_datatypes * /*mpi_data*/ int Write_Header( reax_system *system, control_params *control, - output_controls *out_control, mpi_datatypes *mpi_data ) + output_controls *out_control, mpi_datatypes * /*mpi_data*/ ) { int num_hdr_lines, my_hdr_lines, buffer_req; char ensembles[ens_N][25] = { "NVE", "NVT", "fully flexible NPT", @@ -357,7 +357,7 @@ int Init_Traj( reax_system *system, control_params *control, int Write_Frame_Header( reax_system *system, control_params *control, simulation_data *data, output_controls *out_control, - mpi_datatypes *mpi_data ) + mpi_datatypes * /*mpi_data*/ ) { int me, num_frm_hdr_lines, my_frm_hdr_lines, buffer_req; diff --git a/src/group.cpp b/src/group.cpp index 6c19af8bc6..256bab7778 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -40,7 +40,7 @@ using namespace LAMMPS_NS; #define MAX_GROUP 32 #define EPSILON 1.0e-6 -enum{TYPE,MOLECULE,ID}; +enum{NONE,TYPE,MOLECULE,ID}; enum{LT,LE,GT,GE,EQ,NEQ,BETWEEN}; #define BIG 1.0e20 @@ -202,7 +202,7 @@ void Group::assign(int narg, char **arg) if (narg < 3) error->all(FLERR,"Illegal group command"); - int category; + int category=NONE; if (strcmp(arg[1],"type") == 0) category = TYPE; else if (strcmp(arg[1],"molecule") == 0) category = MOLECULE; else if (strcmp(arg[1],"id") == 0) category = ID; diff --git a/src/memory.h b/src/memory.h index b5d70b977f..c5eddc7fe7 100644 --- a/src/memory.h +++ b/src/memory.h @@ -477,7 +477,7 @@ class Memory : protected Pointers { } template - TYPE *****grow(TYPE *****&array, int n1, int n2, int n3, int n4, + TYPE *****grow(TYPE *****& /*array*/, int /*n1*/, int /*n2*/, int /*n3*/, int /*n4*/, const char *name) { fail(name); return NULL; From d17553d8d294d6a6598526f5dcfaa3305a783fde Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 16:52:28 -0400 Subject: [PATCH 143/372] add preset to make it easier to use clang with OpenMP and MPI --- cmake/presets/clang.cmake | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 cmake/presets/clang.cmake diff --git a/cmake/presets/clang.cmake b/cmake/presets/clang.cmake new file mode 100644 index 0000000000..224f140dc1 --- /dev/null +++ b/cmake/presets/clang.cmake @@ -0,0 +1,16 @@ +# preset that will enable clang/clang++ with support for MPI and OpenMP (on Linux boxes) + +set(CMAKE_CXX_COMPILER "clang++" CACHE STRING "" FORCE) +set(CMAKE_C_COMPILER "clang" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS "-Wall -Wextra -g -O2 -DNDEBG" CACHE STRING "" FORCE) +set(MPI_CXX "clang++" CACHE STRING "" FORCE) +set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) + +set(OpenMP_C "clang" CACHE STRING "" FORCE) +set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "" FORCE) +set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE) +set(OpenMP_CXX "clang++" CACHE STRING "" FORCE) +set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE) +set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE) +set(OpenMP_omp_LIBRARY "/usr/lib64/libomp.so" CACHE PATH "" FORCE) + From 3d7a4fb9459feb6018ccdcd609aae87b4c3c11eb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 17:04:07 -0400 Subject: [PATCH 144/372] silence compiler warnings, remove dead code --- src/USER-REAXC/reaxc_init_md.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 39b31c38b5..df5de49034 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -156,7 +156,7 @@ int Init_MPI_Datatypes( reax_system *system, storage * /*workspace*/, int Init_Lists( reax_system *system, control_params *control, simulation_data * /*data*/, storage * /*workspace*/, reax_list **lists, - mpi_datatypes *mpi_data, char * /*msg*/ ) + mpi_datatypes * /*mpi_data*/, char * /*msg*/ ) { int i, total_hbonds, total_bonds, bond_cap, num_3body, cap_3body, Htop; int *hb_top, *bond_top; @@ -219,8 +219,6 @@ void Initialize( reax_system *system, control_params *control, mpi_datatypes *mpi_data, MPI_Comm comm ) { char msg[MAX_STR]; - char errmsg[128]; - if (Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE) { control->error_ptr->one(FLERR,"Could not create datatypes"); From f8018a8bbac14bd3c6e3a640b142eece5e5aa5f9 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 5 Apr 2019 16:44:23 -0600 Subject: [PATCH 145/372] Commit2 JT 040519 - added angle in doc - improved doc neb/spin --- doc/src/Eqs/neb_spin_angle.jpg | Bin 0 -> 9638 bytes doc/src/Eqs/neb_spin_angle.tex | 15 +++++++ doc/src/neb_spin.txt | 78 +++++++++++++-------------------- 3 files changed, 46 insertions(+), 47 deletions(-) create mode 100644 doc/src/Eqs/neb_spin_angle.jpg create mode 100644 doc/src/Eqs/neb_spin_angle.tex diff --git a/doc/src/Eqs/neb_spin_angle.jpg b/doc/src/Eqs/neb_spin_angle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7021c4f620bcc5e42b3b43ea9d9c1e3c648910c GIT binary patch literal 9638 zcmbVx1yo#5((fG@VDK3j++lDDZozd13$6(of;)sjLYUz0P6+NU!4o{ef=iGjNCXQ3 z0>RHrMH^Kwr0f6fzKoP*i zz_@KU0={Wj5G*V(7z+;v2OC0wM?ip&hmTK4L;@uwf)U~4L&>2qQaBkI838c`B{`gu z1WpFOB>`dH_<*r+v9NIAg!qK;|FK;60x$?*h*5zFf&myX5GD+C-4DhtFeb00El}9QQbG>HKGX13Jp*Pg-R+_jetkEJR#m0z=f%eHIOPHk z{QpJ;$`e4{c*{lVz(hl;4haPDKw?6}_HA13l8hzzt&>@3m)H%7!wnWCWnA2PiIt6B zHnsQ{B&?72FwG51VtRQRi2Qh%yY2uW47P9qI$A3l=9@s={aLWlR1bHc)0DTfsE>B* zf7Q<-7bryly^MLJ!BQpBDS5aO_EgxMF$BpRv?tzF3@ndQ(y|2Wd6KB_;Zjwztw4hn z1ZA~KPM+jZRIs_%}+KHEJmD-3?< zr3e3MUKuFeuY%Cw=h3FAOqIDO3~urYo@+YM)w65YH8CW*%lp*Ub=I6Q%;(jUQs>#8 zyYB57oN@8bWb4{^z=SzU6qeY0zPOY!GL`;aa(mfyM2s@dZl5P<(vo;kjlPYm;u%p8 z>a6`yk7mj}zo=7@MYT!?uIi$SjI|%wDdyKeuHLquV&gMg13kyETtvApTyAAw!Y6}z zn_pOJZ*AC};To_l9NYzMjzqVGA|uMg-SdYc>B?is;&W&(nPcc!ymVEIvWeUBGcw6a zksOPZGu1hXYbs-WGQxZxSQZ~E@~Cg^85&{mu-L^2e|k3MFPD@Q**CaOV6t)CcTRf^ z_#iw#iMgz}!oxN2yS~}5^tv*7k!VI5XK2*TB!hS8!o-ejlqdO0o}vs~SoJ5H;whwP zM->D;<~`1~TQ7Z4=|y@P4~y{peo}n)J+k0!5Z=}q2gKAvh{QrmXnE)j1VD5h?n*WEOjW~vC`H}}w7Dw)JHso>*IZLBdI zOSBJuy2lXsTLgLEq>N6=<#9sCU}!DZHlx1tvin93qwGdrX=byiwW-Kq(?t$(fBVb) zCgUr+#B~wjrsqO<7)wkryUjwuS>-@ssNLBosZ%}jV^AgHCELXFxC_O|f^tkUdKtL= z=LRg(f*qR+$gnOe9=kAHIxY7l^_&R9(-{PE#OP5i#wMknbW=_9RJ(mhGKCc10&Q)R zLUV-SB;F#EnG&~ss0*~Zfb5?t<8^1A1ATtKDE89s=tN#PxdWPGVq=k{I2k^McUJ%w z2ww58jDPf#{U?7EZqGG7xnC+0=wo+K@6>l`Uw7~Dgj1#_|94h)g* zVbUZJdnY;fqE}fpZOxK}<)?H_jL~0|8rBLbvG^De&?KEShJF;s$|vTUx^ZpOuQe{u z$dfvf6Pq5q*>m++ex&z>Jq-rs6F=3paY5zmz4l$AnL%2?k(T zB&19N@=#_G9jg~fa7Gq>K_QRC{Q4}_-m%KzzB0drpP5%}VT^=GDZJQA++rRf{ z_72qXX(LT?I+t);mg^Uzfexl-?{D?lZ0Zz|xH!`M9FZel zv!5IL6q4xDht24hcZY24hJAAaaKG;d43w(+e4Vm)dp9!Py-O#+>8eewl9J2%{q#NZ zv$%oCVY+w^#F@@XxWAd`k-3~{AZ)sQG(54ZZIREcXvx<1q0|}eH+rb?)~~GY*u!n* z!}PUK7u=)g>?cN8F_|BbwmgGzg>Mia&z<&OzE312jZ;jp5`GfFxcytqMLSUscgS5X~Ng;`B|K^KPQ#RR%1?3&foFu za<5)4zL_s;6~(eE5*;?VKR#GrY0@=iB)46%`o0Z!uDEj8w59AM!dRV~<0<@^Di@7n zpvKvo!?0|mqCHYgR}8OxhD7onR&8x|m%1D8A%f-vC*{+ngr>E?dZEgcwIjvbukI{l z@xMC-y3Zu_>KzVYyCn~WU6;y;5Qngy2-Zt?8zvnp+4TUCYam_wr~a>GuP3$dOj9Og zUh$uwjX!mFC4L57|JmGF&!r9Cd!U9(C*s3_@P0*sp`QvBK|5V4TDg%)EES|huDCIhbGQ8U z+buee5~at%_QNSGMyMsLEqbQYF(+%Rb(MRYOTBll%nNn$TX#(ag~$`#xcL@eO}f7> zlz##n%Xusk`u^oGBJHE&>eo<@pvT*JDd?0~w0kRaHQ`_jOsiB-ev@pN(rzJr--yF1 z_mRcG{rs?i%s?_x*6J3-rHJs$a_Re&q^hPSQQL)6t}?p>B!Vn?S~&gv@;-9$Vu zlC(t6w3m2{?rVYN@!#BnVNR}3cG-_Lt(@*A=xpgQ_|X5D7dXOZDZNm3K62SAVHT<8 zWm|}wrTbB}T_yWXis_wNFa74-+D!`h-!s*r#NfA-FzXR<&FR5Y77OFDHN|!zril^j z&$@A2saWcIr~oXg=_W(!rBcC$vM+@aEe$0~up+VL1=rsZjZR&&ch85Uhpf1js>xk4 ze^xHZ%W|wMxatlENBMH{5&3ZYRe3>_;x>a}qmu@?qWUyjU82KYunG1K#R#qJfM(Oo z#0dVGp?jk6h669#u1U>5APbJV&Mkdo!GpR~ny)CX+4I+zx#|^8L=m6Uv|SAE(A_ut z?GfIbx;&X3vh5%#R+z_xl%3nU2DH06-Z+YWY<0=?J$xmj;2%!Ys8zS+)wHGtPwu47 zIdIkO#2g;&jr-j(mup{6((psiVXbhR+kIP@#>3x4i{lN`mzveZz#7LV?|jv$yc-&@ z2M7!5oKYm_b{t;-{U(!d|S+s;ORM&tA3j zNv%;kyXbyEm(FF@YH5V4_h_|cAn1lRR^65L>=Rv?b0{>=oPK*JmfN!=uGF=N+oss0kPXE68eyhkn;z-MMsk~HL3MakP z4&;7D89gitiCev#Hr6F8OKbcSY4qh@#~oNq-xHsYwnXh9J_gsr2v z?j1Z3{GySg>TxvFiS>izwO~OrJoP^8IY0eXqw$4=CrvCuZ3@_G_^uKQxEvZ1be`4? zx>j>#pYjUagIg5lmL!L-CYdEiY3w-{r#>1As1#ksZV$z#vC`riZAkUw#HG0>hxtiQ zJwkJB_z;?InRmO<&7U^X$I`h^evcHQ^a&uUZR1Zh+f z2s6MzFhi)9DwNG&(WACq~Y==*lciKXh6?446Nc59FD z&pU>MUL8=WIC-!WSB{km9};<0-J-k7_}nY%L3VVvz@5lynmGa($1MXM*NfWf1gW5^=-8l7l}NR^Ftjy zEzjiPzROp{%e7JZ=osHAWvj8=^@0EC(at_oIkg7*`<`ogmm{*8Kcw#XI7qSWjbEAI zy8z1hRa)KgYNae2u;n$-WX%U=n6P&;?W*y2DS2l&k&qH+rL5N1$f@!*ljy==DEGbZ zT8+ll-7Yc_J_H>>*io_755g}0WHx8#agg(diI&y0Bc*A+*fNWaqCvd$>6wG$3%Kak zYYMnpsvD|GLEk%7Y6(%ww?01GoNu-7DKo9%fIy;Jrz*|ObFRkrojXI?rv_3&qk}ja zdXi@JYTJ^T{ACR`Nz%#3imC5l7odv*3_xXZ!KSFmdB)!qX`~C-Gham$4p?gDkxAcw zrb*ODmdVm{Ej&JLWK+xyj)g6dfo2L`Y%)VcX3;? zE!4MJW}o`zj7V1tQ8hjsE85-?`IqPPwA=r5QlW&+Y#YupCR|)DclN4f4YDjR|7mS~^RGIsQ@IIy)TnT6ONb1yRU(#svau<3e zQxr;nsLZz!bzeO%(cPsr&e30S7pGX-d05R8jots^L)F=MQ~-~Jy%z0eyqj?KsXwt; zY@*1q@NfFHAFqR8ZMYl9xnvKciL6e#MJZ^ABb|t&kjYYC*M1Il&AUtckmF%DvBy1c zIDSQ(>>~1GYE`>MEz!+4Vn7;lw-ZNBIln8(k^ zdh*en>Y?bHVeJLij#oHfTPEVAh*GR6V$EmQ0RFk)71!w%#UI-X{g=P%db78id@k;b zm*z8!W%bG$xP3ZJ8P0H5?Psn<(M^w!2Bf5{w+dHP3j+=Wn+tmBVn*cW)lNI}#&Iy{ z6>jfBAWNwEGe)$x!@Wrw|8nE|;IA6mFE?qoen?$0yHZhLdG#hFoPDup>oI!MXyIdZ z@~o3;&YL$Z-g{jQmX{465pKmR$jZLoy-W(`6 zp*Pix+e#zWKWch6)xMj9f{qo`;{_vsqGf)4&z{`m>OTq}vP@^3#V`JxWbi`hNQE&do9g)j+IF^D zqpPZ|vo5RtXp|82Pas;Y;_aslfA2`hk<{R2q{Y}#5(n#L!+tJlCgIEDQd3B(0mZ0E zFLI*3@G89sf*fLulk)cobEL#HM!3r*XS5>nGxDQ{Mb%u4V^F0IZ z3uP%juoEFS3ga*4NTj-#{hZ;YX$gLFJKLwoXV#Z#=kR7%rW7ze_LHZilT>kAa=MLm zq@3})C;A%5-8=>=Hnz7xwSMEnyRq{hzZPXQoO8yVW+;Ky+Uh6iz#d9zMn{W+ju+aT z1C&B0MqCx23{3ph_eR|yUmLXob99Ltr@h^|^XavprMUip4B9?9L^z^T{_C);Q(e8wt5T za$E3=+cVVt{*rH{%rA!BReL#qbPcpmW%6QJdTefJK|}oT+-&#WUzS5~qRntu)K{mg zGCyN|BOB4N!{W#3x%=^R>1V}|zM&{DBRN6qKT>}-s5w!#%Hf3jYCFu|=C1*fGVP$0 z<+?RxCpc4ywX?_}&>Y>vdSRmRz-k)LBHb~R{vq>N{ki^~LKJ*nTG%s27cP#0d;-_1Es;wpf5Y?;`P1SNdAn%Fd>PJ}op)4$ z+32!i&$QQ_D}Lp4P|tHyT0FKWIhwjoEp^?(XhXTk-ceVrCPWws2iVVGLL*19;EA%3 zIE!nsT6&moYh?Y8N;Cn&gu(lrK#UFLJAr7Ek-_~L>0z}&_3V}`*Ra#l*UUV$%fO(#xy^XY<%d^{XiWk3`^CdA#>fZfOzAM%$aWR`a>)UWAgw{F< zdvt6{{bb+)i6z&amxOKQgJQ#5Q&Vhr;~Q(TzMamm6e^fFMsizh?l%eV5kEv|Pfz0} zs5cL2H9q1BWTlsfB?f}Z=)|dzR{$QaXSy7^_;Z0mjd?l3aKtr1(Uve>xOvRJ51f86 zfo+l9i@!DOI^j*_w~*(qBk_%-hrw&r^kvFJxill!_p*wov?~p){N9%H5BZ7uXtnuS z6`k2k(nuzwR9=ubL!eCiCM&UQp~1au=r)eS%md*^F|g=7O0s!o;cCU^Gh~PZvztP< zx_ddvXEUz}7lDE#HdfX#X%Z9@kwQlqsXxDsbv3DQ<#)5U_Tj$v4a|X(6YkECI#5uH z5MbmpK~3hSUv`(M?i?T7T1gM<^Jo!VwzfK(b6eiiG3)@jS?dLqN{{&W3@h~@f=Mz9 z@gkKN&Ah_~MiCj5o|yMEKPGE=d8_@>UXb4REe5BX=ow2VCcH@F7IMh85y+74S=We7 zawy+*rXQRl4`J9aZMJONDG2&t%8cV{IRV4Dr+W>EElT=Mz?jd|8!OMU{qY72t9J4% zGuWSqo-tuBq561oKRH;Y4e*c_Q;~|1J({~3besHe%-#>y8^15EFp*-b@;0t^%jJx- zNov{j4`qiEhgcH*XGJ@a&q?iB^pj5M)d^Syk>{2g$hgADr!Sx4)pA<8ZwU)z1=VRH zc|`e%C!@q{nS$~9MOjx%9_`P2-UW3(?Yh~r{&w>O+!pnrNhrkscOwDa_%a5e5a=5c zB;$YZfB_UD0SVmb{{}#iK)^{z1PLx8LH_TPlH35~8380C1`3=6V!R;?k^^oC6Hs6@ ziV?UG6ypsh2?Zp85NHTv!i`c6oP+|C;DUqXfLoEfr9$K01OO!6`T|hk77x84f!qvk z!8d^0hP>%-gZW##jTYnYn ze10m@Iv*vPs4+VROXO8lT>MI{G-|~`$p?J5m*(Sle#~;8UE%>H7~b2@)l51lzhe%1 zZ4}JYJ5RO)f`OG>Fuys(jF7+ZRp9AJ6C!`gwL+fixD~}E)V&KLeIr!Bb|zzNJKi@~ zLC30!%n1yZMBvE-*2JJ+(I^~YM4?J@;GGC=1rA31Os2J8l7S)U11Qw@AjBpL^7g#H zS3pOeIfy?wrcxG=^Tx9tBpOQ3j?j)&&icwr+lnKTrLgr@0Su>5?Lt4z0Q@W8u~P@+ zC4XKf)Qc9<-ATo={1oMw7hv#a2e6k4)4sWe^sYbWVH&385zD(dO`7bS93P7_LneP= zL@`2W;D;klf|AHpxQJ2IiL^Il=+Mw zSywNQMP#daehmb-T%ybCn4^_B)!h}n^tO7Il=w>rO?09J73*zkh)hUGQ)r;jMcz=K z1P!L<>neVdch2`@9tRE zUN@#sn~x_QxF;<|4@tq}rpMU#cV8#=2?_BB1x}_Zs3}#6$B)(0W4b^I20-$*`>&m> z=?}29Q$p8DYkL8kVlsxe)-)o9n|Bg247%DVLpK{{PK6w|F6-~!UtbK?K)8~5Gl(A{ z#>1?p^t~hJNHJ)5r0vU&mbxqYXbPxx$iRya+dd$u>5K8Zb*7_BH86dB^Z(@7+-1?G zA(PO?lCF(;TQ_Iszhho6CmhwzxKzDes2E~BrS6vivP>NFoS&vXU<+r<4?6yH48{iI zJnuhDUbHRJK&KFz{Ys0{YP?_jCt|||H5*kpwcOxaBW|lo~0DLRZpDD!~ z0CN@LT-vY|%8~I{@9g0On588lywi>+R{#uxR}IY^;Sl*nsV9kYltCB{LWjSapXdA; zpMJY==DQ@Tb#Ax$#rg8?&)m|0#(y(OyrhMsKGu;jmyBderiBw1;FuJ~KHDgRe8j$w zCQ6sMe;;YB}VYX<)W{{sLgxMGg?IFn$X-!dUp zUm8yFPUunbZt~e43-Q};pxrv@WgRBQPd4B0j1ypf&>j|=ZmWKI&wENFjDocD z5%SFSj^KL(pIGFd+9p93-iG$t=@#P^j1Xc%*?k#+hhN@HDBo^Zkkf_G;vy%v7T6AX z^^2MgAflUtds0hjibmlCoeLc2x7hS+!___?#$-6uDO&-h_(b@93}Ik+HCs7WX1m1O z5Tg4{Gpj556?MF<$W7i~wRDpDvp%3YC2<`b`~9^wqA+O#vE1kYp?$ZK=e&pG18*}= zTBc>m&+OK|Xk3_W{+lV|(PMzva-H%rHWkYdZQ8gz@YXrp_QK0ays@r_rZ>6o>wF}@8rm;Zhsxxu0m6JX^8^ zV?2EAcTHQ+keAu?<7C>*>QC(no2uql_`UV})sZ>kA0=@Nmh~%CO~aXS+N%hWcmNY9 z&CqOJ8$OFM*YQ5!Ow;-$L>oI%B$53-<8=Ag2q%?Rewn*Xb(fSi`vn!STq`|G!|q=c z{6nL!=aJmPi8w24lAZ*N`DUCp9PIIL&)%FgrWk&ICnAA^Lm{_3nL?{e2=DOZQ}1*M5mKI^wgy!^Rz z*CsoP)swNkU#5%sk&6>n+CFiJiQbcEmYhfXP93~A3mn?O)vMPgPzwsgX(u7Axw@R> zCqR=KVq+jc1}g(pL(_RHmF!p#pMVu4-@Y9O_Cq1s`jzJ46&9;~)e+P1(L#)v2`(M5 zzR5}(C2mg`As=9=p3=bcFvI)FBYqG_J+gBmfH)!A#lTh<7aeDrOl&3N!yrV%^i=GE fpE8MZ0 Date: Fri, 5 Apr 2019 23:24:43 -0400 Subject: [PATCH 146/372] avoid segfault when catching command line flag errors with EXCEPTIONS enabled --- src/error.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/error.cpp b/src/error.cpp index 913239ac49..7c2d3c5409 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -72,7 +72,9 @@ void Error::universe_all(const char *file, int line, const char *str) #ifdef LAMMPS_EXCEPTIONS // allow commands if an exception was caught in a run - update->whichflag = 0; + // update may be NULL when catching command line errors + + if (update) update->whichflag = 0; char msg[100]; snprintf(msg, 100, "ERROR: %s (%s:%d)\n", str, truncpath(file), line); @@ -97,7 +99,9 @@ void Error::universe_one(const char *file, int line, const char *str) #ifdef LAMMPS_EXCEPTIONS // allow commands if an exception was caught in a run - update->whichflag = 0; + // update may be NULL when catching command line errors + + if (update) update->whichflag = 0; char msg[100]; snprintf(msg, 100, "ERROR: %s (%s:%d)\n", str, truncpath(file), line); @@ -148,7 +152,9 @@ void Error::all(const char *file, int line, const char *str) #ifdef LAMMPS_EXCEPTIONS // allow commands if an exception was caught in a run - update->whichflag = 0; + // update may be NULL when catching command line errors + + if (update) update->whichflag = 0; char msg[100]; snprintf(msg, 100, "ERROR: %s (%s:%d)\n", str, truncpath(file), line); @@ -198,7 +204,9 @@ void Error::one(const char *file, int line, const char *str) #ifdef LAMMPS_EXCEPTIONS // allow commands if an exception was caught in a run - update->whichflag = 0; + // update may be NULL when catching command line errors + + if (update) update->whichflag = 0; char msg[100]; snprintf(msg, 100, "ERROR on proc %d: %s (%s:%d)\n", me, str, truncpath(file), line); From f10534a7213911264cf42eef674535c9b941a7e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Apr 2019 23:56:23 -0400 Subject: [PATCH 147/372] add code to build msi2lmp with CMake --- cmake/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b9a93a110e..69f695dc92 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1446,9 +1446,18 @@ if(BUILD_EXE) if(ENABLE_TESTING) add_test(ShowHelp ${LAMMPS_BINARY} -help) endif() + + enable_language(C) + get_filename_component(MSI2LMP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../tools/msi2lmp/src ABSOLUTE) + file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) + add_executable(msi2lmp ${MSI2LMP_SOURCES}) + target_link_libraries(msi2lmp m) + install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) + endif() + ############################################################################### # Build documentation ############################################################################### From e629733d0b552d5b9050f3418fa6a74d0a2a0d2a Mon Sep 17 00:00:00 2001 From: oywg11 Date: Sat, 6 Apr 2019 10:26:56 +0300 Subject: [PATCH 148/372] change error-all to error-one --- src/USER-MISC/pair_ilp_graphene_hbn.cpp | 8 ++++---- src/USER-MISC/pair_kolmogorov_crespi_full.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index c7d1c9c721..a8c9c686f1 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -448,7 +448,7 @@ void PairILPGrapheneHBN::calc_normal() // the magnitude of the normal vector nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; nn = sqrt(nn2); - if (nn == 0) error->all(FLERR,"The magnitude of the normal vector is zero"); + if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); // the unit normal vector normal[i][0] = n1[0]/nn; normal[i][1] = n1[1]/nn; @@ -591,7 +591,7 @@ void PairILPGrapheneHBN::calc_normal() // the magnitude of the normal vector nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; nn = sqrt(nn2); - if (nn == 0) error->all(FLERR,"The magnitude of the normal vector is zero"); + if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); // the unit normal vector normal[i][0] = n1[0]/nn; normal[i][1] = n1[1]/nn; @@ -631,7 +631,7 @@ void PairILPGrapheneHBN::calc_normal() } } else { - error->all(FLERR,"There are too many neighbors for calculating normals"); + error->one(FLERR,"There are too many neighbors for calculating normals"); } //############################################################################################## @@ -738,7 +738,7 @@ void PairILPGrapheneHBN::ILP_neigh() ILP_firstneigh[i] = neighptr; ILP_numneigh[i] = n; - if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please check your configuration"); + if (n > 3) error->one(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index 7b66a5b41d..39535109cd 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -446,7 +446,7 @@ void PairKolmogorovCrespiFull::calc_normal() // the magnitude of the normal vector nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; nn = sqrt(nn2); - if (nn == 0) error->all(FLERR,"The magnitude of the normal vector is zero"); + if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); // the unit normal vector normal[i][0] = n1[0]/nn; normal[i][1] = n1[1]/nn; @@ -594,7 +594,7 @@ void PairKolmogorovCrespiFull::calc_normal() // the magnitude of the normal vector nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; nn = sqrt(nn2); - if (nn == 0) error->all(FLERR,"The magnitude of the normal vector is zero"); + if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); // the unit normal vector normal[i][0] = n1[0]/nn; normal[i][1] = n1[1]/nn; @@ -634,7 +634,7 @@ void PairKolmogorovCrespiFull::calc_normal() } } else { - error->all(FLERR,"There are too many neighbors for calculating normals"); + error->one(FLERR,"There are too many neighbors for calculating normals"); } //############################################################################################## @@ -742,7 +742,7 @@ void PairKolmogorovCrespiFull::KC_neigh() KC_firstneigh[i] = neighptr; KC_numneigh[i] = n; - if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please check your configuration"); + if (n > 3) error->one(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); From 9334c72c04fba8cbbe17cba1c063d17658f05f66 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 08:59:06 -0400 Subject: [PATCH 149/372] clang can be installed supporting OpenMP without having omp.h installed: add check --- cmake/CMakeLists.txt | 6 +++++- cmake/presets/clang.cmake | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 69f695dc92..2fe3ebe184 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -320,10 +320,15 @@ pkg_depends(USER-LB MPI) pkg_depends(USER-PHONON KSPACE) pkg_depends(USER-SCAFACOS MPI) +include(CheckIncludeFileCXX) find_package(OpenMP QUIET) option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) if(BUILD_OMP) find_package(OpenMP REQUIRED) + check_include_file_cxx(omp.h HAVE_OMP_H_INCLUDE) + if(NOT HAVE_OMP_H_INCLUDE) + message(FATAL_ERROR "Cannot find required 'omp.h' header file") + endif() set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif() @@ -796,7 +801,6 @@ endif() ######################################################################## # Basic system tests (standard libraries, headers, functions, types) # ######################################################################## -include(CheckIncludeFileCXX) foreach(HEADER cmath) check_include_file_cxx(${HEADER} FOUND_${HEADER}) if(NOT FOUND_${HEADER}) diff --git a/cmake/presets/clang.cmake b/cmake/presets/clang.cmake index 224f140dc1..828f359f54 100644 --- a/cmake/presets/clang.cmake +++ b/cmake/presets/clang.cmake @@ -5,6 +5,7 @@ set(CMAKE_C_COMPILER "clang" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS "-Wall -Wextra -g -O2 -DNDEBG" CACHE STRING "" FORCE) set(MPI_CXX "clang++" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) +unset(HAVE_OMP_H_INCLUDE CACHE) set(OpenMP_C "clang" CACHE STRING "" FORCE) set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "" FORCE) From bca7364ba3c015ae44f10c3fecd80615617707a2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 09:21:50 -0400 Subject: [PATCH 150/372] disallow using fdotr for computing virial contributions with reax/c/omp --- src/USER-OMP/pair_reaxc_omp.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index a98f7c89d9..f42e9be36e 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -91,6 +91,7 @@ PairReaxCOMP::PairReaxCOMP(LAMMPS *lmp) : PairReaxC(lmp), ThrOMP(lmp, THR_PAIR) { if (lmp->citeme) lmp->citeme->add(cite_pair_reax_c_omp); + no_virial_fdotr_compute = 1; suffix_flag |= Suffix::OMP; system->pair_ptr = this; system->omp_active = 1; From bcb6e1be4fd272f3ea4d0be0b56b6976b3a5b8de Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 09:45:19 -0400 Subject: [PATCH 151/372] disable fdotr for virial also for regular pair style reax/c --- src/USER-OMP/pair_reaxc_omp.cpp | 2 +- src/USER-REAXC/pair_reaxc.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index f42e9be36e..90846b71f1 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -194,7 +194,7 @@ void PairReaxCOMP::compute(int eflag, int vflag) evdwl = ecoul = 0.0; ev_init(eflag,vflag); - if (vflag_global) control->virial = 1; + if (vflag_either) control->virial = 1; else control->virial = 0; system->n = atom->nlocal; // my atoms diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index a65c738766..cb8338da72 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -73,6 +73,7 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) one_coeff = 1; manybody_flag = 1; ghostneigh = 1; + no_virial_fdotr_compute = 1; system = (reax_system *) memory->smalloc(sizeof(reax_system),"reax:system"); @@ -511,7 +512,7 @@ void PairReaxC::compute(int eflag, int vflag) evdwl = ecoul = 0.0; ev_init(eflag,vflag); - if (vflag_global) control->virial = 1; + if (vflag_either) control->virial = 1; else control->virial = 0; system->n = atom->nlocal; // my atoms From efa8c8d58b9ffba4a287f9d5203e4344c0dc698f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 11:21:43 -0400 Subject: [PATCH 152/372] sanitize file pointer access handling --- src/USER-REAXC/reaxc_io_tools.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp index a4f0db7c7d..51aa8bca0f 100644 --- a/src/USER-REAXC/reaxc_io_tools.cpp +++ b/src/USER-REAXC/reaxc_io_tools.cpp @@ -92,13 +92,15 @@ int Close_Output_Files( reax_system *system, control_params *control, End_Traj( system->my_rank, out_control ); if (system->my_rank == MASTER_NODE) { - if (out_control->energy_update_freq > 0) { + if (out_control->pot) { fclose( out_control->pot ); + out_control->pot = NULL; } - if( control->ensemble == NPT || control->ensemble == iNPT || - control->ensemble == sNPT ) - fclose( out_control->prs ); + if (out_control->prs) { + fclose(out_control->prs); + out_control->prs = NULL; + } } return SUCCESS; @@ -122,7 +124,7 @@ void Output_Results( reax_system *system, control_params *control, out_control->energy_update_freq > 0 && data->step % out_control->energy_update_freq == 0 ) { - if (control->virial) { + if (control->virial && out_control->prs) { fprintf( out_control->prs, "%8d%13.6f%13.6f%13.6f%13.6f%13.6f%13.6f%13.6f\n", data->step, From d6a12f6c3e02dabf8926dd788e2e1d256a1f86c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 11:22:22 -0400 Subject: [PATCH 153/372] roll back ineffective changes and add zeroing of allocated storage --- src/USER-REAXC/pair_reaxc.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index cb8338da72..3f80f2101d 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -73,12 +73,13 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) one_coeff = 1; manybody_flag = 1; ghostneigh = 1; - no_virial_fdotr_compute = 1; system = (reax_system *) memory->smalloc(sizeof(reax_system),"reax:system"); + memset(system,0,sizeof(reax_system)); control = (control_params *) memory->smalloc(sizeof(control_params),"reax:control"); + memset(control,0,sizeof(control_params)); data = (simulation_data *) memory->smalloc(sizeof(simulation_data),"reax:data"); workspace = (storage *) @@ -88,6 +89,7 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp) memset(lists,0,LIST_N * sizeof(reax_list)); out_control = (output_controls *) memory->smalloc(sizeof(output_controls),"reax:out_control"); + memset(out_control,0,sizeof(output_controls)); mpi_data = (mpi_datatypes *) memory->smalloc(sizeof(mpi_datatypes),"reax:mpi"); @@ -512,7 +514,7 @@ void PairReaxC::compute(int eflag, int vflag) evdwl = ecoul = 0.0; ev_init(eflag,vflag); - if (vflag_either) control->virial = 1; + if (vflag_global) control->virial = 1; else control->virial = 0; system->n = atom->nlocal; // my atoms From 8683e1ebf83cb625d7e89ac23623d78d0cec4a44 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 11:24:59 -0400 Subject: [PATCH 154/372] revert ineffective changes --- src/USER-OMP/pair_reaxc_omp.cpp | 3 +-- src/USER-OMP/reaxc_nonbonded_omp.cpp | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index 90846b71f1..a98f7c89d9 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -91,7 +91,6 @@ PairReaxCOMP::PairReaxCOMP(LAMMPS *lmp) : PairReaxC(lmp), ThrOMP(lmp, THR_PAIR) { if (lmp->citeme) lmp->citeme->add(cite_pair_reax_c_omp); - no_virial_fdotr_compute = 1; suffix_flag |= Suffix::OMP; system->pair_ptr = this; system->omp_active = 1; @@ -194,7 +193,7 @@ void PairReaxCOMP::compute(int eflag, int vflag) evdwl = ecoul = 0.0; ev_init(eflag,vflag); - if (vflag_either) control->virial = 1; + if (vflag_global) control->virial = 1; else control->virial = 0; system->n = atom->nlocal; // my atoms diff --git a/src/USER-OMP/reaxc_nonbonded_omp.cpp b/src/USER-OMP/reaxc_nonbonded_omp.cpp index 41b1474791..a93cd54931 100644 --- a/src/USER-OMP/reaxc_nonbonded_omp.cpp +++ b/src/USER-OMP/reaxc_nonbonded_omp.cpp @@ -213,9 +213,9 @@ void vdW_Coulomb_Energy_OMP( reax_system *system, control_params *control, rvec_ScaledSum( delij, 1., system->my_atoms[i].x, -1., system->my_atoms[j].x ); f_tmp = -(CEvd + CEclmb); - pair_reax_ptr->ev_tally_thr_proxy( system->pair_ptr, i, j, natoms, - 1, pe_vdw, e_ele, f_tmp, - delij[0], delij[1], delij[2], thr); + pair_reax_ptr->ev_tally_thr_proxy(system->pair_ptr, i, j, natoms, + 1, pe_vdw, e_ele, f_tmp, + delij[0], delij[1], delij[2], thr); } if (control->virial == 0) { From cb27d03c79c22bc2316e838098d8cb0358e61b59 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 11:27:04 -0400 Subject: [PATCH 155/372] stop with error message when computing per-atom stress for reax/c/omp --- src/USER-OMP/pair_reaxc_omp.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index a98f7c89d9..927a63a90f 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -196,6 +196,10 @@ void PairReaxCOMP::compute(int eflag, int vflag) if (vflag_global) control->virial = 1; else control->virial = 0; + if (vflag_atom) + error->all(FLERR,"Pair style reax/c/omp does not support " + "computing per-atom stress"); + system->n = atom->nlocal; // my atoms system->N = atom->nlocal + atom->nghost; // mine + ghosts system->bigN = static_cast (atom->natoms); // all atoms in the system From 6643a4ec9274c2c661df414a8bf41c04ff07b1e1 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 6 Apr 2019 14:20:21 -0500 Subject: [PATCH 156/372] Fixup FindKIM-API.cmake and clean up some v2 remnants --- cmake/Modules/FindKIM-API.cmake | 6 +++--- src/KIM/kim_query.cpp | 2 +- src/KIM/kim_query.h | 2 +- src/KIM/pair_kim.cpp | 4 ++-- src/KIM/pair_kim.h | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cmake/Modules/FindKIM-API.cmake b/cmake/Modules/FindKIM-API.cmake index d9397b9aba..beef92db59 100644 --- a/cmake/Modules/FindKIM-API.cmake +++ b/cmake/Modules/FindKIM-API.cmake @@ -41,9 +41,9 @@ include(FindPackageHandleStandardArgs) pkg_check_modules(KIM-API REQUIRED libkim-api>=2.0) -pkg_get_variable(KIM-API-V2-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER) -pkg_get_variable(KIM-API-V2-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER) -pkg_get_variable(KIM-API-V2_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER) +pkg_get_variable(KIM-API-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER) +pkg_get_variable(KIM-API-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER) +pkg_get_variable(KIM-API_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER) # handle the QUIETLY and REQUIRED arguments and set KIM-API_FOUND to TRUE # if all listed variables are TRUE diff --git a/src/KIM/kim_query.cpp b/src/KIM/kim_query.cpp index 7480703ce8..fedc976110 100644 --- a/src/KIM/kim_query.cpp +++ b/src/KIM/kim_query.cpp @@ -52,7 +52,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2-2.0.0 (and newer) package + Designed for use with the kim-api-2.0.2 (and newer) package ------------------------------------------------------------------------- */ #include diff --git a/src/KIM/kim_query.h b/src/KIM/kim_query.h index ed5a7c88f3..3644e4519b 100644 --- a/src/KIM/kim_query.h +++ b/src/KIM/kim_query.h @@ -51,7 +51,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2-2.0.0 (and newer) package + Designed for use with the kim-api-2.0.2 (and newer) package ------------------------------------------------------------------------- */ #ifdef COMMAND_CLASS diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index ea5f24a67e..157a782f20 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -50,7 +50,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2-2.0.0 (and newer) package + Designed for use with the kim-api-2.0.2 (and newer) package ------------------------------------------------------------------------- */ #include @@ -313,7 +313,7 @@ void PairKIM::settings(int narg, char **arg) (0 == strcmp("LAMMPSvirial", arg[0])))) { error->all(FLERR,"'KIMvirial' or 'LAMMPSvirial' not supported with " - "kim-api-v2."); + "kim-api."); } else error->all(FLERR,"Illegal pair_style command"); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index a6f882347d..27bab6c687 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -50,7 +50,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2-2.0.0 (and newer) package + Designed for use with the kim-api-2.0.2 (and newer) package ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS @@ -182,9 +182,9 @@ E: KIM Compute returned error The KIM model was unable, for some reason, to complete the computation. -E: 'KIMvirial' or 'LAMMPSvirial' not supported with kim-api-v2. +E: 'KIMvirial' or 'LAMMPSvirial' not supported with kim-api. -"KIMvirial or "LAMMPSvirial" found on the pair_style line. These keys are not supported kim-api-v2. (The virial computation is always performed by LAMMPS.) Please remove these keys, make sure the KIM model you are using supports kim-api-v2, and rerun. +"KIMvirial or "LAMMPSvirial" found on the pair_style line. These keys are not supported kim-api. (The virial computation is always performed by LAMMPS.) Please remove these keys, make sure the KIM model you are using supports kim-api, and rerun. E: Illegal pair_style command From 47b74379762a42f63c3fd679bd0a13b873f60422 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 6 Apr 2019 15:08:15 -0500 Subject: [PATCH 157/372] Have FindKIM-API.cmake work in QUIET mode --- cmake/Modules/FindKIM-API.cmake | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/cmake/Modules/FindKIM-API.cmake b/cmake/Modules/FindKIM-API.cmake index beef92db59..5108b0f98c 100644 --- a/cmake/Modules/FindKIM-API.cmake +++ b/cmake/Modules/FindKIM-API.cmake @@ -36,14 +36,23 @@ # KIM-API-CMAKE_CXX_COMPILER # KIM-API-CMAKE_Fortran_COMPILER # -find_package(PkgConfig REQUIRED) + +if(KIM-API_FIND_QUIETLY) + set(REQ_OR_QUI "QUIET") +else() + set(REQ_OR_QUI "REQUIRED") +endif() + +find_package(PkgConfig ${REQ_OR_QUI}) include(FindPackageHandleStandardArgs) -pkg_check_modules(KIM-API REQUIRED libkim-api>=2.0) +pkg_check_modules(KIM-API ${REQ_OR_QUI} libkim-api>=2.0) -pkg_get_variable(KIM-API-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER) -pkg_get_variable(KIM-API-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER) -pkg_get_variable(KIM-API_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER) +if(KIM-API_FOUND) + pkg_get_variable(KIM-API-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER) + pkg_get_variable(KIM-API-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER) + pkg_get_variable(KIM-API_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER) +endif() # handle the QUIETLY and REQUIRED arguments and set KIM-API_FOUND to TRUE # if all listed variables are TRUE From 3070a110413d88e2356a2db168924ba5272d6b3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 16:23:10 -0400 Subject: [PATCH 158/372] guard against extracting too many elements from the MEAM library into the statically sized arrays this will abort with a meaningful error message and people can fix up their LAMMPS binary as needed. --- src/USER-MEAMC/pair_meamc.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/USER-MEAMC/pair_meamc.cpp b/src/USER-MEAMC/pair_meamc.cpp index 3a934694bf..a70fb77aae 100644 --- a/src/USER-MEAMC/pair_meamc.cpp +++ b/src/USER-MEAMC/pair_meamc.cpp @@ -226,6 +226,9 @@ void PairMEAMC::coeff(int narg, char **arg) } nelements = narg - 4 - atom->ntypes; if (nelements < 1) error->all(FLERR,"Incorrect args for pair coefficients"); + if (nelements > maxelt) + error->all(FLERR,"Too many elements extracted from MEAM library. " + "Increase 'maxelt' in meam.h and recompile."); elements = new char*[nelements]; mass = new double[nelements]; From 59a4d422319fbf1f158395b4b56dc205f7428035 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 16:47:48 -0400 Subject: [PATCH 159/372] make default CMake setting for DOWNLOAD_KIM depend on whether the KIM API is found or not --- cmake/CMakeLists.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2fe3ebe184..4c83269563 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -690,7 +690,12 @@ if(PKG_KIM) list(APPEND LAMMPS_LINK_LIBS ${CURL_LIBRARIES}) add_definitions(-DLMP_KIM_CURL) endif() - option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" OFF) + find_package(KIM-API QUIET) + if(KIM-API_FOUND) + option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" OFF) + else() + option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ON) + endif() if(DOWNLOAD_KIM) message(STATUS "KIM-API download requested - we will build our own") enable_language(C) @@ -711,10 +716,7 @@ if(PKG_KIM) set(KIM-API_LDFLAGS ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}) list(APPEND LAMMPS_DEPS kim_build) else() - find_package(KIM-API) - if(NOT KIM-API_FOUND) - message(FATAL_ERROR "KIM-API not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it") - endif() + find_package(KIM-API REQUIRED) endif() list(APPEND LAMMPS_LINK_LIBS "${KIM-API_LDFLAGS}") include_directories(${KIM-API_INCLUDE_DIRS}) From 86f4080b71bab8d70b382a893b113a22140c3105 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 16:48:29 -0400 Subject: [PATCH 160/372] some dead code removal in pair style kim. --- src/KIM/pair_kim.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 157a782f20..eee9c1c4e9 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -189,8 +189,6 @@ void PairKIM::set_contributing() void PairKIM::compute(int eflag , int vflag) { - int kimerror; - ev_init(eflag,vflag); // grow kim_particleSpecies and kim_particleContributing array if necessary @@ -238,7 +236,7 @@ void PairKIM::compute(int eflag , int vflag) lmps_local_tot_num_atoms = (int) nall; // compute via KIM model - kimerror = KIM_Model_Compute(pkim, pargs); + int kimerror = KIM_Model_Compute(pkim, pargs); if (kimerror) error->all(FLERR,"KIM Compute returned error"); // compute virial before reverse comm! @@ -434,10 +432,9 @@ void PairKIM::coeff(int narg, char **arg) kim_particle_codes = new int[lmps_num_unique_elements]; kim_particle_codes_ok = true; for(int i = 0; i < lmps_num_unique_elements; i++){ - int kimerror; int supported; int code; - kimerror = KIM_Model_GetSpeciesSupportAndCode( + KIM_Model_GetSpeciesSupportAndCode( pkim, KIM_SpeciesName_FromString(lmps_unique_elements[i]), &supported, @@ -468,8 +465,6 @@ void PairKIM::init_style() if (domain->dimension != 3) error->all(FLERR,"PairKIM only works with 3D problems"); - int kimerror; - // setup lmps_stripped_neigh_list for neighbors of one atom, if needed if (lmps_using_molecular) { memory->destroy(lmps_stripped_neigh_list); @@ -720,9 +715,8 @@ int PairKIM::get_neigh(void const * const dataObject, *numberOfNeighbors = 0; NeighList * neiobj = Model->neighborLists[neighborListIndex]; - int nAtoms = Model->lmps_local_tot_num_atoms; - int j, jj, inum, *ilist, *numneigh, **firstneigh; + int inum, *ilist, *numneigh, **firstneigh; inum = neiobj->inum; //# of I atoms neighbors are stored for ilist = neiobj->ilist; //local indices of I atoms numneigh = neiobj->numneigh; // # of J neighbors for each I atom @@ -750,8 +744,6 @@ int PairKIM::get_neigh(void const * const dataObject, void PairKIM::kim_free() { - int kimerror; - if (kim_init_ok) { int kimerror = KIM_Model_ComputeArgumentsDestroy(pkim, &pargs); From f98aed419c2d3a61e8f8fa8eb91c8ecf73683bd4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 17:03:24 -0400 Subject: [PATCH 161/372] document the 'maxelt' define in pair style meam/c and how to change it --- doc/src/pair_meamc.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/src/pair_meamc.txt b/doc/src/pair_meamc.txt index b57339b180..80f69b1a46 100644 --- a/doc/src/pair_meamc.txt +++ b/doc/src/pair_meamc.txt @@ -357,6 +357,13 @@ The {meam/c} style is provided in the USER-MEAMC package. It is only enabled if LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. +The maximum number of elements, that can be read from the MEAM +library file, is determined at compile time. The default is 5. +If you need support for more elements, you have to change the +define for the constant 'maxelt' at the beginning of the file +src/USER-MEAMC/meam.h and update/recompile LAMMPS. There is no +limit on the number of atoms types. + [Related commands:] "pair_coeff"_pair_coeff.html, "pair_style eam"_pair_eam.html, From 8c02ce730205c718f526a3aab2697f478b42e2e3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 17:03:40 -0400 Subject: [PATCH 162/372] silence some compiler warnings --- src/VORONOI/compute_voronoi_atom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VORONOI/compute_voronoi_atom.cpp b/src/VORONOI/compute_voronoi_atom.cpp index f884530fd9..860126fa77 100644 --- a/src/VORONOI/compute_voronoi_atom.cpp +++ b/src/VORONOI/compute_voronoi_atom.cpp @@ -642,7 +642,7 @@ void ComputeVoronoi::compute_local() /* ---------------------------------------------------------------------- */ int ComputeVoronoi::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /* pbc_flag */, int * /* pbc */) { int i,m=0; for (i = 0; i < n; ++i) buf[m++] = rfield[list[i]]; From 72b69783decf82415b4119152228c113c8f7cdca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 17:17:17 -0400 Subject: [PATCH 163/372] add download-default-if-not-found logic to voro++ library for VORONOI package --- cmake/CMakeLists.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 4c83269563..91b5fe5377 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -448,7 +448,13 @@ endif() if(PKG_VORONOI) - option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" OFF) + find_package(VORO QUIET) + if(VORO_FOUND) + set(DOWNLOAD_VORO_DEFAULT OFF) + else() + set(DOWNLOAD_VORO_DEFAULT ON) + endif() + option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) if(DOWNLOAD_VORO) message(STATUS "Voro++ download requested - we will build our own") include(ExternalProject) @@ -692,10 +698,11 @@ if(PKG_KIM) endif() find_package(KIM-API QUIET) if(KIM-API_FOUND) - option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" OFF) + set(DOWNLOAD_KIM_DEFAULT OFF) else() - option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ON) + set(DOWNLOAD_KIM_DEFAULT ON) endif() + option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) if(DOWNLOAD_KIM) message(STATUS "KIM-API download requested - we will build our own") enable_language(C) From cb398bd0267e1d8c205551c0767c0147d8ba9e2d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 17:23:37 -0400 Subject: [PATCH 164/372] silence some more compiler warnings --- src/KIM/pair_kim.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index eee9c1c4e9..a1c13ae81f 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -671,9 +671,9 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) va[j*6+4]+=buf[m++]; va[j*6+5]+=buf[m++]; } + } else { + ; // do nothing } - else - ;// do nothing return; } @@ -716,9 +716,7 @@ int PairKIM::get_neigh(void const * const dataObject, NeighList * neiobj = Model->neighborLists[neighborListIndex]; - int inum, *ilist, *numneigh, **firstneigh; - inum = neiobj->inum; //# of I atoms neighbors are stored for - ilist = neiobj->ilist; //local indices of I atoms + int *numneigh, **firstneigh; numneigh = neiobj->numneigh; // # of J neighbors for each I atom firstneigh = neiobj->firstneigh; // ptr to 1st J int value of each I atom @@ -1035,10 +1033,10 @@ void PairKIM::set_kim_model_has_flags() for (int i = 0; i < numberOfComputeArgumentNames; ++i) { KIM_ComputeArgumentName computeArgumentName; - int kimerror = KIM_COMPUTE_ARGUMENT_NAME_GetComputeArgumentName( + KIM_COMPUTE_ARGUMENT_NAME_GetComputeArgumentName( i, &computeArgumentName); KIM_SupportStatus supportStatus; - kimerror = KIM_ComputeArguments_GetArgumentSupportStatus( + KIM_ComputeArguments_GetArgumentSupportStatus( pargs, computeArgumentName, &supportStatus); if (KIM_ComputeArgumentName_Equal(computeArgumentName, @@ -1097,10 +1095,10 @@ void PairKIM::set_kim_model_has_flags() for (int i = 0; i < numberOfComputeCallbackNames; ++i) { KIM_ComputeCallbackName computeCallbackName; - int kimerror = KIM_COMPUTE_CALLBACK_NAME_GetComputeCallbackName( + KIM_COMPUTE_CALLBACK_NAME_GetComputeCallbackName( i, &computeCallbackName); KIM_SupportStatus supportStatus; - kimerror = KIM_ComputeArguments_GetCallbackSupportStatus( + KIM_ComputeArguments_GetCallbackSupportStatus( pargs, computeCallbackName, &supportStatus); if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required)) From 494e76da7d3db4b5ecaae5dd36419c9f9f0db46c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 17:29:04 -0400 Subject: [PATCH 165/372] add false positive --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 0596179daa..c6d301f2fe 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1543,6 +1543,7 @@ Mattox Mattson maxangle maxbond +maxelt maxeval maxfiles Maxfoo From b25657c67bbfab5ad35c36c42672ad8f7ed70940 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 17:49:56 -0400 Subject: [PATCH 166/372] trigger download by default if not found for LATTE package/library --- cmake/CMakeLists.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 91b5fe5377..47a37f1db5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -448,7 +448,7 @@ endif() if(PKG_VORONOI) - find_package(VORO QUIET) + find_package(VORO) if(VORO_FOUND) set(DOWNLOAD_VORO_DEFAULT OFF) else() @@ -487,7 +487,13 @@ if(PKG_VORONOI) endif() if(PKG_LATTE) - option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" OFF) + find_package(LATTE) + if(LATTE_FOUND) + set(DOWNLOAD_LATTE_DEFAULT OFF) + else() + set(DOWNLOAD_LATTE_DEFAULT ON) + endif() + option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT}) if(DOWNLOAD_LATTE) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") From 3b43fc3ea7de5d2b245dc2a7baa3ab71d3b57b35 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 20:41:00 -0400 Subject: [PATCH 167/372] install msi2lmp force field files and set environment variable, so they can be found automatically --- cmake/CMakeLists.txt | 5 ++++- cmake/etc/profile.d/lammps.csh.in | 4 +++- cmake/etc/profile.d/lammps.sh.in | 7 +++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 47a37f1db5..d17e9dab19 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1538,11 +1538,14 @@ if(BUILD_DOC) endif() ############################################################################### -# Install potential files in data directory +# Install potential and force field files in data directory ############################################################################### set(LAMMPS_POTENTIALS_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/potentials) install(DIRECTORY ${LAMMPS_SOURCE_DIR}/../potentials/ DESTINATION ${LAMMPS_POTENTIALS_DIR}) +set(LAMMPS_FRC_FILES_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/frc_files) +install(DIRECTORY ${LAMMPS_SOURCE_DIR}/../tools/msi2lmp/frc_files/ DESTINATION ${LAMMPS_FRC_FILES_DIR}) + configure_file(etc/profile.d/lammps.sh.in ${CMAKE_BINARY_DIR}/etc/profile.d/lammps.sh @ONLY) configure_file(etc/profile.d/lammps.csh.in ${CMAKE_BINARY_DIR}/etc/profile.d/lammps.csh @ONLY) install( diff --git a/cmake/etc/profile.d/lammps.csh.in b/cmake/etc/profile.d/lammps.csh.in index def49bf75c..42f222d67c 100644 --- a/cmake/etc/profile.d/lammps.csh.in +++ b/cmake/etc/profile.d/lammps.csh.in @@ -1,2 +1,4 @@ -# set environment for LAMMPS executables to find potential files +# set environment for LAMMPS and msi2lmp executables +# to find potential and force field files if ( "$?LAMMPS_POTENTIALS" == 0 ) setenv LAMMPS_POTENTIALS @LAMMPS_POTENTIALS_DIR@ +if ( "$?MSI2LMP_LIBRARY" == 0 ) setenv MSI2LMP_LIBRARY @LAMMPS_FRC_FILES_DIR@ diff --git a/cmake/etc/profile.d/lammps.sh.in b/cmake/etc/profile.d/lammps.sh.in index acd75fa0cf..c1967cb5b2 100644 --- a/cmake/etc/profile.d/lammps.sh.in +++ b/cmake/etc/profile.d/lammps.sh.in @@ -1,2 +1,5 @@ -# set environment for LAMMPS executables to find potential files -export LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS-@LAMMPS_POTENTIALS_DIR@} +# set environment for LAMMPS and msi2lmp executables +# to find potential and force field files +LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS-@LAMMPS_POTENTIALS_DIR@} +MSI2LMP_LIBRARY=${MSI2LMP_LIBRARY-@LAMMPS_FRC_FILES_DIR@} +export LAMMPS_POTENTIALS MSI2LMP_LIBRARY From a6c9a782a4fd5b39373f649d7287829e90f90d25 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 23:41:48 -0400 Subject: [PATCH 168/372] add manpage for msi2lmp --- cmake/CMakeLists.txt | 1 + doc/msi2lmp.1 | 111 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 doc/msi2lmp.1 diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d17e9dab19..722c0992ba 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1472,6 +1472,7 @@ if(BUILD_EXE) add_executable(msi2lmp ${MSI2LMP_SOURCES}) target_link_libraries(msi2lmp m) install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) endif() diff --git a/doc/msi2lmp.1 b/doc/msi2lmp.1 new file mode 100644 index 0000000000..08a442e1de --- /dev/null +++ b/doc/msi2lmp.1 @@ -0,0 +1,111 @@ +.TH MSI2LMP "v3.9.9" "2018-11-05" +.SH NAME +.B MSI2LMP +\- Converter for Materials Studio files to LAMMPS + +.SH SYNOPSIS +.B msi2lmp + [-class ] [-frc ] [-print #] [-ignore] [-nocenter] [-oldstyle] [-shift ] + +.SH DESCRIPTION +.PP +.B MSI2LMP +is a tool bundled with LAMMPS to aide in the conversion of simulation +inputs from Biovia's Materials Studio software for use with LAMMPS. +It is a standalone program that generates a LAMMPS data file based on +the information in an MS .car file (atom coordinates), an .mdf file +(molecular topology and atom types) and an .frc (forcefield parameters) +file. The .car and .mdf files are specific to a molecular system while +the .frc file is specific to a forcefield (variant). The only coherency +needed between .frc and .car/.mdf files are the atom types. +.PP + +.SH OPTIONS +.TP +\fB\\fR +This has to be the first argument and is a +.B mandatory +argument. It defines the root of the file names; i.e. for a +.B +of benzene, you have to provide the files 'benzene.car' and 'benzene.mdf' +in the current working directory. +.B msi2lmp +will then read and process those files according to its remaining settings. +All other settins are optional and have defaults as listed. +.TP +\fB\-c \fR, \fB\-class \fR +The \-c or \-class option selects the force field class, i.e which pair +styles and bond styles and so on are required in the LAMMPS input file. +Class I or class 1 uses similar combination of functional forms as Amber +and Charmm force field and support the force fields +.B cvff +and +.B clayff. +Class II or class 2 corresponds to the more complex force fields +.B COMPASS +and +.B pcff. +Class O or class 0 finally is an experimental and incomplete extension +and supports generating output for +.B OPLS-AA +.TP +\fB\-f \fR, \fB\-frc \fR +The \-c or \-frc option allows the selection of the force field parameter +file +.B.frc. +Valid names for with this distribution are: cvff, clayff, cvff_aug, +pcff, compass_published, cff91, and oplsaa. If the argument is a pathname, +i.e. it starts with a '.' or a '/', then this absolute path is used to read +the force field, otherwise +.B msi2lmp +will look in the folder pointed to by the environment variable +$MSI2LMP_LIBRARY. If the variable is not set, then it will look in the current +directory. The extension '.frc' is appended, if missing. +Default is to look for the cvff.frc force field file. +.TP +\fB\-p \fR, \fB\-print \fR, +Selects the amount of information messages about the progress of the +conversion printed to the screen. +.B +can be a number from 0 (silent except for errors) to 3 (very detailed). +.TP +\fB\-i\fR, \fB\-ignore\fR, +Ignore errors about missing parameters and use 0.0 for the respective +force constants making these no-ops. Is correct to be used for a few +molecules and settings, but often an indication, that either the atom +type assignment have errors, or the force field file is missing entries. +.TP +\fB\-n\fR, \fB\-nocenter\fR, +Do not center the box around the (geometrical) center of the atoms, +but around the origin. Default is to recenter. +.TP +\fB\-o\fR, \fB\-oldstyle\fR, +Write out a data file without style hint comments to be compatible +with old LAMMPS versions. Default is to write out those comments. +.TP +\fB-s \fR, \fB-shift \fR, +Shift the entire system (box and coordinates) by a vector +(default: 0.0 0.0 0.0). +.TP + +.SH EXAMPLES + +msi2lmp benzene -c 2 -p 1 -f ../frc_files/pcff.frc + +msi2lmp benzene-class1 -c I + +msi2lmp decane -c 0 -f oplsaa + + +.SH COPYRIGHT +© 2003--2019 Sandia Corporation + +This package is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This package 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. + From 1dd21e6e0cb388cfb90369fa0ee62342abbcbe1a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 23:44:27 -0400 Subject: [PATCH 169/372] make downloaded LATTE library use the same BLAS/LAPACK as LAMMPS --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 722c0992ba..45698d2214 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -504,7 +504,7 @@ if(PKG_LATTE) URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz URL_MD5 85ac414fdada2d04619c8f936344df14 SOURCE_SUBDIR cmake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} ) ExternalProject_get_property(latte_build INSTALL_DIR) set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) From b40c4d1641e2cf6ea76e468be84c4aa5e25870ca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 6 Apr 2019 23:45:01 -0400 Subject: [PATCH 170/372] update version number and some reformatting of the LAMMPS manpage --- doc/lammps.1 | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index d49650bfaa..bf5891541f 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,25 +1,25 @@ -.TH LAMMPS "2018-08-22" +.TH LAMMPS "11 April 2019" "2019-04-11" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. .SH SYNOPSIS -.B lmp +.B lmp -in in.file or -mpirun \-np 2 -.B lmp +mpirun \-np 2 +.B lmp -in in.file .SH DESCRIPTION -.B LAMMPS -LAMMPS is a classical molecular dynamics code, and an acronym for Large-scale -Atomic/Molecular Massively Parallel Simulator. LAMMPS has potentials for soft -materials (biomolecules, polymers) and solid-state materials (metals, -semiconductors) and coarse-grained or mesoscopic systems. It can be used to -model atoms or, more generically, as a parallel particle simulator at the +.B LAMMPS +is a classical molecular dynamics code, and an acronym for Large-scale +Atomic/Molecular Massively Parallel Simulator. LAMMPS has potentials for soft +materials (biomolecules, polymers) and solid-state materials (metals, +semiconductors) and coarse-grained or mesoscopic systems. It can be used to +model atoms or, more generically, as a parallel particle simulator at the atomic, meso, or continuum scale. See http://lammps.sandia.gov/ for documentation. @@ -28,8 +28,8 @@ See http://lammps.sandia.gov/ for documentation. See https://lammps.sandia.gov/doc/Run_options.html for details on command-line options. -.SH COPYRIGHT -© 2003--2018 Sandia Corporation +.SH COPYRIGHT +© 2003--2019 Sandia Corporation This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From e57e4a730bff3e3213ba512dcb470d34293cbbbb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 00:45:57 -0400 Subject: [PATCH 171/372] more packages with default-to-download-if-lib-not-found --- cmake/CMakeLists.txt | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 45698d2214..788989a68f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -575,7 +575,16 @@ if(PKG_USER-PLUMED) validate_option(PLUMED_MODE PLUMED_MODE_VALUES) string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) - option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" OFF) + find_package(PkgConfig QUIET) + set(DOWNLOAD_PLUMED_DEFAULT ON) + if(PKG_CONFIG_FOUND) + pkg_check_modules(PLUMED QUIET plumed) + if(PLUMED_FOUND) + set(DOWNLOAD_PLUMED_DEFAULT OFF) + endif() + endif() + + option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) if(DOWNLOAD_PLUMED) if(BUILD_MPI) set(PLUMED_CONFIG_MPI "--enable-mpi") @@ -620,7 +629,7 @@ if(PKG_USER-PLUMED) set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") else() find_package(PkgConfig REQUIRED) - pkg_check_modules(PLUMED plumed REQUIRED) + pkg_check_modules(PLUMED REQUIRED plumed) if(PLUMED_MODE STREQUAL "STATIC") add_definitions(-D__PLUMED_WRAPPER_CXX=1) include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) @@ -654,7 +663,13 @@ if(PKG_USER-NETCDF) endif() if(PKG_USER-SMD) - option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" OFF) + find_package(Eigen3 NO_MODULE) + if(EIGEN3_FOUND) + set(DOWNLOAD_EIGEN3_DEFAULT OFF) + else() + set(DOWNLOAD_EIGEN3_DEFAULT ON) + endif() + option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT}) if(DOWNLOAD_EIGEN3) message(STATUS "Eigen3 download requested - we will build our own") include(ExternalProject) @@ -767,7 +782,13 @@ endif() if(PKG_MSCG) find_package(GSL REQUIRED) - option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" OFF) + find_package(MSCG QUIET) + if(MSGC_FOUND) + set(DOWNLOAD_MSCG_DEFAULT OFF) + else() + set(DOWNLOAD_MSCG_DEFAULT ON) + endif() + option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT}) if(DOWNLOAD_MSCG) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") From 6f7b3643ef9c5e6a8440ad6b713cc2c851f1153c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 00:46:43 -0400 Subject: [PATCH 172/372] document clang/clang++ preset with settings for MPI and OpenMP --- doc/src/Build_package.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index e37936e052..02d7e7b763 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -159,6 +159,8 @@ cmake -C ../cmake/presets/most.cmake \[OPTIONS\] ../cmake | enable most common packages | cmake -C ../cmake/presets/nolib.cmake \[OPTIONS\] ../cmake | disable packages that do require extra libraries or tools | +cmake -C ../cmake/presets/clang.cmake \[OPTIONS\] ../cmake | + change settings to use the CLang compilers by default | cmake -C ../cmake/presets/mingw.cmake \[OPTIONS\] ../cmake | enable all packages compatible with MinGW compilers :tb(c=2,s=|,a=l) From 13cf357f665e6fc28e8c83bfe3b24d72abfed00b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 00:47:10 -0400 Subject: [PATCH 173/372] document in README, that msi2lmp is now build alongside LAMMPS --- tools/msi2lmp/README | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/msi2lmp/README b/tools/msi2lmp/README index 9ac7af5607..bd658d897e 100644 --- a/tools/msi2lmp/README +++ b/tools/msi2lmp/README @@ -49,8 +49,12 @@ This program uses the .car and .mdf files from MSI/Biosyms's INSIGHT 1. Building msi2lmp - Use the Makefile in the src directory. It is - currently set up for gcc. You will have to modify + If you are using CMake to compile LAMMPS, the building + (and installation) of msi2lmp is included in the normal + build process. + + Otherwise you can use the Makefile in the src directory. + It is currently set up for gcc. You will have to modify it to use a different compiler. 2. Testing the program From e57c4c60bd8c27fa18259c6a777bb55f19e49775 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 05:59:28 -0400 Subject: [PATCH 174/372] fix spelling issue --- doc/src/Build_package.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index 02d7e7b763..401f53f638 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -160,7 +160,7 @@ cmake -C ../cmake/presets/most.cmake \[OPTIONS\] ../cmake | cmake -C ../cmake/presets/nolib.cmake \[OPTIONS\] ../cmake | disable packages that do require extra libraries or tools | cmake -C ../cmake/presets/clang.cmake \[OPTIONS\] ../cmake | - change settings to use the CLang compilers by default | + change settings to use the Clang compilers by default | cmake -C ../cmake/presets/mingw.cmake \[OPTIONS\] ../cmake | enable all packages compatible with MinGW compilers :tb(c=2,s=|,a=l) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index c6d301f2fe..a845673715 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -349,6 +349,7 @@ Cii Cij cis civ +Clang clearstore Cleary Clebsch From 8c4a497af4c21436436d89130482bb66ad7a9e4f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 06:10:39 -0400 Subject: [PATCH 175/372] set default to automatically download scafacos lib if not found --- cmake/CMakeLists.txt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 788989a68f..69aff2d72d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -520,7 +520,15 @@ endif() if(PKG_USER-SCAFACOS) find_package(GSL REQUIRED) - option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" OFF) + find_package(PkgConfig QUIET) + set(DOWNLOAD_SCAFACOS_DEFAULT ON) + if(PKG_CONFIG_FOUND) + pkg_check_modules(SCAFACOS QUIET scafacos) + if(SCAFACOS_FOUND) + set(DOWNLOAD_SCAFACOS_DEFAULT OFF) + endif() + endif() + option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) if(DOWNLOAD_SCAFACOS) message(STATUS "ScaFaCoS download requested - we will build our own") include(ExternalProject) @@ -560,8 +568,8 @@ if(PKG_USER-SCAFACOS) list(APPEND LAMMPS_LINK_LIBS ${MPI_Fortran_LIBRARIES}) list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) else() - FIND_PACKAGE(PkgConfig REQUIRED) - PKG_CHECK_MODULES(SCAFACOS scafacos REQUIRED) + find_package(PkgConfig REQUIRED) + pkg_check_modules(SCAFACOS REQUIRED scafacos) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_LDFLAGS}) endif() include_directories(${SCAFACOS_INCLUDE_DIRS}) From 5c5b57be5a2f43d7bba4a027711c648e5eb0c300 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 10:34:25 -0400 Subject: [PATCH 176/372] minor tweaks --- doc/src/Run_options.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index 9c12b3ff24..1c3cb60c5f 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -79,7 +79,7 @@ stdin. Explicitly enable or disable KOKKOS support, as provided by the KOKKOS package. Even if LAMMPS is built with this package, as described in "Speed kokkos"_Speed_kokkos.html, this switch must be set to enable -running with the KOKKOS-enabled styles the package provides. If the +running with KOKKOS-enabled styles the package provides. If the switch is not set (the default), LAMMPS will operate as if the KOKKOS package were not installed; i.e. you can run standard LAMMPS or with the GPU or USER-OMP packages, for testing or benchmarking purposes. @@ -448,7 +448,7 @@ partition screen files file.N. [-suffix style args] :link(suffix) Use variants of various styles if they exist. The specified style can -be {cuda}, {gpu}, {intel}, {kk}, {omp}, {opt}, or {hybrid}. These +be {gpu}, {intel}, {kk}, {omp}, {opt}, or {hybrid}. These refer to optional packages that LAMMPS can be built with, as described in "Accelerate performance"_Speed.html. The "gpu" style corresponds to the GPU package, the "intel" style to the USER-INTEL package, the "kk" From cb559659f80aca207fb44e568fc8af41e1add2f0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 10:35:00 -0400 Subject: [PATCH 177/372] write a full-fledged LAMMPS manpage. --- doc/lammps.1 | 241 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 230 insertions(+), 11 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index bf5891541f..4686198fef 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -5,36 +5,255 @@ .SH SYNOPSIS .B lmp --in in.file +\-in [OPTIONS] ... or mpirun \-np 2 .B lmp --in in.file + [OPTIONS] ... + +or + +.B lmp +\-r2data file.restart file.data .SH DESCRIPTION .B LAMMPS -is a classical molecular dynamics code, and an acronym for Large-scale -Atomic/Molecular Massively Parallel Simulator. LAMMPS has potentials for soft -materials (biomolecules, polymers) and solid-state materials (metals, +is a classical molecular dynamics code, and an acronym for \fBL\fRarge-scale +\fBA\fRtomic/\fBM\fRolecular \fBM\fRassively \fBP\fRarallel \fBS\fRimulator. +.B LAMMPS +has potentials for soft +materials (bio-molecules, polymers) and solid-state materials (metals, semiconductors) and coarse-grained or mesoscopic systems. It can be used to model atoms or, more generically, as a parallel particle simulator at the atomic, meso, or continuum scale. -See http://lammps.sandia.gov/ for documentation. +See https://lammps.sandia.gov/ for more information and documentation. + +.SH EXECUTABLE NAME +The +.B LAMMPS +executable can have different names depending on how it was configured, +compiled and installed. It will be either +.B lmp +or +.B lmp_. +The suffix corresponds to the (machine specific) makefile +used to compile +.B LAMMPS +when using the conventional build process. When building +.B LAMMPS +using +.B CMake +this parameter can be chosen arbitrarily at configuration +time, but more common is to just use +.B lmp +without a suffix. In this manpage we will use +.B lmp +to represent any of those names. .SH OPTIONS -See https://lammps.sandia.gov/doc/Run_options.html for details on -command-line options. + +.TP +\fB\-h\fR or \fB\-help\fR +Print a brief help summary and a list of settings and options compiled +into this executable. It also explicitly lists all LAMMPS styles +(atom_style, fix, compute, pair_style, bond_style, etc) available in +the specific executable. This can tell you if the command you want to +use was included via the appropriate package at compile time. +LAMMPS will print the info and immediately exit if this switch is used. +.TP +\fB\-e\fR or \fB\-echo\fR +Set the style of command echoing. The style can be +.B none +or +.B screen +or +.B log +or +.B both. +Depending on the style, each command read from the input script will +be echoed to the screen and/or logfile. This can be useful to figure +out which line of your script is causing an input error. +The default value is +.B log. +.TP +\fB\-i \fR or \fB\-in \fR +Specify a file to use as an input script. If it is not specified, +LAMMPS reads its script from standard input. This is a required +switch when running LAMMPS in multi-partition mode. +.TP +\fB\-k on/off [keyword value]\fR or \fB\-kokkos on/off [keyword value]\fR +Enable or disable general KOKKOS support, as provided by the KOKKOS +package. Even if LAMMPS is built with this package, this switch must +be set to \fBon\fR to enable running with KOKKOS-enabled styles. More +details on this switch and its optional keyword value pairs are discussed +at: https://lammps.sandia.gov/doc/Run_options.html +.TP +\fB\-l \fR or \fB\-log \fR +Specify a log file for LAMMPS to write status information to. +The default value is "log.lammps". If the file name "none" is used, +\fBLAMMPS\fR will not write a log file. In multi-partition mode only +some high-level all-partition information is written to the "" +file, the remainder is written in a per-partition file ".N" +with "N" being the respective partition number, unless overridden +by the \-plog flag (see below). +.TP +\fB\-m \fR or \fB\-mpicolor \fR +If used, this must be the first command-line argument after the +.B LAMMPS +executable name. It is only used when +.B LAMMPS +is launched by an mpirun command which also launches one or more +other executable(s) at the same time. +.B LAMMPS +and the other executable(s) perform an MPI_Comm_split(), each with +their own different colors, to split the MPI_COMM_WORLD communicator +for each executable to the subset of processors they are supposed to +be actually running on. Currently, this is only used in +.B LAMMPS +to perform client/server messaging with another application. +.B LAMMPS +can act as either a client or server (or both). +.TP +\fB\-nc\fR or \fB\-nocite\fR +Disable writing the "log.cite" file which is normally written to +list references for specific cite-able features used during a +.B LAMMPS +run. +.TP +\fB\-pk