MultiOptPy 1.20.2__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 (246) hide show
  1. multioptpy/Calculator/__init__.py +0 -0
  2. multioptpy/Calculator/ase_calculation_tools.py +424 -0
  3. multioptpy/Calculator/ase_tools/__init__.py +0 -0
  4. multioptpy/Calculator/ase_tools/fairchem.py +28 -0
  5. multioptpy/Calculator/ase_tools/gamess.py +19 -0
  6. multioptpy/Calculator/ase_tools/gaussian.py +165 -0
  7. multioptpy/Calculator/ase_tools/mace.py +28 -0
  8. multioptpy/Calculator/ase_tools/mopac.py +19 -0
  9. multioptpy/Calculator/ase_tools/nwchem.py +31 -0
  10. multioptpy/Calculator/ase_tools/orca.py +22 -0
  11. multioptpy/Calculator/ase_tools/pygfn0.py +37 -0
  12. multioptpy/Calculator/dxtb_calculation_tools.py +344 -0
  13. multioptpy/Calculator/emt_calculation_tools.py +458 -0
  14. multioptpy/Calculator/gpaw_calculation_tools.py +183 -0
  15. multioptpy/Calculator/lj_calculation_tools.py +314 -0
  16. multioptpy/Calculator/psi4_calculation_tools.py +334 -0
  17. multioptpy/Calculator/pwscf_calculation_tools.py +189 -0
  18. multioptpy/Calculator/pyscf_calculation_tools.py +327 -0
  19. multioptpy/Calculator/sqm1_calculation_tools.py +611 -0
  20. multioptpy/Calculator/sqm2_calculation_tools.py +376 -0
  21. multioptpy/Calculator/tblite_calculation_tools.py +352 -0
  22. multioptpy/Calculator/tersoff_calculation_tools.py +818 -0
  23. multioptpy/Constraint/__init__.py +0 -0
  24. multioptpy/Constraint/constraint_condition.py +834 -0
  25. multioptpy/Coordinate/__init__.py +0 -0
  26. multioptpy/Coordinate/polar_coordinate.py +199 -0
  27. multioptpy/Coordinate/redundant_coordinate.py +638 -0
  28. multioptpy/IRC/__init__.py +0 -0
  29. multioptpy/IRC/converge_criteria.py +28 -0
  30. multioptpy/IRC/dvv.py +544 -0
  31. multioptpy/IRC/euler.py +439 -0
  32. multioptpy/IRC/hpc.py +564 -0
  33. multioptpy/IRC/lqa.py +540 -0
  34. multioptpy/IRC/modekill.py +662 -0
  35. multioptpy/IRC/rk4.py +579 -0
  36. multioptpy/Interpolation/__init__.py +0 -0
  37. multioptpy/Interpolation/adaptive_interpolation.py +283 -0
  38. multioptpy/Interpolation/binomial_interpolation.py +179 -0
  39. multioptpy/Interpolation/geodesic_interpolation.py +785 -0
  40. multioptpy/Interpolation/interpolation.py +156 -0
  41. multioptpy/Interpolation/linear_interpolation.py +473 -0
  42. multioptpy/Interpolation/savitzky_golay_interpolation.py +252 -0
  43. multioptpy/Interpolation/spline_interpolation.py +353 -0
  44. multioptpy/MD/__init__.py +0 -0
  45. multioptpy/MD/thermostat.py +185 -0
  46. multioptpy/MEP/__init__.py +0 -0
  47. multioptpy/MEP/pathopt_bneb_force.py +443 -0
  48. multioptpy/MEP/pathopt_dmf_force.py +448 -0
  49. multioptpy/MEP/pathopt_dneb_force.py +130 -0
  50. multioptpy/MEP/pathopt_ewbneb_force.py +207 -0
  51. multioptpy/MEP/pathopt_gpneb_force.py +512 -0
  52. multioptpy/MEP/pathopt_lup_force.py +113 -0
  53. multioptpy/MEP/pathopt_neb_force.py +225 -0
  54. multioptpy/MEP/pathopt_nesb_force.py +205 -0
  55. multioptpy/MEP/pathopt_om_force.py +153 -0
  56. multioptpy/MEP/pathopt_qsm_force.py +174 -0
  57. multioptpy/MEP/pathopt_qsmv2_force.py +304 -0
  58. multioptpy/ModelFunction/__init__.py +7 -0
  59. multioptpy/ModelFunction/avoiding_model_function.py +29 -0
  60. multioptpy/ModelFunction/binary_image_ts_search_model_function.py +47 -0
  61. multioptpy/ModelFunction/conical_model_function.py +26 -0
  62. multioptpy/ModelFunction/opt_meci.py +50 -0
  63. multioptpy/ModelFunction/opt_mesx.py +47 -0
  64. multioptpy/ModelFunction/opt_mesx_2.py +49 -0
  65. multioptpy/ModelFunction/seam_model_function.py +27 -0
  66. multioptpy/ModelHessian/__init__.py +0 -0
  67. multioptpy/ModelHessian/approx_hessian.py +147 -0
  68. multioptpy/ModelHessian/calc_params.py +227 -0
  69. multioptpy/ModelHessian/fischer.py +236 -0
  70. multioptpy/ModelHessian/fischerd3.py +360 -0
  71. multioptpy/ModelHessian/fischerd4.py +398 -0
  72. multioptpy/ModelHessian/gfn0xtb.py +633 -0
  73. multioptpy/ModelHessian/gfnff.py +709 -0
  74. multioptpy/ModelHessian/lindh.py +165 -0
  75. multioptpy/ModelHessian/lindh2007d2.py +707 -0
  76. multioptpy/ModelHessian/lindh2007d3.py +822 -0
  77. multioptpy/ModelHessian/lindh2007d4.py +1030 -0
  78. multioptpy/ModelHessian/morse.py +106 -0
  79. multioptpy/ModelHessian/schlegel.py +144 -0
  80. multioptpy/ModelHessian/schlegeld3.py +322 -0
  81. multioptpy/ModelHessian/schlegeld4.py +559 -0
  82. multioptpy/ModelHessian/shortrange.py +346 -0
  83. multioptpy/ModelHessian/swartd2.py +496 -0
  84. multioptpy/ModelHessian/swartd3.py +706 -0
  85. multioptpy/ModelHessian/swartd4.py +918 -0
  86. multioptpy/ModelHessian/tshess.py +40 -0
  87. multioptpy/Optimizer/QHAdam.py +61 -0
  88. multioptpy/Optimizer/__init__.py +0 -0
  89. multioptpy/Optimizer/abc_fire.py +83 -0
  90. multioptpy/Optimizer/adabelief.py +58 -0
  91. multioptpy/Optimizer/adabound.py +68 -0
  92. multioptpy/Optimizer/adadelta.py +65 -0
  93. multioptpy/Optimizer/adaderivative.py +56 -0
  94. multioptpy/Optimizer/adadiff.py +68 -0
  95. multioptpy/Optimizer/adafactor.py +70 -0
  96. multioptpy/Optimizer/adam.py +65 -0
  97. multioptpy/Optimizer/adamax.py +62 -0
  98. multioptpy/Optimizer/adamod.py +83 -0
  99. multioptpy/Optimizer/adamw.py +65 -0
  100. multioptpy/Optimizer/adiis.py +523 -0
  101. multioptpy/Optimizer/afire_neb.py +282 -0
  102. multioptpy/Optimizer/block_hessian_update.py +709 -0
  103. multioptpy/Optimizer/c2diis.py +491 -0
  104. multioptpy/Optimizer/component_wise_scaling.py +405 -0
  105. multioptpy/Optimizer/conjugate_gradient.py +82 -0
  106. multioptpy/Optimizer/conjugate_gradient_neb.py +345 -0
  107. multioptpy/Optimizer/coordinate_locking.py +405 -0
  108. multioptpy/Optimizer/dic_rsirfo.py +1015 -0
  109. multioptpy/Optimizer/ediis.py +417 -0
  110. multioptpy/Optimizer/eve.py +76 -0
  111. multioptpy/Optimizer/fastadabelief.py +61 -0
  112. multioptpy/Optimizer/fire.py +77 -0
  113. multioptpy/Optimizer/fire2.py +249 -0
  114. multioptpy/Optimizer/fire_neb.py +92 -0
  115. multioptpy/Optimizer/gan_step.py +486 -0
  116. multioptpy/Optimizer/gdiis.py +609 -0
  117. multioptpy/Optimizer/gediis.py +203 -0
  118. multioptpy/Optimizer/geodesic_step.py +433 -0
  119. multioptpy/Optimizer/gpmin.py +633 -0
  120. multioptpy/Optimizer/gpr_step.py +364 -0
  121. multioptpy/Optimizer/gradientdescent.py +78 -0
  122. multioptpy/Optimizer/gradientdescent_neb.py +52 -0
  123. multioptpy/Optimizer/hessian_update.py +433 -0
  124. multioptpy/Optimizer/hybrid_rfo.py +998 -0
  125. multioptpy/Optimizer/kdiis.py +625 -0
  126. multioptpy/Optimizer/lars.py +21 -0
  127. multioptpy/Optimizer/lbfgs.py +253 -0
  128. multioptpy/Optimizer/lbfgs_neb.py +355 -0
  129. multioptpy/Optimizer/linesearch.py +236 -0
  130. multioptpy/Optimizer/lookahead.py +40 -0
  131. multioptpy/Optimizer/nadam.py +64 -0
  132. multioptpy/Optimizer/newton.py +200 -0
  133. multioptpy/Optimizer/prodigy.py +70 -0
  134. multioptpy/Optimizer/purtubation.py +16 -0
  135. multioptpy/Optimizer/quickmin_neb.py +245 -0
  136. multioptpy/Optimizer/radam.py +75 -0
  137. multioptpy/Optimizer/rfo_neb.py +302 -0
  138. multioptpy/Optimizer/ric_rfo.py +842 -0
  139. multioptpy/Optimizer/rl_step.py +627 -0
  140. multioptpy/Optimizer/rmspropgrave.py +65 -0
  141. multioptpy/Optimizer/rsirfo.py +1647 -0
  142. multioptpy/Optimizer/rsprfo.py +1056 -0
  143. multioptpy/Optimizer/sadam.py +60 -0
  144. multioptpy/Optimizer/samsgrad.py +63 -0
  145. multioptpy/Optimizer/tr_lbfgs.py +678 -0
  146. multioptpy/Optimizer/trim.py +273 -0
  147. multioptpy/Optimizer/trust_radius.py +207 -0
  148. multioptpy/Optimizer/trust_radius_neb.py +121 -0
  149. multioptpy/Optimizer/yogi.py +60 -0
  150. multioptpy/OtherMethod/__init__.py +0 -0
  151. multioptpy/OtherMethod/addf.py +1150 -0
  152. multioptpy/OtherMethod/dimer.py +895 -0
  153. multioptpy/OtherMethod/elastic_image_pair.py +629 -0
  154. multioptpy/OtherMethod/modelfunction.py +456 -0
  155. multioptpy/OtherMethod/newton_traj.py +454 -0
  156. multioptpy/OtherMethod/twopshs.py +1095 -0
  157. multioptpy/PESAnalyzer/__init__.py +0 -0
  158. multioptpy/PESAnalyzer/calc_irc_curvature.py +125 -0
  159. multioptpy/PESAnalyzer/cmds_analysis.py +152 -0
  160. multioptpy/PESAnalyzer/koopman_analysis.py +268 -0
  161. multioptpy/PESAnalyzer/pca_analysis.py +314 -0
  162. multioptpy/Parameters/__init__.py +0 -0
  163. multioptpy/Parameters/atomic_mass.py +20 -0
  164. multioptpy/Parameters/atomic_number.py +22 -0
  165. multioptpy/Parameters/covalent_radii.py +44 -0
  166. multioptpy/Parameters/d2.py +61 -0
  167. multioptpy/Parameters/d3.py +63 -0
  168. multioptpy/Parameters/d4.py +103 -0
  169. multioptpy/Parameters/dreiding.py +34 -0
  170. multioptpy/Parameters/gfn0xtb_param.py +137 -0
  171. multioptpy/Parameters/gfnff_param.py +315 -0
  172. multioptpy/Parameters/gnb.py +104 -0
  173. multioptpy/Parameters/parameter.py +22 -0
  174. multioptpy/Parameters/uff.py +72 -0
  175. multioptpy/Parameters/unit_values.py +20 -0
  176. multioptpy/Potential/AFIR_potential.py +55 -0
  177. multioptpy/Potential/LJ_repulsive_potential.py +345 -0
  178. multioptpy/Potential/__init__.py +0 -0
  179. multioptpy/Potential/anharmonic_keep_potential.py +28 -0
  180. multioptpy/Potential/asym_elllipsoidal_potential.py +718 -0
  181. multioptpy/Potential/electrostatic_potential.py +69 -0
  182. multioptpy/Potential/flux_potential.py +30 -0
  183. multioptpy/Potential/gaussian_potential.py +101 -0
  184. multioptpy/Potential/idpp.py +516 -0
  185. multioptpy/Potential/keep_angle_potential.py +146 -0
  186. multioptpy/Potential/keep_dihedral_angle_potential.py +105 -0
  187. multioptpy/Potential/keep_outofplain_angle_potential.py +70 -0
  188. multioptpy/Potential/keep_potential.py +99 -0
  189. multioptpy/Potential/mechano_force_potential.py +74 -0
  190. multioptpy/Potential/nanoreactor_potential.py +52 -0
  191. multioptpy/Potential/potential.py +896 -0
  192. multioptpy/Potential/spacer_model_potential.py +221 -0
  193. multioptpy/Potential/switching_potential.py +258 -0
  194. multioptpy/Potential/universal_potential.py +34 -0
  195. multioptpy/Potential/value_range_potential.py +36 -0
  196. multioptpy/Potential/void_point_potential.py +25 -0
  197. multioptpy/SQM/__init__.py +0 -0
  198. multioptpy/SQM/sqm1/__init__.py +0 -0
  199. multioptpy/SQM/sqm1/sqm1_core.py +1792 -0
  200. multioptpy/SQM/sqm2/__init__.py +0 -0
  201. multioptpy/SQM/sqm2/calc_tools.py +95 -0
  202. multioptpy/SQM/sqm2/sqm2_basis.py +850 -0
  203. multioptpy/SQM/sqm2/sqm2_bond.py +119 -0
  204. multioptpy/SQM/sqm2/sqm2_core.py +303 -0
  205. multioptpy/SQM/sqm2/sqm2_data.py +1229 -0
  206. multioptpy/SQM/sqm2/sqm2_disp.py +65 -0
  207. multioptpy/SQM/sqm2/sqm2_eeq.py +243 -0
  208. multioptpy/SQM/sqm2/sqm2_overlapint.py +704 -0
  209. multioptpy/SQM/sqm2/sqm2_qm.py +578 -0
  210. multioptpy/SQM/sqm2/sqm2_rep.py +66 -0
  211. multioptpy/SQM/sqm2/sqm2_srb.py +70 -0
  212. multioptpy/Thermo/__init__.py +0 -0
  213. multioptpy/Thermo/normal_mode_analyzer.py +865 -0
  214. multioptpy/Utils/__init__.py +0 -0
  215. multioptpy/Utils/bond_connectivity.py +264 -0
  216. multioptpy/Utils/calc_tools.py +884 -0
  217. multioptpy/Utils/oniom.py +96 -0
  218. multioptpy/Utils/pbc.py +48 -0
  219. multioptpy/Utils/riemann_curvature.py +208 -0
  220. multioptpy/Utils/symmetry_analyzer.py +482 -0
  221. multioptpy/Visualization/__init__.py +0 -0
  222. multioptpy/Visualization/visualization.py +156 -0
  223. multioptpy/WFAnalyzer/MO_analysis.py +104 -0
  224. multioptpy/WFAnalyzer/__init__.py +0 -0
  225. multioptpy/Wrapper/__init__.py +0 -0
  226. multioptpy/Wrapper/autots.py +1239 -0
  227. multioptpy/Wrapper/ieip_wrapper.py +93 -0
  228. multioptpy/Wrapper/md_wrapper.py +92 -0
  229. multioptpy/Wrapper/neb_wrapper.py +94 -0
  230. multioptpy/Wrapper/optimize_wrapper.py +76 -0
  231. multioptpy/__init__.py +5 -0
  232. multioptpy/entrypoints.py +916 -0
  233. multioptpy/fileio.py +660 -0
  234. multioptpy/ieip.py +340 -0
  235. multioptpy/interface.py +1086 -0
  236. multioptpy/irc.py +529 -0
  237. multioptpy/moleculardynamics.py +432 -0
  238. multioptpy/neb.py +1267 -0
  239. multioptpy/optimization.py +1553 -0
  240. multioptpy/optimizer.py +709 -0
  241. multioptpy-1.20.2.dist-info/METADATA +438 -0
  242. multioptpy-1.20.2.dist-info/RECORD +246 -0
  243. multioptpy-1.20.2.dist-info/WHEEL +5 -0
  244. multioptpy-1.20.2.dist-info/entry_points.txt +9 -0
  245. multioptpy-1.20.2.dist-info/licenses/LICENSE +674 -0
  246. multioptpy-1.20.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,104 @@
1
+ from multioptpy.Parameters.atomic_number import number_element, element_number
2
+ from multioptpy.Parameters.unit_values import UnitValueLib
3
+
4
+
5
+
6
+ def GNB_s_lib(element):
7
+ #ref.: DOI: 10.1021/acs.jctc.4c01435
8
+ if element is int:
9
+ element = number_element(element)
10
+ # C is C_3
11
+ # N is N_3
12
+ # The parameters of Lanthanides are same as La. (The parameters of Lanthanides except for La are not available in the paper.)
13
+ GNB_s = {'H' : 0.2772, 'He': 0.2425,
14
+ 'Li': 0.3266, 'Be': 0.3964, 'B' : 0.3121, 'C' : 0.2455, 'N': 0.2743, 'O' : 0.2577, 'F' : 0.2791, 'Ne': 0.2378,
15
+ 'Na': 0.2592, 'Mg': 0.3837, 'Al': 0.3013, 'Si': 0.3202, 'P': 0.3399, 'S' : 0.3215, 'Cl': 0.3071, 'Ar': 0.2752,
16
+ 'K' : 0.2264, 'Ca': 0.4015, 'Sc': 0.9388, 'Ti': 0.6048, 'V': 0.3678, 'Cr': 0.2848, 'Mn': 0.3550, 'Fe': 0.4406, 'Co': 0.4124, 'Ni': 0.3139, 'Cu': 0.3345, 'Zn': 0.3391, 'Ga': 0.3146, 'Ge': 0.3327, 'As': 0.4040, 'Se': 0.3343, 'Br': 0.3242, 'Kr': 0.2920,
17
+ 'Rb': 0.2677, 'Sr': 0.3446, 'Y': 1.0038, 'Zr': 0.6146, 'Nb': 0.4244, 'Mo': 0.4882, 'Tc': 0.4439, 'Ru': 0.4736, 'Rh': 0.4039, 'Pd': 0.3188, 'Ag': 0.2948, 'Cd': 0.3012, 'In': 0.3351, 'Sn': 0.3134, 'Sb': 0.4081, 'Te': 0.3585, 'I': 0.3574, 'Xe': 0.3134,
18
+ 'Cs': 0.2872, 'Ba': 0.3788, 'La': 1.0851, 'Ce': 1.0851, 'Pr': 1.0851, 'Nd': 1.0851, 'Pm': 1.0851, 'Sm': 1.0851, 'Eu': 1.0851, 'Gd': 1.0851, 'Tb': 1.0851, 'Dy': 1.0851, 'Ho': 1.0851, 'Er': 1.0851, 'Tm': 1.0851, 'Yb': 1.0851, 'Lu': 1.0851, 'Hf': 0.5577, 'Ta': 0.5308, 'W': 0.3926, 'Re': 0.5351, 'Os': 0.4701, 'Ir': 0.3661, 'Pt': 0.3411, 'Au': 0.3164, 'Hg': 0.3047, 'Tl': 0.2802, 'Pb': 0.2682, 'Bi': 0.3876, 'Po': 0.3679, 'At': 0.3680, 'Rn': 0.3195, 'X': 1.000}#ang.
19
+
20
+ return GNB_s[element] / UnitValueLib().bohr2angstroms #Bohr
21
+
22
+ def GNB_beta_lib(element):
23
+ #ref.: DOI: 10.1021/acs.jctc.4c01435
24
+ if element is int:
25
+ element = number_element(element)
26
+ # C is C_3
27
+ # N is N_3
28
+ # The parameters of Lanthanides are same as La. (The parameters of Lanthanides except for La are not available in the paper.)
29
+ GNB_beta = {'H': 1.7504, 'He': 2.0870,
30
+ 'Li': 2.3073, 'Be': 2.8811, 'B': 2.6366, 'C': 3.0189, 'N': 2.9432, 'O': 2.7407, 'F': 2.5863, 'Ne': 2.5307,
31
+ 'Na': 2.5679, 'Mg': 2.9679, 'Al': 3.2377, 'Si': 3.2749, 'P': 3.7491, 'S': 3.6718, 'Cl': 3.4180, 'Ar': 3.3306,
32
+ 'K': 2.9736, 'Ca': 3.4464, 'Sc': 4.5955, 'Ti': 3.5334, 'V': 3.0680, 'Cr': 2.8393, 'Mn': 3.0550, 'Fe': 3.2628, 'Co': 3.2622, 'Ni': 2.7490, 'Cu': 2.9097, 'Zn': 2.9024, 'Ga': 3.3924, 'Ge': 3.2804, 'As': 3.8757, 'Se': 3.8562, 'Br': 3.7067, 'Kr': 3.6457,
33
+ 'Rb': 3.4421, 'Sr': 3.5590, 'Y': 5.7293, 'Zr': 5.0750, 'Nb': 3.7156, 'Mo': 3.6853, 'Tc': 3.6987, 'Ru': 3.7826, 'Rh': 3.4706, 'Pd': 3.3433, 'Ag': 3.1186, 'Cd': 3.0853, 'In': 3.5452, 'Sn': 3.2997, 'Sb': 4.1277, 'Te': 4.1795, 'I': 4.0988, 'Xe': 4.0387,
34
+ 'Cs': 3.8468, 'Ba': 4.0368, 'La': 6.1365, 'Ce': 6.1365, 'Pr': 6.1365, 'Nd': 6.1365, 'Pm': 6.1365, 'Sm': 6.1365, 'Eu': 6.1365, 'Gd': 6.1365, 'Tb': 6.1365, 'Dy': 6.1365, 'Ho': 6.1365, 'Er': 6.1365, 'Tm': 6.1365, 'Yb': 6.1365, 'Lu': 6.1365, 'Hf': 5.2130, 'Ta': 4.7637, 'W': 3.6018, 'Re': 3.9552, 'Os': 4.0278, 'Ir': 3.6123, 'Pt': 3.6066, 'Au': 3.3822, 'Hg': 3.3750, 'Tl': 3.3964, 'Pb': 3.2481, 'Bi': 4.1225, 'Po': 4.2313, 'At': 4.2455, 'Rn': 4.1784, 'X': 0.000}#ang.
35
+
36
+ return GNB_beta[element] / UnitValueLib().bohr2angstroms #Bohr
37
+
38
+
39
+ def GNB_radii_lib(element):
40
+ #ref.: DOI: 10.1021/acs.jctc.4c01435
41
+ if element is int:
42
+ element = number_element(element)
43
+ # C is C_3
44
+ # N is N_3
45
+ # The parameters of Lanthanides are same as La. (The parameters of Lanthanides except for La are not available in the paper.)
46
+ GNB_radii = {'H': 3.6516, 'He': 2.1843,
47
+ 'Li': 1.2711, 'Be': 3.3497, 'B': 2.7079, 'C': 1.8219, 'N': 2.4667, 'O': 2.3650, 'F': 1.5062, 'Ne': 1.8233,
48
+ 'Na': 1.3974, 'Mg': 3.3515, 'Al': 3.0102, 'Si': 3.1629, 'P': 3.2554, 'S': 2.9539, 'Cl': 3.0368, 'Ar': 2.6598,
49
+ 'K': 4.0877, 'Ca': 4.1275, 'Sc': 9.7282, 'Ti': 8.5322, 'V': 7.2344, 'Cr': 5.3605, 'Mn': 3.7180, 'Fe': 3.6408, 'Co': 3.4961, 'Ni': 3.5108, 'Cu': 3.0537, 'Zn': 3.0261, 'Ga': 3.1735, 'Ge': 3.1773, 'As': 3.8357, 'Se': 3.1109, 'Br': 3.2122, 'Kr': 2.8263,
50
+ 'Rb': 2.4120, 'Sr': 1.8940, 'Y': 11.2061, 'Zr': 6.8210, 'Nb': 7.2367, 'Mo': 3.9010, 'Tc': 4.0857, 'Ru': 4.0450, 'Rh': 3.4813, 'Pd': 3.0487, 'Ag': 2.7795, 'Cd': 2.8673, 'In': 3.3339, 'Sn': 3.0086, 'Sb': 3.9919, 'Te': 3.4209, 'I': 3.5649, 'Xe': 3.0288,
51
+ 'Cs': 2.2620, 'Ba': 1.3837, 'La': 12.1710, 'Ce': 12.1710, 'Pr': 12.1710, 'Nd': 12.1710, 'Pm': 12.1710, 'Sm': 12.1710, 'Eu': 12.1710, 'Gd': 12.1710, 'Tb': 12.1710, 'Dy': 12.1710, 'Ho': 12.1710, 'Er': 12.1710, 'Tm': 12.1710, 'Yb': 12.1710, 'Lu': 12.1710, 'Hf': 6.0791, 'Ta': 5.7661, 'W': 3.6366, 'Re': 4.2410, 'Os': 4.1348, 'Ir': 3.4213, 'Pt': 3.2486, 'Au': 2.9588, 'Hg': 2.9381, 'Tl': 2.7711, 'Pb': 2.5816, 'Bi': 3.7850, 'Po': 3.5381, 'At': 3.6985, 'Rn': 3.0551, 'X': 0.000}#ang.
52
+
53
+ return GNB_radii[element] / UnitValueLib().bohr2angstroms #Bohr
54
+
55
+ def GNB_C6_lib(element):
56
+ #ref.: DOI: 10.1021/acs.jctc.4c01435
57
+ if element is int:
58
+ element = number_element(element)
59
+ # C is C_3
60
+ # N is N_3
61
+ # The parameters of Lanthanides are same as La. (The parameters of Lanthanides except for La are not available in the paper.)
62
+ GNB_C6 = {'H': 95.99, 'He': 40.67,
63
+ 'Li': 70.21, 'Be': 114.51, 'B': 152.36, 'C': 184.28, 'N': 482.54, 'O': 405.57, 'F': 218.45, 'Ne': 174.81,
64
+ 'Na': 181.70, 'Mg': 263.02, 'Al': 228.10, 'Si': 359.43, 'P': 3222.12, 'S': 2144.49, 'Cl': 2072.46, 'Ar': 1357.42,
65
+ 'K': 1406.65, 'Ca': 1058.36, 'Sc': 11498.73, 'Ti': 3361.33, 'V': 2095.91, 'Cr': 1049.31, 'Mn': 966.27, 'Fe': 1571.36, 'Co': 1183.59, 'Ni': 787.76, 'Cu': 563.93, 'Zn': 592.91, 'Ga': 430.82, 'Ge': 812.57, 'As': 4533.53, 'Se': 3440.92, 'Br': 3859.82, 'Kr': 2729.60,
66
+ 'Rb': 1864.19, 'Sr': 1175.73, 'Y': 32141.18, 'Zr': 27655.14, 'Nb': 2864.20, 'Mo': 3563.45, 'Tc': 3266.43, 'Ru': 3967.23, 'Rh': 2233.82, 'Pd': 1393.49, 'Ag': 1315.09, 'Cd': 1311.47, 'In': 1460.56, 'Sn': 1662.99, 'Sb': 8089.97, 'Te': 6887.05, 'I': 8799.32, 'Xe': 6136.50,
67
+ 'Cs': 3757.31, 'Ba': 2561.18, 'La': 66580.83, 'Ce': 66580.83, 'Pr': 66580.83, 'Nd': 66580.83, 'Pm': 66580.83, 'Sm': 66580.83, 'Eu': 66580.83, 'Gd': 66580.83, 'Tb': 66580.83, 'Dy': 66580.83, 'Ho': 66580.83, 'Er': 66580.83, 'Tm': 66580.83, 'Yb': 66580.83, 'Lu': 66580.83, 'Hf': 27593.76, 'Ta': 15364.65, 'W': 2734.50, 'Re': 4801.82, 'Os': 5685.94, 'Ir': 2786.00, 'Pt': 2699.79, 'Au': 2282.60, 'Hg': 2476.79, 'Tl': 2988.70, 'Pb': 2506.63, 'Bi': 8916.84, 'Po': 8694.22, 'At': 11821.61, 'Rn': 8410.64, 'X': 0.000}#kcal ang^6 mol^-1
68
+
69
+ return GNB_C6[element] / UnitValueLib().hartree2kcalmol / (UnitValueLib().bohr2angstroms) ** 6 #hartree bohr^6
70
+
71
+ def GNB_VDW_radii_lib(element):
72
+ #ref.: DOI: 10.1021/acs.jctc.4c01435
73
+ if element is int:
74
+ element = number_element(element)
75
+ # C is C_3
76
+ # N is N_3
77
+ # The parameters of Lanthanides are same as La. (The parameters of Lanthanides except for La are not available in the paper.)
78
+ # Please check the SI of the paper for the details of the parameters.
79
+ GNB_VDW_distance = {'H':3.2431,'He':3.0533,
80
+ 'Li' : 3.6711 ,'Be': 5.3659, 'B': 3.9219,'C': 4.0516, 'N':3.6456,'O':3.3001, 'F': 3.2433,'Ne': 3.1416,
81
+ 'Na': 3.2429,'Mg': 4.8010 ,'Al':4.7457 ,'Si': 4.7121, 'P': 4.3825, 'S': 4.3735,'Cl':3.9557,'Ar': 3.8692,
82
+ 'K': 3.8025 ,'Ca':5.0620 ,'Sc': 10.586 ,'Ti':7.7490 ,'V': 5.6617, 'Cr': 4.4761,'Mn': 4.1887, 'Fe': 4.4113,'Co':4.4575 ,'Ni': 3.6711,'Cu': 3.8716,'Zn': 3.8327,'Ga': 4.7820,'Ge': 4.3316,'As': 4.7036 ,'Se': 4.4826,'Br':4.1816,'Kr':4.1261,
83
+ 'Rb': 3.8623,'Sr': 4.5095,'Y': 11.9894,'Zr': 7.1388,'Nb': 6.4121,'Mo': 4.757,'Tc': 4.8495,'Ru': 4.8882,'Rh':4.3388 ,'Pd': 4.061,'Ag':3.5832 ,'Cd': 3.5717,'In': 4.5002,'Sn': 3.8721,'Sb': 4.8066,'Te': 4.7337, 'I': 4.5014, 'Xe': 4.4360,
84
+ 'Cs': 4.2468,'Ba': 5.0441, 'La': 12.586, 'Ce': 12.586,'Pr': 12.586,'Nd': 12.586,'Pm': 12.586,'Sm': 12.586,'Eu': 12.586,'Gd': 12.586,'Tb': 12.586,'Dy': 12.586,'Ho': 12.586,'Er': 12.586,'Tm': 12.586,'Yb': 12.586,'Lu': 12.586,'Hf': 6.7740,
85
+ 'Ta': 6.3793,'W': 4.4757,'Re': 5.2841,'Os': 5.0541,'Ir': 4.339,'Pt': 4.2436,'Au': 3.8280,'Hg': 3.7598,'Tl': 3.6437,'Pb': 3.4216,'Bi': 4.6308,'Po': 4.7192,'At': 4.6158,'Rn': 4.5115}
86
+ return GNB_VDW_distance[element] / UnitValueLib().bohr2angstroms#Bohr
87
+
88
+ def GNB_VDW_well_depth_lib(element):
89
+ #ref.: DOI: 10.1021/acs.jctc.4c01435
90
+ if element is int:
91
+ element = number_element(element)
92
+ # C is C_3
93
+ # N is N_3
94
+ # The parameters of Lanthanides are same as La. (The parameters of Lanthanides except for La are not available in the paper.)
95
+ # Please check the SI of the paper for the details of the parameters.
96
+ GNB_VDW_well_depth = {'H':0.0226, 'He':0.0257,
97
+ 'Li':0.0133 ,'Be':0.0026 ,'B':0.0215,'C': 0.0264, 'N':0.1103, 'O':0.1624,'F':0.0908,'Ne':0.0985,
98
+ 'Na':0.0813, 'Mg':0.0110 ,'Al':0.0120,'Si': 0.0188, 'P':0.2342, 'S':0.1671, 'Cl':0.2754, 'Ar':0.2247,
99
+ 'K':0.1573,'Ca':0.0307,'Sc':0.0034,'Ti': 0.0046,'V': 0.0110, 'Cr':0.0298, 'Mn':0.0791,'Fe': 0.0883,'Co':0.0673,'Ni':0.1293,'Cu':0.0786,'Zn':0.0862,'Ga':0.0211 ,'Ge':0.0640, 'As':0.1947,'Se':0.2280,'Br':0.3678,'Kr':0.3084,
100
+ 'Rb':0.3220,'Sr':0.0756,'Y':0.0045 ,'Zr':0.0838,'Nb':0.0117,'Mo':0.1245,'Tc':0.1101,'Ru':0.1233 ,'Rh':0.1478,'Pd':0.1582,'Ag':0.3034,'Cd':0.2994,'In':0.0930,'Sn':0.2434,'Sb':0.3045,'Te':0.3227, 'I':0.5242,'Xe':0.4498,
101
+ 'Cs':0.3778,'Ba':0.0854 , 'La':0.0066 , 'Ce':0.0066 ,'Pr':0.0066 ,'Nd':0.0066 ,'Pm':0.0066 ,'Sm':0.0066 ,'Eu':0.0066 ,'Gd':0.0066 ,'Tb':0.0066 ,'Dy':0.0066 ,'Ho':0.0066 ,'Er':0.0066 ,'Tm':0.0066 ,'Yb':0.0066 ,'Lu':0.0066,'Hf':0.1267 ,
102
+ 'Ta':0.0999 ,'W':0.1562 ,'Re':0.0906 ,'Os':0.1498,'Ir':0.1992,'Pt':0.2303,'Au':0.3535 ,'Hg':0.4313 ,'Tl':0.6563 ,'Pb':0.7952 ,'Bi':0.4271 ,'Po':0.4029 ,'At':0.6010 ,'Rn':0.5572, 'X':0.000}
103
+
104
+ return GNB_VDW_well_depth[element] / UnitValueLib().hartree2kcalmol #hartree
@@ -0,0 +1,22 @@
1
+
2
+ ### General Nonbonded Force Field Parameters ###
3
+ from multioptpy.Parameters.gnb import *
4
+
5
+ ### Universal Force Field Parameters ###
6
+ from multioptpy.Parameters.uff import *
7
+
8
+ ### D2 Dispersion Model Parameters ###
9
+ from multioptpy.Parameters.d2 import *
10
+
11
+ from multioptpy.Parameters.gfnff_param import *
12
+ from multioptpy.Parameters.gfn0xtb_param import *
13
+ from multioptpy.Parameters.d4 import *
14
+ from multioptpy.Parameters.d3 import *
15
+
16
+ from multioptpy.Parameters.dreiding import *
17
+ from multioptpy.Parameters.covalent_radii import *
18
+
19
+
20
+ from multioptpy.Parameters.atomic_mass import *
21
+ from multioptpy.Parameters.unit_values import *
22
+
@@ -0,0 +1,72 @@
1
+ from multioptpy.Parameters.atomic_number import number_element, element_number
2
+ from multioptpy.Parameters.unit_values import UnitValueLib
3
+
4
+
5
+ def UFF_bond_distance_lib(element):
6
+ if element is int:
7
+ element = number_element(element)
8
+ UFF_bond_distance = {'H_':0.354, 'H_b':0.460, 'He':0.849,
9
+ 'Li' : 1.336, 'Be': 1.074, 'B_3':0.838, 'B_2':0.828, 'C_3': 0.757, 'C_R': 0.729, 'C_2': 0.732, 'C_1': 0.706,###
10
+ 'N':3.660,'O':3.500 , 'F':3.364,'Ne': 3.243,
11
+ 'Na':2.983,'Mg': 3.021 ,'Al':4.499 ,'Si': 4.295, 'P':4.147, 'S':4.035 ,'Cl':3.947,'Ar':3.868 ,
12
+ 'K':3.812 ,'Ca':3.399 ,'Sc':3.295 ,'Ti':3.175 ,'V': 3.144, 'Cr':3.023 ,'Mn': 2.961, 'Fe': 2.912,'Co':2.872 ,'Ni':2.834 ,'Cu':3.495 ,'Zn':2.763 ,'Ga': 4.383,'Ge':4.280,'As':4.230 ,'Se':4.205,'Br':4.189,'Kr':4.141 ,
13
+ 'Rb':4.114 ,'Sr': 3.641,'Y':3.345 ,'Zr':3.124 ,'Nb':3.165 ,'Mo':3.052 ,'Tc':2.998 ,'Ru':2.963 ,'Rh':2.929 ,'Pd':2.899 ,'Ag':3.148 ,'Cd':2.848 ,'In':4.463 ,'Sn':4.392 ,'Sb':4.420 ,'Te':4.470 , 'I':4.50, 'Xe':4.404 ,
14
+ 'Cs':4.517 ,'Ba':3.703 , 'La':3.522 , 'Ce':3.556 ,'Pr':3.606 ,'Nd':3.575 ,'Pm':3.547 ,'Sm':3.520 ,'Eu':3.493 ,'Gd':3.368 ,'Tb':3.451 ,'Dy':3.428 ,'Ho':3.409 ,'Er':3.391 ,'Tm':3.374 ,'Yb':3.355,'Lu':3.640 ,'Hf': 3.141,
15
+ 'Ta':3.170 ,'W':3.069 ,'Re':2.954 ,'Os':3.120 ,'Ir':2.840 ,'Pt':2.754 ,'Au':3.293 ,'Hg':2.705 ,'Tl':4.347 ,'Pb':4.297 ,'Bi':4.370 ,'Po':4.709 ,'At':4.750 ,'Rn': 4.765}#H...Rn J. Am. Chem. Soc., 1992, 114, 10024 #ang.
16
+
17
+ return UFF_bond_distance[element] / UnitValueLib().bohr2angstroms#Bohr
18
+
19
+
20
+
21
+ def UFF_bondangle_lib(element):# not implemented
22
+ if element is int:
23
+ element = number_element(element)
24
+ UFF_bondangle = {'H_':180.0, 'H_b':83.5, 'He':90.0,
25
+ 'Li' : 180.0, 'Be': 109.47, 'B_3':109.47, 'B_2':120.0, 'C_3': 109.47, 'C_R': 120.0, 'C_2': 120.0, 'C_1': 180.0,###
26
+ 'N':3.660,'O':3.500 , 'F':3.364,'Ne': 3.243,
27
+ 'Na':2.983,'Mg': 3.021 ,'Al':4.499 ,'Si': 4.295, 'P':4.147, 'S':4.035 ,'Cl':3.947,'Ar':3.868 ,
28
+ 'K':3.812 ,'Ca':3.399 ,'Sc':3.295 ,'Ti':3.175 ,'V': 3.144, 'Cr':3.023 ,'Mn': 2.961, 'Fe': 2.912,'Co':2.872 ,'Ni':2.834 ,'Cu':3.495 ,'Zn':2.763 ,'Ga': 4.383,'Ge':4.280,'As':4.230 ,'Se':4.205,'Br':4.189,'Kr':4.141 ,
29
+ 'Rb':4.114 ,'Sr': 3.641,'Y':3.345 ,'Zr':3.124 ,'Nb':3.165 ,'Mo':3.052 ,'Tc':2.998 ,'Ru':2.963 ,'Rh':2.929 ,'Pd':2.899 ,'Ag':3.148 ,'Cd':2.848 ,'In':4.463 ,'Sn':4.392 ,'Sb':4.420 ,'Te':4.470 , 'I':4.50, 'Xe':4.404 ,
30
+ 'Cs':4.517 ,'Ba':3.703 , 'La':3.522 , 'Ce':3.556 ,'Pr':3.606 ,'Nd':3.575 ,'Pm':3.547 ,'Sm':3.520 ,'Eu':3.493 ,'Gd':3.368 ,'Tb':3.451 ,'Dy':3.428 ,'Ho':3.409 ,'Er':3.391 ,'Tm':3.374 ,'Yb':3.355,'Lu':3.640 ,'Hf': 3.141,
31
+ 'Ta':3.170 ,'W':3.069 ,'Re':2.954 ,'Os':3.120 ,'Ir':2.840 ,'Pt':2.754 ,'Au':3.293 ,'Hg':2.705 ,'Tl':4.347 ,'Pb':4.297 ,'Bi':4.370 ,'Po':4.709 ,'At':4.750 ,'Rn': 4.765}#H...Rn J. Am. Chem. Soc., 1992, 114, 10024 #ang.
32
+
33
+ return UFF_bondangle[element] * UnitValueLib().deg2rad #rad
34
+
35
+
36
+ def UFF_effective_charge_lib(element):
37
+ if element is int:
38
+ element = number_element(element)
39
+ UFF_EC = {'H':0.712,'He': 0.098,
40
+ 'Li' : 1.026 ,'Be': 1.565, 'B': 1.755,'C': 1.912, 'N': 2.544,'O': 2.300, 'F': 1.735,'Ne': 0.194,
41
+ 'Na': 1.081, 'Mg': 1.787,'Al': 1.792,'Si': 2.323, 'P': 2.863, 'S': 2.703,'Cl': 2.348,'Ar': 0.300,
42
+ 'K': 1.165 ,'Ca': 2.141,'Sc': 2.592,'Ti': 2.659,'V': 2.679, 'Cr': 2.463,'Mn': 2.430, 'Fe': 2.430,'Co': 2.430 ,'Ni': 2.430 ,'Cu': 1.756 ,'Zn': 1.308,'Ga': 1.821, 'Ge': 2.789,'As': 2.864,'Se': 2.764,'Br': 2.519,'Kr': 0.452,
43
+ 'Rb': 1.592,'Sr': 2.449,'Y': 3.257,'Zr': 3.667,'Nb': 3.618,'Mo': 3.400, 'Tc': 3.400,'Ru': 3.400,'Rh': 3.508, 'Pd': 3.210,'Ag': 1.956,'Cd': 1.650,'In': 2.070,'Sn': 2.961,'Sb': 2.704,'Te': 2.882, 'I': 2.650, 'Xe': 0.556,
44
+ 'Cs': 1.573,'Ba': 2.727, 'La': 3.300, 'Ce': 3.300,'Pr': 3.300,'Nd':3.300,'Pm':3.300,'Sm':3.300,'Eu':3.300,'Gd':3.300,'Tb':3.300,'Dy':3.300,'Ho': 3.416 ,'Er': 3.300,'Tm': 3.300,'Yb': 2.618,'Lu': 3.271,'Hf': 3.921,
45
+ 'Ta': 4.075,'W': 3.70,'Re': 3.70,'Os': 3.70,'Ir': 3.731,'Pt': 3.382,'Au': 2.625,'Hg': 1.750,'Tl': 2.068,'Pb': 2.846,'Bi': 2.470,'Po': 2.330,'At': 2.240,'Rn': 0.583}#H...Rn J. Am. Chem. Soc., 1992, 114, 10024 #charge
46
+ return UFF_EC[element]
47
+
48
+ def UFF_VDW_distance_lib(element):
49
+ if element is int:
50
+ element = number_element(element)
51
+ UFF_VDW_distance = {'H':2.886,'He':2.362 ,
52
+ 'Li' : 2.451 ,'Be': 2.745, 'B':4.083 ,'C': 3.851, 'N':3.660,'O':3.500 , 'F':3.364,'Ne': 3.243,
53
+ 'Na':2.983,'Mg': 3.021 ,'Al':4.499 ,'Si': 4.295, 'P':4.147, 'S':4.035 ,'Cl':3.947,'Ar':3.868 ,
54
+ 'K':3.812 ,'Ca':3.399 ,'Sc':3.295 ,'Ti':3.175 ,'V': 3.144, 'Cr':3.023 ,'Mn': 2.961, 'Fe': 2.912,'Co':2.872 ,'Ni':2.834 ,'Cu':3.495 ,'Zn':2.763 ,'Ga': 4.383,'Ge':4.280,'As':4.230 ,'Se':4.205,'Br':4.189,'Kr':4.141 ,
55
+ 'Rb':4.114 ,'Sr': 3.641,'Y':3.345 ,'Zr':3.124 ,'Nb':3.165 ,'Mo':3.052 ,'Tc':2.998 ,'Ru':2.963 ,'Rh':2.929 ,'Pd':2.899 ,'Ag':3.148 ,'Cd':2.848 ,'In':4.463 ,'Sn':4.392 ,'Sb':4.420 ,'Te':4.470 , 'I':4.50, 'Xe':4.404 ,
56
+ 'Cs':4.517 ,'Ba':3.703 , 'La':3.522 , 'Ce':3.556 ,'Pr':3.606 ,'Nd':3.575 ,'Pm':3.547 ,'Sm':3.520 ,'Eu':3.493 ,'Gd':3.368 ,'Tb':3.451 ,'Dy':3.428 ,'Ho':3.409 ,'Er':3.391 ,'Tm':3.374 ,'Yb':3.355,'Lu':3.640 ,'Hf': 3.141,
57
+ 'Ta':3.170 ,'W':3.069 ,'Re':2.954 ,'Os':3.120 ,'Ir':2.840 ,'Pt':2.754 ,'Au':3.293 ,'Hg':2.705 ,'Tl':4.347 ,'Pb':4.297 ,'Bi':4.370 ,'Po':4.709 ,'At':4.750 ,'Rn': 4.765}#H...Rn J. Am. Chem. Soc., 1992, 114, 10024 #ang.
58
+
59
+ return UFF_VDW_distance[element] / UnitValueLib().bohr2angstroms#Bohr
60
+
61
+ def UFF_VDW_well_depth_lib(element):
62
+ if element is int:
63
+ element = number_element(element)
64
+ UFF_VDW_well_depth = {'H':0.0152, 'He':0.056 ,
65
+ 'Li':0.025 ,'Be':0.085 ,'B':0.095,'C': 0.0951, 'N':0.0774, 'O':0.0957,'F':0.0725,'Ne':0.042 ,
66
+ 'Na':0.50, 'Mg':0.111 ,'Al':0.31 ,'Si': 0.31, 'P':0.3200, 'S':0.3440, 'Cl':0.2833, 'Ar':0.185 ,
67
+ 'K':0.035 ,'Ca':0.05 ,'Sc':0.019 ,'Ti':0.0550 ,'V':0.016 , 'Cr':0.015, 'Mn':0.013 ,'Fe': 0.0550,'Co':0.014 ,'Ni':0.015 ,'Cu':0.005 ,'Zn':0.055 ,'Ga':0.40 ,'Ge':0.40, 'As':0.41 ,'Se':0.43,'Br':0.37,'Kr':0.220 ,
68
+ 'Rb':0.04 ,'Sr':0.235 ,'Y':0.072 ,'Zr':0.069 ,'Nb':0.059 ,'Mo':0.056 ,'Tc':0.048 ,'Ru':0.0500 ,'Rh':0.053 ,'Pd':0.048 ,'Ag':0.036 ,'Cd':0.228 ,'In':0.55 ,'Sn':0.55 ,'Sb':0.55 ,'Te':0.57 , 'I':0.51,'Xe':0.332 ,
69
+ 'Cs':0.045 ,'Ba':0.364 , 'La':0.017 , 'Ce':0.013 ,'Pr':0.010 ,'Nd':0.010 ,'Pm':0.009 ,'Sm':0.008 ,'Eu':0.008 ,'Gd':0.009 ,'Tb':0.007 ,'Dy':0.007 ,'Ho':0.007 ,'Er':0.007 ,'Tm':0.006 ,'Yb':0.228 ,'Lu':0.041 ,'Hf':0.072 ,
70
+ 'Ta':0.081 ,'W':0.067 ,'Re':0.066 ,'Os':0.037 ,'Ir':0.073 ,'Pt':0.080 ,'Au':0.039 ,'Hg':0.385 ,'Tl':0.680 ,'Pb':0.663 ,'Bi':0.518 ,'Po':0.325 ,'At':0.284 ,'Rn':0.248, 'X':0.010}#H...Rn J. Am. Chem. Soc., 1992, 114, 10024 # kcal/mol
71
+
72
+ return UFF_VDW_well_depth[element] / UnitValueLib().hartree2kcalmol #hartree
@@ -0,0 +1,20 @@
1
+
2
+ class UnitValueLib:
3
+ def __init__(self):
4
+ self.hartree2kcalmol = 627.509 #
5
+ self.bohr2angstroms = 0.52917721067 #
6
+ self.hartree2kjmol = 2625.500 #
7
+ self.hartree2eV = 27.211396127707
8
+ self.amu2kg = 1.66053906660 * 10 ** (-27)
9
+ self.au2kg = 9.1093837015 * 10 ** (-31)
10
+ self.hartree2j = 4.3597447222071 * 10 ** (-18)
11
+ self.bohr2m = 5.29177210903 * 10 ** (-11)
12
+ self.mol2au = 6.02214076 * 10 ** 23
13
+ self.deg2rad = 0.017453292519943295
14
+ self.au2sec = 2.418884326505 * 10 ** (-17)
15
+ self.boltzmann_constant = 1.380649 * 10 ** (-23) # J/K
16
+ self.planck_constant = 6.62607015 * 10 ** (-34) # J.s
17
+ self.vacume_light_speed = 2.99792458 * 10 ** 8 # m/s
18
+
19
+ return
20
+
@@ -0,0 +1,55 @@
1
+ from multioptpy.Parameters.parameter import UnitValueLib, covalent_radii_lib
2
+
3
+ import math
4
+ import torch
5
+
6
+
7
+ class AFIRPotential:
8
+ def __init__(self, **kwarg):
9
+ self.config = kwarg
10
+ UVL = UnitValueLib()
11
+ self.hartree2kcalmol = UVL.hartree2kcalmol
12
+ self.bohr2angstroms = UVL.bohr2angstroms
13
+ self.hartree2kjmol = UVL.hartree2kjmol
14
+ self.R_0 = 3.8164/self.bohr2angstroms #ang.→bohr
15
+ self.EPSIRON = 1.0061/self.hartree2kjmol #kj/mol→hartree
16
+ self.p = 6.0
17
+ return
18
+ def calc_energy(self, geom_num_list, bias_pot_params):
19
+ """
20
+ # required variables:
21
+ self.config["AFIR_Fragm_1"],
22
+ self.config["AFIR_Fragm_2"],
23
+ self.config["element_list"]
24
+ bias_pot_params[0] : AFIR_gamma
25
+ """
26
+ """
27
+ ### Reference ###
28
+ Chem. Rec., 2016, 16, 2232
29
+ J. Comput. Chem., 2018, 39, 233
30
+ WIREs Comput. Mol. Sci., 2021, 11, e1538
31
+ """
32
+
33
+ if bias_pot_params[0] > 0.0 or bias_pot_params[0] < 0.0:
34
+ alpha = (bias_pot_params[0]/self.hartree2kjmol) / ((2 ** (-1/6) - (1 + math.sqrt(1 + (abs(bias_pot_params[0]/self.hartree2kjmol) / self.EPSIRON))) ** (-1/6))*self.R_0) #hartree/Bohr
35
+ else:
36
+ alpha = 0.0
37
+ A = 0.0
38
+ B = 0.0
39
+
40
+ i_indices = torch.tensor(self.config["AFIR_Fragm_1"]) - 1 # 0-based index
41
+ j_indices = torch.tensor(self.config["AFIR_Fragm_2"]) - 1 # 0-based index
42
+
43
+ R_i = torch.tensor([covalent_radii_lib(self.config["element_list"][i.item()]) for i in i_indices]) # shape: (M,)
44
+ R_j = torch.tensor([covalent_radii_lib(self.config["element_list"][j.item()]) for j in j_indices]) # shape: (M,)
45
+
46
+ geom_diff = geom_num_list[i_indices].unsqueeze(1) - geom_num_list[j_indices].unsqueeze(0) # shape: (M, N, 3)
47
+ vector = torch.linalg.norm(geom_diff, dim=2) # shape: (M, N)
48
+
49
+ omega = ((R_i.unsqueeze(1) + R_j.unsqueeze(0)) / vector) ** self.p # shape: (M, N)
50
+
51
+ A = (omega * vector).sum()
52
+ B = omega.sum()
53
+
54
+ energy = alpha*(A/B)#A/B:Bohr
55
+ return energy #hartree
@@ -0,0 +1,345 @@
1
+
2
+ from multioptpy.Parameters.parameter import UnitValueLib, UFF_VDW_distance_lib, UFF_VDW_well_depth_lib
3
+
4
+ import itertools
5
+ import math
6
+ import torch
7
+
8
+
9
+ class LJRepulsivePotentialScale:
10
+ def __init__(self, mm_pot_type="UFF", **kwarg):
11
+ if mm_pot_type == "UFF":
12
+ self.VDW_distance_lib = UFF_VDW_distance_lib #function
13
+ self.VDW_well_depth_lib = UFF_VDW_well_depth_lib #function
14
+ else:
15
+ raise "No MM potential type"
16
+ self.config = kwarg
17
+
18
+ UVL = UnitValueLib()
19
+ self.hartree2kcalmol = UVL.hartree2kcalmol
20
+ self.bohr2angstroms = UVL.bohr2angstroms
21
+ self.hartree2kjmol = UVL.hartree2kjmol
22
+
23
+ indices_1 = torch.tensor(self.config["repulsive_potential_Fragm_1"]) - 1
24
+ indices_2 = torch.tensor(self.config["repulsive_potential_Fragm_2"]) - 1
25
+ self.pairs_1, self.pairs_2 = torch.meshgrid(indices_1, indices_2, indexing='ij')
26
+ self.pairs_1 = self.pairs_1.flatten()
27
+ self.pairs_2 = self.pairs_2.flatten()
28
+
29
+ VDW_well_depth_1 = [self.VDW_well_depth_lib(self.config["element_list"][elem]) for elem in self.pairs_1]
30
+ VDW_well_depth_2 = [self.VDW_well_depth_lib(self.config["element_list"][elem]) for elem in self.pairs_2]
31
+
32
+ self.VDW_well_depth_1 = torch.tensor(VDW_well_depth_1)
33
+ self.VDW_well_depth_2 = torch.tensor(VDW_well_depth_2)
34
+
35
+ VDW_distance_1 = [self.VDW_distance_lib(self.config["element_list"][elem]) for elem in self.pairs_1]
36
+ VDW_distance_2 = [self.VDW_distance_lib(self.config["element_list"][elem]) for elem in self.pairs_2]
37
+
38
+ self.VDW_distance_1 = torch.tensor(VDW_distance_1)
39
+ self.VDW_distance_2 = torch.tensor(VDW_distance_2)
40
+
41
+ return
42
+ def calc_energy(self, geom_num_list, bias_pot_params=[]):#geom_num_list: torch.float32
43
+ """
44
+ # required variables: self.config["repulsive_potential_well_scale"],
45
+ self.config["repulsive_potential_dist_scale"],
46
+ self.config["repulsive_potential_Fragm_1"],
47
+ self.config["repulsive_potential_Fragm_2"]
48
+ self.config["element_list"]
49
+ """
50
+ energy = 0.0
51
+ UFF_VDW_well_depth = torch.sqrt(
52
+ self.config["repulsive_potential_well_scale"] ** 2 * self.VDW_well_depth_1 * self.VDW_well_depth_2)
53
+ UFF_VDW_distance = torch.sqrt(
54
+ self.config["repulsive_potential_dist_scale"] ** 2 * self.VDW_distance_1 * self.VDW_distance_2)
55
+
56
+ vectors = torch.linalg.norm(geom_num_list[self.pairs_1] - geom_num_list[self.pairs_2], dim=1)
57
+
58
+ tot_energy = UFF_VDW_well_depth * (
59
+ -2 * (UFF_VDW_distance / vectors) ** 6
60
+ + (UFF_VDW_distance / vectors) ** 12)
61
+ energy = torch.sum(tot_energy)
62
+ return energy
63
+
64
+ class LJRepulsivePotentialValue:
65
+ def __init__(self, mm_pot_type="UFF", **kwarg):
66
+ if mm_pot_type == "UFF":
67
+ self.VDW_distance_lib = UFF_VDW_distance_lib #function
68
+ self.VDW_well_depth_lib = UFF_VDW_well_depth_lib #function
69
+ else:
70
+ raise "No MM potential type"
71
+ self.config = kwarg
72
+
73
+ UVL = UnitValueLib()
74
+ self.hartree2kcalmol = UVL.hartree2kcalmol
75
+ self.bohr2angstroms = UVL.bohr2angstroms
76
+ self.hartree2kjmol = UVL.hartree2kjmol
77
+
78
+ indices_1 = torch.tensor(self.config["repulsive_potential_Fragm_1"]) - 1
79
+ indices_2 = torch.tensor(self.config["repulsive_potential_Fragm_2"]) - 1
80
+ self.pairs_1, self.pairs_2 = torch.meshgrid(indices_1, indices_2, indexing='ij')
81
+ self.pairs_1 = self.pairs_1.flatten()
82
+ self.pairs_2 = self.pairs_2.flatten()
83
+
84
+ VDW_well_depth_1 = [self.VDW_well_depth_lib(self.config["element_list"][elem]) for elem in self.pairs_1]
85
+ VDW_well_depth_2 = [self.VDW_well_depth_lib(self.config["element_list"][elem]) for elem in self.pairs_2]
86
+
87
+ self.VDW_well_depth_1 = torch.tensor(VDW_well_depth_1)
88
+ self.VDW_well_depth_2 = torch.tensor(VDW_well_depth_2)
89
+
90
+ VDW_distance_1 = [self.VDW_distance_lib(self.config["element_list"][elem]) for elem in self.pairs_1]
91
+ VDW_distance_2 = [self.VDW_distance_lib(self.config["element_list"][elem]) for elem in self.pairs_2]
92
+
93
+ self.VDW_distance_1 = torch.tensor(VDW_distance_1)
94
+ self.VDW_distance_2 = torch.tensor(VDW_distance_2)
95
+
96
+ return
97
+ def calc_energy(self, geom_num_list, bias_pot_params=[]):#geom_num_list: torch.float32
98
+ """
99
+ # required variables: self.config["repulsive_potential_well_value"],
100
+ self.config["repulsive_potential_dist_value"],
101
+ self.config["repulsive_potential_Fragm_1"],
102
+ self.config["repulsive_potential_Fragm_2"]
103
+ self.config["element_list"]
104
+ """
105
+
106
+ energy = 0.0
107
+ UFF_VDW_well_depth = self.config["repulsive_potential_well_value"]/self.hartree2kjmol
108
+ UFF_VDW_distance = self.config["repulsive_potential_dist_value"]/self.bohr2angstroms
109
+ vectors = torch.linalg.norm(geom_num_list[self.pairs_1] - geom_num_list[self.pairs_2], dim=1)
110
+ tot_energy = UFF_VDW_well_depth * (
111
+ -2 * (UFF_VDW_distance / vectors) ** 6
112
+ + (UFF_VDW_distance / vectors) ** 12)
113
+ energy = torch.sum(tot_energy)
114
+ return energy
115
+
116
+
117
+ class LJRepulsivePotentialv2Scale:
118
+ def __init__(self, mm_pot_type="UFF", **kwarg):
119
+ if mm_pot_type == "UFF":
120
+ self.VDW_distance_lib = UFF_VDW_distance_lib #function
121
+ self.VDW_well_depth_lib = UFF_VDW_well_depth_lib #function
122
+ else:
123
+ raise "No MM potential type"
124
+ self.config = kwarg
125
+
126
+ UVL = UnitValueLib()
127
+ self.hartree2kcalmol = UVL.hartree2kcalmol
128
+ self.bohr2angstroms = UVL.bohr2angstroms
129
+ self.hartree2kjmol = UVL.hartree2kjmol
130
+
131
+ self.center1 = self.config["repulsive_potential_v2_center"][1] - 1
132
+ self.center0 = self.config["repulsive_potential_v2_center"][0] - 1
133
+
134
+ self.target_indices = torch.tensor(self.config["repulsive_potential_v2_target"]) - 1
135
+
136
+ VDW_well_depth_center = self.VDW_well_depth_lib(self.config["element_list"][self.center1])
137
+ VDW_distance_center = self.VDW_distance_lib(self.config["element_list"][self.center1])
138
+
139
+ VDW_well_depth_target = [self.VDW_well_depth_lib(self.config["element_list"][tgt]) for tgt in self.target_indices]
140
+ VDW_distance_target = [self.VDW_distance_lib(self.config["element_list"][tgt]) for tgt in self.target_indices]
141
+
142
+ self.VDW_well_depth_center = torch.tensor(VDW_well_depth_center)
143
+ self.VDW_distance_center = torch.tensor(VDW_distance_center)
144
+ self.VDW_well_depth_target = torch.tensor(VDW_well_depth_target)
145
+ self.VDW_distance_target = torch.tensor(VDW_distance_target)
146
+
147
+
148
+ def calc_energy(self, geom_num_list, bias_pot_params=[]):
149
+ """
150
+ # required variables: self.config["repulsive_potential_v2_well_scale"],
151
+ self.config["repulsive_potential_v2_dist_scale"],
152
+ self.config["repulsive_potential_v2_length"],
153
+ self.config["repulsive_potential_v2_const_rep"]
154
+ self.config["repulsive_potential_v2_const_attr"],
155
+ self.config["repulsive_potential_v2_order_rep"],
156
+ self.config["repulsive_potential_v2_order_attr"],
157
+ self.config["repulsive_potential_v2_center"]
158
+ self.config["repulsive_potential_v2_target"]
159
+ self.config["element_list"]
160
+ """
161
+ energy = 0.0
162
+
163
+
164
+ center_vector = geom_num_list[self.center1] - geom_num_list[self.center0]
165
+ center_norm = torch.linalg.norm(center_vector)
166
+ LJ_pot_center = (
167
+ geom_num_list[self.center1]
168
+ + (self.config["repulsive_potential_v2_length"] / self.bohr2angstroms) * (center_vector / center_norm))
169
+
170
+ UFF_VDW_well_depth = torch.sqrt(
171
+ self.config["repulsive_potential_v2_well_scale"] * self.VDW_well_depth_center * self.VDW_well_depth_target)
172
+ UFF_VDW_distance = torch.sqrt(
173
+ self.config["repulsive_potential_v2_dist_scale"] * self.VDW_distance_center * self.VDW_distance_target)
174
+
175
+ vectors = geom_num_list[self.target_indices] - LJ_pot_center
176
+ distances = torch.linalg.norm(vectors, dim=1)
177
+
178
+ rep_term = (
179
+ abs(self.config["repulsive_potential_v2_const_rep"])
180
+ * (UFF_VDW_distance / distances) ** self.config["repulsive_potential_v2_order_rep"])
181
+ attr_term = (
182
+ -1
183
+ * abs(self.config["repulsive_potential_v2_const_attr"])
184
+ * (UFF_VDW_distance / distances) ** self.config["repulsive_potential_v2_order_attr"])
185
+
186
+ tot_energy = UFF_VDW_well_depth * (rep_term + attr_term)
187
+ energy = torch.sum(tot_energy)
188
+ return energy
189
+
190
+ class LJRepulsivePotentialv2Value:
191
+ def __init__(self, mm_pot_type="UFF", **kwarg):
192
+ if mm_pot_type == "UFF":
193
+ self.VDW_distance_lib = UFF_VDW_distance_lib # function
194
+ self.VDW_well_depth_lib = UFF_VDW_well_depth_lib # function
195
+ else:
196
+ raise ValueError("No MM potential type")
197
+ self.config = kwarg
198
+
199
+ UVL = UnitValueLib()
200
+ self.hartree2kcalmol = UVL.hartree2kcalmol
201
+ self.bohr2angstroms = UVL.bohr2angstroms
202
+ self.hartree2kjmol = UVL.hartree2kjmol
203
+
204
+ self.center1 = self.config["repulsive_potential_v2_center"][1] - 1
205
+ self.center0 = self.config["repulsive_potential_v2_center"][0] - 1
206
+ self.target_indices = torch.tensor(self.config["repulsive_potential_v2_target"]) - 1
207
+
208
+ target_elements = [self.config["element_list"][idx] for idx in self.target_indices]
209
+ self.VDW_well_depth_target = torch.tensor([
210
+ math.sqrt(self.config["repulsive_potential_v2_well_value"] / self.hartree2kjmol
211
+ * self.VDW_well_depth_lib(element))
212
+ for element in target_elements
213
+ ])
214
+ self.VDW_distance_target = torch.tensor([
215
+ math.sqrt(self.config["repulsive_potential_v2_dist_value"] / self.bohr2angstroms
216
+ * self.VDW_distance_lib(element))
217
+ for element in target_elements
218
+ ])
219
+
220
+
221
+ def calc_energy(self, geom_num_list, bias_pot_params=[]):
222
+ """
223
+ # required variables: self.config["repulsive_potential_v2_well_value"],
224
+ self.config["repulsive_potential_v2_dist_value"],
225
+ self.config["repulsive_potential_v2_length"],
226
+ self.config["repulsive_potential_v2_const_rep"],
227
+ self.config["repulsive_potential_v2_const_attr"],
228
+ self.config["repulsive_potential_v2_order_rep"],
229
+ self.config["repulsive_potential_v2_order_attr"],
230
+ self.config["repulsive_potential_v2_center"],
231
+ self.config["repulsive_potential_v2_target"],
232
+ self.config["element_list"]
233
+ """
234
+ energy = 0.0
235
+ center_vector = geom_num_list[self.center1] - geom_num_list[self.center0]
236
+ center_norm = torch.linalg.norm(center_vector)
237
+ LJ_pot_center = (
238
+ geom_num_list[self.center1]
239
+ + (self.config["repulsive_potential_v2_length"] / self.bohr2angstroms)
240
+ * (center_vector / center_norm))
241
+
242
+ vectors = geom_num_list[self.target_indices] - LJ_pot_center
243
+ distances = torch.linalg.norm(vectors, dim=1)
244
+
245
+ rep_term = (
246
+ abs(self.config["repulsive_potential_v2_const_rep"])
247
+ * (self.VDW_distance_target / distances) ** self.config["repulsive_potential_v2_order_rep"])
248
+ attr_term = (
249
+ -1
250
+ * abs(self.config["repulsive_potential_v2_const_attr"])
251
+ * (self.VDW_distance_target / distances) ** self.config["repulsive_potential_v2_order_attr"])
252
+
253
+ energy = torch.sum(self.VDW_well_depth_target * (rep_term + attr_term))
254
+ return energy
255
+
256
+ class LJRepulsivePotentialGaussian:
257
+ def __init__(self, mm_pot_type="UFF", **kwarg):
258
+ if mm_pot_type == "UFF":
259
+ self.VDW_distance_lib = UFF_VDW_distance_lib #function
260
+ self.VDW_well_depth_lib = UFF_VDW_well_depth_lib #function
261
+ else:
262
+ raise "No MM potential type"
263
+ self.config = kwarg
264
+
265
+ UVL = UnitValueLib()
266
+ self.hartree2kcalmol = UVL.hartree2kcalmol
267
+ self.bohr2angstroms = UVL.bohr2angstroms
268
+ self.hartree2kjmol = UVL.hartree2kjmol
269
+
270
+ return
271
+ #calc_energy_gau
272
+ def calc_energy(self, geom_num_list, bias_pot_params=[]):
273
+
274
+ """
275
+ # required variables: self.config["repulsive_potential_gaussian_LJ_well_depth"],
276
+ self.config["repulsive_potential_gaussian_LJ_dist"],
277
+ self.config["repulsive_potential_gaussian_gau_well_depth"],
278
+ self.config["repulsive_potential_gaussian_gau_dist"]
279
+ self.config["repulsive_potential_gaussian_gau_range"],
280
+ self.config["repulsive_potential_gaussian_fragm_1"],
281
+ self.config["repulsive_potential_gaussian_fragm_2"],
282
+ self.config["element_list"]
283
+ """
284
+ energy = 0.0
285
+ gau_range_const = 0.03
286
+ for i, j in itertools.product(self.config["repulsive_potential_gaussian_fragm_1"], self.config["repulsive_potential_gaussian_fragm_2"]):
287
+ LJ_well_depth = self.config["repulsive_potential_gaussian_LJ_well_depth"]/self.hartree2kjmol
288
+ LJ_distance = self.config["repulsive_potential_gaussian_LJ_dist"]/self.bohr2angstroms
289
+ Gau_well_depth = self.config["repulsive_potential_gaussian_gau_well_depth"]/self.hartree2kjmol
290
+ Gau_distance = self.config["repulsive_potential_gaussian_gau_dist"]/self.bohr2angstroms
291
+ Gau_range = self.config["repulsive_potential_gaussian_gau_range"]/self.bohr2angstroms
292
+ vector = torch.linalg.norm(geom_num_list[i-1] - geom_num_list[j-1], ord=2) #bohr
293
+ energy += LJ_well_depth * ( -2 * ( LJ_distance / vector ) ** 6 + ( LJ_distance / vector ) ** 12) -1 * Gau_well_depth * torch.exp(-1 * (vector - Gau_distance) ** 2 / (gau_range_const * (Gau_range) ** 2))
294
+
295
+ return energy
296
+
297
+ class LJRepulsivePotentialCone:
298
+ def __init__(self, mm_pot_type="UFF", **kwarg):
299
+ if mm_pot_type == "UFF":
300
+ self.VDW_distance_lib = UFF_VDW_distance_lib #function
301
+ self.VDW_well_depth_lib = UFF_VDW_well_depth_lib #function
302
+ else:
303
+ raise "No MM potential type"
304
+ self.config = kwarg
305
+
306
+ UVL = UnitValueLib()
307
+ self.hartree2kcalmol = UVL.hartree2kcalmol
308
+ self.bohr2angstroms = UVL.bohr2angstroms
309
+ self.hartree2kjmol = UVL.hartree2kjmol
310
+
311
+ return
312
+ def calc_energy(self, geom_num_list, bias_pot_params=[]):
313
+
314
+ a_value = 1.0
315
+ """
316
+ # ref. ACS Catal. 2022, 12, 7, 3752–3766
317
+ # required variables: self.config["cone_potential_well_value"],
318
+ self.config["cone_potential_dist_value"],
319
+ self.config["cone_potential_cone_angle"],
320
+ self.config["cone_potential_center"],
321
+ self.config["cone_potential_three_atoms"]
322
+ self.config["cone_potential_target"]
323
+ self.config["element_list"]
324
+ """
325
+ apex_vector = geom_num_list[self.config["cone_potential_center"]-1] - (2.28/self.bohr2angstroms) * ((geom_num_list[self.config["cone_potential_three_atoms"][0]-1] + geom_num_list[self.config["cone_potential_three_atoms"][1]-1] + geom_num_list[self.config["cone_potential_three_atoms"][2]-1] -3.0 * geom_num_list[self.config["cone_potential_center"]-1]) / torch.linalg.norm(geom_num_list[self.config["cone_potential_three_atoms"][0]-1] + geom_num_list[self.config["cone_potential_three_atoms"][1]-1] + geom_num_list[self.config["cone_potential_three_atoms"][2]-1] -3.0 * geom_num_list[self.config["cone_potential_center"]-1]))
326
+ cone_angle = torch.deg2rad(torch.tensor(self.config["cone_potential_cone_angle"], dtype=torch.float32))
327
+ energy = 0.0
328
+ for i in self.config["cone_potential_target"]:
329
+ UFF_VDW_well_depth = math.sqrt(self.config["cone_potential_well_value"]/self.hartree2kjmol * self.VDW_well_depth_lib(self.config["element_list"][i-1]))
330
+ UFF_VDW_distance = math.sqrt(self.config["cone_potential_dist_value"]/self.bohr2angstroms * self.VDW_distance_lib(self.config["element_list"][i-1]))
331
+ s_a_length = (geom_num_list[i-1] - apex_vector).view(1,3)
332
+ c_a_length = (geom_num_list[self.config["cone_potential_center"]-1] - apex_vector).view(1,3)
333
+ sub_angle = torch.arccos((torch.matmul(c_a_length, s_a_length.T)) / (torch.linalg.norm(c_a_length) * torch.linalg.norm(s_a_length)))#rad
334
+ dist = torch.linalg.norm(s_a_length)
335
+
336
+ if sub_angle - cone_angle / 2 <= torch.pi / 2:
337
+ length = (dist * torch.sin(sub_angle - cone_angle / 2)).view(1,1)
338
+
339
+ else:
340
+ length = dist.view(1,1)
341
+
342
+ energy += 4 * UFF_VDW_well_depth * ((UFF_VDW_distance / (length + a_value * UFF_VDW_distance)) ** 12 - (UFF_VDW_distance / (length + a_value * UFF_VDW_distance)) ** 6)
343
+
344
+
345
+ return energy
File without changes