mlmm-toolkit 0.2.2.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. hessian_ff/__init__.py +50 -0
  2. hessian_ff/analytical_hessian.py +609 -0
  3. hessian_ff/constants.py +46 -0
  4. hessian_ff/forcefield.py +339 -0
  5. hessian_ff/loaders.py +608 -0
  6. hessian_ff/native/Makefile +8 -0
  7. hessian_ff/native/__init__.py +28 -0
  8. hessian_ff/native/analytical_hessian.py +88 -0
  9. hessian_ff/native/analytical_hessian_ext.cpp +258 -0
  10. hessian_ff/native/bonded.py +82 -0
  11. hessian_ff/native/bonded_ext.cpp +640 -0
  12. hessian_ff/native/loader.py +349 -0
  13. hessian_ff/native/nonbonded.py +118 -0
  14. hessian_ff/native/nonbonded_ext.cpp +1150 -0
  15. hessian_ff/prmtop_parmed.py +23 -0
  16. hessian_ff/system.py +107 -0
  17. hessian_ff/terms/__init__.py +14 -0
  18. hessian_ff/terms/angle.py +73 -0
  19. hessian_ff/terms/bond.py +44 -0
  20. hessian_ff/terms/cmap.py +406 -0
  21. hessian_ff/terms/dihedral.py +141 -0
  22. hessian_ff/terms/nonbonded.py +209 -0
  23. hessian_ff/tests/__init__.py +0 -0
  24. hessian_ff/tests/conftest.py +75 -0
  25. hessian_ff/tests/data/small/complex.parm7 +1346 -0
  26. hessian_ff/tests/data/small/complex.pdb +125 -0
  27. hessian_ff/tests/data/small/complex.rst7 +63 -0
  28. hessian_ff/tests/test_coords_input.py +44 -0
  29. hessian_ff/tests/test_energy_force.py +49 -0
  30. hessian_ff/tests/test_hessian.py +137 -0
  31. hessian_ff/tests/test_smoke.py +18 -0
  32. hessian_ff/tests/test_validation.py +40 -0
  33. hessian_ff/workflows.py +889 -0
  34. mlmm/__init__.py +36 -0
  35. mlmm/__main__.py +7 -0
  36. mlmm/_version.py +34 -0
  37. mlmm/add_elem_info.py +374 -0
  38. mlmm/advanced_help.py +91 -0
  39. mlmm/align_freeze_atoms.py +601 -0
  40. mlmm/all.py +3535 -0
  41. mlmm/bond_changes.py +231 -0
  42. mlmm/bool_compat.py +223 -0
  43. mlmm/cli.py +574 -0
  44. mlmm/cli_utils.py +166 -0
  45. mlmm/default_group.py +337 -0
  46. mlmm/defaults.py +467 -0
  47. mlmm/define_layer.py +526 -0
  48. mlmm/dft.py +1041 -0
  49. mlmm/energy_diagram.py +253 -0
  50. mlmm/extract.py +2213 -0
  51. mlmm/fix_altloc.py +464 -0
  52. mlmm/freq.py +1406 -0
  53. mlmm/harmonic_constraints.py +140 -0
  54. mlmm/hessian_cache.py +44 -0
  55. mlmm/hessian_calc.py +174 -0
  56. mlmm/irc.py +638 -0
  57. mlmm/mlmm_calc.py +2262 -0
  58. mlmm/mm_parm.py +945 -0
  59. mlmm/oniom_export.py +1983 -0
  60. mlmm/oniom_import.py +457 -0
  61. mlmm/opt.py +1742 -0
  62. mlmm/path_opt.py +1353 -0
  63. mlmm/path_search.py +2299 -0
  64. mlmm/preflight.py +88 -0
  65. mlmm/py.typed +1 -0
  66. mlmm/pysis_runner.py +45 -0
  67. mlmm/scan.py +1047 -0
  68. mlmm/scan2d.py +1226 -0
  69. mlmm/scan3d.py +1265 -0
  70. mlmm/scan_common.py +184 -0
  71. mlmm/summary_log.py +736 -0
  72. mlmm/trj2fig.py +448 -0
  73. mlmm/tsopt.py +2871 -0
  74. mlmm/utils.py +2309 -0
  75. mlmm/xtb_embedcharge_correction.py +475 -0
  76. mlmm_toolkit-0.2.2.dev0.dist-info/METADATA +1159 -0
  77. mlmm_toolkit-0.2.2.dev0.dist-info/RECORD +372 -0
  78. mlmm_toolkit-0.2.2.dev0.dist-info/WHEEL +5 -0
  79. mlmm_toolkit-0.2.2.dev0.dist-info/entry_points.txt +2 -0
  80. mlmm_toolkit-0.2.2.dev0.dist-info/licenses/LICENSE +674 -0
  81. mlmm_toolkit-0.2.2.dev0.dist-info/top_level.txt +4 -0
  82. pysisyphus/Geometry.py +1667 -0
  83. pysisyphus/LICENSE +674 -0
  84. pysisyphus/TableFormatter.py +63 -0
  85. pysisyphus/TablePrinter.py +74 -0
  86. pysisyphus/__init__.py +12 -0
  87. pysisyphus/calculators/AFIR.py +452 -0
  88. pysisyphus/calculators/AnaPot.py +20 -0
  89. pysisyphus/calculators/AnaPot2.py +48 -0
  90. pysisyphus/calculators/AnaPot3.py +12 -0
  91. pysisyphus/calculators/AnaPot4.py +20 -0
  92. pysisyphus/calculators/AnaPotBase.py +337 -0
  93. pysisyphus/calculators/AnaPotCBM.py +25 -0
  94. pysisyphus/calculators/AtomAtomTransTorque.py +154 -0
  95. pysisyphus/calculators/CFOUR.py +250 -0
  96. pysisyphus/calculators/Calculator.py +844 -0
  97. pysisyphus/calculators/CerjanMiller.py +24 -0
  98. pysisyphus/calculators/Composite.py +123 -0
  99. pysisyphus/calculators/ConicalIntersection.py +171 -0
  100. pysisyphus/calculators/DFTBp.py +430 -0
  101. pysisyphus/calculators/DFTD3.py +66 -0
  102. pysisyphus/calculators/DFTD4.py +84 -0
  103. pysisyphus/calculators/Dalton.py +61 -0
  104. pysisyphus/calculators/Dimer.py +681 -0
  105. pysisyphus/calculators/Dummy.py +20 -0
  106. pysisyphus/calculators/EGO.py +76 -0
  107. pysisyphus/calculators/EnergyMin.py +224 -0
  108. pysisyphus/calculators/ExternalPotential.py +264 -0
  109. pysisyphus/calculators/FakeASE.py +35 -0
  110. pysisyphus/calculators/FourWellAnaPot.py +28 -0
  111. pysisyphus/calculators/FreeEndNEBPot.py +39 -0
  112. pysisyphus/calculators/Gaussian09.py +18 -0
  113. pysisyphus/calculators/Gaussian16.py +726 -0
  114. pysisyphus/calculators/HardSphere.py +159 -0
  115. pysisyphus/calculators/IDPPCalculator.py +49 -0
  116. pysisyphus/calculators/IPIClient.py +133 -0
  117. pysisyphus/calculators/IPIServer.py +234 -0
  118. pysisyphus/calculators/LEPSBase.py +24 -0
  119. pysisyphus/calculators/LEPSExpr.py +139 -0
  120. pysisyphus/calculators/LennardJones.py +80 -0
  121. pysisyphus/calculators/MOPAC.py +219 -0
  122. pysisyphus/calculators/MullerBrownSympyPot.py +51 -0
  123. pysisyphus/calculators/MultiCalc.py +85 -0
  124. pysisyphus/calculators/NFK.py +45 -0
  125. pysisyphus/calculators/OBabel.py +87 -0
  126. pysisyphus/calculators/ONIOMv2.py +1129 -0
  127. pysisyphus/calculators/ORCA.py +893 -0
  128. pysisyphus/calculators/ORCA5.py +6 -0
  129. pysisyphus/calculators/OpenMM.py +88 -0
  130. pysisyphus/calculators/OpenMolcas.py +281 -0
  131. pysisyphus/calculators/OverlapCalculator.py +908 -0
  132. pysisyphus/calculators/Psi4.py +218 -0
  133. pysisyphus/calculators/PyPsi4.py +37 -0
  134. pysisyphus/calculators/PySCF.py +341 -0
  135. pysisyphus/calculators/PyXTB.py +73 -0
  136. pysisyphus/calculators/QCEngine.py +106 -0
  137. pysisyphus/calculators/Rastrigin.py +22 -0
  138. pysisyphus/calculators/Remote.py +76 -0
  139. pysisyphus/calculators/Rosenbrock.py +15 -0
  140. pysisyphus/calculators/SocketCalc.py +97 -0
  141. pysisyphus/calculators/TIP3P.py +111 -0
  142. pysisyphus/calculators/TransTorque.py +161 -0
  143. pysisyphus/calculators/Turbomole.py +965 -0
  144. pysisyphus/calculators/VRIPot.py +37 -0
  145. pysisyphus/calculators/WFOWrapper.py +333 -0
  146. pysisyphus/calculators/WFOWrapper2.py +341 -0
  147. pysisyphus/calculators/XTB.py +418 -0
  148. pysisyphus/calculators/__init__.py +81 -0
  149. pysisyphus/calculators/cosmo_data.py +139 -0
  150. pysisyphus/calculators/parser.py +150 -0
  151. pysisyphus/color.py +19 -0
  152. pysisyphus/config.py +133 -0
  153. pysisyphus/constants.py +65 -0
  154. pysisyphus/cos/AdaptiveNEB.py +230 -0
  155. pysisyphus/cos/ChainOfStates.py +725 -0
  156. pysisyphus/cos/FreeEndNEB.py +25 -0
  157. pysisyphus/cos/FreezingString.py +103 -0
  158. pysisyphus/cos/GrowingChainOfStates.py +71 -0
  159. pysisyphus/cos/GrowingNT.py +309 -0
  160. pysisyphus/cos/GrowingString.py +508 -0
  161. pysisyphus/cos/NEB.py +189 -0
  162. pysisyphus/cos/SimpleZTS.py +64 -0
  163. pysisyphus/cos/__init__.py +22 -0
  164. pysisyphus/cos/stiffness.py +199 -0
  165. pysisyphus/drivers/__init__.py +17 -0
  166. pysisyphus/drivers/afir.py +855 -0
  167. pysisyphus/drivers/barriers.py +271 -0
  168. pysisyphus/drivers/birkholz.py +138 -0
  169. pysisyphus/drivers/cluster.py +318 -0
  170. pysisyphus/drivers/diabatization.py +133 -0
  171. pysisyphus/drivers/merge.py +368 -0
  172. pysisyphus/drivers/merge_mol2.py +322 -0
  173. pysisyphus/drivers/opt.py +375 -0
  174. pysisyphus/drivers/perf.py +91 -0
  175. pysisyphus/drivers/pka.py +52 -0
  176. pysisyphus/drivers/precon_pos_rot.py +669 -0
  177. pysisyphus/drivers/rates.py +480 -0
  178. pysisyphus/drivers/replace.py +219 -0
  179. pysisyphus/drivers/scan.py +212 -0
  180. pysisyphus/drivers/spectrum.py +166 -0
  181. pysisyphus/drivers/thermo.py +31 -0
  182. pysisyphus/dynamics/Gaussian.py +103 -0
  183. pysisyphus/dynamics/__init__.py +20 -0
  184. pysisyphus/dynamics/colvars.py +136 -0
  185. pysisyphus/dynamics/driver.py +297 -0
  186. pysisyphus/dynamics/helpers.py +256 -0
  187. pysisyphus/dynamics/lincs.py +105 -0
  188. pysisyphus/dynamics/mdp.py +364 -0
  189. pysisyphus/dynamics/rattle.py +121 -0
  190. pysisyphus/dynamics/thermostats.py +128 -0
  191. pysisyphus/dynamics/wigner.py +266 -0
  192. pysisyphus/elem_data.py +3473 -0
  193. pysisyphus/exceptions.py +2 -0
  194. pysisyphus/filtertrj.py +69 -0
  195. pysisyphus/helpers.py +623 -0
  196. pysisyphus/helpers_pure.py +649 -0
  197. pysisyphus/init_logging.py +50 -0
  198. pysisyphus/intcoords/Bend.py +69 -0
  199. pysisyphus/intcoords/Bend2.py +25 -0
  200. pysisyphus/intcoords/BondedFragment.py +32 -0
  201. pysisyphus/intcoords/Cartesian.py +41 -0
  202. pysisyphus/intcoords/CartesianCoords.py +140 -0
  203. pysisyphus/intcoords/Coords.py +56 -0
  204. pysisyphus/intcoords/DLC.py +197 -0
  205. pysisyphus/intcoords/DistanceFunction.py +34 -0
  206. pysisyphus/intcoords/DummyImproper.py +70 -0
  207. pysisyphus/intcoords/DummyTorsion.py +72 -0
  208. pysisyphus/intcoords/LinearBend.py +105 -0
  209. pysisyphus/intcoords/LinearDisplacement.py +80 -0
  210. pysisyphus/intcoords/OutOfPlane.py +59 -0
  211. pysisyphus/intcoords/PrimTypes.py +286 -0
  212. pysisyphus/intcoords/Primitive.py +137 -0
  213. pysisyphus/intcoords/RedundantCoords.py +659 -0
  214. pysisyphus/intcoords/RobustTorsion.py +59 -0
  215. pysisyphus/intcoords/Rotation.py +147 -0
  216. pysisyphus/intcoords/Stretch.py +31 -0
  217. pysisyphus/intcoords/Torsion.py +101 -0
  218. pysisyphus/intcoords/Torsion2.py +25 -0
  219. pysisyphus/intcoords/Translation.py +45 -0
  220. pysisyphus/intcoords/__init__.py +61 -0
  221. pysisyphus/intcoords/augment_bonds.py +126 -0
  222. pysisyphus/intcoords/derivatives.py +10512 -0
  223. pysisyphus/intcoords/eval.py +80 -0
  224. pysisyphus/intcoords/exceptions.py +37 -0
  225. pysisyphus/intcoords/findiffs.py +48 -0
  226. pysisyphus/intcoords/generate_derivatives.py +414 -0
  227. pysisyphus/intcoords/helpers.py +235 -0
  228. pysisyphus/intcoords/logging_conf.py +10 -0
  229. pysisyphus/intcoords/mp_derivatives.py +10836 -0
  230. pysisyphus/intcoords/setup.py +962 -0
  231. pysisyphus/intcoords/setup_fast.py +176 -0
  232. pysisyphus/intcoords/update.py +272 -0
  233. pysisyphus/intcoords/valid.py +89 -0
  234. pysisyphus/interpolate/Geodesic.py +93 -0
  235. pysisyphus/interpolate/IDPP.py +55 -0
  236. pysisyphus/interpolate/Interpolator.py +116 -0
  237. pysisyphus/interpolate/LST.py +70 -0
  238. pysisyphus/interpolate/Redund.py +152 -0
  239. pysisyphus/interpolate/__init__.py +9 -0
  240. pysisyphus/interpolate/helpers.py +34 -0
  241. pysisyphus/io/__init__.py +22 -0
  242. pysisyphus/io/aomix.py +178 -0
  243. pysisyphus/io/cjson.py +24 -0
  244. pysisyphus/io/crd.py +101 -0
  245. pysisyphus/io/cube.py +220 -0
  246. pysisyphus/io/fchk.py +184 -0
  247. pysisyphus/io/hdf5.py +49 -0
  248. pysisyphus/io/hessian.py +72 -0
  249. pysisyphus/io/mol2.py +146 -0
  250. pysisyphus/io/molden.py +293 -0
  251. pysisyphus/io/orca.py +189 -0
  252. pysisyphus/io/pdb.py +269 -0
  253. pysisyphus/io/psf.py +79 -0
  254. pysisyphus/io/pubchem.py +31 -0
  255. pysisyphus/io/qcschema.py +34 -0
  256. pysisyphus/io/sdf.py +29 -0
  257. pysisyphus/io/xyz.py +61 -0
  258. pysisyphus/io/zmat.py +175 -0
  259. pysisyphus/irc/DWI.py +108 -0
  260. pysisyphus/irc/DampedVelocityVerlet.py +134 -0
  261. pysisyphus/irc/Euler.py +22 -0
  262. pysisyphus/irc/EulerPC.py +345 -0
  263. pysisyphus/irc/GonzalezSchlegel.py +187 -0
  264. pysisyphus/irc/IMKMod.py +164 -0
  265. pysisyphus/irc/IRC.py +878 -0
  266. pysisyphus/irc/IRCDummy.py +10 -0
  267. pysisyphus/irc/Instanton.py +307 -0
  268. pysisyphus/irc/LQA.py +53 -0
  269. pysisyphus/irc/ModeKill.py +136 -0
  270. pysisyphus/irc/ParamPlot.py +53 -0
  271. pysisyphus/irc/RK4.py +36 -0
  272. pysisyphus/irc/__init__.py +31 -0
  273. pysisyphus/irc/initial_displ.py +219 -0
  274. pysisyphus/linalg.py +411 -0
  275. pysisyphus/line_searches/Backtracking.py +88 -0
  276. pysisyphus/line_searches/HagerZhang.py +184 -0
  277. pysisyphus/line_searches/LineSearch.py +232 -0
  278. pysisyphus/line_searches/StrongWolfe.py +108 -0
  279. pysisyphus/line_searches/__init__.py +9 -0
  280. pysisyphus/line_searches/interpol.py +15 -0
  281. pysisyphus/modefollow/NormalMode.py +40 -0
  282. pysisyphus/modefollow/__init__.py +10 -0
  283. pysisyphus/modefollow/davidson.py +199 -0
  284. pysisyphus/modefollow/lanczos.py +95 -0
  285. pysisyphus/optimizers/BFGS.py +99 -0
  286. pysisyphus/optimizers/BacktrackingOptimizer.py +113 -0
  287. pysisyphus/optimizers/ConjugateGradient.py +98 -0
  288. pysisyphus/optimizers/CubicNewton.py +75 -0
  289. pysisyphus/optimizers/FIRE.py +113 -0
  290. pysisyphus/optimizers/HessianOptimizer.py +1176 -0
  291. pysisyphus/optimizers/LBFGS.py +228 -0
  292. pysisyphus/optimizers/LayerOpt.py +411 -0
  293. pysisyphus/optimizers/MicroOptimizer.py +169 -0
  294. pysisyphus/optimizers/NCOptimizer.py +90 -0
  295. pysisyphus/optimizers/Optimizer.py +1084 -0
  296. pysisyphus/optimizers/PreconLBFGS.py +260 -0
  297. pysisyphus/optimizers/PreconSteepestDescent.py +7 -0
  298. pysisyphus/optimizers/QuickMin.py +74 -0
  299. pysisyphus/optimizers/RFOptimizer.py +181 -0
  300. pysisyphus/optimizers/RSA.py +99 -0
  301. pysisyphus/optimizers/StabilizedQNMethod.py +248 -0
  302. pysisyphus/optimizers/SteepestDescent.py +23 -0
  303. pysisyphus/optimizers/StringOptimizer.py +173 -0
  304. pysisyphus/optimizers/__init__.py +41 -0
  305. pysisyphus/optimizers/closures.py +301 -0
  306. pysisyphus/optimizers/cls_map.py +58 -0
  307. pysisyphus/optimizers/exceptions.py +6 -0
  308. pysisyphus/optimizers/gdiis.py +280 -0
  309. pysisyphus/optimizers/guess_hessians.py +311 -0
  310. pysisyphus/optimizers/hessian_updates.py +355 -0
  311. pysisyphus/optimizers/poly_fit.py +285 -0
  312. pysisyphus/optimizers/precon.py +153 -0
  313. pysisyphus/optimizers/restrict_step.py +24 -0
  314. pysisyphus/pack.py +172 -0
  315. pysisyphus/peakdetect.py +948 -0
  316. pysisyphus/plot.py +1031 -0
  317. pysisyphus/run.py +2106 -0
  318. pysisyphus/socket_helper.py +74 -0
  319. pysisyphus/stocastic/FragmentKick.py +132 -0
  320. pysisyphus/stocastic/Kick.py +81 -0
  321. pysisyphus/stocastic/Pipeline.py +303 -0
  322. pysisyphus/stocastic/__init__.py +21 -0
  323. pysisyphus/stocastic/align.py +127 -0
  324. pysisyphus/testing.py +96 -0
  325. pysisyphus/thermo.py +156 -0
  326. pysisyphus/trj.py +824 -0
  327. pysisyphus/tsoptimizers/RSIRFOptimizer.py +56 -0
  328. pysisyphus/tsoptimizers/RSPRFOptimizer.py +182 -0
  329. pysisyphus/tsoptimizers/TRIM.py +59 -0
  330. pysisyphus/tsoptimizers/TSHessianOptimizer.py +463 -0
  331. pysisyphus/tsoptimizers/__init__.py +23 -0
  332. pysisyphus/wavefunction/Basis.py +239 -0
  333. pysisyphus/wavefunction/DIIS.py +76 -0
  334. pysisyphus/wavefunction/__init__.py +25 -0
  335. pysisyphus/wavefunction/build_ext.py +42 -0
  336. pysisyphus/wavefunction/cart2sph.py +190 -0
  337. pysisyphus/wavefunction/diabatization.py +304 -0
  338. pysisyphus/wavefunction/excited_states.py +435 -0
  339. pysisyphus/wavefunction/gen_ints.py +1811 -0
  340. pysisyphus/wavefunction/helpers.py +104 -0
  341. pysisyphus/wavefunction/ints/__init__.py +0 -0
  342. pysisyphus/wavefunction/ints/boys.py +193 -0
  343. pysisyphus/wavefunction/ints/boys_table_N_64_xasym_27.1_step_0.01.npy +0 -0
  344. pysisyphus/wavefunction/ints/cart_gto3d.py +176 -0
  345. pysisyphus/wavefunction/ints/coulomb3d.py +25928 -0
  346. pysisyphus/wavefunction/ints/diag_quadrupole3d.py +10036 -0
  347. pysisyphus/wavefunction/ints/dipole3d.py +8762 -0
  348. pysisyphus/wavefunction/ints/int2c2e3d.py +7198 -0
  349. pysisyphus/wavefunction/ints/int3c2e3d_sph.py +65040 -0
  350. pysisyphus/wavefunction/ints/kinetic3d.py +8240 -0
  351. pysisyphus/wavefunction/ints/ovlp3d.py +3777 -0
  352. pysisyphus/wavefunction/ints/quadrupole3d.py +15054 -0
  353. pysisyphus/wavefunction/ints/self_ovlp3d.py +198 -0
  354. pysisyphus/wavefunction/localization.py +458 -0
  355. pysisyphus/wavefunction/multipole.py +159 -0
  356. pysisyphus/wavefunction/normalization.py +36 -0
  357. pysisyphus/wavefunction/pop_analysis.py +134 -0
  358. pysisyphus/wavefunction/shells.py +1171 -0
  359. pysisyphus/wavefunction/wavefunction.py +504 -0
  360. pysisyphus/wrapper/__init__.py +11 -0
  361. pysisyphus/wrapper/exceptions.py +2 -0
  362. pysisyphus/wrapper/jmol.py +120 -0
  363. pysisyphus/wrapper/mwfn.py +169 -0
  364. pysisyphus/wrapper/packmol.py +71 -0
  365. pysisyphus/xyzloader.py +168 -0
  366. pysisyphus/yaml_mods.py +45 -0
  367. thermoanalysis/LICENSE +674 -0
  368. thermoanalysis/QCData.py +244 -0
  369. thermoanalysis/__init__.py +0 -0
  370. thermoanalysis/config.py +3 -0
  371. thermoanalysis/constants.py +20 -0
  372. thermoanalysis/thermo.py +1011 -0
@@ -0,0 +1,64 @@
1
+ # [1] http://aip.scitation.org/doi/abs/10.1063/1.2720838
2
+
3
+ import numpy as np
4
+ from scipy.interpolate import splprep, splev
5
+
6
+ from pysisyphus.cos.ChainOfStates import ChainOfStates
7
+
8
+ class SimpleZTS(ChainOfStates):
9
+
10
+ def __init__(self, images, param="equal", **kwargs):
11
+ self.param = param
12
+ super(SimpleZTS, self).__init__(images, **kwargs)
13
+
14
+ def reparametrize(self):
15
+ def weight_function(mean_energies):
16
+ mean_energies = np.abs(mean_energies)
17
+ weights = mean_energies / mean_energies.max()
18
+ weights = np.sqrt(weights)
19
+ return weights
20
+
21
+ reshaped = self.coords.reshape(-1, self.coords_length)
22
+ # To use splprep we have to transpose the coords.
23
+ transp_coords = reshaped.transpose()
24
+
25
+ # Equal arc length parametrization, default.
26
+ u = None
27
+ # Energy weighted arc length parametrization.
28
+ if self.param == "energy":
29
+ energies = [img.energy for img in self.images]
30
+ mean_energies = [(energies[i] + energies[i-1])/2
31
+ for i in range(1, len(self.images))
32
+ ]
33
+ weights = weight_function(mean_energies)
34
+ arc_segments = [0, ]
35
+ for i in range(1, len(self.images)):
36
+ coord_diff = np.linalg.norm(
37
+ self.images[i].coords - self.images[i-1].coords
38
+ )
39
+ next_segment = arc_segments[-1] + weights[i-1]*coord_diff
40
+ arc_segments.append(next_segment)
41
+ arc_segments = np.array(arc_segments)
42
+ arc_segments /= arc_segments.max()
43
+
44
+ u = arc_segments
45
+ # Use chunks of 9 dimension because splprep can handle at max
46
+ # 11 dimensions (as of scipy 1.0.0). Every atoms already yields
47
+ # three dimensions (the coordinates X, Y, Z).
48
+ #
49
+ # For dim <= 11 it would go like this:
50
+ #
51
+ # tck, u = splprep(transp_coords, u=u, s=0)
52
+ # uniform_mesh = np.linspace(0, 1, num=len(self.images))
53
+ # new_points = np.array(splev(uniform_mesh, tck))
54
+ tcks, us = zip(*[splprep(transp_coords[i:i+9], u=u, s=0)
55
+ for i in range(0, len(transp_coords), 9)]
56
+ )
57
+ uniform_mesh = np.linspace(0, 1, num=len(self.images))
58
+ # Reparametrize mesh
59
+ new_points = np.vstack([splev(uniform_mesh, tck) for tck in tcks])
60
+ # Flatten along first dimension.
61
+ new_points = new_points.reshape(-1, len(self.images))
62
+ self.coords = new_points.transpose().flatten()
63
+
64
+ return True
@@ -0,0 +1,22 @@
1
+ import logging
2
+
3
+ __all__ = [
4
+ "AdaptiveNEB",
5
+ "ChainOfStates",
6
+ "FreeEndNEB",
7
+ "FreezingString",
8
+ "GrowingNT",
9
+ "GrowingString",
10
+ "NEB",
11
+ "SimpleZTS",
12
+ ]
13
+
14
+ logger = logging.getLogger("cos")
15
+ logger.setLevel(logging.DEBUG)
16
+ # delay = True prevents creation of empty logfiles
17
+ handler = logging.FileHandler("cos.log", mode="w", delay=True)
18
+ # fmt_str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
19
+ fmt_str = "%(message)s"
20
+ formatter = logging.Formatter(fmt_str)
21
+ handler.setFormatter(formatter)
22
+ logger.addHandler(handler)
@@ -0,0 +1,199 @@
1
+ # [1] https://doi.org/10.1002/jcc.27169
2
+ # Nudged elastic stiffness band method: A method to solve kinks problems
3
+ # of reaction paths
4
+ # Mitsuta, Asada
5
+
6
+ # Adapted from the original implementation provided under MIT
7
+ # license by Yuki Mitsuta. Modifications by Johannes Steinmetzer.
8
+ #
9
+ # Main modifications were made in 'get_stiff_stress'; the other two
10
+ # functions are mostly original, disregarding some renaming.
11
+ #
12
+ # Original code is found at https://github.com/YukiMitsuta/Fstiffness
13
+
14
+
15
+ from collections.abc import Sequence
16
+ from typing import Union
17
+
18
+ import numpy as np
19
+
20
+
21
+ def get_stiff_stress(
22
+ bandwidth: float,
23
+ kappa: Union[float, Sequence],
24
+ image_coords: np.ndarray,
25
+ tangents: np.ndarray,
26
+ straight_thresh: float = 1e-8,
27
+ ) -> np.ndarray:
28
+ """Function to calculate the stress of stiffness
29
+
30
+ See [1] for a discussion.
31
+
32
+ Parameters
33
+ ----------
34
+ bandwidth
35
+ The band width of stiffness term in Bohr. The larger this parameter is,
36
+ the higher the stress of stiffness.
37
+ kappa
38
+ The NEB spring constant (float or sequence of float). When a float is given
39
+ the same spring constants is used for all images.
40
+ image_coords
41
+ 2d array of image coordinates of shape (nimages, ncoords) with nimages
42
+ being the number of images and ncoords the number of coordinates of
43
+ each image the instance of each coordinates are numpy.array
44
+ tangents
45
+ 2d array with the same shape as 'image_coords', containing the tangents
46
+ defined at each image.
47
+
48
+ Returns
49
+ -------
50
+ Fstlist
51
+ Array containing the stress of stiffness with the same shape as 'image_coords'.
52
+ """
53
+ assert bandwidth > 0.0
54
+ assert image_coords.shape == tangents.shape
55
+
56
+ nimages, ncoords = image_coords.shape
57
+ Fstlist = np.zeros((nimages, ncoords))
58
+
59
+ # Determine if all images are in a straight line by calculating the dot products
60
+ # of all tangents with the normalized coordinate difference vector between the first
61
+ # and last image.
62
+ start_end_tangent = image_coords[-1] - image_coords[0]
63
+ start_end_tangent /= np.linalg.norm(start_end_tangent)
64
+ ovlps = np.einsum("u,vu->v", start_end_tangent, tangents)
65
+ if (np.abs(ovlps - 1.0) <= straight_thresh).all():
66
+ return Fstlist
67
+
68
+ tangents_perp, _ = calcEholo_vert(image_coords, tangents)
69
+
70
+ offset = 0.5 * tangents_perp * bandwidth
71
+ # Virtual image coordinates. Eq. (14) and (15) in [1].
72
+ plus_coords = image_coords.copy() + offset
73
+ minus_coords = image_coords.copy() - offset
74
+
75
+ # Construct list of kappas, when only one kappa is given.
76
+ # For N images, pysisyphus uses N-1 spring constants
77
+ try:
78
+ len(kappa)
79
+ except TypeError:
80
+ kappa = [kappa] * (nimages - 1)
81
+
82
+ assert len(kappa) == (nimages - 1)
83
+
84
+ # Terminal images don't feel stiffness force.
85
+ for k in range(1, nimages - 1):
86
+ Fstlist[k] = Fstiffness_k(
87
+ k,
88
+ kappa[k - 1],
89
+ kappa[k],
90
+ minus_coords,
91
+ plus_coords,
92
+ tangents_perp,
93
+ )
94
+ return Fstlist
95
+
96
+
97
+ def Fstiffness_k(
98
+ k: int,
99
+ kappa0: float,
100
+ kappa1: float,
101
+ innerimagelist: np.ndarray,
102
+ outerimagelist: np.ndarray,
103
+ Eholo_vertical: np.ndarray,
104
+ ):
105
+ """Stress of stiffness for image k."""
106
+
107
+ v0inner = innerimagelist[k] - innerimagelist[k + 1]
108
+ tdelta0inner = np.linalg.norm(v0inner)
109
+ v0outer = outerimagelist[k] - outerimagelist[k + 1]
110
+ tdelta0outer = np.linalg.norm(v0outer)
111
+ tdeltadelta = tdelta0inner - tdelta0outer
112
+ Vvert = -Eholo_vertical[k] * tdeltadelta * kappa0 * 0.5
113
+
114
+ v1inner = innerimagelist[k] - innerimagelist[k - 1]
115
+ tdelta1inner = np.linalg.norm(v1inner)
116
+ v1outer = outerimagelist[k] - outerimagelist[k - 1]
117
+ tdelta1outer = np.linalg.norm(v1outer)
118
+ tdeltadelta = tdelta1inner - tdelta1outer
119
+ Vvert -= Eholo_vertical[k] * tdeltadelta * kappa1 * 0.5
120
+ return Vvert
121
+
122
+
123
+ def calcEholo_vert(
124
+ image_coords: np.ndarray, tangents: np.ndarray, thresh: float = 1e-3
125
+ ):
126
+ """Calculate perpendicular tangents for given images and tangents.
127
+
128
+ Implements eq. (8) to (13) in [1]. This function seems to crash when all images
129
+ (tangents) lie (point) in a straight line. Currently, this check is done in
130
+ 'get_stiff_stress'.
131
+ """
132
+ nimages = len(image_coords)
133
+ tangents_perp = [None for _ in range(nimages)]
134
+ findvertlist = [False for _ in range(nimages)]
135
+ whileN = 0
136
+ while whileN < 1000:
137
+ whileN += 1
138
+ if all(findvertlist):
139
+ break
140
+ for k in range(nimages):
141
+ if findvertlist[k]:
142
+ continue
143
+ tau = tangents[k]
144
+ if k == 0 and findvertlist[1]:
145
+ if findvertlist[1]:
146
+ tau_nei = tangents_perp[1]
147
+ a = -np.dot(tau_nei, tau) / np.dot(tau, tau)
148
+ tangents_perp[k] = a * tau + tau_nei
149
+ findvertlist[k] = True
150
+ elif k == nimages - 1:
151
+ if findvertlist[-2]:
152
+ tau_nei = tangents_perp[-2]
153
+ a = -np.dot(tau_nei, tau) / np.dot(tau, tau)
154
+ tangents_perp[k] = a * tau + tau_nei
155
+ findvertlist[k] = True
156
+ else:
157
+ v1 = image_coords[k - 1] - image_coords[k]
158
+ v1 = v1 / np.linalg.norm(v1)
159
+ v1taudot = np.abs(np.dot(v1, tau))
160
+ v2 = image_coords[k + 1] - image_coords[k]
161
+ v2 = v2 / np.linalg.norm(v2)
162
+ v2taudot = np.abs(np.dot(v2, tau))
163
+ if 1.0 - thresh < v1taudot and 1.0 - thresh < v2taudot:
164
+ if findvertlist[k - 1]:
165
+ tau_nei = tangents_perp[k - 1]
166
+ a = -np.dot(tau_nei, tau) / np.dot(tau, tau)
167
+ tangents_perp[k] = a * tau + tau_nei
168
+ findvertlist[k] = True
169
+ elif findvertlist[k + 1]:
170
+ tau_nei = tangents_perp[k + 1]
171
+ a = -np.dot(tau_nei, tau) / np.dot(tau, tau)
172
+ tangents_perp[k] = a * tau + tau_nei
173
+ findvertlist[k] = True
174
+ elif thresh <= v1taudot:
175
+ a = -np.dot(v2, tau) / np.dot(v1, tau)
176
+ tangents_perp[k] = a * v1 + v2
177
+ tangents_perp[k] /= np.linalg.norm(tangents_perp[k])
178
+ findvertlist[k] = True
179
+ elif thresh <= v2taudot:
180
+ a = -np.dot(v1, tau) / np.dot(v2, tau)
181
+ tangents_perp[k] = a * v2 + v1
182
+ tangents_perp[k] /= np.linalg.norm(tangents_perp[k])
183
+ findvertlist[k] = True
184
+ # The elif is from the original code, but it should always evaluted to True.
185
+ # If one of the two conditions wouldn't evalute to True, one of the two
186
+ # conditionals above would run.
187
+ # elif v1taudot < thresh and v2taudot < thresh:
188
+ else:
189
+ tangents_perp[k] = v1
190
+ findvertlist[k] = True
191
+ # else:
192
+ # raise Exception("Error in calcEholovertTh")
193
+ for k in range(1, nimages):
194
+ vbefore = tangents_perp[k - 1]
195
+ v = tangents_perp[k]
196
+ if vbefore.dot(v) < 0.0:
197
+ tangents_perp[k] *= -1
198
+ tangents_perp = np.array(tangents_perp)
199
+ return tangents_perp, findvertlist
@@ -0,0 +1,17 @@
1
+ from pysisyphus.drivers.afir import run_afir_paths
2
+ from pysisyphus.drivers.diabatization import dq_diabatization_from_run_dict
3
+ from pysisyphus.drivers.opt import run_opt
4
+ from pysisyphus.drivers.scan import relaxed_scan, relaxed_1d_scan
5
+ from pysisyphus.drivers.birkholz import birkholz_interpolation
6
+ from pysisyphus.drivers.precon_pos_rot import run_precontr
7
+ from pysisyphus.drivers.perf import run_perf, print_perf_results
8
+ from pysisyphus.drivers.rates import (
9
+ eyring_rate,
10
+ harmonic_tst_rate,
11
+ bell_corr,
12
+ eckart_corr,
13
+ eckart_corr_brown,
14
+ wigner_corr,
15
+ )
16
+ from pysisyphus.drivers.replace import replace_atoms
17
+ from pysisyphus.drivers.spectrum import Spectrum