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,547 @@
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_core_Value_h
23
+ #define __PLUMED_core_Value_h
24
+
25
+ #include <vector>
26
+ #include <string>
27
+ #include <map>
28
+ #include "../tools/Exception.h"
29
+ #include "../tools/Tools.h"
30
+ #include "../tools/AtomNumber.h"
31
+ #include "../tools/Vector.h"
32
+ #include "../tools/View.h"
33
+
34
+ namespace PLMD {
35
+
36
+ class OFile;
37
+ class Communicator;
38
+ class ActionWithValue;
39
+ class ActionAtomistic;
40
+
41
+ /// \ingroup TOOLBOX
42
+ /// A class for holding the value of a function together with its derivatives.
43
+ /// Typically, an object of type PLMD::ActionWithValue will contain one
44
+ /// object of type PLUMD::Value that will be named after the label. If the
45
+ /// PLMD::ActionWithValue is part of a class that calculates multiple components
46
+ /// then the class will contain multiple that will be called label.component-name
47
+ /// This class is used to pass information between different PLMD::Action
48
+ /// objects. However, if you find a use for a tempory PLMD::Value in some method
49
+ /// you are implementing please feel free to use it.
50
+ class Value {
51
+ friend struct ArgumentsBookkeeping;
52
+ friend class ActionWithValue;
53
+ friend class ActionWithVector;
54
+ friend class ActionWithMatrix;
55
+ friend class ActionAtomistic;
56
+ friend class ActionWithArguments;
57
+ friend class ActionWithVirtualAtom;
58
+ friend class DomainDecomposition;
59
+ template<typename T>
60
+ friend class DataPassingObjectTyped;
61
+ private:
62
+ /// The action in which this quantity is calculated
63
+ ActionWithValue* action=nullptr;
64
+ /// Had the value been set
65
+ bool value_set=false;
66
+ /// The value of the quantity
67
+ std::vector<double> data;
68
+ /// The force acting on this quantity
69
+ std::vector<double> inputForce;
70
+ /// A flag telling us we have a force acting on this quantity
71
+ bool hasForce=false;
72
+ /// The way this value is used in the code
73
+ /// normal = regular value that is determined during calculate
74
+ /// constant = constnt value that is determined during startup and that doesn't change during simulation
75
+ /// average = value that is averaged/collected over multiple steps of trajectory
76
+ /// calcFromAverage = value that is calculated from an average value
77
+ enum {normal,constant,average,calcFromAverage} valtype=normal;
78
+ /// This is used by ActionWithValue to set the valtype
79
+ void setValType( const std::string& vtype );
80
+ /// This is used by ActionWithValue to determine if we need to calculate on update
81
+ bool calculateOnUpdate() const ;
82
+ /// The derivatives of the quantity stored in value
83
+ std::map<AtomNumber,Vector> gradients;
84
+ /// The name of this quantiy
85
+ std::string name;
86
+ /// What is the shape of the value (0 dimensional=scalar, n dimensional with derivatives=grid, 1 dimensional no derivatives=vector, 2 dimensional no derivatives=matrix)
87
+ std::vector<std::size_t> shape;
88
+ /// Does this quanity have derivatives
89
+ bool hasDeriv=true;
90
+ /// Variables for storing data
91
+ unsigned bufstart=0;
92
+ unsigned ngrid_der=0;
93
+ std::size_t ncols=0;
94
+ /// If we are storing a matrix is it symmetric?
95
+ bool symmetric=false;
96
+ /// This is a bookeeping array that holds the non-zero elements of the "sparse" matrix
97
+ std::vector<unsigned> matrix_bookeeping;
98
+ /// Is this quantity periodic
99
+ enum {unset,periodic,notperiodic} periodicity=unset;
100
+ /// Various quantities that describe the domain of this value
101
+ std::string str_min;
102
+ std::string str_max;
103
+ double min=0.0;
104
+ double max=0.0;
105
+ double max_minus_min=0.0;
106
+ double inv_max_minus_min=0.0;
107
+ /// Is the derivative of this quantity zero when the value is zero
108
+ bool derivativeIsZeroWhenValueIsZero=false;
109
+ /// Complete the setup of the periodicity
110
+ void setupPeriodicity();
111
+ // bring value within PBCs
112
+ void applyPeriodicity( const unsigned& ival );
113
+ public:
114
+ /// A constructor that can be used to make Vectors of values
115
+ Value();
116
+ /// A constructor that can be used to make Vectors of named values
117
+ explicit Value(const std::string& valname);
118
+ /// A constructor that is used throughout the code to setup the value poiters
119
+ Value(ActionWithValue* av, const std::string& valname, const bool withderiv,const std::vector<std::size_t>&ss=std::vector<std::size_t>());
120
+ /// Set the shape of the Value
121
+ void setShape( const std::vector<std::size_t>&ss );
122
+ /// Set the value of the function
123
+ void set(double);
124
+ /// Set the value of the stored data
125
+ void set(const std::size_t& n, const double& v );
126
+ /// Add something to the value of the function
127
+ void add(double);
128
+ /// Add something to the ith element of the data array
129
+ void add(const std::size_t& n, const double& v );
130
+ /// Get the location of this element of in the store
131
+ std::size_t getIndexInStore( const std::size_t& ival ) const ;
132
+ /// Get the value of the function
133
+ double get( const std::size_t ival=0, const bool trueind=true ) const;
134
+ /// A variant of get() for checking that at least one of the values on the row is !=0
135
+ bool checkValueIsActiveForMMul(std::size_t task) const;
136
+ /// A variant of get() for assigning data to an external view (assuems trueind=false), returns the number of arguments assigned
137
+ std::size_t assignValues(View<double> target);
138
+ /// Find out if the value has been set
139
+ bool valueHasBeenSet() const;
140
+ /// Check if the value is periodic
141
+ bool isPeriodic() const;
142
+ /// Set the function not periodic
143
+ void setNotPeriodic();
144
+ /// Set the domain of the function
145
+ void setDomain(const std::string&, const std::string&);
146
+ /// Get the domain of the quantity
147
+ void getDomain(std::string&,std::string&) const;
148
+ /// Get the domain of the quantity
149
+ void getDomain(double&,double&) const;
150
+ /// Get the name of the quantity
151
+ const std::string& getName() const;
152
+ /// Check whether or not this particular quantity has derivatives
153
+ bool hasDerivatives()const;
154
+ /// Get the number of derivatives that this particular value has
155
+ unsigned getNumberOfDerivatives() const;
156
+ /// Set the number of derivatives
157
+ void resizeDerivatives(int n);
158
+ /// Set all the derivatives to zero
159
+ void clearDerivatives( const bool force=false );
160
+ /// Add some derivative to the ith component of the derivatives array
161
+ void addDerivative(unsigned i,double d);
162
+ /// Set the value of the ith component of the derivatives array
163
+ void setDerivative(unsigned i, double d);
164
+ /// Get the derivative with respect to component n
165
+ double getDerivative(const unsigned n) const;
166
+ /// Clear the input force on the variable
167
+ void clearInputForce();
168
+ /// Special method for clearing forces on variables used by DataPassingObject
169
+ void clearInputForce( const std::vector<AtomNumber>& index );
170
+ /// Set hasForce equal to true
171
+ void addForce();
172
+ /// Add some force on this value
173
+ void addForce(double f);
174
+ /// Add some force on the ival th component of this value
175
+ void addForce( const std::size_t& ival, double f, const bool trueind=true );
176
+ ///Add forces from a vector, imples trueInd=false and retunrs the number of forces assigned
177
+ std::size_t addForces(View<const double> f);
178
+ /// Get the value of the force on this colvar
179
+ double getForce( const std::size_t& ival=0 ) const ;
180
+ /// Apply the forces to the derivatives using the chain rule (if there are no forces this routine returns false)
181
+ bool applyForce( std::vector<double>& forces ) const ;
182
+ /// Calculate the difference between the instantaneous value of the function and some other point: other_point-inst_val
183
+ double difference(double)const;
184
+ /// Calculate the difference between two values of this function: d2 -d1
185
+ double difference(double d1,double d2)const;
186
+ /// This returns the pointer to the action where this value is calculated
187
+ ActionWithValue* getPntrToAction();
188
+ /// Bring back one value into the correct pbc if needed, else give back the value
189
+ double bringBackInPbc(double d1)const;
190
+ /// Get the difference between max and minimum of domain
191
+ double getMaxMinusMin()const;
192
+ /// This sets up the gradients
193
+ void setGradients( ActionAtomistic* aa, unsigned& start );
194
+ /// This passes gradients from one action to another
195
+ void passGradients( const double& der, std::map<AtomNumber,Vector>& g ) const ;
196
+ static double projection(const Value&,const Value&);
197
+ /// Get the rank of the object that is contained in this value
198
+ unsigned getRank() const ;
199
+ /// Get the shape of the object that is contained in this value
200
+ const std::vector<std::size_t>& getShape() const ;
201
+ /// Reshape the storage for sparse matrices
202
+ void reshapeMatrixStore( const unsigned& n );
203
+ /// Copy the matrix bookeeping stuff
204
+ void copyBookeepingArrayFromArgument( Value* myarg );
205
+ /// Set the symmetric flag equal true for this matrix
206
+ void setSymmetric( const bool& sym );
207
+ /// Get the total number of scalars that are stored here
208
+ std::size_t getNumberOfValues() const ;
209
+ /// Get the number of values that are actually stored here once sparse matrices are taken into account
210
+ std::size_t getNumberOfStoredValues() const ;
211
+ /// Get the number of threads to use when assigning this value
212
+ unsigned getGoodNumThreads( const unsigned& j, const unsigned& k ) const ;
213
+ /// These are used for passing around the data in this value when we are doing replica exchange
214
+ void writeBinary(std::ostream&o) const ;
215
+ void readBinary(std::istream&i);
216
+ /// These are used for making constant values
217
+ bool isConstant() const ;
218
+ void setConstant();
219
+ void reshapeConstantValue( const std::vector<std::size_t>& sh );
220
+ /// Check if forces have been added on this value
221
+ bool forcesWereAdded() const ;
222
+ /// Set a bool that tells us if the derivative is zero when the value is zero true
223
+ void setDerivativeIsZeroWhenValueIsZero();
224
+ /// Return a bool that tells us if the derivative is zero when the value is zero
225
+ bool isDerivativeZeroWhenValueIsZero() const ;
226
+ /// Convert the input index to its corresponding indices
227
+ void convertIndexToindices(const std::size_t& index, std::vector<unsigned>& indices ) const ;
228
+ /// Print out all the values in this Value
229
+ void print( OFile& ofile ) const ;
230
+ /// Print out all the forces in this Value
231
+ void printForce( OFile& ofile ) const ;
232
+ /// Are we to ignore the stored value
233
+ bool ignoreStoredValue(const std::string& n) const ;
234
+ /// Set a matrix element to be non zero
235
+ void setMatrixBookeepingElement( const unsigned& i, const unsigned& n );
236
+ ///
237
+ unsigned getRowLength( const std::size_t& irow ) const ;
238
+ ///
239
+ unsigned getRowIndex( std::size_t irow, std::size_t jind ) const ;
240
+ ///
241
+ void setRowIndices( const std::size_t& irow, const std::vector<std::size_t>& ind );
242
+ ///
243
+ std::size_t getNumberOfColumns() const ;
244
+ ///
245
+ bool isSymmetric() const ;
246
+ /// Retrieve the non-zero edges in a matrix
247
+ void retrieveEdgeList( unsigned& nedge, std::vector<std::pair<unsigned,unsigned> >& active, std::vector<double>& elems );
248
+ /// Get the number of derivatives that the grid has
249
+ unsigned getNumberOfGridDerivatives() const ;
250
+ /// get the derivative of a grid at a point n with resepct to argument j
251
+ double getGridDerivative(const unsigned& n, const unsigned& j ) const ;
252
+ /// Add the derivatives of the grid to the corner
253
+ void addGridDerivatives( const unsigned& n, const unsigned& j, const double& val );
254
+ ///
255
+ void setGridDerivatives( const unsigned& n, const unsigned& j, const double& val );
256
+ /// Add another value to the end of the data vector held by this value. This is used in COLLECT
257
+ void push_back( const double& val );
258
+ /// Get the type of value that is stored here
259
+ std::string getValueType() const ;
260
+ /// Check if all the elements in the value have the same value
261
+ bool allElementsEqual() const ;
262
+ };
263
+
264
+ inline
265
+ void Value::applyPeriodicity(const unsigned& ival) {
266
+ if(periodicity==periodic) {
267
+ data[ival]=min+difference(min,data[ival]);
268
+ if(data[ival]<min) {
269
+ data[ival]+=max_minus_min;
270
+ }
271
+ }
272
+ }
273
+
274
+ inline
275
+ void Value::set(double v) {
276
+ value_set=true;
277
+ data[0]=v;
278
+ applyPeriodicity(0);
279
+ }
280
+
281
+ inline
282
+ void Value::add(double v) {
283
+ value_set=true;
284
+ data[0]+=v;
285
+ applyPeriodicity(0);
286
+ }
287
+
288
+ inline
289
+ void Value::add(const std::size_t& n, const double& v ) {
290
+ value_set=true;
291
+ data[n]+=v;
292
+ applyPeriodicity(n);
293
+ }
294
+
295
+ inline
296
+ bool Value::valueHasBeenSet() const {
297
+ return value_set;
298
+ }
299
+
300
+ inline
301
+ const std::string& Value::getName()const {
302
+ return name;
303
+ }
304
+
305
+ inline
306
+ unsigned Value::getNumberOfDerivatives() const {
307
+ plumed_massert(hasDeriv,"the derivatives array for this value has zero size");
308
+ if( shape.size()>0 ) {
309
+ return shape.size();
310
+ }
311
+ return data.size() - 1;
312
+ }
313
+
314
+ inline
315
+ double Value::getDerivative(const unsigned n) const {
316
+ plumed_dbg_massert(n<getNumberOfDerivatives(),"you are asking for a derivative that is out of bounds");
317
+ return data[1+n];
318
+ }
319
+
320
+ inline
321
+ bool Value::hasDerivatives() const {
322
+ return hasDeriv;
323
+ }
324
+
325
+ inline
326
+ void Value::resizeDerivatives(int n) {
327
+ if( shape.size()>0 ) {
328
+ return;
329
+ }
330
+ if(hasDeriv) {
331
+ data.resize(1+n);
332
+ }
333
+ }
334
+
335
+ inline
336
+ void Value::addDerivative(unsigned i,double d) {
337
+ plumed_dbg_massert(i<getNumberOfDerivatives(),"derivative is out of bounds");
338
+ data[1+i]+=d;
339
+ }
340
+
341
+ inline
342
+ void Value::setDerivative(unsigned i, double d) {
343
+ plumed_dbg_massert(i<getNumberOfDerivatives(),"derivative is out of bounds");
344
+ data[1+i]=d;
345
+ }
346
+
347
+ inline
348
+ void Value::clearInputForce() {
349
+ if( !hasForce ) {
350
+ return;
351
+ }
352
+ hasForce=false;
353
+ std::fill(inputForce.begin(),inputForce.end(),0);
354
+ }
355
+
356
+ inline
357
+ void Value::clearInputForce( const std::vector<AtomNumber>& index ) {
358
+ if( !hasForce ) {
359
+ return;
360
+ }
361
+ hasForce=false;
362
+ for(const auto & p : index) {
363
+ inputForce[p.index()]=0;
364
+ }
365
+ }
366
+
367
+ inline
368
+ void Value::clearDerivatives( const bool force ) {
369
+ if( !force && (valtype==constant || valtype==average) ) {
370
+ return;
371
+ }
372
+
373
+ value_set=false;
374
+ if( shape.size()>0 ) {
375
+ std::fill(data.begin(), data.end(), 0);
376
+ } else if( data.size()>1 ) {
377
+ std::fill(data.begin()+1, data.end(), 0);
378
+ }
379
+ }
380
+
381
+ inline
382
+ void Value::addForce() {
383
+ hasForce=true;
384
+ }
385
+
386
+ inline
387
+ void Value::addForce(double f) {
388
+ hasForce=true;
389
+ inputForce[0]+=f;
390
+ }
391
+
392
+ inline
393
+ bool Value::forcesWereAdded() const {
394
+ return hasForce;
395
+ }
396
+
397
+ inline
398
+ double Value::getForce( const std::size_t& ival ) const {
399
+ plumed_dbg_assert( ival<inputForce.size() );
400
+ return inputForce[ival];
401
+ }
402
+
403
+ /// d2-d1
404
+ inline
405
+ double Value::difference(double d1,double d2)const {
406
+ if(periodicity==notperiodic) {
407
+ return d2-d1;
408
+ } else if(periodicity==periodic) {
409
+ double s=(d2-d1)*inv_max_minus_min;
410
+ // remember: pbc brings the difference in a range of -0.5:0.5
411
+ s=Tools::pbc(s);
412
+ return s*max_minus_min;
413
+ } else {
414
+ plumed_merror("periodicity should be set to compute differences");
415
+ }
416
+ }
417
+
418
+ inline
419
+ double Value::bringBackInPbc(double d1)const {
420
+ return min+max_minus_min/2.+difference(min+max_minus_min/2., d1);
421
+ }
422
+
423
+ inline
424
+ double Value::difference(double d)const {
425
+ return difference(get(),d);
426
+ }
427
+
428
+ inline
429
+ double Value::getMaxMinusMin()const {
430
+ plumed_dbg_assert( periodicity==periodic );
431
+ return max_minus_min;
432
+ }
433
+
434
+ inline
435
+ unsigned Value::getRank() const {
436
+ if( valtype==constant && shape.size()==1 && shape[0]==1 ) {
437
+ return 0;
438
+ }
439
+ return shape.size();
440
+ }
441
+
442
+ inline
443
+ const std::vector<std::size_t>& Value::getShape() const {
444
+ return shape;
445
+ }
446
+
447
+ inline
448
+ std::size_t Value::getNumberOfValues() const {
449
+ std::size_t size=1;
450
+ for(unsigned i=0; i<shape.size(); ++i) {
451
+ size *= shape[i];
452
+ }
453
+ return size;
454
+ }
455
+
456
+ inline
457
+ std::size_t Value::getNumberOfStoredValues() const {
458
+ if( getRank()==2 && !hasDeriv ) {
459
+ return shape[0]*ncols;
460
+ }
461
+ return getNumberOfValues();
462
+ }
463
+
464
+ inline
465
+ bool Value::isConstant() const {
466
+ return valtype==constant;
467
+ }
468
+
469
+ inline
470
+ void Value::setDerivativeIsZeroWhenValueIsZero() {
471
+ derivativeIsZeroWhenValueIsZero=true;
472
+ }
473
+
474
+ inline
475
+ bool Value::isDerivativeZeroWhenValueIsZero() const {
476
+ return derivativeIsZeroWhenValueIsZero;
477
+ }
478
+
479
+ inline
480
+ void Value::setMatrixBookeepingElement( const unsigned& i, const unsigned& n ) {
481
+ plumed_dbg_assert( i<matrix_bookeeping.size() );
482
+ matrix_bookeeping[i]=n;
483
+ }
484
+
485
+ inline
486
+ unsigned Value::getRowLength( const std::size_t& irow ) const {
487
+ if( matrix_bookeeping.size()==0 ) {
488
+ return 0;
489
+ }
490
+ plumed_dbg_assert( (1+ncols)*irow<matrix_bookeeping.size() );
491
+ return matrix_bookeeping[(1+ncols)*irow];
492
+ }
493
+
494
+ inline
495
+ unsigned Value::getRowIndex(const std::size_t irow, const std::size_t jind ) const {
496
+ plumed_dbg_massert( (1+ncols)*irow+1+jind<matrix_bookeeping.size() && jind<matrix_bookeeping[(1+ncols)*irow], "failing in value " + name );
497
+ return matrix_bookeeping[(1+ncols)*irow+1+jind];
498
+ }
499
+
500
+ inline
501
+ void Value::setRowIndices( const std::size_t& irow, const std::vector<std::size_t>& ind ) {
502
+ plumed_dbg_massert( (1+ncols)*irow+1+ind.size()<=matrix_bookeeping.size(), "problem in " + name );
503
+ std::size_t istart = (1+ncols)*irow;
504
+ matrix_bookeeping[istart] = ind.size();
505
+ ++istart;
506
+ for(unsigned i=0; i<ind.size(); ++i) {
507
+ matrix_bookeeping[istart] = ind[i];
508
+ ++istart;
509
+ }
510
+ }
511
+
512
+ inline
513
+ std::size_t Value::getNumberOfColumns() const {
514
+ return ncols;
515
+ }
516
+
517
+ inline
518
+ bool Value::isSymmetric() const {
519
+ return symmetric;
520
+ }
521
+
522
+ inline
523
+ unsigned Value::getNumberOfGridDerivatives() const {
524
+ return ngrid_der;
525
+ }
526
+
527
+ inline
528
+ double Value::getGridDerivative(const unsigned& n, const unsigned& j ) const {
529
+ plumed_dbg_assert( hasDeriv && n*(1+ngrid_der) + 1 + j < data.size() );
530
+ return data[n*(1+ngrid_der) + 1 + j];
531
+ }
532
+
533
+ inline
534
+ void Value::addGridDerivatives( const unsigned& n, const unsigned& j, const double& val ) {
535
+ plumed_dbg_assert( hasDeriv && n*(1+ngrid_der) + 1 + j < data.size() );
536
+ data[n*(1+ngrid_der) + 1 + j] += val;
537
+ }
538
+
539
+ inline
540
+ void Value::setGridDerivatives( const unsigned& n, const unsigned& j, const double& val ) {
541
+ plumed_dbg_assert( hasDeriv && n*(1+ngrid_der) + 1 + j < data.size() );
542
+ data[n*(1+ngrid_der) + 1 + j] = val;
543
+ }
544
+
545
+ }
546
+ #endif
547
+
@@ -0,0 +1,93 @@
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_core_WithCmd_h
23
+ #define __PLUMED_core_WithCmd_h
24
+
25
+ #include "../tools/TypesafePtr.h"
26
+ #include <string>
27
+ #include <string_view>
28
+
29
+ namespace PLMD {
30
+
31
+ /// Base for classes with cmd() method.
32
+ /// This is an abstract base class for classes with
33
+ /// cmd() method.
34
+ class WithCmd {
35
+ /// Small structure used to pass elements of a shape initializer_list
36
+ struct SizeLike {
37
+ std::size_t size;
38
+ SizeLike(short unsigned dim): size(dim) {}
39
+ SizeLike(unsigned dim): size(dim) {}
40
+ SizeLike(long unsigned dim): size(dim) {}
41
+ SizeLike(long long unsigned dim): size(dim) {}
42
+ SizeLike(short dim): size(std::size_t(dim)) {}
43
+ SizeLike(int dim): size(std::size_t(dim)) {}
44
+ SizeLike(long int dim): size(std::size_t(dim)) {}
45
+ SizeLike(long long int dim): size(std::size_t(dim)) {}
46
+ };
47
+ public:
48
+ /// This is the preferred method as it avoid allocations of temporaries.
49
+ /// If this is not overridded, it will call the legacy method.
50
+ virtual void cmd(std::string_view key,const TypesafePtr & val=nullptr) {
51
+ cmd(std::string(key),val);
52
+ }
53
+ /// This is the legacy method we used in older plumed versions, so it is still possible.
54
+ /// If this is not overridden, it will call the preferred method
55
+ virtual void cmd(const std::string& key,const TypesafePtr & val=nullptr) {
56
+ cmd(std::string_view(key),val);
57
+ }
58
+ void cmd(std::string_view key,const TypesafePtr & val,const std::size_t* shape) {
59
+ cmd(key,TypesafePtr::setNelemAndShape(val,0,shape));
60
+ }
61
+ void cmd(std::string_view key,const TypesafePtr & val,std::initializer_list<SizeLike> shape) {
62
+ if(shape.size()>4) {
63
+ plumed_error() << "Maximum shape size is 4";
64
+ }
65
+ std::array<std::size_t,5> shape_;
66
+ unsigned j=0;
67
+ for(auto i : shape) {
68
+ shape_[j]=i.size;
69
+ j++;
70
+ }
71
+ shape_[j]=0;
72
+ cmd(key,val,shape_.data());
73
+ }
74
+ template<typename I, typename std::enable_if<std::is_integral<I>::value, int>::type = 0>
75
+ void cmd(std::string_view key,const TypesafePtr & val,I nelem, const std::size_t* shape=nullptr) {
76
+ cmd(key,TypesafePtr::setNelemAndShape(val,nelem,shape));
77
+ }
78
+ /// This is needed to avoid ambiguities
79
+ void cmd(const char* key,const TypesafePtr & val=nullptr) {
80
+ cmd(std::string_view(key),val);
81
+ }
82
+ virtual ~WithCmd();
83
+ };
84
+
85
+ inline
86
+ WithCmd::~WithCmd() {
87
+ // do nothing
88
+ // here just to allow inheriting from this class properly
89
+ }
90
+
91
+ }
92
+
93
+ #endif
@@ -0,0 +1,55 @@
1
+ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ Copyright (c) 2015-2020 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_dimred_SMACOF_h
23
+ #define __PLUMED_dimred_SMACOF_h
24
+
25
+ #include <vector>
26
+ #include "../core/Value.h"
27
+ #include "../tools/Matrix.h"
28
+
29
+ namespace PLMD {
30
+ namespace dimred {
31
+
32
+ class SMACOF {
33
+ private:
34
+ Matrix<double> Distances, Weights;
35
+ double calculateSigma( const Matrix<double>& InitialZ, Matrix<double>& dists );
36
+ public:
37
+ explicit SMACOF( const Value* mysquaredists );
38
+ void optimize( const double& tol, const unsigned& maxloops, std::vector<double>& proj);
39
+ double getDistance( const unsigned& i, const unsigned& j ) const ;
40
+ void setWeight( const unsigned& i, const unsigned& j, const double& ww );
41
+ };
42
+
43
+ inline
44
+ double SMACOF::getDistance( const unsigned& i, const unsigned& j ) const {
45
+ return Distances( i, j );
46
+ }
47
+
48
+ inline
49
+ void SMACOF::setWeight( const unsigned& i, const unsigned& j, const double& ww ) {
50
+ Weights(i,j) = Weights(j,i ) = ww;
51
+ }
52
+
53
+ }
54
+ }
55
+ #endif