hillclimber 0.1.5__cp313-cp313-musllinux_1_2_aarch64.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 (472) hide show
  1. hillclimber/__init__.py +39 -0
  2. hillclimber/actions.py +53 -0
  3. hillclimber/analysis.py +590 -0
  4. hillclimber/biases.py +293 -0
  5. hillclimber/calc.py +22 -0
  6. hillclimber/cvs.py +1070 -0
  7. hillclimber/interfaces.py +133 -0
  8. hillclimber/metadynamics.py +325 -0
  9. hillclimber/nodes.py +6 -0
  10. hillclimber/opes.py +359 -0
  11. hillclimber/selectors.py +230 -0
  12. hillclimber/virtual_atoms.py +341 -0
  13. hillclimber-0.1.5.dist-info/METADATA +210 -0
  14. hillclimber-0.1.5.dist-info/RECORD +472 -0
  15. hillclimber-0.1.5.dist-info/WHEEL +5 -0
  16. hillclimber-0.1.5.dist-info/entry_points.txt +8 -0
  17. hillclimber-0.1.5.dist-info/licenses/LICENSE +165 -0
  18. hillclimber-0.1.5.dist-info/sboms/auditwheel.cdx.json +1 -0
  19. hillclimber.libs/libgcc_s-2d945d6c.so.1 +0 -0
  20. hillclimber.libs/libgomp-1ede7ee7.so.1.0.0 +0 -0
  21. hillclimber.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  22. plumed/__init__.py +104 -0
  23. plumed/_lib/bin/plumed +0 -0
  24. plumed/_lib/bin/plumed-config +9 -0
  25. plumed/_lib/bin/plumed-patch +9 -0
  26. plumed/_lib/include/plumed/adjmat/AdjacencyMatrixBase.h +659 -0
  27. plumed/_lib/include/plumed/adjmat/ContactMatrix.h +59 -0
  28. plumed/_lib/include/plumed/asmjit/arch.h +228 -0
  29. plumed/_lib/include/plumed/asmjit/arm.h +43 -0
  30. plumed/_lib/include/plumed/asmjit/asmjit.h +69 -0
  31. plumed/_lib/include/plumed/asmjit/asmjit_apibegin.h +143 -0
  32. plumed/_lib/include/plumed/asmjit/asmjit_apiend.h +93 -0
  33. plumed/_lib/include/plumed/asmjit/asmjit_build.h +971 -0
  34. plumed/_lib/include/plumed/asmjit/assembler.h +183 -0
  35. plumed/_lib/include/plumed/asmjit/base.h +56 -0
  36. plumed/_lib/include/plumed/asmjit/codebuilder.h +944 -0
  37. plumed/_lib/include/plumed/asmjit/codecompiler.h +767 -0
  38. plumed/_lib/include/plumed/asmjit/codeemitter.h +528 -0
  39. plumed/_lib/include/plumed/asmjit/codeholder.h +777 -0
  40. plumed/_lib/include/plumed/asmjit/constpool.h +286 -0
  41. plumed/_lib/include/plumed/asmjit/cpuinfo.h +402 -0
  42. plumed/_lib/include/plumed/asmjit/func.h +1327 -0
  43. plumed/_lib/include/plumed/asmjit/globals.h +370 -0
  44. plumed/_lib/include/plumed/asmjit/inst.h +137 -0
  45. plumed/_lib/include/plumed/asmjit/logging.h +317 -0
  46. plumed/_lib/include/plumed/asmjit/misc_p.h +103 -0
  47. plumed/_lib/include/plumed/asmjit/moved_string.h +318 -0
  48. plumed/_lib/include/plumed/asmjit/operand.h +1599 -0
  49. plumed/_lib/include/plumed/asmjit/osutils.h +207 -0
  50. plumed/_lib/include/plumed/asmjit/regalloc_p.h +597 -0
  51. plumed/_lib/include/plumed/asmjit/runtime.h +227 -0
  52. plumed/_lib/include/plumed/asmjit/simdtypes.h +1104 -0
  53. plumed/_lib/include/plumed/asmjit/utils.h +1387 -0
  54. plumed/_lib/include/plumed/asmjit/vmem.h +183 -0
  55. plumed/_lib/include/plumed/asmjit/x86.h +45 -0
  56. plumed/_lib/include/plumed/asmjit/x86assembler.h +125 -0
  57. plumed/_lib/include/plumed/asmjit/x86builder.h +117 -0
  58. plumed/_lib/include/plumed/asmjit/x86compiler.h +322 -0
  59. plumed/_lib/include/plumed/asmjit/x86emitter.h +5149 -0
  60. plumed/_lib/include/plumed/asmjit/x86globals.h +535 -0
  61. plumed/_lib/include/plumed/asmjit/x86inst.h +2547 -0
  62. plumed/_lib/include/plumed/asmjit/x86instimpl_p.h +74 -0
  63. plumed/_lib/include/plumed/asmjit/x86internal_p.h +108 -0
  64. plumed/_lib/include/plumed/asmjit/x86logging_p.h +92 -0
  65. plumed/_lib/include/plumed/asmjit/x86misc.h +417 -0
  66. plumed/_lib/include/plumed/asmjit/x86operand.h +1133 -0
  67. plumed/_lib/include/plumed/asmjit/x86regalloc_p.h +734 -0
  68. plumed/_lib/include/plumed/asmjit/zone.h +1157 -0
  69. plumed/_lib/include/plumed/bias/Bias.h +82 -0
  70. plumed/_lib/include/plumed/bias/ReweightBase.h +58 -0
  71. plumed/_lib/include/plumed/blas/blas.h +253 -0
  72. plumed/_lib/include/plumed/blas/def_external.h +61 -0
  73. plumed/_lib/include/plumed/blas/def_internal.h +97 -0
  74. plumed/_lib/include/plumed/blas/real.h +49 -0
  75. plumed/_lib/include/plumed/cltools/CLTool.h +32 -0
  76. plumed/_lib/include/plumed/clusters/ClusteringBase.h +70 -0
  77. plumed/_lib/include/plumed/colvar/Colvar.h +32 -0
  78. plumed/_lib/include/plumed/colvar/ColvarInput.h +68 -0
  79. plumed/_lib/include/plumed/colvar/ColvarShortcut.h +81 -0
  80. plumed/_lib/include/plumed/colvar/CoordinationBase.h +52 -0
  81. plumed/_lib/include/plumed/colvar/MultiColvarTemplate.h +333 -0
  82. plumed/_lib/include/plumed/colvar/PathMSDBase.h +101 -0
  83. plumed/_lib/include/plumed/colvar/RMSDVector.h +78 -0
  84. plumed/_lib/include/plumed/config/Config.h +118 -0
  85. plumed/_lib/include/plumed/config/version.h +9 -0
  86. plumed/_lib/include/plumed/contour/ContourFindingObject.h +87 -0
  87. plumed/_lib/include/plumed/contour/DistanceFromContourBase.h +82 -0
  88. plumed/_lib/include/plumed/contour/FindContour.h +67 -0
  89. plumed/_lib/include/plumed/core/Action.h +540 -0
  90. plumed/_lib/include/plumed/core/ActionAnyorder.h +48 -0
  91. plumed/_lib/include/plumed/core/ActionAtomistic.h +343 -0
  92. plumed/_lib/include/plumed/core/ActionForInterface.h +99 -0
  93. plumed/_lib/include/plumed/core/ActionPilot.h +57 -0
  94. plumed/_lib/include/plumed/core/ActionRegister.h +124 -0
  95. plumed/_lib/include/plumed/core/ActionSet.h +163 -0
  96. plumed/_lib/include/plumed/core/ActionSetup.h +48 -0
  97. plumed/_lib/include/plumed/core/ActionShortcut.h +73 -0
  98. plumed/_lib/include/plumed/core/ActionToGetData.h +59 -0
  99. plumed/_lib/include/plumed/core/ActionToPutData.h +101 -0
  100. plumed/_lib/include/plumed/core/ActionWithArguments.h +140 -0
  101. plumed/_lib/include/plumed/core/ActionWithMatrix.h +87 -0
  102. plumed/_lib/include/plumed/core/ActionWithValue.h +258 -0
  103. plumed/_lib/include/plumed/core/ActionWithVector.h +94 -0
  104. plumed/_lib/include/plumed/core/ActionWithVirtualAtom.h +123 -0
  105. plumed/_lib/include/plumed/core/CLTool.h +177 -0
  106. plumed/_lib/include/plumed/core/CLToolMain.h +102 -0
  107. plumed/_lib/include/plumed/core/CLToolRegister.h +108 -0
  108. plumed/_lib/include/plumed/core/Colvar.h +115 -0
  109. plumed/_lib/include/plumed/core/DataPassingObject.h +94 -0
  110. plumed/_lib/include/plumed/core/DataPassingTools.h +54 -0
  111. plumed/_lib/include/plumed/core/DomainDecomposition.h +120 -0
  112. plumed/_lib/include/plumed/core/ExchangePatterns.h +47 -0
  113. plumed/_lib/include/plumed/core/FlexibleBin.h +63 -0
  114. plumed/_lib/include/plumed/core/GREX.h +61 -0
  115. plumed/_lib/include/plumed/core/GenericMolInfo.h +89 -0
  116. plumed/_lib/include/plumed/core/Group.h +41 -0
  117. plumed/_lib/include/plumed/core/ModuleMap.h +30 -0
  118. plumed/_lib/include/plumed/core/ParallelTaskManager.h +1023 -0
  119. plumed/_lib/include/plumed/core/PbcAction.h +61 -0
  120. plumed/_lib/include/plumed/core/PlumedMain.h +632 -0
  121. plumed/_lib/include/plumed/core/PlumedMainInitializer.h +118 -0
  122. plumed/_lib/include/plumed/core/RegisterBase.h +340 -0
  123. plumed/_lib/include/plumed/core/TargetDist.h +48 -0
  124. plumed/_lib/include/plumed/core/Value.h +547 -0
  125. plumed/_lib/include/plumed/core/WithCmd.h +93 -0
  126. plumed/_lib/include/plumed/dimred/SMACOF.h +55 -0
  127. plumed/_lib/include/plumed/drr/DRR.h +383 -0
  128. plumed/_lib/include/plumed/drr/colvar_UIestimator.h +777 -0
  129. plumed/_lib/include/plumed/fisst/legendre_rule_fast.h +44 -0
  130. plumed/_lib/include/plumed/function/Custom.h +54 -0
  131. plumed/_lib/include/plumed/function/Function.h +85 -0
  132. plumed/_lib/include/plumed/function/FunctionOfMatrix.h +368 -0
  133. plumed/_lib/include/plumed/function/FunctionOfScalar.h +135 -0
  134. plumed/_lib/include/plumed/function/FunctionOfVector.h +296 -0
  135. plumed/_lib/include/plumed/function/FunctionSetup.h +180 -0
  136. plumed/_lib/include/plumed/function/FunctionShortcut.h +130 -0
  137. plumed/_lib/include/plumed/function/FunctionWithSingleArgument.h +165 -0
  138. plumed/_lib/include/plumed/gridtools/ActionWithGrid.h +43 -0
  139. plumed/_lib/include/plumed/gridtools/EvaluateGridFunction.h +99 -0
  140. plumed/_lib/include/plumed/gridtools/FunctionOfGrid.h +295 -0
  141. plumed/_lib/include/plumed/gridtools/GridCoordinatesObject.h +179 -0
  142. plumed/_lib/include/plumed/gridtools/GridSearch.h +135 -0
  143. plumed/_lib/include/plumed/gridtools/Interpolator.h +45 -0
  144. plumed/_lib/include/plumed/gridtools/KDE.h +455 -0
  145. plumed/_lib/include/plumed/gridtools/RDF.h +40 -0
  146. plumed/_lib/include/plumed/gridtools/SumOfKernels.h +219 -0
  147. plumed/_lib/include/plumed/isdb/MetainferenceBase.h +398 -0
  148. plumed/_lib/include/plumed/lapack/def_external.h +207 -0
  149. plumed/_lib/include/plumed/lapack/def_internal.h +388 -0
  150. plumed/_lib/include/plumed/lapack/lapack.h +899 -0
  151. plumed/_lib/include/plumed/lapack/lapack_limits.h +79 -0
  152. plumed/_lib/include/plumed/lapack/real.h +50 -0
  153. plumed/_lib/include/plumed/lepton/CompiledExpression.h +164 -0
  154. plumed/_lib/include/plumed/lepton/CustomFunction.h +143 -0
  155. plumed/_lib/include/plumed/lepton/Exception.h +93 -0
  156. plumed/_lib/include/plumed/lepton/ExpressionProgram.h +137 -0
  157. plumed/_lib/include/plumed/lepton/ExpressionTreeNode.h +145 -0
  158. plumed/_lib/include/plumed/lepton/Lepton.h +85 -0
  159. plumed/_lib/include/plumed/lepton/MSVC_erfc.h +123 -0
  160. plumed/_lib/include/plumed/lepton/Operation.h +1302 -0
  161. plumed/_lib/include/plumed/lepton/ParsedExpression.h +165 -0
  162. plumed/_lib/include/plumed/lepton/Parser.h +111 -0
  163. plumed/_lib/include/plumed/lepton/windowsIncludes.h +73 -0
  164. plumed/_lib/include/plumed/mapping/Path.h +44 -0
  165. plumed/_lib/include/plumed/mapping/PathProjectionCalculator.h +57 -0
  166. plumed/_lib/include/plumed/matrixtools/MatrixOperationBase.h +54 -0
  167. plumed/_lib/include/plumed/matrixtools/MatrixTimesMatrix.h +309 -0
  168. plumed/_lib/include/plumed/matrixtools/MatrixTimesVectorBase.h +365 -0
  169. plumed/_lib/include/plumed/matrixtools/OuterProduct.h +238 -0
  170. plumed/_lib/include/plumed/maze/Core.h +65 -0
  171. plumed/_lib/include/plumed/maze/Loss.h +86 -0
  172. plumed/_lib/include/plumed/maze/Member.h +66 -0
  173. plumed/_lib/include/plumed/maze/Memetic.h +799 -0
  174. plumed/_lib/include/plumed/maze/Optimizer.h +357 -0
  175. plumed/_lib/include/plumed/maze/Random_MT.h +156 -0
  176. plumed/_lib/include/plumed/maze/Tools.h +183 -0
  177. plumed/_lib/include/plumed/metatomic/vesin.h +188 -0
  178. plumed/_lib/include/plumed/molfile/Gromacs.h +2013 -0
  179. plumed/_lib/include/plumed/molfile/endianswap.h +217 -0
  180. plumed/_lib/include/plumed/molfile/fastio.h +683 -0
  181. plumed/_lib/include/plumed/molfile/largefiles.h +78 -0
  182. plumed/_lib/include/plumed/molfile/libmolfile_plugin.h +77 -0
  183. plumed/_lib/include/plumed/molfile/molfile_plugin.h +1034 -0
  184. plumed/_lib/include/plumed/molfile/periodic_table.h +248 -0
  185. plumed/_lib/include/plumed/molfile/readpdb.h +447 -0
  186. plumed/_lib/include/plumed/molfile/vmdplugin.h +236 -0
  187. plumed/_lib/include/plumed/multicolvar/MultiColvarShortcuts.h +45 -0
  188. plumed/_lib/include/plumed/opes/ExpansionCVs.h +79 -0
  189. plumed/_lib/include/plumed/sasa/Sasa.h +32 -0
  190. plumed/_lib/include/plumed/secondarystructure/SecondaryStructureBase.h +372 -0
  191. plumed/_lib/include/plumed/setup/ActionSetup.h +25 -0
  192. plumed/_lib/include/plumed/small_vector/small_vector.h +6114 -0
  193. plumed/_lib/include/plumed/symfunc/CoordinationNumbers.h +41 -0
  194. plumed/_lib/include/plumed/tools/Angle.h +52 -0
  195. plumed/_lib/include/plumed/tools/AtomDistribution.h +138 -0
  196. plumed/_lib/include/plumed/tools/AtomNumber.h +152 -0
  197. plumed/_lib/include/plumed/tools/BiasRepresentation.h +106 -0
  198. plumed/_lib/include/plumed/tools/BitmaskEnum.h +167 -0
  199. plumed/_lib/include/plumed/tools/Brent1DRootSearch.h +159 -0
  200. plumed/_lib/include/plumed/tools/CheckInRange.h +44 -0
  201. plumed/_lib/include/plumed/tools/Citations.h +74 -0
  202. plumed/_lib/include/plumed/tools/ColvarOutput.h +118 -0
  203. plumed/_lib/include/plumed/tools/Communicator.h +316 -0
  204. plumed/_lib/include/plumed/tools/ConjugateGradient.h +80 -0
  205. plumed/_lib/include/plumed/tools/DLLoader.h +79 -0
  206. plumed/_lib/include/plumed/tools/ERMSD.h +73 -0
  207. plumed/_lib/include/plumed/tools/Exception.h +406 -0
  208. plumed/_lib/include/plumed/tools/File.h +28 -0
  209. plumed/_lib/include/plumed/tools/FileBase.h +153 -0
  210. plumed/_lib/include/plumed/tools/FileTools.h +37 -0
  211. plumed/_lib/include/plumed/tools/ForwardDecl.h +54 -0
  212. plumed/_lib/include/plumed/tools/Grid.h +638 -0
  213. plumed/_lib/include/plumed/tools/HistogramBead.h +136 -0
  214. plumed/_lib/include/plumed/tools/IFile.h +117 -0
  215. plumed/_lib/include/plumed/tools/KernelFunctions.h +113 -0
  216. plumed/_lib/include/plumed/tools/Keywords.h +380 -0
  217. plumed/_lib/include/plumed/tools/LatticeReduction.h +66 -0
  218. plumed/_lib/include/plumed/tools/LeptonCall.h +64 -0
  219. plumed/_lib/include/plumed/tools/LinkCells.h +126 -0
  220. plumed/_lib/include/plumed/tools/Log.h +41 -0
  221. plumed/_lib/include/plumed/tools/LoopUnroller.h +163 -0
  222. plumed/_lib/include/plumed/tools/Matrix.h +721 -0
  223. plumed/_lib/include/plumed/tools/MatrixSquareBracketsAccess.h +138 -0
  224. plumed/_lib/include/plumed/tools/MergeVectorTools.h +153 -0
  225. plumed/_lib/include/plumed/tools/Minimise1DBrent.h +244 -0
  226. plumed/_lib/include/plumed/tools/MinimiseBase.h +120 -0
  227. plumed/_lib/include/plumed/tools/MolDataClass.h +51 -0
  228. plumed/_lib/include/plumed/tools/NeighborList.h +112 -0
  229. plumed/_lib/include/plumed/tools/OFile.h +286 -0
  230. plumed/_lib/include/plumed/tools/OpenACC.h +180 -0
  231. plumed/_lib/include/plumed/tools/OpenMP.h +75 -0
  232. plumed/_lib/include/plumed/tools/PDB.h +154 -0
  233. plumed/_lib/include/plumed/tools/Pbc.h +139 -0
  234. plumed/_lib/include/plumed/tools/PlumedHandle.h +105 -0
  235. plumed/_lib/include/plumed/tools/RMSD.h +493 -0
  236. plumed/_lib/include/plumed/tools/Random.h +80 -0
  237. plumed/_lib/include/plumed/tools/RootFindingBase.h +79 -0
  238. plumed/_lib/include/plumed/tools/Stopwatch.h +475 -0
  239. plumed/_lib/include/plumed/tools/Subprocess.h +142 -0
  240. plumed/_lib/include/plumed/tools/SwitchingFunction.h +208 -0
  241. plumed/_lib/include/plumed/tools/Tensor.h +724 -0
  242. plumed/_lib/include/plumed/tools/TokenizedLine.h +123 -0
  243. plumed/_lib/include/plumed/tools/Tools.h +638 -0
  244. plumed/_lib/include/plumed/tools/Torsion.h +55 -0
  245. plumed/_lib/include/plumed/tools/TrajectoryParser.h +118 -0
  246. plumed/_lib/include/plumed/tools/Tree.h +61 -0
  247. plumed/_lib/include/plumed/tools/TypesafePtr.h +463 -0
  248. plumed/_lib/include/plumed/tools/Units.h +167 -0
  249. plumed/_lib/include/plumed/tools/Vector.h +433 -0
  250. plumed/_lib/include/plumed/tools/View.h +296 -0
  251. plumed/_lib/include/plumed/tools/View2D.h +100 -0
  252. plumed/_lib/include/plumed/tools/h36.h +39 -0
  253. plumed/_lib/include/plumed/vatom/ActionWithVirtualAtom.h +32 -0
  254. plumed/_lib/include/plumed/ves/BasisFunctions.h +380 -0
  255. plumed/_lib/include/plumed/ves/CoeffsBase.h +310 -0
  256. plumed/_lib/include/plumed/ves/CoeffsMatrix.h +220 -0
  257. plumed/_lib/include/plumed/ves/CoeffsVector.h +251 -0
  258. plumed/_lib/include/plumed/ves/FermiSwitchingFunction.h +74 -0
  259. plumed/_lib/include/plumed/ves/GridIntegrationWeights.h +50 -0
  260. plumed/_lib/include/plumed/ves/GridLinearInterpolation.h +81 -0
  261. plumed/_lib/include/plumed/ves/GridProjWeights.h +61 -0
  262. plumed/_lib/include/plumed/ves/LinearBasisSetExpansion.h +303 -0
  263. plumed/_lib/include/plumed/ves/Optimizer.h +444 -0
  264. plumed/_lib/include/plumed/ves/TargetDistModifer.h +53 -0
  265. plumed/_lib/include/plumed/ves/TargetDistribution.h +266 -0
  266. plumed/_lib/include/plumed/ves/VesBias.h +545 -0
  267. plumed/_lib/include/plumed/ves/VesTools.h +142 -0
  268. plumed/_lib/include/plumed/ves/WaveletGrid.h +75 -0
  269. plumed/_lib/include/plumed/volumes/ActionVolume.h +268 -0
  270. plumed/_lib/include/plumed/volumes/VolumeShortcut.h +147 -0
  271. plumed/_lib/include/plumed/wrapper/Plumed.h +5025 -0
  272. plumed/_lib/include/plumed/xdrfile/xdrfile.h +663 -0
  273. plumed/_lib/include/plumed/xdrfile/xdrfile_trr.h +89 -0
  274. plumed/_lib/include/plumed/xdrfile/xdrfile_xtc.h +90 -0
  275. plumed/_lib/lib/PythonCVInterface.so +0 -0
  276. plumed/_lib/lib/libplumed.a +0 -0
  277. plumed/_lib/lib/libplumed.so +0 -0
  278. plumed/_lib/lib/libplumedKernel.so +0 -0
  279. plumed/_lib/lib/libplumedWrapper.a +0 -0
  280. plumed/_lib/lib/pkgconfig/plumed.pc +13 -0
  281. plumed/_lib/lib/pkgconfig/plumedInternals.pc +13 -0
  282. plumed/_lib/lib/pkgconfig/plumedWrapper.pc +13 -0
  283. plumed/_lib/lib/plumed/fortran/plumed.f90 +879 -0
  284. plumed/_lib/lib/plumed/fortran/plumed_f08.f90 +2625 -0
  285. plumed/_lib/lib/plumed/modulefile +69 -0
  286. plumed/_lib/lib/plumed/patches/gromacs-2022.5.config +43 -0
  287. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt +543 -0
  288. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt.preplumed +540 -0
  289. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp +1628 -0
  290. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1590 -0
  291. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h +103 -0
  292. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h.preplumed +99 -0
  293. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp +2527 -0
  294. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2513 -0
  295. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  296. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  297. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +408 -0
  298. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +394 -0
  299. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp +2348 -0
  300. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2091 -0
  301. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp +3573 -0
  302. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3495 -0
  303. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1506 -0
  304. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1402 -0
  305. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  306. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  307. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp +997 -0
  308. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +906 -0
  309. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp +2780 -0
  310. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2738 -0
  311. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  312. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  313. plumed/_lib/lib/plumed/patches/gromacs-2023.5.config +43 -0
  314. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt +549 -0
  315. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt.preplumed +546 -0
  316. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
  317. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
  318. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h +104 -0
  319. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
  320. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp +2624 -0
  321. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2610 -0
  322. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  323. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  324. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +409 -0
  325. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +395 -0
  326. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp +2419 -0
  327. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2164 -0
  328. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp +3546 -0
  329. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3468 -0
  330. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
  331. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
  332. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  333. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  334. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp +991 -0
  335. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +900 -0
  336. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp +2895 -0
  337. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2849 -0
  338. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  339. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  340. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp +886 -0
  341. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +880 -0
  342. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +347 -0
  343. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +345 -0
  344. plumed/_lib/lib/plumed/patches/gromacs-2024.3.config +43 -0
  345. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt +575 -0
  346. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt.preplumed +572 -0
  347. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
  348. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
  349. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h +104 -0
  350. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
  351. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp +2564 -0
  352. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2550 -0
  353. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  354. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  355. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h +410 -0
  356. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +396 -0
  357. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp +2435 -0
  358. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp.preplumed +2187 -0
  359. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp +3592 -0
  360. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3514 -0
  361. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
  362. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
  363. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  364. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  365. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp +958 -0
  366. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp.preplumed +929 -0
  367. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp +2987 -0
  368. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp.preplumed +2941 -0
  369. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  370. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  371. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp +904 -0
  372. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +898 -0
  373. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +353 -0
  374. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +351 -0
  375. plumed/_lib/lib/plumed/patches/gromacs-2025.0.config +39 -0
  376. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake +82 -0
  377. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake.preplumed +82 -0
  378. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp +162 -0
  379. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp.preplumed +154 -0
  380. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp +107 -0
  381. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp.preplumed +99 -0
  382. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h +120 -0
  383. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h.preplumed +111 -0
  384. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp +215 -0
  385. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp.preplumed +197 -0
  386. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h +87 -0
  387. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h.preplumed +86 -0
  388. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp +2971 -0
  389. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp.preplumed +2970 -0
  390. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h +430 -0
  391. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h.preplumed +429 -0
  392. plumed/_lib/lib/plumed/patches/namd-2.12.config +30 -0
  393. plumed/_lib/lib/plumed/patches/namd-2.12.diff +267 -0
  394. plumed/_lib/lib/plumed/patches/namd-2.13.config +30 -0
  395. plumed/_lib/lib/plumed/patches/namd-2.13.diff +267 -0
  396. plumed/_lib/lib/plumed/patches/namd-2.14.config +30 -0
  397. plumed/_lib/lib/plumed/patches/namd-2.14.diff +268 -0
  398. plumed/_lib/lib/plumed/patches/patch.sh +500 -0
  399. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.config +25 -0
  400. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90 +368 -0
  401. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90.preplumed +366 -0
  402. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90 +71 -0
  403. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90.preplumed +24 -0
  404. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90 +62 -0
  405. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  406. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90 +189 -0
  407. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90.preplumed +185 -0
  408. plumed/_lib/lib/plumed/patches/qespresso-6.2.config +26 -0
  409. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90 +422 -0
  410. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90.preplumed +420 -0
  411. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90 +70 -0
  412. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  413. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90 +62 -0
  414. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  415. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90 +233 -0
  416. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90.preplumed +230 -0
  417. plumed/_lib/lib/plumed/patches/qespresso-7.0.config +28 -0
  418. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile +175 -0
  419. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile.preplumed +171 -0
  420. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90 +486 -0
  421. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90.preplumed +484 -0
  422. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90 +74 -0
  423. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  424. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90 +64 -0
  425. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  426. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90 +532 -0
  427. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90.preplumed +518 -0
  428. plumed/_lib/lib/plumed/patches/qespresso-7.2.config +28 -0
  429. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile +249 -0
  430. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile.preplumed +244 -0
  431. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90 +532 -0
  432. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90.preplumed +535 -0
  433. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90 +74 -0
  434. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  435. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90 +64 -0
  436. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  437. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90 +569 -0
  438. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90.preplumed +560 -0
  439. plumed/_lib/lib/plumed/plumed-config +9 -0
  440. plumed/_lib/lib/plumed/plumed-mklib +9 -0
  441. plumed/_lib/lib/plumed/plumed-newcv +9 -0
  442. plumed/_lib/lib/plumed/plumed-partial_tempering +9 -0
  443. plumed/_lib/lib/plumed/plumed-patch +9 -0
  444. plumed/_lib/lib/plumed/plumed-runtime +0 -0
  445. plumed/_lib/lib/plumed/plumed-selector +9 -0
  446. plumed/_lib/lib/plumed/plumed-vim2html +9 -0
  447. plumed/_lib/lib/plumed/scripts/config.sh +126 -0
  448. plumed/_lib/lib/plumed/scripts/mklib.sh +175 -0
  449. plumed/_lib/lib/plumed/scripts/newcv.sh +26 -0
  450. plumed/_lib/lib/plumed/scripts/partial_tempering.sh +319 -0
  451. plumed/_lib/lib/plumed/scripts/patch.sh +4 -0
  452. plumed/_lib/lib/plumed/scripts/selector.sh +234 -0
  453. plumed/_lib/lib/plumed/scripts/vim2html.sh +190 -0
  454. plumed/_lib/lib/plumed/src/colvar/Template.cpp +116 -0
  455. plumed/_lib/lib/plumed/src/config/compile_options.sh +3 -0
  456. plumed/_lib/lib/plumed/src/config/config.txt +179 -0
  457. plumed/_lib/lib/plumed/src/lib/Plumed.cmake +8 -0
  458. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.runtime +5 -0
  459. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.shared +5 -0
  460. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.static +5 -0
  461. plumed/_lib/lib/plumed/src/lib/Plumed.inc +8 -0
  462. plumed/_lib/lib/plumed/src/lib/Plumed.inc.runtime +5 -0
  463. plumed/_lib/lib/plumed/src/lib/Plumed.inc.shared +5 -0
  464. plumed/_lib/lib/plumed/src/lib/Plumed.inc.static +5 -0
  465. plumed/_lib/lib/plumed/vim/scripts.vim +6 -0
  466. plumed/_plumed_core.cpython-311-aarch64-linux-musl.so +0 -0
  467. plumed/_plumed_core.cpython-312-aarch64-linux-musl.so +0 -0
  468. plumed/_plumed_core.cpython-313-aarch64-linux-musl.so +0 -0
  469. plumedCommunications.cpython-311-aarch64-linux-musl.so +0 -0
  470. plumedCommunications.cpython-312-aarch64-linux-musl.so +0 -0
  471. plumedCommunications.cpython-313-aarch64-linux-musl.so +0 -0
  472. plumedCommunications.pyi +431 -0
@@ -0,0 +1,493 @@
1
+ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ Copyright (c) 2011-2023 The plumed team
3
+ (see the PEOPLE file at the root of the distribution for a list of names)
4
+
5
+ See http://www.plumed.org for more information.
6
+
7
+ This file is part of plumed, version 2.
8
+
9
+ plumed is free software: you can redistribute it and/or modify
10
+ it under the terms of the GNU Lesser General Public License as published by
11
+ the Free Software Foundation, either version 3 of the License, or
12
+ (at your option) any later version.
13
+
14
+ plumed is distributed in the hope that it will be useful,
15
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ GNU Lesser General Public License for more details.
18
+
19
+ You should have received a copy of the GNU Lesser General Public License
20
+ along with plumed. If not, see <http://www.gnu.org/licenses/>.
21
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22
+ #ifndef __PLUMED_tools_RMSD_h
23
+ #define __PLUMED_tools_RMSD_h
24
+
25
+ #include "Vector.h"
26
+ #include "Matrix.h"
27
+ #include "Tensor.h"
28
+ #include "View.h"
29
+ #include <vector>
30
+ #include <string>
31
+ #include <array>
32
+
33
+ namespace PLMD {
34
+
35
+ class Log;
36
+ class PDB;
37
+
38
+ /** \ingroup TOOLBOX
39
+ A class that implements RMSD calculations
40
+ This is a class that implements the various infrastructure to calculate the
41
+ RMSD or MSD respect a given frame. It can be done through an optimal alignment scheme
42
+ as Kearsley or, more simply, by resetting the center of mass.
43
+ This is the class that decides this. A very simple use is
44
+ \verbatim
45
+ #include "../tools/PDB.h"
46
+ #include "../tools/RMSD.h"
47
+ #include "../tools/Vector.h"
48
+ using namespace PLMD;
49
+ RMSD rmsd;
50
+ PDB pdb;
51
+ // get the pdb (see PDB documentation)
52
+ pdb.read("file.pdb",true,1.0);
53
+ string type;
54
+ type.assign("OPTIMAL");
55
+ // set the reference and the type
56
+ rmsd.set(pdb,type);
57
+ // this calculates the rmsd and the derivatives
58
+ vector<Vector> derivs;
59
+ double val;
60
+ val=rmsd.calculate(getPositions(),derivs,true);
61
+ \endverbatim
62
+
63
+ **/
64
+
65
+ class RMSD {
66
+ enum AlignmentMethod {SIMPLE, OPTIMAL, OPTIMAL_FAST};
67
+ AlignmentMethod alignmentMethod=SIMPLE;
68
+ // Reference coordinates
69
+ std::vector<Vector> reference;
70
+ // Weights for alignment
71
+ std::vector<double> align;
72
+ // Weights for deviation
73
+ std::vector<double> displace;
74
+ // Center for reference and flag for its calculation
75
+ Vector reference_center;
76
+ bool reference_center_is_calculated=false;
77
+ bool reference_center_is_removed=false;
78
+ // Center for running position (not used in principle but here to reflect reference/positio symmetry
79
+ Vector positions_center;
80
+ bool positions_center_is_calculated=false;
81
+ bool positions_center_is_removed=false;
82
+ // calculates the center from the position provided
83
+ Vector calculateCenter(const std::vector<Vector>&p,const std::vector<double> &w) {
84
+ plumed_massert(p.size()==w.size(),"mismatch in dimension of position/align arrays while calculating the center");
85
+ unsigned n;
86
+ n=p.size();
87
+ Vector c;
88
+ c.zero();
89
+ for(unsigned i=0; i<n; i++) {
90
+ c+=p[i]*w[i];
91
+ }
92
+ return c;
93
+ };
94
+ // removes the center for the position provided
95
+ void removeCenter(std::vector<Vector>&p, const Vector &c) {
96
+ unsigned n;
97
+ n=p.size();
98
+ for(unsigned i=0; i<n; i++) {
99
+ p[i]-=c;
100
+ }
101
+ };
102
+ // add center
103
+ void addCenter(std::vector<Vector>&p, const Vector &c) {
104
+ Vector cc=c*-1.;
105
+ removeCenter(p,cc);
106
+ };
107
+
108
+ public:
109
+ /// Constructor
110
+ RMSD();
111
+ /// clear the structure
112
+ void clear();
113
+ /// set reference, align and displace from input pdb structure: evtl remove com from the initial structure and normalize the input weights from the pdb
114
+ void set(const PDB&,
115
+ const std::string & mytype,
116
+ bool remove_center=true,
117
+ bool normalize_weights=true);
118
+ /// set align displace reference and type from input vectors
119
+ void set(const std::vector<double>& alignTo,
120
+ const std::vector<double>& displaceFrom,
121
+ const std::vector<Vector>& ref,
122
+ const std::string & mytype,
123
+ bool remove_center=true,
124
+ bool normalize_weights=true );
125
+ /// set the type of alignment we are doing
126
+ void setType(const std::string & mytype);
127
+ /// set reference coordinates, remove the com by using uniform weights
128
+ void setReference(const std::vector<Vector>& ref);
129
+ const std::vector<Vector>& getReference() const ;
130
+ /// set weights and remove the center from reference with normalized weights. If the com has been removed, it resets to the new value
131
+ void setAlign(const std::vector<double>& alignTo,
132
+ bool normalize_weights=true,
133
+ bool remove_center=true);
134
+ std::vector<double> getAlign();
135
+ /// set align
136
+ void setDisplace(const std::vector<double>& displaceFrom, bool normalize_weights=true);
137
+ std::vector<double> getDisplace();
138
+ ///
139
+ std::string getMethod() const ;
140
+ /// workhorses
141
+ double simpleAlignment(const std::vector<double>& alignTo,
142
+ const std::vector<double>& displaceFrom,
143
+ const View<Vector> positions,
144
+ const std::vector<Vector>& ref,
145
+ std::vector<Vector>& derivatives,
146
+ std::vector<Vector>& displacement,
147
+ bool squared=false)const;
148
+ template <bool safe,bool alEqDis>
149
+ double optimalAlignment(const std::vector<double>& alignTo,
150
+ const std::vector<double>& displaceFrom,
151
+ const View<Vector> positions,
152
+ const std::vector<Vector>& ref,
153
+ std::vector<Vector>& DDistDPos, bool squared=false)const;
154
+
155
+ template <bool safe, bool alEqDis>
156
+ double optimalAlignmentWithCloseStructure(const std::vector<double>& alignTo,
157
+ const std::vector<double>& displaceFrom,
158
+ const View<Vector> positions,
159
+ const std::vector<Vector>& ref,
160
+ std::vector<Vector>& derivatives,
161
+ const Tensor & rotationPosClose,
162
+ const Tensor & rotationRefClose,
163
+ std::array<std::array<Tensor,3>,3>& drotationPosCloseDrr01,
164
+ bool squared=false)const;
165
+
166
+ template <bool safe, bool alEqDis>
167
+ double optimalAlignment_Rot_DRotDRr01(const std::vector<double>& alignTo,
168
+ const std::vector<double>& displaceFrom,
169
+ const View<Vector> positions,
170
+ const std::vector<Vector>& ref,
171
+ Tensor & Rotation,
172
+ std::array<std::array<Tensor,3>,3>& drotationPosCloseDrr01,
173
+ bool squared=false)const;
174
+
175
+ template <bool safe, bool alEqDis>
176
+ double optimalAlignment_Rot(const std::vector<double>& alignTo,
177
+ const std::vector<double>& displaceFrom,
178
+ const View<Vector> positions,
179
+ const std::vector<Vector>& ref,
180
+ std::vector<Vector>& derivatives,
181
+ Tensor & Rotation,
182
+ bool squared=false)const;
183
+
184
+ template <bool safe,bool alEqDis>
185
+ double optimalAlignment_DDistDRef(const std::vector<double>& alignTo,
186
+ const std::vector<double>& displaceFrom,
187
+ const View<Vector> positions,
188
+ const std::vector<Vector>& ref,
189
+ std::vector<Vector>& DDistDPos,
190
+ std::vector<Vector>& DDistDRef,
191
+ bool squared=false) const;
192
+
193
+ template <bool safe,bool alEqDis>
194
+ double optimalAlignment_SOMA(const std::vector<double>& alignTo,
195
+ const std::vector<double>& displaceFrom,
196
+ const View<Vector> positions,
197
+ const std::vector<Vector>& ref,
198
+ std::vector<Vector>& DDistDPos,
199
+ std::vector<Vector>& DDistDRef,
200
+ bool squared=false) const;
201
+
202
+ template <bool safe,bool alEqDis>
203
+ double optimalAlignment_DDistDRef_Rot_DRotDPos(const std::vector<double>& alignTo,
204
+ const std::vector<double>& displaceFrom,
205
+ const View<Vector> positions,
206
+ const std::vector<Vector>& ref,
207
+ std::vector<Vector>& DDistDPos,
208
+ std::vector<Vector>& DDistDRef,
209
+ Tensor & Rotation,
210
+ Matrix<std::vector<Vector> >&DRotDPos,
211
+ bool squared=false) const;
212
+
213
+ template <bool safe,bool alEqDis>
214
+ double optimalAlignment_DDistDRef_Rot_DRotDPos_DRotDRef(const std::vector<double>& alignTo,
215
+ const std::vector<double>& displaceFrom,
216
+ const View<Vector> positions,
217
+ const std::vector<Vector>& ref,
218
+ std::vector<Vector>& DDistDPos,
219
+ std::vector<Vector>& DDistDRef,
220
+ Tensor & Rotation,
221
+ Matrix<std::vector<Vector> >&DRotDPos,
222
+ Matrix<std::vector<Vector> >&DRotDRef,
223
+ bool squared=false) const;
224
+
225
+ template <bool safe,bool alEqDis>
226
+ double optimalAlignment_PCA(const std::vector<double>& alignTo,
227
+ const std::vector<double>& displaceFrom,
228
+ const View<Vector> positions,
229
+ const std::vector<Vector>& ref,
230
+ std::vector<Vector>& alignedpositions,
231
+ std::vector<Vector>& centeredpositions,
232
+ std::vector<Vector>& centeredreference,
233
+ Tensor & Rotation,
234
+ std::vector<Vector>& DDistDPos,
235
+ Matrix<std::vector<Vector> >& DRotDPos,
236
+ bool squared=false) const ;
237
+
238
+ template <bool safe,bool alEqDis>
239
+ double optimalAlignment_Fit(const std::vector<double>& alignTo,
240
+ const std::vector<double>& displaceFrom,
241
+ const View<Vector> positions,
242
+ const std::vector<Vector>& ref,
243
+ Tensor & Rotation,
244
+ Matrix<std::vector<Vector> >& DRotDPos,
245
+ std::vector<Vector>& centeredpositions,
246
+ Vector & center_positions,
247
+ bool squared=false);
248
+
249
+
250
+ /// Compute rmsd: note that this is an intermediate layer which is kept in order to evtl expand with more alignment types/user options to be called while keeping the workhorses separated
251
+ //#pragma acc routine
252
+ double calculate(const View<Vector> positions,
253
+ std::vector<Vector>&derivatives,
254
+ bool squared=false)const;
255
+ double calculate(const std::vector<Vector>& positions,
256
+ std::vector<Vector>&derivatives,
257
+ bool squared=false)const;
258
+ /// Other convenience methods:
259
+ /// calculate the derivative of distance respect to position(DDistDPos) and reference (DDistDPos)
260
+ double calc_DDistDRef( const std::vector<Vector>& positions, std::vector<Vector> &DDistDPos, std::vector<Vector>& DDistDRef, const bool squared=false );
261
+ /// calculate the derivative for SOMA (i.e. derivative respect to reference frame without the matrix derivative)
262
+ double calc_SOMA( const std::vector<Vector>& positions,
263
+ std::vector<Vector>&DDistDPos,
264
+ std::vector<Vector>& DDistDRef,
265
+ const bool squared=false);
266
+ ///
267
+ double calc_DDistDRef_Rot_DRotDPos( const std::vector<Vector>& positions,
268
+ std::vector<Vector>&DDistDPos,
269
+ std::vector<Vector>& DDistDRef,
270
+ Tensor & Rotation,Matrix<std::vector<Vector> >&DRotDPos,
271
+ const bool squared=false);
272
+ double calc_DDistDRef_Rot_DRotDPos_DRotDRef( const std::vector<Vector>& positions,
273
+ std::vector<Vector>&DDistDPos,
274
+ std::vector<Vector>& DDistDRef,
275
+ Tensor & Rotation,Matrix<std::vector<Vector> >&DRotDPos,Matrix<std::vector<Vector> > &DRotDRef,
276
+ const bool squared=false);
277
+ /// convenience method to retrieve all the bits and pieces for PCA
278
+ double calc_PCAelements( const std::vector<Vector>& pos,
279
+ std::vector<Vector>&DDistDPos,
280
+ Tensor & Rotation,
281
+ Matrix<std::vector<Vector> >& DRotDPos,std::vector<Vector> & alignedpositions,
282
+ std::vector<Vector>& centeredpositions,
283
+ std::vector<Vector>&centeredreference,
284
+ bool squared=false) const ;
285
+ /// convenience method to retrieve all the bits and pieces needed by FitToTemplate
286
+ double calc_FitElements( const std::vector<Vector>& pos,
287
+ Tensor & Rotation,
288
+ Matrix<std::vector<Vector> >& DRotDPos,std::vector<Vector> & centeredpositions,Vector & center_positions,
289
+ bool squared=false );
290
+ ///calculate rotation matrix, derivative of rotation matrix w.r.t. positions, derivative of rotation matrix w.r.t. rr01
291
+ double calc_Rot_DRotDRr01( const std::vector<Vector>& positions,
292
+ Tensor & Rotation,
293
+ std::array<std::array<Tensor,3>,3>& DRotDRr01,
294
+ const bool squared=false );
295
+ ///calculate rotation matrix, derivative of rotation matrix w.r.t. positions
296
+ double calc_Rot( const std::vector<Vector>& positions,
297
+ std::vector<Vector>&DDistDPos,
298
+ Tensor & Rotation,
299
+ const bool squared=false );
300
+ ///calculate with close structure, i.e. approximate the RMSD without expensive computation of rotation matrix by reusing saved rotation matrices from previous iterations
301
+ double calculateWithCloseStructure( const std::vector<Vector>& positions,
302
+ std::vector<Vector>&DDistDPos,
303
+ const Tensor & rotationPosClose,
304
+ const Tensor & rotationRefClose,
305
+ std::array<std::array<Tensor,3>,3>& drotationPosCloseDrr01,
306
+ const bool squared=false );
307
+ /// static convenience method to get the matrix i,a from drotdpos (which is a bit tricky)
308
+ static Tensor getMatrixFromDRot(const Matrix< std::vector<Vector> >&drotdpos, const unsigned i, const unsigned a) {
309
+ Tensor t;
310
+ t[0][0]=drotdpos(0,0)[i][a];
311
+ t[0][1]=drotdpos(0,1)[i][a];
312
+ t[0][2]=drotdpos(0,2)[i][a];
313
+ t[1][0]=drotdpos(1,0)[i][a];
314
+ t[1][1]=drotdpos(1,1)[i][a];
315
+ t[1][2]=drotdpos(1,2)[i][a];
316
+ t[2][0]=drotdpos(2,0)[i][a];
317
+ t[2][1]=drotdpos(2,1)[i][a];
318
+ t[2][2]=drotdpos(2,2)[i][a];
319
+ return t;
320
+ };
321
+ };
322
+
323
+ /// this is a class which is needed to share information across the various non-threadsafe routines
324
+ /// so that the public function of rmsd are threadsafe while the inner core can safely share information
325
+ class RMSDCoreData {
326
+ private:
327
+ //the parameters that are common to the two constructors
328
+ //are inititialized here at declaration,
329
+ //to underline differences in setups
330
+ bool alEqDis=false;
331
+ bool distanceIsMSD=false; // default is RMSD but can deliver the MSD
332
+ bool hasDistance=false; // distance is already calculated
333
+ bool isInitialized=false;
334
+ bool safe=false;
335
+
336
+ // this need to be copied and they are small, should not affect the performance
337
+ Vector creference;
338
+ bool creference_is_calculated;
339
+ bool creference_is_removed;
340
+ Vector cpositions;
341
+ bool cpositions_is_calculated;
342
+ bool cpositions_is_removed;
343
+ bool retrieve_only_rotation;
344
+
345
+ // use reference assignment to speed up instead of copying
346
+ const View<Vector> positions;
347
+ const std::vector<Vector>&reference;
348
+ const std::vector<double>&align;
349
+ const std::vector<double>&displace;
350
+
351
+ // the needed stuff for distance and more (one could use eigenvecs components and eigenvals for some reason)
352
+ double dist=0.0;
353
+ Vector4d eigenvals;
354
+ Tensor4d eigenvecs;
355
+ double rr00=0.0; // sum of positions squared (needed for dist calc)
356
+ double rr11=0.0; // sum of reference squared (needed for dist calc)
357
+ Tensor rotation; // rotation derived from the eigenvector having the smallest eigenvalue
358
+ std::array<std::array<Tensor,3>,3> drotation_drr01; // derivative of the rotation only available when align!=displace
359
+ Tensor ddist_drr01;
360
+ Tensor ddist_drotation;
361
+ std::vector<Vector> d; // difference of components
362
+ public:
363
+ /// the constructor (note: only references are passed, therefore is rather fast)
364
+ /// note: this aligns the reference onto the positions
365
+ ///
366
+ /// this method assumes that the centers are already calculated and subtracted
367
+ RMSDCoreData(const std::vector<double>&a,
368
+ const std::vector<double>&disp,
369
+ const View<Vector> p,
370
+ const std::vector<Vector>&r,
371
+ const Vector &cp,
372
+ const Vector &cr )
373
+ : creference(cr),
374
+ creference_is_calculated(true),
375
+ creference_is_removed(true),
376
+ cpositions(cp),
377
+ cpositions_is_calculated(true),
378
+ cpositions_is_removed(true),
379
+ retrieve_only_rotation(false),
380
+ positions(p),
381
+ reference(r),
382
+ align(a),
383
+ displace(disp) {}
384
+
385
+ // this constructor does not assume that the positions and reference have the center subtracted
386
+ RMSDCoreData(const std::vector<double>&a,
387
+ const std::vector<double>&disp,
388
+ const View<Vector> p,
389
+ const std::vector<Vector>&r)
390
+ : creference(0.0,0.0,0.0),
391
+ creference_is_calculated(false),
392
+ creference_is_removed(false),
393
+ cpositions(0.0,0.0,0.0),
394
+ cpositions_is_calculated(false),
395
+ cpositions_is_removed(false),
396
+ retrieve_only_rotation(false),
397
+ positions(p),
398
+ reference(r),
399
+ align(a),
400
+ displace(disp) {}
401
+
402
+ // set the center on the fly without subtracting
403
+ void calcPositionsCenter() {
404
+ plumed_massert(!cpositions_is_calculated,"the center was already calculated");
405
+ cpositions.zero();
406
+ for(unsigned i=0; i<positions.size(); i++) {
407
+ cpositions+=positions[i]*align[i];
408
+ }
409
+ cpositions_is_calculated=true;
410
+ }
411
+
412
+ void calcReferenceCenter() {
413
+ plumed_massert(!creference_is_calculated,"the center was already calculated");
414
+ creference.zero();
415
+ for(unsigned i=0; i<reference.size(); i++) {
416
+ creference+=reference[i]*align[i];
417
+ }
418
+ creference_is_calculated=true;
419
+ }
420
+ // assume the center is given externally
421
+ // cppcheck-suppress passedByValue
422
+ void setPositionsCenter(Vector v) {
423
+ plumed_massert(!cpositions_is_calculated,"You are setting the center two times!");
424
+ cpositions=v;
425
+ cpositions_is_calculated=true;
426
+ }
427
+ // cppcheck-suppress passedByValue
428
+ void setReferenceCenter(Vector v) {
429
+ plumed_massert(!creference_is_calculated,"You are setting the center two times!");
430
+ creference=v;
431
+ creference_is_calculated=true;
432
+ }
433
+ // the center is already removed
434
+ void setPositionsCenterIsRemoved(bool t) {
435
+ cpositions_is_removed=t;
436
+ }
437
+ void setReferenceCenterIsRemoved(bool t) {
438
+ creference_is_removed=t;
439
+ }
440
+ bool getPositionsCenterIsRemoved() {
441
+ return cpositions_is_removed;
442
+ }
443
+ bool getReferenceCenterIsRemoved() {
444
+ return creference_is_removed;
445
+ }
446
+ // does the core calc : first thing to call after the constructor:
447
+ // only_rotation=true does not retrieve the derivatives, just retrieve the optimal rotation (the same calc cannot be exploit further)
448
+ void doCoreCalc(bool setSafe,bool setAlEqDis, bool only_rotation=false);
449
+ // do calculation with close structure data structures
450
+ void doCoreCalcWithCloseStructure(bool setSafe,
451
+ bool setAlEqDis,
452
+ const Tensor & rotationPosClose,
453
+ const Tensor & rotationRefClose,
454
+ std::array<std::array<Tensor,3>,3>& drotationPosCloseDrr01);
455
+ // retrieve the distance if required after doCoreCalc
456
+ double getDistance(bool squared);
457
+ // retrieve the derivative of the distance respect to the position
458
+ std::vector<Vector> getDDistanceDPositions();
459
+ // retrieve the derivative of the distance respect to the reference
460
+ std::vector<Vector> getDDistanceDReference();
461
+ // specific version for SOMA calculation (i.e. does not need derivative respect to rotation matrix)
462
+ std::vector<Vector> getDDistanceDReferenceSOMA();
463
+ // get aligned reference onto position
464
+ std::vector<Vector> getAlignedReferenceToPositions();
465
+ // get aligned position onto reference
466
+ std::vector<Vector> getAlignedPositionsToReference();
467
+ // get centered positions
468
+ std::vector<Vector> getCenteredPositions();
469
+ // get centered reference
470
+ std::vector<Vector> getCenteredReference();
471
+ // get center of positions
472
+ Vector getPositionsCenter();
473
+ // get center of reference
474
+ Vector getReferenceCenter();
475
+ // get rotation matrix (reference ->positions)
476
+ Tensor getRotationMatrixReferenceToPositions();
477
+ // get rotation matrix (positions -> reference)
478
+ Tensor getRotationMatrixPositionsToReference();
479
+ // get the derivative of the rotation matrix respect to positions
480
+ // note that the this transformation overlap the reference onto position
481
+ // if inverseTransform=true then aligns the positions onto reference
482
+ Matrix<std::vector<Vector> > getDRotationDPositions( bool inverseTransform=false );
483
+ // get the derivative of the rotation matrix respect to reference
484
+ // note that the this transformation overlap the reference onto position
485
+ // if inverseTransform=true then aligns the positions onto reference
486
+ Matrix<std::vector<Vector> > getDRotationDReference(bool inverseTransform=false );
487
+ const std::array<std::array<Tensor,3>,3>& getDRotationDRr01() const;
488
+ };
489
+
490
+ }
491
+
492
+ #endif
493
+
@@ -0,0 +1,80 @@
1
+ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ Copyright (c) 2012-2023 The plumed team
3
+ (see the PEOPLE file at the root of the distribution for a list of names)
4
+
5
+ See http://www.plumed.org for more information.
6
+
7
+ This file is part of plumed, version 2.
8
+
9
+ plumed is free software: you can redistribute it and/or modify
10
+ it under the terms of the GNU Lesser General Public License as published by
11
+ the Free Software Foundation, either version 3 of the License, or
12
+ (at your option) any later version.
13
+
14
+ plumed is distributed in the hope that it will be useful,
15
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ GNU Lesser General Public License for more details.
18
+
19
+ You should have received a copy of the GNU Lesser General Public License
20
+ along with plumed. If not, see <http://www.gnu.org/licenses/>.
21
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22
+ #ifndef __PLUMED_tools_Random_h
23
+ #define __PLUMED_tools_Random_h
24
+
25
+ #include <string>
26
+ #include <vector>
27
+ #include <iosfwd>
28
+
29
+ namespace PLMD {
30
+
31
+ /// \ingroup TOOLBOX
32
+ class Random {
33
+ static constexpr int IA=16807;
34
+ static constexpr int IM=2147483647;
35
+ static constexpr int IQ=127773;
36
+ static constexpr int IR=2836;
37
+ static constexpr int NTAB=32;
38
+ static constexpr int NDIV=(1+(IM-1)/NTAB);
39
+ static constexpr double fact=5.9604644775390625e-8; /* 1 / 2^24 */
40
+ static constexpr double EPS=3.0e-16;
41
+ static constexpr double AM=1.0/IM;
42
+ static constexpr double RNMX=1.0-EPS;
43
+ static const std::string noname;
44
+ bool incPrec;
45
+ bool switchGaussian;
46
+ double saveGaussian;
47
+ int iy;
48
+ int iv[NTAB];
49
+ int idum;
50
+ std::string name;
51
+ public:
52
+ explicit Random(const std::string & title=noname);
53
+ void setSeed(int idum);
54
+ double RandU01();
55
+ double U01();
56
+ double U01d();
57
+ int RandInt(int i);
58
+ void Shuffle(std::vector<unsigned>& vec);
59
+ void WriteStateFull(std::ostream &)const;
60
+ void ReadStateFull (std::istream &);
61
+ void fromString(const std::string & str);
62
+ void toString(std::string & str)const;
63
+ friend std::ostream & operator<<(std::ostream & out,const Random & rng) {
64
+ rng.WriteStateFull(out);
65
+ return out;
66
+ }
67
+ friend std::istream & operator>>(std::istream & in,Random & rng) {
68
+ rng.ReadStateFull(in);
69
+ return in;
70
+ }
71
+ double Gaussian();
72
+ void IncreasedPrecis(bool i) {
73
+ incPrec=i;
74
+ }
75
+ };
76
+
77
+ }
78
+
79
+ #endif
80
+
@@ -0,0 +1,79 @@
1
+ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ Copyright (c) 2016-2023 The plumed team
3
+ (see the PEOPLE file at the root of the distribution for a list of names)
4
+
5
+ See http://www.plumed.org for more information.
6
+
7
+ This file is part of plumed, version 2.
8
+
9
+ plumed is free software: you can redistribute it and/or modify
10
+ it under the terms of the GNU Lesser General Public License as published by
11
+ the Free Software Foundation, either version 3 of the License, or
12
+ (at your option) any later version.
13
+
14
+ plumed is distributed in the hope that it will be useful,
15
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ GNU Lesser General Public License for more details.
18
+
19
+ You should have received a copy of the GNU Lesser General Public License
20
+ along with plumed. If not, see <http://www.gnu.org/licenses/>.
21
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22
+ #ifndef __PLUMED_tools_RootFindingBase_h
23
+ #define __PLUMED_tools_RootFindingBase_h
24
+
25
+ #include "MinimiseBase.h"
26
+ #include "Brent1DRootSearch.h"
27
+
28
+ namespace PLMD {
29
+
30
+ template <class FCLASS>
31
+ class RootFindingBase {
32
+ private:
33
+ /// This is the pointer to the member function in the energy
34
+ /// calculating class that calculates the energy
35
+ typedef double(FCLASS::*engf_pointer)( const std::vector<double>& p, std::vector<double>& der ) const ;
36
+ typedef double(FCLASS::*engfnc_pointer)( const std::vector<double>& p, std::vector<double>& der ) ;
37
+ /// The class that calculates the energy given a position
38
+ FCLASS* myclass_func;
39
+ /// This actually does the search for a root
40
+ void doSearch( const std::vector<double>& dir, std::vector<double>& p, F1dim<FCLASS>& f1dim ) const ;
41
+ public:
42
+ explicit RootFindingBase( FCLASS* funcc ) : myclass_func(funcc) {}
43
+ /// This is the line minimiser
44
+ void linesearch( const std::vector<double>& dir, std::vector<double>& p, engf_pointer myfunc ) const ;
45
+ void lsearch( const std::vector<double>& dir, std::vector<double>& p, engfnc_pointer myfunc ) const ;
46
+ };
47
+
48
+ template <class FCLASS>
49
+ void RootFindingBase<FCLASS>::doSearch( const std::vector<double>& dir, std::vector<double>& p, F1dim<FCLASS>& f1dim ) const {
50
+ // Construct an object that will do the line search for the minimum
51
+ Brent1DRootSearch<F1dim<FCLASS> > bb(f1dim);
52
+
53
+ // This does the actual search for the root
54
+ double ax=0.0, xx=1.0;
55
+ bb.bracket( ax, xx, &F1dim<FCLASS>::getEng );
56
+ double xmin=bb.search( &F1dim<FCLASS>::getEng );
57
+ for(unsigned i=0; i<p.size(); ++i) {
58
+ p[i] += xmin*dir[i];
59
+ }
60
+ }
61
+
62
+ template <class FCLASS>
63
+ void RootFindingBase<FCLASS>::linesearch( const std::vector<double>& dir, std::vector<double>& p, engf_pointer myfunc ) const {
64
+ // Construct the object that turns points on a line into vectors
65
+ F1dim<FCLASS> f1dim( p, dir, myclass_func, myfunc, NULL );
66
+ // Actually do the search
67
+ doSearch( dir, p, f1dim );
68
+ }
69
+
70
+ template <class FCLASS>
71
+ void RootFindingBase<FCLASS>::lsearch( const std::vector<double>& dir, std::vector<double>& p, engfnc_pointer myfunc ) const {
72
+ // Construct the object that turns points on a line into vectors
73
+ F1dim<FCLASS> f1dim( p, dir, myclass_func, NULL, myfunc );
74
+ // Actually do the search
75
+ doSearch( dir, p, f1dim );
76
+ }
77
+
78
+ }
79
+ #endif