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,44 @@
1
+ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ Copyright (c) 2020 of Glen Hocky
3
+
4
+ The FISST module is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU Lesser General Public License as published by
6
+ the Free Software Foundation, either version 3 of the License, or
7
+ (at your option) any later version.
8
+
9
+ The FISST module is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU Lesser General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Lesser General Public License
15
+ along with plumed. If not, see <http://www.gnu.org/licenses/>.
16
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
17
+ #ifndef __PLUMED_fisst_legendre_rule_fast_h
18
+ #define __PLUMED_fisst_legendre_rule_fast_h
19
+ // taken from:
20
+ // https://people.sc.fsu.edu/~jburkardt/cpp_src/legendre_rule_fast/legendre_rule_fast.html
21
+ //
22
+ # include <cstdlib>
23
+ # include <cmath>
24
+ # include <iostream>
25
+ # include <fstream>
26
+ # include <iomanip>
27
+ # include <ctime>
28
+ # include <cstring>
29
+
30
+ namespace PLMD {
31
+ namespace fisst {
32
+
33
+ void legendre_compute_glr ( int n, double x[], double w[] );
34
+ void legendre_compute_glr0 ( int n, double *p, double *pp );
35
+ void legendre_compute_glr1 ( int n, double *roots, double *ders );
36
+ void legendre_compute_glr2 ( double p, int n, double *roots, double *ders );
37
+ void rescale ( double a, double b, int n, double x[], double w[] );
38
+ double rk2_leg ( double t, double tn, double x, int n );
39
+ double ts_mult ( double *u, double h, int n );
40
+
41
+ }
42
+ }
43
+
44
+ #endif
@@ -0,0 +1,54 @@
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_function_Custom_h
23
+ #define __PLUMED_function_Custom_h
24
+
25
+ #include "FunctionSetup.h"
26
+ #include "../tools/LeptonCall.h"
27
+
28
+ namespace PLMD {
29
+ namespace function {
30
+
31
+ class Custom {
32
+ public:
33
+ std::string func;
34
+ std::vector<std::string> var;
35
+ bool zerowhenallzero;
36
+ LeptonCall function;
37
+ std::vector<unsigned> check_multiplication_vars;
38
+ static void registerKeywords( Keywords& keys );
39
+ static std::string getFunctionString( const std::string& func );
40
+ static void read( Custom& f, ActionWithArguments* action, FunctionOptions& options );
41
+ static void calc( const Custom& func, bool noderiv, const View<const double>& args, FunctionOutput& funcout );
42
+ Custom& operator=( const Custom& m ) {
43
+ func = m.func;
44
+ var = m.var;
45
+ function.set( func, var, NULL );
46
+ zerowhenallzero = m.zerowhenallzero;
47
+ check_multiplication_vars = m.check_multiplication_vars;
48
+ return *this;
49
+ }
50
+ };
51
+
52
+ }
53
+ }
54
+ #endif
@@ -0,0 +1,85 @@
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_function_Function_h
23
+ #define __PLUMED_function_Function_h
24
+
25
+ #include "../core/ActionWithValue.h"
26
+ #include "../core/ActionWithArguments.h"
27
+
28
+ namespace PLMD {
29
+ namespace function {
30
+
31
+ /**
32
+ \ingroup INHERIT
33
+ This is the abstract base class to use for implementing new CV function, within it there is
34
+ \ref AddingAFunction "information" as to how to go about implementing a new function.
35
+ */
36
+
37
+ class Function:
38
+ public ActionWithValue,
39
+ public ActionWithArguments {
40
+ protected:
41
+ void setDerivative(int,double);
42
+ void setDerivative(Value*,int,double);
43
+ //overriding explicitly the two functions avoids the [-Woverloaded-virtual] warning
44
+ /// the shape argument will be ignored
45
+ void addValueWithDerivatives( const std::vector<std::size_t>& =std::vector<std::size_t>() ) override;
46
+ /// the shape will be ignored
47
+ void addComponentWithDerivatives( const std::string& valname, const std::vector<std::size_t>& =std::vector<std::size_t>() )override;
48
+ public:
49
+ explicit Function(const ActionOptions&);
50
+ virtual ~Function() {}
51
+ double getArgument( const unsigned& iarg );
52
+ void apply() override;
53
+ static void registerKeywords(Keywords&);
54
+ unsigned getNumberOfDerivatives() override;
55
+ };
56
+
57
+ inline
58
+ void Function::setDerivative(Value*v,int i,double d) {
59
+ v->addDerivative(i,d);
60
+ }
61
+
62
+ inline
63
+ void Function::setDerivative(int i,double d) {
64
+ setDerivative(getPntrToValue(),i,d);
65
+ }
66
+
67
+ inline
68
+ unsigned Function::getNumberOfDerivatives() {
69
+ unsigned narg=0;
70
+ for(unsigned i=0; i<getNumberOfArguments(); ++i) {
71
+ narg += getPntrToArgument(i)->getNumberOfStoredValues();
72
+ }
73
+ return narg;
74
+ }
75
+
76
+ inline
77
+ double Function::getArgument( const unsigned& iarg ) {
78
+ return getPntrToArgument(iarg)->get();
79
+ }
80
+
81
+ }
82
+ }
83
+
84
+ #endif
85
+
@@ -0,0 +1,368 @@
1
+ /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ Copyright (c) 2011-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_function_FunctionOfMatrix_h
23
+ #define __PLUMED_function_FunctionOfMatrix_h
24
+
25
+ #include "../core/ActionWithVector.h"
26
+ #include "../core/ParallelTaskManager.h"
27
+ #include "FunctionSetup.h"
28
+ #include "FunctionOfVector.h"
29
+ #include "Custom.h"
30
+
31
+ namespace PLMD {
32
+ namespace function {
33
+
34
+ template <class T>
35
+ class FunctionOfMatrix : public ActionWithVector {
36
+ public:
37
+ using input_type = FunctionData<T>;
38
+ using PTM = ParallelTaskManager<FunctionOfMatrix<T>>;
39
+ private:
40
+ /// The parallel task manager
41
+ PTM taskmanager;
42
+ /// Set equal to one if we are doing EvaluateGridFunction
43
+ unsigned argstart;
44
+ /// Number of scalars that appear in the input
45
+ std::size_t nscalars;
46
+ /// Used to hold the list of tasks we are running
47
+ std::vector<unsigned> active_tasks;
48
+ /// Get the number of arguments the function uses
49
+ unsigned getNumberOfFunctionArguments() const ;
50
+ public:
51
+ static void registerKeywords(Keywords&);
52
+ explicit FunctionOfMatrix(const ActionOptions&);
53
+ /// Get the label to write in the graph
54
+ std::string writeInGraph() const override ;
55
+ /// Get the number of derivatives for this action
56
+ unsigned getNumberOfDerivatives() override ;
57
+ /// Resize the matrices
58
+ void prepare() override ;
59
+ void calculate() override ;
60
+ void getNumberOfTasks( unsigned& ntasks ) override ;
61
+ std::vector<unsigned>& getListOfActiveTasks( ActionWithVector* action ) override ;
62
+ void getInputData( std::vector<double>& inputdata ) const override ;
63
+ static void performTask( std::size_t task_index,
64
+ const FunctionData<T>& actiondata,
65
+ ParallelActionsInput& input,
66
+ ParallelActionsOutput& output );
67
+ /// Add some forces
68
+ void applyNonZeroRankForces( std::vector<double>& outforces ) override ;
69
+ /// Get the indices of the forces
70
+ static int getNumberOfValuesPerTask( std::size_t task_index, const FunctionData<T>& actiondata );
71
+ static void getForceIndices( std::size_t task_index,
72
+ std::size_t colno,
73
+ std::size_t ntotal_force,
74
+ const FunctionData<T>& actiondata,
75
+ const ParallelActionsInput& input,
76
+ ForceIndexHolder force_indices );
77
+ };
78
+
79
+ template <class T>
80
+ void FunctionOfMatrix<T>::registerKeywords(Keywords& keys ) {
81
+ ActionWithVector::registerKeywords(keys);
82
+ std::string name = keys.getDisplayName();
83
+ std::size_t und=name.find("_MATRIX");
84
+ keys.setDisplayName( name.substr(0,und) );
85
+ keys.addInputKeyword("compulsory","ARG","scalar/matrix","the labels of the scalar and matrices that on which the function is being calculated elementwise");
86
+ keys.addInputKeyword("optional","MASK","matrix","a matrix that is used to used to determine which elements of the output matrix to compute");
87
+ keys.add("hidden","NO_ACTION_LOG","suppresses printing from action on the log");
88
+ keys.reserve("compulsory","PERIODIC","if the output of your function is periodic then you should specify the periodicity of the function. If the output is not periodic you must state this using PERIODIC=NO");
89
+ T::registerKeywords( keys );
90
+ if( keys.getDisplayName()=="SUM" ) {
91
+ keys.setValueDescription("scalar","the sum of all the elements in the input matrix");
92
+ } else if( keys.getDisplayName()=="HIGHEST" ) {
93
+ keys.setValueDescription("scalar","the largest element of the input matrix");
94
+ } else if( keys.getDisplayName()=="LOWEST" ) {
95
+ keys.setValueDescription("scalar","the smallest element in the input matrix");
96
+ } else if( keys.outputComponentExists(".#!value") ) {
97
+ keys.setValueDescription("matrix","the matrix obtained by doing an element-wise application of " + keys.getOutputComponentDescription(".#!value") + " to the input matrix");
98
+ }
99
+ PTM::registerKeywords( keys );
100
+ }
101
+
102
+ template <class T>
103
+ unsigned FunctionOfMatrix<T>::getNumberOfFunctionArguments() const {
104
+ unsigned nargs=getNumberOfArguments();
105
+ if( getNumberOfMasks()>0 ) {
106
+ return nargs - getNumberOfMasks();
107
+ }
108
+ return nargs;
109
+ }
110
+
111
+ template <class T>
112
+ FunctionOfMatrix<T>::FunctionOfMatrix(const ActionOptions&ao):
113
+ Action(ao),
114
+ ActionWithVector(ao),
115
+ taskmanager(this),
116
+ argstart(0),
117
+ nscalars(0) {
118
+ // Check if first argument is grid
119
+ if( getPntrToArgument(0)->getRank()>0 && getPntrToArgument(0)->hasDerivatives() ) {
120
+ argstart=1;
121
+ }
122
+ if( getNumberOfArguments()==argstart ) {
123
+ error("no arguments specified");
124
+ }
125
+
126
+ if( getPntrToArgument(argstart)->getRank()!=2 ) {
127
+ error("first argument to this action must be a matrix");
128
+ }
129
+
130
+ // Get the number of arguments
131
+ unsigned nargs = getNumberOfArguments();
132
+ int nmasks = getNumberOfMasks();
133
+ if( nargs>=static_cast<unsigned>(nmasks) && nmasks>0 ) {
134
+ nargs = nargs - nmasks;
135
+ }
136
+ // Get the shape of the output
137
+ std::vector<std::size_t> shape( 2 );
138
+ shape[0] = getPntrToArgument(argstart)->getShape()[0];
139
+ shape[1] = getPntrToArgument(argstart)->getShape()[1];
140
+ for(unsigned i=argstart+1; i<nargs; ++i) {
141
+ if( getPntrToArgument(i)->getRank()==0 ) {
142
+ nscalars++;
143
+ } else if( getPntrToArgument(i)->getRank()==2 ) {
144
+ if( getPntrToArgument(i)->getShape()[0]!=shape[0] || getPntrToArgument(i)->getShape()[1]!=shape[1] ) {
145
+ error("mismatch between sizes of input arguments");
146
+ } else if( nscalars>0 ) {
147
+ error("scalars should be specified in argument list after all matrices");
148
+ }
149
+ } else {
150
+ error("input arguments should be matrices or scalars");
151
+ }
152
+ }
153
+ if( nmasks>0 ) {
154
+ if( getPntrToArgument(getNumberOfArguments()-nmasks)->getShape()[0]!=shape[0] ||
155
+ getPntrToArgument(getNumberOfArguments()-nmasks)->getShape()[1]!=shape[1] ) {
156
+ error("input mask has wrong size");
157
+ }
158
+ }
159
+
160
+ // Check if the output matrix is symmetric
161
+ bool symmetric=true;
162
+ for(unsigned i=argstart; i<getNumberOfArguments(); ++i) {
163
+ if( getPntrToArgument(i)->getRank()==2 ) {
164
+ if( !getPntrToArgument(i)->isSymmetric() ) {
165
+ symmetric=false;
166
+ }
167
+ }
168
+ }
169
+ // Setup the values
170
+ // Get the function data from the parallel task manager, to avoid copies
171
+ auto & myfunc = taskmanager.getActionInput();
172
+ myfunc.argstart = argstart;
173
+ myfunc.nscalars = nscalars;
174
+ FunctionData<T>::setup( myfunc.f, keywords.getOutputComponents(), shape, false, this );
175
+ // Copy the fact that this is a symmetric matrix if the input matrices are all symmetric
176
+ for(unsigned i=0; i<getNumberOfComponents(); ++i) {
177
+ getPntrToComponent(i)->setSymmetric( symmetric );
178
+ }
179
+ taskmanager.setupParallelTaskManager( getNumberOfFunctionArguments() - argstart,
180
+ nscalars );
181
+ }
182
+
183
+ template <class T>
184
+ std::string FunctionOfMatrix<T>::writeInGraph() const {
185
+ std::size_t und = getName().find_last_of("_");
186
+ return getName().substr(0,und);
187
+ }
188
+
189
+ template <class T>
190
+ unsigned FunctionOfMatrix<T>::getNumberOfDerivatives() {
191
+ unsigned nder=0;
192
+ for(unsigned i=argstart; i<getNumberOfFunctionArguments(); ++i) {
193
+ nder += getPntrToArgument(i)->getNumberOfStoredValues();
194
+ }
195
+ return nder;
196
+ }
197
+
198
+ template <class T>
199
+ void FunctionOfMatrix<T>::prepare() {
200
+ std::vector<std::size_t> shape(getPntrToArgument(argstart)->getShape());
201
+ for(unsigned i=0; i<getNumberOfComponents(); ++i) {
202
+ Value* myval = getPntrToComponent(i);
203
+ if( myval->getRank()==2 && (myval->getShape()[0]!=shape[0] || myval->getShape()[1]!=shape[1]) ) {
204
+ myval->setShape(shape);
205
+ }
206
+ }
207
+ ActionWithVector::prepare();
208
+ active_tasks.resize(0);
209
+ }
210
+
211
+ template <class T>
212
+ void FunctionOfMatrix<T>::getNumberOfTasks( unsigned& ntasks ) {
213
+ ntasks=getPntrToComponent(0)->getNumberOfStoredValues();
214
+ }
215
+
216
+ template <class T>
217
+ std::vector<unsigned>& FunctionOfMatrix<T>::getListOfActiveTasks( ActionWithVector* action ) {
218
+ if( active_tasks.size()>0 ) {
219
+ return active_tasks;
220
+ }
221
+
222
+ Value* myarg = NULL;
223
+ if( getNumberOfMasks()>0 ) {
224
+ myarg = getPntrToArgument(getNumberOfArguments()-getNumberOfMasks());
225
+ } else {
226
+ myarg = getPntrToArgument(argstart);
227
+ }
228
+ unsigned atsize = 0;
229
+ unsigned nrows = myarg->getShape()[0];
230
+ for(unsigned i=0; i<nrows; ++i) {
231
+ atsize += myarg->getRowLength(i);
232
+ }
233
+ active_tasks.resize( atsize );
234
+
235
+ for(unsigned i=0, base=0,k=0; i<nrows; ++i) {
236
+ unsigned ncols = myarg->getRowLength(i);
237
+ for(unsigned j=0; j<ncols; ++j) {
238
+ active_tasks[k] = base+j;
239
+ ++k;
240
+ }
241
+ base += myarg->getNumberOfColumns();
242
+ }
243
+ if( getNumberOfMasks()>0 && doNotCalculateDerivatives() ) {
244
+ return active_tasks;
245
+ }
246
+ // All the matrices input have to have the same sparsity pattern.
247
+ // I can do everything I want to do with this limitation. If
248
+ // anyone wants to make this smarter in the future they can
249
+ #ifndef DNDEBUG
250
+ for(unsigned k=argstart; k<getNumberOfArguments(); ++k) {
251
+ if( getPntrToArgument(k)->getRank()!=2 ) {
252
+ continue ;
253
+ }
254
+ if( getNumberOfMasks()>0 && getPntrToArgument(k)->isConstant() ) {
255
+ continue ;
256
+ }
257
+ for(unsigned i=0; i<nrows; ++i) {
258
+ unsigned ncols = myarg->getRowLength(i);
259
+ if( getNumberOfMasks()>0 && ncols==0 ) {
260
+ continue;
261
+ }
262
+ plumed_massert( ncols==getPntrToArgument(k)->getRowLength(i), "failing in " + getLabel() );
263
+ for(unsigned j=0; j<ncols; ++j) {
264
+ plumed_assert( myarg->getRowIndex(i,j)==getPntrToArgument(k)->getRowIndex(i,j) );
265
+ }
266
+ }
267
+ }
268
+ #endif
269
+ return active_tasks;
270
+ }
271
+
272
+ template <class T>
273
+ void FunctionOfMatrix<T>::getInputData( std::vector<double>& inputdata ) const {
274
+ int nmasks = getNumberOfMasks();
275
+ unsigned nargs = getNumberOfFunctionArguments();
276
+
277
+ const Value* myval = getConstPntrToComponent(0);
278
+ std::size_t ntasks = myval->getNumberOfStoredValues();
279
+ std::size_t ndata = static_cast<std::size_t>(nargs-argstart)*ntasks;
280
+ if( inputdata.size()!=ndata ) {
281
+ inputdata.resize( ndata );
282
+ }
283
+
284
+ for(unsigned j=argstart; j<nargs; ++j) {
285
+ const Value* jarg = getPntrToArgument(j);
286
+ if( jarg->getRank()==0 ) {
287
+ double val = jarg->get();
288
+ for(unsigned i=0; i<myval->getShape()[0]; ++i) {
289
+ unsigned colbase=i*myval->getNumberOfColumns();
290
+ for(unsigned k=0; k<myval->getRowLength(i); ++k) {
291
+ inputdata[(nargs-argstart)*(colbase+k) + j-argstart] = val;
292
+ }
293
+ }
294
+ } else if( nmasks>0 ) {
295
+ for(unsigned i=0; i<myval->getShape()[0]; ++i) {
296
+ unsigned jcolbase = i*jarg->getShape()[1];
297
+ unsigned vcolbase = i*myval->getNumberOfColumns();
298
+ for(unsigned k=0; k<myval->getRowLength(i); ++k) {
299
+ inputdata[(nargs-argstart)*(vcolbase+k) + j-argstart] = jarg->get(jcolbase+myval->getRowIndex(i,k),true);
300
+ }
301
+ }
302
+ } else {
303
+ for(unsigned i=0; i<jarg->getShape()[0]; ++i) {
304
+ unsigned colbase=i*jarg->getNumberOfColumns();
305
+ for(unsigned k=0; k<jarg->getRowLength(i); ++k) {
306
+ inputdata[(nargs-argstart)*(colbase+k) + j-argstart] = jarg->get(colbase+k,false);
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
312
+
313
+ template <class T>
314
+ void FunctionOfMatrix<T>::calculate() {
315
+ Value* myarg = NULL;
316
+ if( getNumberOfMasks()>0 ) {
317
+ myarg = getPntrToArgument(getNumberOfArguments()-getNumberOfMasks());
318
+ } else {
319
+ myarg = getPntrToArgument(argstart);
320
+ }
321
+ // Copy bookeeping arrays from input matrices to output matrices
322
+ for(unsigned i=0; i<getNumberOfComponents(); ++i) {
323
+ getPntrToComponent(i)->copyBookeepingArrayFromArgument( myarg );
324
+ }
325
+ taskmanager.setupParallelTaskManager( getNumberOfFunctionArguments()-argstart, nscalars );
326
+ taskmanager.runAllTasks();
327
+ }
328
+
329
+ template <class T>
330
+ void FunctionOfMatrix<T>::performTask( std::size_t task_index,
331
+ const FunctionData<T>& actiondata,
332
+ ParallelActionsInput& input,
333
+ ParallelActionsOutput& output ) {
334
+ auto funcout = FunctionOutput::create( input.ncomponents,
335
+ output.values.data(),
336
+ input.nderivatives_per_scalar,
337
+ output.derivatives.data() );
338
+ T::calc( actiondata.f,
339
+ input.noderiv,
340
+ View<const double>( input.inputdata + task_index*input.nderivatives_per_scalar,
341
+ input.nderivatives_per_scalar ),
342
+ funcout );
343
+ }
344
+
345
+ template <class T>
346
+ void FunctionOfMatrix<T>::applyNonZeroRankForces( std::vector<double>& outforces ) {
347
+ taskmanager.applyForces( outforces );
348
+ }
349
+
350
+ template <class T>
351
+ int FunctionOfMatrix<T>::getNumberOfValuesPerTask( std::size_t task_index, const FunctionData<T>& actiondata ) {
352
+ return 1;
353
+ }
354
+
355
+ template <class T>
356
+ void FunctionOfMatrix<T>::getForceIndices( std::size_t task_index,
357
+ std::size_t colno,
358
+ std::size_t ntotal_force,
359
+ const FunctionData<T>& actiondata,
360
+ const ParallelActionsInput& input,
361
+ ForceIndexHolder force_indices ) {
362
+ // The force indices are found in the same way as in FunctionOfVector so we reuse that function here
363
+ FunctionOfVector<T>::getForceIndices( task_index, colno, ntotal_force, actiondata, input, force_indices );
364
+ }
365
+
366
+ }
367
+ }
368
+ #endif
@@ -0,0 +1,135 @@
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_function_FunctionOfScalar_h
23
+ #define __PLUMED_function_FunctionOfScalar_h
24
+
25
+ #include "Function.h"
26
+ #include "FunctionSetup.h"
27
+
28
+ namespace PLMD {
29
+ namespace function {
30
+
31
+ /**
32
+ \ingroup INHERIT
33
+ This is the abstract base class to use for implementing new CV function, within it there is
34
+ \ref AddingAFunction "information" as to how to go about implementing a new function.
35
+ */
36
+
37
+ template <class T>
38
+ class FunctionOfScalar : public Function {
39
+ private:
40
+ /// Set equal to one if we are doing evaluateGridFunction
41
+ unsigned argstart;
42
+ /// The function that is being computed
43
+ T myfunc;
44
+ public:
45
+ explicit FunctionOfScalar(const ActionOptions&);
46
+ virtual ~FunctionOfScalar() {}
47
+ /// Get the label to write in the graph
48
+ std::string writeInGraph() const override ;
49
+ std::string getOutputComponentDescription( const std::string& cname, const Keywords& keys ) const override ;
50
+ void calculate() override;
51
+ static void registerKeywords(Keywords&);
52
+ };
53
+
54
+ template <class T>
55
+ void FunctionOfScalar<T>::registerKeywords(Keywords& keys) {
56
+ Function::registerKeywords(keys);
57
+ std::string name = keys.getDisplayName();
58
+ std::size_t und=name.find("_SCALAR");
59
+ keys.setDisplayName( name.substr(0,und) );
60
+ keys.add("hidden","NO_ACTION_LOG","suppresses printing from action on the log");
61
+ T::registerKeywords( keys );
62
+ if( keys.getDisplayName()=="SUM" ) {
63
+ keys.setValueDescription("scalar","the sum of all the input arguments");
64
+ } else if( keys.getDisplayName()=="MEAN" ) {
65
+ keys.setValueDescription("scalar","the mean of all the input arguments");
66
+ } else if( keys.getDisplayName()=="EVALUATE_FUNCTION_FROM_GRID" ) {
67
+ keys.addInputKeyword("compulsory","ARG","scalar/grid","");
68
+ }
69
+ }
70
+
71
+ template <class T>
72
+ FunctionOfScalar<T>::FunctionOfScalar(const ActionOptions&ao):
73
+ Action(ao),
74
+ Function(ao),
75
+ argstart(0) {
76
+ // Check if first argument is grid
77
+ if( getPntrToArgument(0)->getRank()>0 && getPntrToArgument(0)->hasDerivatives() ) {
78
+ argstart=1;
79
+ }
80
+ // Create the values to hold the output
81
+ std::vector<std::size_t> shape;
82
+ FunctionData<T>::setup( myfunc, keywords.getOutputComponents(), shape, true, this );
83
+ }
84
+
85
+ template <class T>
86
+ std::string FunctionOfScalar<T>::writeInGraph() const {
87
+ std::size_t und = getName().find_last_of("_");
88
+ return getName().substr(0,und);
89
+ }
90
+
91
+ template <class T>
92
+ std::string FunctionOfScalar<T>::getOutputComponentDescription( const std::string& cname, const Keywords& keys ) const {
93
+ if( getName().find("SORT")==std::string::npos ) {
94
+ return ActionWithValue::getOutputComponentDescription( cname, keys );
95
+ }
96
+ return "the " + cname + "th largest of the input scalars";
97
+ }
98
+
99
+ template <class T>
100
+ void FunctionOfScalar<T>::calculate() {
101
+ std::vector<double> args( getNumberOfArguments() - argstart );
102
+ for(unsigned i=argstart; i<getNumberOfArguments(); ++i) {
103
+ args[i-argstart]=getPntrToArgument(i)->get();
104
+ }
105
+ std::vector<double> vals( getNumberOfComponents() ), deriv( getNumberOfComponents()*args.size() );
106
+ auto funcout = FunctionOutput::create( getNumberOfComponents(),
107
+ vals.data(),
108
+ args.size(),
109
+ deriv.data() );
110
+ T::calc( myfunc,
111
+ doNotCalculateDerivatives(),
112
+ View<const double>(args.data(),args.size()),
113
+ funcout );
114
+ for(unsigned i=0; i<vals.size(); ++i) {
115
+ copyOutput(i)->set(vals[i]);
116
+ }
117
+ if( doNotCalculateDerivatives() ) {
118
+ return;
119
+ }
120
+ unsigned dstart = 0;
121
+ for(unsigned i=0; i<argstart; ++i) {
122
+ dstart += getPntrToArgument(i)->getNumberOfStoredValues();
123
+ }
124
+
125
+ for(unsigned i=0; i<vals.size(); ++i) {
126
+ Value* val = getPntrToComponent(i);
127
+ for(unsigned j=0; j<args.size(); ++j) {
128
+ setDerivative( val, dstart+j, funcout.derivs[i][j] );
129
+ }
130
+ }
131
+ }
132
+
133
+ }
134
+ }
135
+ #endif