hillclimber 0.1.5a8__cp314-cp314-macosx_15_0_x86_64.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 (469) 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 +1065 -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.5a8.dist-info/METADATA +209 -0
  14. hillclimber-0.1.5a8.dist-info/RECORD +469 -0
  15. hillclimber-0.1.5a8.dist-info/WHEEL +6 -0
  16. hillclimber-0.1.5a8.dist-info/entry_points.txt +8 -0
  17. hillclimber-0.1.5a8.dist-info/licenses/LICENSE +165 -0
  18. plumed/__init__.py +104 -0
  19. plumed/_lib/bin/plumed +0 -0
  20. plumed/_lib/bin/plumed-config +9 -0
  21. plumed/_lib/bin/plumed-patch +9 -0
  22. plumed/_lib/include/plumed/adjmat/AdjacencyMatrixBase.h +659 -0
  23. plumed/_lib/include/plumed/adjmat/ContactMatrix.h +59 -0
  24. plumed/_lib/include/plumed/asmjit/arch.h +228 -0
  25. plumed/_lib/include/plumed/asmjit/arm.h +43 -0
  26. plumed/_lib/include/plumed/asmjit/asmjit.h +69 -0
  27. plumed/_lib/include/plumed/asmjit/asmjit_apibegin.h +143 -0
  28. plumed/_lib/include/plumed/asmjit/asmjit_apiend.h +93 -0
  29. plumed/_lib/include/plumed/asmjit/asmjit_build.h +971 -0
  30. plumed/_lib/include/plumed/asmjit/assembler.h +183 -0
  31. plumed/_lib/include/plumed/asmjit/base.h +56 -0
  32. plumed/_lib/include/plumed/asmjit/codebuilder.h +944 -0
  33. plumed/_lib/include/plumed/asmjit/codecompiler.h +767 -0
  34. plumed/_lib/include/plumed/asmjit/codeemitter.h +528 -0
  35. plumed/_lib/include/plumed/asmjit/codeholder.h +777 -0
  36. plumed/_lib/include/plumed/asmjit/constpool.h +286 -0
  37. plumed/_lib/include/plumed/asmjit/cpuinfo.h +402 -0
  38. plumed/_lib/include/plumed/asmjit/func.h +1327 -0
  39. plumed/_lib/include/plumed/asmjit/globals.h +370 -0
  40. plumed/_lib/include/plumed/asmjit/inst.h +137 -0
  41. plumed/_lib/include/plumed/asmjit/logging.h +317 -0
  42. plumed/_lib/include/plumed/asmjit/misc_p.h +103 -0
  43. plumed/_lib/include/plumed/asmjit/moved_string.h +318 -0
  44. plumed/_lib/include/plumed/asmjit/operand.h +1599 -0
  45. plumed/_lib/include/plumed/asmjit/osutils.h +207 -0
  46. plumed/_lib/include/plumed/asmjit/regalloc_p.h +597 -0
  47. plumed/_lib/include/plumed/asmjit/runtime.h +227 -0
  48. plumed/_lib/include/plumed/asmjit/simdtypes.h +1104 -0
  49. plumed/_lib/include/plumed/asmjit/utils.h +1387 -0
  50. plumed/_lib/include/plumed/asmjit/vmem.h +183 -0
  51. plumed/_lib/include/plumed/asmjit/x86.h +45 -0
  52. plumed/_lib/include/plumed/asmjit/x86assembler.h +125 -0
  53. plumed/_lib/include/plumed/asmjit/x86builder.h +117 -0
  54. plumed/_lib/include/plumed/asmjit/x86compiler.h +322 -0
  55. plumed/_lib/include/plumed/asmjit/x86emitter.h +5149 -0
  56. plumed/_lib/include/plumed/asmjit/x86globals.h +535 -0
  57. plumed/_lib/include/plumed/asmjit/x86inst.h +2547 -0
  58. plumed/_lib/include/plumed/asmjit/x86instimpl_p.h +74 -0
  59. plumed/_lib/include/plumed/asmjit/x86internal_p.h +108 -0
  60. plumed/_lib/include/plumed/asmjit/x86logging_p.h +92 -0
  61. plumed/_lib/include/plumed/asmjit/x86misc.h +417 -0
  62. plumed/_lib/include/plumed/asmjit/x86operand.h +1133 -0
  63. plumed/_lib/include/plumed/asmjit/x86regalloc_p.h +734 -0
  64. plumed/_lib/include/plumed/asmjit/zone.h +1157 -0
  65. plumed/_lib/include/plumed/bias/Bias.h +82 -0
  66. plumed/_lib/include/plumed/bias/ReweightBase.h +58 -0
  67. plumed/_lib/include/plumed/blas/blas.h +253 -0
  68. plumed/_lib/include/plumed/blas/def_external.h +61 -0
  69. plumed/_lib/include/plumed/blas/def_internal.h +97 -0
  70. plumed/_lib/include/plumed/blas/real.h +49 -0
  71. plumed/_lib/include/plumed/cltools/CLTool.h +32 -0
  72. plumed/_lib/include/plumed/clusters/ClusteringBase.h +70 -0
  73. plumed/_lib/include/plumed/colvar/Colvar.h +32 -0
  74. plumed/_lib/include/plumed/colvar/ColvarInput.h +68 -0
  75. plumed/_lib/include/plumed/colvar/ColvarShortcut.h +81 -0
  76. plumed/_lib/include/plumed/colvar/CoordinationBase.h +52 -0
  77. plumed/_lib/include/plumed/colvar/MultiColvarTemplate.h +333 -0
  78. plumed/_lib/include/plumed/colvar/PathMSDBase.h +101 -0
  79. plumed/_lib/include/plumed/colvar/RMSDVector.h +78 -0
  80. plumed/_lib/include/plumed/config/Config.h +118 -0
  81. plumed/_lib/include/plumed/config/version.h +9 -0
  82. plumed/_lib/include/plumed/contour/ContourFindingObject.h +87 -0
  83. plumed/_lib/include/plumed/contour/DistanceFromContourBase.h +82 -0
  84. plumed/_lib/include/plumed/contour/FindContour.h +67 -0
  85. plumed/_lib/include/plumed/core/Action.h +540 -0
  86. plumed/_lib/include/plumed/core/ActionAnyorder.h +48 -0
  87. plumed/_lib/include/plumed/core/ActionAtomistic.h +343 -0
  88. plumed/_lib/include/plumed/core/ActionForInterface.h +99 -0
  89. plumed/_lib/include/plumed/core/ActionPilot.h +57 -0
  90. plumed/_lib/include/plumed/core/ActionRegister.h +124 -0
  91. plumed/_lib/include/plumed/core/ActionSet.h +163 -0
  92. plumed/_lib/include/plumed/core/ActionSetup.h +48 -0
  93. plumed/_lib/include/plumed/core/ActionShortcut.h +73 -0
  94. plumed/_lib/include/plumed/core/ActionToGetData.h +59 -0
  95. plumed/_lib/include/plumed/core/ActionToPutData.h +101 -0
  96. plumed/_lib/include/plumed/core/ActionWithArguments.h +140 -0
  97. plumed/_lib/include/plumed/core/ActionWithMatrix.h +87 -0
  98. plumed/_lib/include/plumed/core/ActionWithValue.h +258 -0
  99. plumed/_lib/include/plumed/core/ActionWithVector.h +94 -0
  100. plumed/_lib/include/plumed/core/ActionWithVirtualAtom.h +123 -0
  101. plumed/_lib/include/plumed/core/CLTool.h +177 -0
  102. plumed/_lib/include/plumed/core/CLToolMain.h +102 -0
  103. plumed/_lib/include/plumed/core/CLToolRegister.h +108 -0
  104. plumed/_lib/include/plumed/core/Colvar.h +115 -0
  105. plumed/_lib/include/plumed/core/DataPassingObject.h +94 -0
  106. plumed/_lib/include/plumed/core/DataPassingTools.h +54 -0
  107. plumed/_lib/include/plumed/core/DomainDecomposition.h +120 -0
  108. plumed/_lib/include/plumed/core/ExchangePatterns.h +47 -0
  109. plumed/_lib/include/plumed/core/FlexibleBin.h +63 -0
  110. plumed/_lib/include/plumed/core/GREX.h +61 -0
  111. plumed/_lib/include/plumed/core/GenericMolInfo.h +89 -0
  112. plumed/_lib/include/plumed/core/Group.h +41 -0
  113. plumed/_lib/include/plumed/core/ModuleMap.h +30 -0
  114. plumed/_lib/include/plumed/core/ParallelTaskManager.h +1023 -0
  115. plumed/_lib/include/plumed/core/PbcAction.h +61 -0
  116. plumed/_lib/include/plumed/core/PlumedMain.h +632 -0
  117. plumed/_lib/include/plumed/core/PlumedMainInitializer.h +118 -0
  118. plumed/_lib/include/plumed/core/RegisterBase.h +340 -0
  119. plumed/_lib/include/plumed/core/TargetDist.h +48 -0
  120. plumed/_lib/include/plumed/core/Value.h +547 -0
  121. plumed/_lib/include/plumed/core/WithCmd.h +93 -0
  122. plumed/_lib/include/plumed/dimred/SMACOF.h +55 -0
  123. plumed/_lib/include/plumed/drr/DRR.h +383 -0
  124. plumed/_lib/include/plumed/drr/colvar_UIestimator.h +777 -0
  125. plumed/_lib/include/plumed/fisst/legendre_rule_fast.h +44 -0
  126. plumed/_lib/include/plumed/function/Custom.h +54 -0
  127. plumed/_lib/include/plumed/function/Function.h +85 -0
  128. plumed/_lib/include/plumed/function/FunctionOfMatrix.h +368 -0
  129. plumed/_lib/include/plumed/function/FunctionOfScalar.h +135 -0
  130. plumed/_lib/include/plumed/function/FunctionOfVector.h +296 -0
  131. plumed/_lib/include/plumed/function/FunctionSetup.h +180 -0
  132. plumed/_lib/include/plumed/function/FunctionShortcut.h +130 -0
  133. plumed/_lib/include/plumed/function/FunctionWithSingleArgument.h +165 -0
  134. plumed/_lib/include/plumed/gridtools/ActionWithGrid.h +43 -0
  135. plumed/_lib/include/plumed/gridtools/EvaluateGridFunction.h +99 -0
  136. plumed/_lib/include/plumed/gridtools/FunctionOfGrid.h +295 -0
  137. plumed/_lib/include/plumed/gridtools/GridCoordinatesObject.h +179 -0
  138. plumed/_lib/include/plumed/gridtools/GridSearch.h +135 -0
  139. plumed/_lib/include/plumed/gridtools/Interpolator.h +45 -0
  140. plumed/_lib/include/plumed/gridtools/KDE.h +455 -0
  141. plumed/_lib/include/plumed/gridtools/RDF.h +40 -0
  142. plumed/_lib/include/plumed/gridtools/SumOfKernels.h +219 -0
  143. plumed/_lib/include/plumed/isdb/MetainferenceBase.h +398 -0
  144. plumed/_lib/include/plumed/lapack/def_external.h +207 -0
  145. plumed/_lib/include/plumed/lapack/def_internal.h +388 -0
  146. plumed/_lib/include/plumed/lapack/lapack.h +899 -0
  147. plumed/_lib/include/plumed/lapack/lapack_limits.h +79 -0
  148. plumed/_lib/include/plumed/lapack/real.h +50 -0
  149. plumed/_lib/include/plumed/lepton/CompiledExpression.h +164 -0
  150. plumed/_lib/include/plumed/lepton/CustomFunction.h +143 -0
  151. plumed/_lib/include/plumed/lepton/Exception.h +93 -0
  152. plumed/_lib/include/plumed/lepton/ExpressionProgram.h +137 -0
  153. plumed/_lib/include/plumed/lepton/ExpressionTreeNode.h +145 -0
  154. plumed/_lib/include/plumed/lepton/Lepton.h +85 -0
  155. plumed/_lib/include/plumed/lepton/MSVC_erfc.h +123 -0
  156. plumed/_lib/include/plumed/lepton/Operation.h +1302 -0
  157. plumed/_lib/include/plumed/lepton/ParsedExpression.h +165 -0
  158. plumed/_lib/include/plumed/lepton/Parser.h +111 -0
  159. plumed/_lib/include/plumed/lepton/windowsIncludes.h +73 -0
  160. plumed/_lib/include/plumed/mapping/Path.h +44 -0
  161. plumed/_lib/include/plumed/mapping/PathProjectionCalculator.h +57 -0
  162. plumed/_lib/include/plumed/matrixtools/MatrixOperationBase.h +54 -0
  163. plumed/_lib/include/plumed/matrixtools/MatrixTimesMatrix.h +309 -0
  164. plumed/_lib/include/plumed/matrixtools/MatrixTimesVectorBase.h +365 -0
  165. plumed/_lib/include/plumed/matrixtools/OuterProduct.h +238 -0
  166. plumed/_lib/include/plumed/maze/Core.h +65 -0
  167. plumed/_lib/include/plumed/maze/Loss.h +86 -0
  168. plumed/_lib/include/plumed/maze/Member.h +66 -0
  169. plumed/_lib/include/plumed/maze/Memetic.h +799 -0
  170. plumed/_lib/include/plumed/maze/Optimizer.h +357 -0
  171. plumed/_lib/include/plumed/maze/Random_MT.h +156 -0
  172. plumed/_lib/include/plumed/maze/Tools.h +183 -0
  173. plumed/_lib/include/plumed/metatomic/vesin.h +188 -0
  174. plumed/_lib/include/plumed/molfile/Gromacs.h +2013 -0
  175. plumed/_lib/include/plumed/molfile/endianswap.h +217 -0
  176. plumed/_lib/include/plumed/molfile/fastio.h +683 -0
  177. plumed/_lib/include/plumed/molfile/largefiles.h +78 -0
  178. plumed/_lib/include/plumed/molfile/libmolfile_plugin.h +77 -0
  179. plumed/_lib/include/plumed/molfile/molfile_plugin.h +1034 -0
  180. plumed/_lib/include/plumed/molfile/periodic_table.h +248 -0
  181. plumed/_lib/include/plumed/molfile/readpdb.h +447 -0
  182. plumed/_lib/include/plumed/molfile/vmdplugin.h +236 -0
  183. plumed/_lib/include/plumed/multicolvar/MultiColvarShortcuts.h +45 -0
  184. plumed/_lib/include/plumed/opes/ExpansionCVs.h +79 -0
  185. plumed/_lib/include/plumed/sasa/Sasa.h +32 -0
  186. plumed/_lib/include/plumed/secondarystructure/SecondaryStructureBase.h +372 -0
  187. plumed/_lib/include/plumed/setup/ActionSetup.h +25 -0
  188. plumed/_lib/include/plumed/small_vector/small_vector.h +6114 -0
  189. plumed/_lib/include/plumed/symfunc/CoordinationNumbers.h +41 -0
  190. plumed/_lib/include/plumed/tools/Angle.h +52 -0
  191. plumed/_lib/include/plumed/tools/AtomDistribution.h +138 -0
  192. plumed/_lib/include/plumed/tools/AtomNumber.h +152 -0
  193. plumed/_lib/include/plumed/tools/BiasRepresentation.h +106 -0
  194. plumed/_lib/include/plumed/tools/BitmaskEnum.h +167 -0
  195. plumed/_lib/include/plumed/tools/Brent1DRootSearch.h +159 -0
  196. plumed/_lib/include/plumed/tools/CheckInRange.h +44 -0
  197. plumed/_lib/include/plumed/tools/Citations.h +74 -0
  198. plumed/_lib/include/plumed/tools/ColvarOutput.h +118 -0
  199. plumed/_lib/include/plumed/tools/Communicator.h +316 -0
  200. plumed/_lib/include/plumed/tools/ConjugateGradient.h +80 -0
  201. plumed/_lib/include/plumed/tools/DLLoader.h +79 -0
  202. plumed/_lib/include/plumed/tools/ERMSD.h +73 -0
  203. plumed/_lib/include/plumed/tools/Exception.h +406 -0
  204. plumed/_lib/include/plumed/tools/File.h +28 -0
  205. plumed/_lib/include/plumed/tools/FileBase.h +153 -0
  206. plumed/_lib/include/plumed/tools/FileTools.h +37 -0
  207. plumed/_lib/include/plumed/tools/ForwardDecl.h +54 -0
  208. plumed/_lib/include/plumed/tools/Grid.h +638 -0
  209. plumed/_lib/include/plumed/tools/HistogramBead.h +136 -0
  210. plumed/_lib/include/plumed/tools/IFile.h +117 -0
  211. plumed/_lib/include/plumed/tools/KernelFunctions.h +113 -0
  212. plumed/_lib/include/plumed/tools/Keywords.h +380 -0
  213. plumed/_lib/include/plumed/tools/LatticeReduction.h +66 -0
  214. plumed/_lib/include/plumed/tools/LeptonCall.h +64 -0
  215. plumed/_lib/include/plumed/tools/LinkCells.h +126 -0
  216. plumed/_lib/include/plumed/tools/Log.h +41 -0
  217. plumed/_lib/include/plumed/tools/LoopUnroller.h +163 -0
  218. plumed/_lib/include/plumed/tools/Matrix.h +721 -0
  219. plumed/_lib/include/plumed/tools/MatrixSquareBracketsAccess.h +138 -0
  220. plumed/_lib/include/plumed/tools/MergeVectorTools.h +153 -0
  221. plumed/_lib/include/plumed/tools/Minimise1DBrent.h +244 -0
  222. plumed/_lib/include/plumed/tools/MinimiseBase.h +120 -0
  223. plumed/_lib/include/plumed/tools/MolDataClass.h +51 -0
  224. plumed/_lib/include/plumed/tools/NeighborList.h +112 -0
  225. plumed/_lib/include/plumed/tools/OFile.h +286 -0
  226. plumed/_lib/include/plumed/tools/OpenACC.h +180 -0
  227. plumed/_lib/include/plumed/tools/OpenMP.h +75 -0
  228. plumed/_lib/include/plumed/tools/PDB.h +154 -0
  229. plumed/_lib/include/plumed/tools/Pbc.h +139 -0
  230. plumed/_lib/include/plumed/tools/PlumedHandle.h +105 -0
  231. plumed/_lib/include/plumed/tools/RMSD.h +493 -0
  232. plumed/_lib/include/plumed/tools/Random.h +80 -0
  233. plumed/_lib/include/plumed/tools/RootFindingBase.h +79 -0
  234. plumed/_lib/include/plumed/tools/Stopwatch.h +475 -0
  235. plumed/_lib/include/plumed/tools/Subprocess.h +142 -0
  236. plumed/_lib/include/plumed/tools/SwitchingFunction.h +208 -0
  237. plumed/_lib/include/plumed/tools/Tensor.h +724 -0
  238. plumed/_lib/include/plumed/tools/TokenizedLine.h +123 -0
  239. plumed/_lib/include/plumed/tools/Tools.h +638 -0
  240. plumed/_lib/include/plumed/tools/Torsion.h +55 -0
  241. plumed/_lib/include/plumed/tools/TrajectoryParser.h +118 -0
  242. plumed/_lib/include/plumed/tools/Tree.h +61 -0
  243. plumed/_lib/include/plumed/tools/TypesafePtr.h +463 -0
  244. plumed/_lib/include/plumed/tools/Units.h +167 -0
  245. plumed/_lib/include/plumed/tools/Vector.h +433 -0
  246. plumed/_lib/include/plumed/tools/View.h +296 -0
  247. plumed/_lib/include/plumed/tools/View2D.h +100 -0
  248. plumed/_lib/include/plumed/tools/h36.h +39 -0
  249. plumed/_lib/include/plumed/vatom/ActionWithVirtualAtom.h +32 -0
  250. plumed/_lib/include/plumed/ves/BasisFunctions.h +380 -0
  251. plumed/_lib/include/plumed/ves/CoeffsBase.h +310 -0
  252. plumed/_lib/include/plumed/ves/CoeffsMatrix.h +220 -0
  253. plumed/_lib/include/plumed/ves/CoeffsVector.h +251 -0
  254. plumed/_lib/include/plumed/ves/FermiSwitchingFunction.h +74 -0
  255. plumed/_lib/include/plumed/ves/GridIntegrationWeights.h +50 -0
  256. plumed/_lib/include/plumed/ves/GridLinearInterpolation.h +81 -0
  257. plumed/_lib/include/plumed/ves/GridProjWeights.h +61 -0
  258. plumed/_lib/include/plumed/ves/LinearBasisSetExpansion.h +303 -0
  259. plumed/_lib/include/plumed/ves/Optimizer.h +444 -0
  260. plumed/_lib/include/plumed/ves/TargetDistModifer.h +53 -0
  261. plumed/_lib/include/plumed/ves/TargetDistribution.h +266 -0
  262. plumed/_lib/include/plumed/ves/VesBias.h +545 -0
  263. plumed/_lib/include/plumed/ves/VesTools.h +142 -0
  264. plumed/_lib/include/plumed/ves/WaveletGrid.h +75 -0
  265. plumed/_lib/include/plumed/volumes/ActionVolume.h +268 -0
  266. plumed/_lib/include/plumed/volumes/VolumeShortcut.h +147 -0
  267. plumed/_lib/include/plumed/wrapper/Plumed.h +5025 -0
  268. plumed/_lib/include/plumed/xdrfile/xdrfile.h +663 -0
  269. plumed/_lib/include/plumed/xdrfile/xdrfile_trr.h +89 -0
  270. plumed/_lib/include/plumed/xdrfile/xdrfile_xtc.h +90 -0
  271. plumed/_lib/lib/PythonCVInterface.dylib +0 -0
  272. plumed/_lib/lib/libplumed.dylib +0 -0
  273. plumed/_lib/lib/libplumedKernel.dylib +0 -0
  274. plumed/_lib/lib/libplumedWrapper.a +0 -0
  275. plumed/_lib/lib/pkgconfig/plumed.pc +13 -0
  276. plumed/_lib/lib/pkgconfig/plumedInternals.pc +13 -0
  277. plumed/_lib/lib/pkgconfig/plumedWrapper.pc +13 -0
  278. plumed/_lib/lib/plumed/fortran/plumed.f90 +879 -0
  279. plumed/_lib/lib/plumed/fortran/plumed_f08.f90 +2625 -0
  280. plumed/_lib/lib/plumed/modulefile +69 -0
  281. plumed/_lib/lib/plumed/patches/gromacs-2022.5.config +43 -0
  282. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt +543 -0
  283. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt.preplumed +540 -0
  284. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp +1628 -0
  285. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1590 -0
  286. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h +103 -0
  287. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h.preplumed +99 -0
  288. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp +2527 -0
  289. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2513 -0
  290. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  291. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  292. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +408 -0
  293. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +394 -0
  294. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp +2348 -0
  295. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2091 -0
  296. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp +3573 -0
  297. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3495 -0
  298. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1506 -0
  299. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1402 -0
  300. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  301. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  302. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp +997 -0
  303. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +906 -0
  304. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp +2780 -0
  305. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2738 -0
  306. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  307. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  308. plumed/_lib/lib/plumed/patches/gromacs-2023.5.config +43 -0
  309. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt +549 -0
  310. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt.preplumed +546 -0
  311. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
  312. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
  313. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h +104 -0
  314. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
  315. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp +2624 -0
  316. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2610 -0
  317. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  318. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  319. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +409 -0
  320. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +395 -0
  321. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp +2419 -0
  322. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2164 -0
  323. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp +3546 -0
  324. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3468 -0
  325. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
  326. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
  327. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  328. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  329. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp +991 -0
  330. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +900 -0
  331. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp +2895 -0
  332. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2849 -0
  333. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  334. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  335. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp +886 -0
  336. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +880 -0
  337. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +347 -0
  338. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +345 -0
  339. plumed/_lib/lib/plumed/patches/gromacs-2024.3.config +43 -0
  340. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt +575 -0
  341. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt.preplumed +572 -0
  342. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
  343. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
  344. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h +104 -0
  345. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
  346. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp +2564 -0
  347. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2550 -0
  348. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  349. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  350. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h +410 -0
  351. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +396 -0
  352. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp +2435 -0
  353. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp.preplumed +2187 -0
  354. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp +3592 -0
  355. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3514 -0
  356. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
  357. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
  358. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  359. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  360. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp +958 -0
  361. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp.preplumed +929 -0
  362. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp +2987 -0
  363. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp.preplumed +2941 -0
  364. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  365. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  366. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp +904 -0
  367. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +898 -0
  368. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +353 -0
  369. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +351 -0
  370. plumed/_lib/lib/plumed/patches/gromacs-2025.0.config +39 -0
  371. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake +82 -0
  372. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake.preplumed +82 -0
  373. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp +162 -0
  374. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp.preplumed +154 -0
  375. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp +107 -0
  376. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp.preplumed +99 -0
  377. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h +120 -0
  378. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h.preplumed +111 -0
  379. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp +215 -0
  380. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp.preplumed +197 -0
  381. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h +87 -0
  382. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h.preplumed +86 -0
  383. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp +2971 -0
  384. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp.preplumed +2970 -0
  385. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h +430 -0
  386. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h.preplumed +429 -0
  387. plumed/_lib/lib/plumed/patches/namd-2.12.config +30 -0
  388. plumed/_lib/lib/plumed/patches/namd-2.12.diff +267 -0
  389. plumed/_lib/lib/plumed/patches/namd-2.13.config +30 -0
  390. plumed/_lib/lib/plumed/patches/namd-2.13.diff +267 -0
  391. plumed/_lib/lib/plumed/patches/namd-2.14.config +30 -0
  392. plumed/_lib/lib/plumed/patches/namd-2.14.diff +268 -0
  393. plumed/_lib/lib/plumed/patches/patch.sh +500 -0
  394. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.config +25 -0
  395. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90 +368 -0
  396. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90.preplumed +366 -0
  397. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90 +71 -0
  398. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90.preplumed +24 -0
  399. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90 +62 -0
  400. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  401. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90 +189 -0
  402. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90.preplumed +185 -0
  403. plumed/_lib/lib/plumed/patches/qespresso-6.2.config +26 -0
  404. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90 +422 -0
  405. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90.preplumed +420 -0
  406. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90 +70 -0
  407. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  408. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90 +62 -0
  409. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  410. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90 +233 -0
  411. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90.preplumed +230 -0
  412. plumed/_lib/lib/plumed/patches/qespresso-7.0.config +28 -0
  413. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile +175 -0
  414. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile.preplumed +171 -0
  415. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90 +486 -0
  416. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90.preplumed +484 -0
  417. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90 +74 -0
  418. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  419. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90 +64 -0
  420. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  421. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90 +532 -0
  422. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90.preplumed +518 -0
  423. plumed/_lib/lib/plumed/patches/qespresso-7.2.config +28 -0
  424. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile +249 -0
  425. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile.preplumed +244 -0
  426. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90 +532 -0
  427. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90.preplumed +535 -0
  428. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90 +74 -0
  429. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  430. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90 +64 -0
  431. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  432. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90 +569 -0
  433. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90.preplumed +560 -0
  434. plumed/_lib/lib/plumed/plumed-config +9 -0
  435. plumed/_lib/lib/plumed/plumed-mklib +9 -0
  436. plumed/_lib/lib/plumed/plumed-newcv +9 -0
  437. plumed/_lib/lib/plumed/plumed-partial_tempering +9 -0
  438. plumed/_lib/lib/plumed/plumed-patch +9 -0
  439. plumed/_lib/lib/plumed/plumed-runtime +0 -0
  440. plumed/_lib/lib/plumed/plumed-selector +9 -0
  441. plumed/_lib/lib/plumed/plumed-vim2html +9 -0
  442. plumed/_lib/lib/plumed/scripts/config.sh +126 -0
  443. plumed/_lib/lib/plumed/scripts/mklib.sh +175 -0
  444. plumed/_lib/lib/plumed/scripts/newcv.sh +26 -0
  445. plumed/_lib/lib/plumed/scripts/partial_tempering.sh +319 -0
  446. plumed/_lib/lib/plumed/scripts/patch.sh +4 -0
  447. plumed/_lib/lib/plumed/scripts/selector.sh +234 -0
  448. plumed/_lib/lib/plumed/scripts/vim2html.sh +190 -0
  449. plumed/_lib/lib/plumed/src/colvar/Template.cpp +116 -0
  450. plumed/_lib/lib/plumed/src/config/compile_options.sh +3 -0
  451. plumed/_lib/lib/plumed/src/config/config.txt +181 -0
  452. plumed/_lib/lib/plumed/src/lib/Plumed.cmake +6 -0
  453. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.runtime +5 -0
  454. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.shared +5 -0
  455. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.static +3 -0
  456. plumed/_lib/lib/plumed/src/lib/Plumed.inc +6 -0
  457. plumed/_lib/lib/plumed/src/lib/Plumed.inc.runtime +5 -0
  458. plumed/_lib/lib/plumed/src/lib/Plumed.inc.shared +5 -0
  459. plumed/_lib/lib/plumed/src/lib/Plumed.inc.static +3 -0
  460. plumed/_lib/lib/plumed/vim/scripts.vim +6 -0
  461. plumed/_plumed_core.cpython-311-darwin.so +0 -0
  462. plumed/_plumed_core.cpython-312-darwin.so +0 -0
  463. plumed/_plumed_core.cpython-313-darwin.so +0 -0
  464. plumed/_plumed_core.cpython-314-darwin.so +0 -0
  465. plumedCommunications.cpython-311-darwin.so +0 -0
  466. plumedCommunications.cpython-312-darwin.so +0 -0
  467. plumedCommunications.cpython-313-darwin.so +0 -0
  468. plumedCommunications.cpython-314-darwin.so +0 -0
  469. plumedCommunications.pyi +431 -0
@@ -0,0 +1,309 @@
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_matrixtools_MatrixTimesMatrix_h
23
+ #define __PLUMED_matrixtools_MatrixTimesMatrix_h
24
+
25
+ #include "../core/ActionWithMatrix.h"
26
+ #include "../core/ParallelTaskManager.h"
27
+
28
+ namespace PLMD {
29
+ namespace matrixtools {
30
+
31
+ template <class T>
32
+ struct MatrixTimesMatrixInput {
33
+ T funcinput;
34
+ RequiredMatrixElements outmat;
35
+ #ifdef __PLUMED_USE_OPENACC
36
+ void toACCDevice() const {
37
+ #pragma acc enter data copyin(this[0:1])
38
+ funcinput.toACCDevice();
39
+ outmat.toACCDevice();
40
+ }
41
+ void removeFromACCDevice() const {
42
+ funcinput.removeFromACCDevice();
43
+ outmat.removeFromACCDevice();
44
+ #pragma acc exit data delete(this[0:1])
45
+ }
46
+ #endif //__PLUMED_USE_OPENACC
47
+ };
48
+
49
+ class InputVectors {
50
+ public:
51
+ std::size_t nelem;
52
+ View<double> arg1;
53
+ View<double> arg2;
54
+ InputVectors( std::size_t n, double* b ) : nelem(n), arg1(b,n), arg2(b+n,n) {}
55
+ };
56
+
57
+ template <class T>
58
+ class MatrixTimesMatrix : public ActionWithMatrix {
59
+ public:
60
+ using input_type = MatrixTimesMatrixInput<T>;
61
+ using PTM = ParallelTaskManager<MatrixTimesMatrix<T>>;
62
+ private:
63
+ PTM taskmanager;
64
+ public:
65
+ static void registerKeywords( Keywords& keys );
66
+ explicit MatrixTimesMatrix(const ActionOptions&);
67
+ void prepare() override ;
68
+ unsigned getNumberOfDerivatives() override;
69
+ void calculate() override ;
70
+ void applyNonZeroRankForces( std::vector<double>& outforces ) override ;
71
+ static void performTask( std::size_t task_index, const MatrixTimesMatrixInput<T>& actiondata, ParallelActionsInput& input, ParallelActionsOutput& output );
72
+ static int getNumberOfValuesPerTask( std::size_t task_index, const MatrixTimesMatrixInput<T>& actiondata );
73
+ static void getForceIndices( std::size_t task_index, std::size_t colno, std::size_t ntotal_force, const MatrixTimesMatrixInput<T>& actiondata, const ParallelActionsInput& input, ForceIndexHolder force_indices );
74
+ };
75
+
76
+ template <class T>
77
+ void MatrixTimesMatrix<T>::registerKeywords( Keywords& keys ) {
78
+ ActionWithMatrix::registerKeywords(keys);
79
+ keys.addInputKeyword("optional","MASK","matrix","a matrix that is used to used to determine which elements of the output matrix to compute");
80
+ keys.addInputKeyword("compulsory","ARG","matrix","the label of the two matrices from which the product is calculated");
81
+ if( keys.getDisplayName()=="MATRIX_PRODUCT" ) {
82
+ keys.addFlag("ELEMENTS_ON_DIAGONAL_ARE_ZERO",false,"set all diagonal elements to zero");
83
+ }
84
+ T::registerKeywords( keys );
85
+ PTM::registerKeywords( keys );
86
+ }
87
+
88
+ template <class T>
89
+ MatrixTimesMatrix<T>::MatrixTimesMatrix(const ActionOptions&ao):
90
+ Action(ao),
91
+ ActionWithMatrix(ao),
92
+ taskmanager(this) {
93
+ int nm=getNumberOfMasks();
94
+ if( nm<0 ) {
95
+ nm = 0;
96
+ }
97
+ if( getNumberOfArguments()-nm!=2 ) {
98
+ error("should be two arguments to this action, a matrix and a vector");
99
+ }
100
+ if( getPntrToArgument(0)->getRank()!=2 || getPntrToArgument(0)->hasDerivatives() ) {
101
+ error("first argument to this action should be a matrix");
102
+ }
103
+ if( getPntrToArgument(1)->getRank()!=2 || getPntrToArgument(1)->hasDerivatives() ) {
104
+ error("second argument to this action should be a matrix");
105
+ }
106
+ if( getPntrToArgument(0)->getShape()[1]!=getPntrToArgument(1)->getShape()[0] ) {
107
+ error("number of columns in first matrix does not equal number of rows in second matrix");
108
+ }
109
+ std::vector<std::size_t> shape(2);
110
+ shape[0]=getPntrToArgument(0)->getShape()[0];
111
+ shape[1]=getPntrToArgument(1)->getShape()[1];
112
+ addValue( shape );
113
+ setNotPeriodic();
114
+ getPntrToComponent(0)->reshapeMatrixStore( shape[1] );
115
+ if( getName()!="DISSIMILARITIES" && getPntrToArgument(0)->isDerivativeZeroWhenValueIsZero() && getPntrToArgument(1)->isDerivativeZeroWhenValueIsZero() ) {
116
+ getPntrToComponent(0)->setDerivativeIsZeroWhenValueIsZero();
117
+ }
118
+
119
+ if( nm>0 ) {
120
+ unsigned iarg = getNumberOfArguments()-1;
121
+ if( getPntrToArgument(iarg)->getRank()!=2 || getPntrToArgument(0)->hasDerivatives() ) {
122
+ error("argument passed to MASK keyword should be a matrix");
123
+ }
124
+ if( getPntrToArgument(iarg)->getShape()[0]!=shape[0] || getPntrToArgument(iarg)->getShape()[1]!=shape[1] ) {
125
+ error("argument passed to MASK keyword has the wrong shape");
126
+ }
127
+ }
128
+ MatrixTimesMatrixInput<T> actdata;
129
+ actdata.funcinput.setup( this, getPntrToArgument(0) );
130
+ taskmanager.setActionInput( actdata );
131
+ }
132
+
133
+ template <class T>
134
+ unsigned MatrixTimesMatrix<T>::getNumberOfDerivatives() {
135
+ return getPntrToArgument(0)->getNumberOfStoredValues() + getPntrToArgument(1)->getNumberOfStoredValues();
136
+ }
137
+
138
+ template <class T>
139
+ void MatrixTimesMatrix<T>::prepare() {
140
+ ActionWithVector::prepare();
141
+ Value* myval = getPntrToComponent(0);
142
+ if( myval->getShape()[0]==getPntrToArgument(0)->getShape()[0] && myval->getShape()[1]==getPntrToArgument(1)->getShape()[1] ) {
143
+ return;
144
+ }
145
+ std::vector<std::size_t> shape(2);
146
+ shape[0]=getPntrToArgument(0)->getShape()[0];
147
+ shape[1]=getPntrToArgument(1)->getShape()[1];
148
+ myval->setShape(shape);
149
+ myval->reshapeMatrixStore( shape[1] );
150
+ }
151
+
152
+ template <class T>
153
+ void MatrixTimesMatrix<T>::calculate() {
154
+ if( !getPntrToComponent(0)->isDerivativeZeroWhenValueIsZero() ) {
155
+ if( getPntrToArgument(0)->getNumberOfColumns()<getPntrToArgument(0)->getShape()[1] ) {
156
+ if( !doNotCalculateDerivatives() ) {
157
+ error("cannot calculate derivatives for this action with sparse matrices");
158
+ } else if( getName()=="DISSIMILARITIES" ) {
159
+ error("cannot calculate dissimilarities for sparse matrices");
160
+ }
161
+ }
162
+ if( getPntrToArgument(1)->getNumberOfColumns()<getPntrToArgument(1)->getShape()[1] ) {
163
+ if( !doNotCalculateDerivatives() ) {
164
+ error("cannot calculate derivatives for this action with sparse matrices");
165
+ } else if( getName()=="DISSIMILARITIES" ) {
166
+ error("cannot calculate dissimilarities for sparse matrices");
167
+ }
168
+ }
169
+ }
170
+ updateBookeepingArrays( taskmanager.getActionInput().outmat );
171
+ taskmanager.setupParallelTaskManager( 2*getPntrToArgument(0)->getNumberOfColumns(), getPntrToArgument(1)->getNumberOfStoredValues() );
172
+ taskmanager.setWorkspaceSize( 2*getPntrToArgument(0)->getNumberOfColumns() );
173
+ taskmanager.runAllTasks();
174
+ }
175
+
176
+ template <class T>
177
+ void MatrixTimesMatrix<T>::performTask( std::size_t task_index,
178
+ const MatrixTimesMatrixInput<T>& actiondata,
179
+ ParallelActionsInput& input,
180
+ ParallelActionsOutput& output ) {
181
+ auto arg0=ArgumentBookeepingHolder::create( 0, input );
182
+ auto arg1=ArgumentBookeepingHolder::create( 1, input );
183
+ std::size_t fpos = task_index*(1+arg0.ncols);
184
+ std::size_t nmult = arg0.bookeeping[fpos];
185
+ std::size_t vstart = task_index*arg0.ncols;
186
+ InputVectors vectors( nmult, output.buffer.data() );
187
+ if( arg1.ncols<arg1.shape[1] ) {
188
+ std::size_t fstart = task_index*(1+actiondata.outmat.ncols);
189
+ std::size_t nelements = actiondata.outmat[fstart];
190
+ for(unsigned i=0; i<nelements; ++i) {
191
+ std::size_t nm = 0;
192
+ for(unsigned j=0; j<nmult; ++j) {
193
+ std::size_t kind = arg0.bookeeping[fpos+1+j];
194
+ std::size_t bstart = kind*(arg1.ncols + 1);
195
+ std::size_t nr = arg1.bookeeping[bstart];
196
+ for(unsigned k=0; k<nr; ++k) {
197
+ if( arg1.bookeeping[bstart+1+k]==actiondata.outmat[fstart+1+i] ) {
198
+ nm++;
199
+ break;
200
+ }
201
+ }
202
+ }
203
+ vectors.nelem = nm;
204
+ nm = 0;
205
+ for(unsigned j=0; j<nmult; ++j) {
206
+ std::size_t kind = arg0.bookeeping[fpos+1+j];
207
+ std::size_t bstart = kind*(arg1.ncols + 1);
208
+ std::size_t nr = arg1.bookeeping[bstart];
209
+ for(unsigned k=0; k<nr; ++k) {
210
+ if( arg1.bookeeping[bstart+1+k]==actiondata.outmat[fstart+1+i] ) {
211
+ vectors.arg1[nm] = input.inputdata[ vstart + j ];
212
+ vectors.arg2[nm] = input.inputdata[ arg1.start + kind*arg1.ncols + k ];
213
+ nm++;
214
+ break;
215
+ }
216
+ }
217
+ }
218
+ MatrixElementOutput elem( 1, 2*nmult, output.values.data() + i, output.derivatives.data() + 2*nmult*i );
219
+ T::calculate( input.noderiv, actiondata.funcinput, vectors, elem );
220
+ for(unsigned ii=vectors.nelem; ii<nmult; ++ii) {
221
+ elem.derivs[0][ii] = 0;
222
+ }
223
+ }
224
+ } else {
225
+ // Retrieve the row of the first matrix
226
+ for(unsigned i=0; i<nmult; ++i) {
227
+ vectors.arg1[i] = input.inputdata[ vstart + i ];
228
+ }
229
+
230
+ // Now do our multiplications
231
+ std::size_t fstart = task_index*(1+actiondata.outmat.ncols);
232
+ std::size_t nelements = actiondata.outmat[fstart];
233
+ for(unsigned i=0; i<nelements; ++i) {
234
+ std::size_t base = arg1.start + actiondata.outmat[fstart+1+i];
235
+ for(unsigned j=0; j<nmult; ++j) {
236
+ vectors.arg2[j] = input.inputdata[ base + arg1.ncols*arg0.bookeeping[fpos+1+j] ];
237
+ }
238
+ MatrixElementOutput elem( 1, 2*nmult, output.values.data() + i, output.derivatives.data() + 2*nmult*i );
239
+ T::calculate( input.noderiv, actiondata.funcinput, vectors, elem );
240
+ }
241
+ }
242
+ }
243
+
244
+ template <class T>
245
+ void MatrixTimesMatrix<T>::applyNonZeroRankForces( std::vector<double>& outforces ) {
246
+ taskmanager.applyForces( outforces );
247
+ }
248
+
249
+ template <class T>
250
+ int MatrixTimesMatrix<T>::getNumberOfValuesPerTask( std::size_t task_index,
251
+ const MatrixTimesMatrixInput<T>& actiondata ) {
252
+ std::size_t fstart = task_index*(1+actiondata.outmat.ncols);
253
+ return actiondata.outmat[fstart];
254
+ }
255
+
256
+ template <class T>
257
+ void MatrixTimesMatrix<T>::getForceIndices( std::size_t task_index,
258
+ std::size_t colno,
259
+ std::size_t ntotal_force,
260
+ const MatrixTimesMatrixInput<T>& actiondata,
261
+ const ParallelActionsInput& input,
262
+ ForceIndexHolder force_indices ) {
263
+ auto arg0=ArgumentBookeepingHolder::create( 0, input );
264
+ auto arg1=ArgumentBookeepingHolder::create( 1, input );
265
+ std::size_t fpos = task_index*(1+arg0.ncols);
266
+ std::size_t nmult = arg0.bookeeping[fpos];
267
+ std::size_t fstart = task_index*(1+actiondata.outmat.ncols);
268
+ if( arg1.ncols<arg1.shape[1] ) {
269
+ std::size_t nmult_r = 0;
270
+ for(unsigned j=0; j<nmult; ++j) {
271
+ std::size_t kind = arg0.bookeeping[fpos+1+j];
272
+ std::size_t bstart = kind*(arg1.ncols + 1);
273
+ std::size_t nr = arg1.bookeeping[bstart];
274
+ for(unsigned k=0; k<nr; ++k) {
275
+ if( arg1.bookeeping[bstart+1+k]==actiondata.outmat[fstart+1+colno] ) {
276
+ nmult_r++;
277
+ break;
278
+ }
279
+ }
280
+ }
281
+ std::size_t n = 0;
282
+ for(unsigned j=0; j<nmult; ++j) {
283
+ std::size_t kind = arg0.bookeeping[fpos+1+j];
284
+ std::size_t bstart = kind*(arg1.ncols + 1);
285
+ std::size_t nr = arg1.bookeeping[bstart];
286
+ for(unsigned k=0; k<nr; ++k) {
287
+ if( arg1.bookeeping[bstart+1+k]==actiondata.outmat[fstart+1+colno] ) {
288
+ force_indices.indices[0][n] = task_index*arg0.ncols + j;
289
+ force_indices.indices[0][nmult+n] = arg1.start + arg0.bookeeping[fpos+1+j]*arg1.ncols + k;
290
+ n++;
291
+ break;
292
+ }
293
+ }
294
+ }
295
+ force_indices.threadsafe_derivatives_end[0] = nmult_r;
296
+ force_indices.tot_indices[0] = nmult + nmult_r;
297
+ } else {
298
+ for(unsigned j=0; j<nmult; ++j) {
299
+ force_indices.indices[0][j] = task_index*arg0.ncols + j;
300
+ force_indices.indices[0][nmult+j] = arg1.start + arg0.bookeeping[fpos+1+j]*arg1.ncols + actiondata.outmat[fstart+1+colno];
301
+ }
302
+ force_indices.threadsafe_derivatives_end[0] = nmult;
303
+ force_indices.tot_indices[0] = 2*nmult;
304
+ }
305
+ }
306
+
307
+ }
308
+ }
309
+ #endif
@@ -0,0 +1,365 @@
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_matrixtools_MatrixTimesVectorBase_h
23
+ #define __PLUMED_matrixtools_MatrixTimesVectorBase_h
24
+
25
+ #include "../core/ActionWithVector.h"
26
+ #include "../core/ParallelTaskManager.h"
27
+
28
+ namespace PLMD {
29
+ namespace matrixtools {
30
+
31
+ class MatrixTimesVectorData {
32
+ public:
33
+ std::size_t fshift;
34
+ Matrix<std::size_t> pairs;
35
+ #ifdef __PLUMED_USE_OPENACC
36
+ void toACCDevice() const {
37
+ #pragma acc enter data copyin(this[0:1],fshift)
38
+ pairs.toACCDevice();
39
+ }
40
+ void removeFromACCDevice() const {
41
+ pairs.removeFromACCDevice();
42
+ #pragma acc exit data delete(fshift,this[0:1])
43
+ }
44
+ #endif //__PLUMED_USE_OPENACC
45
+ };
46
+
47
+ class MatrixForceIndexInput {
48
+ public:
49
+ std::size_t rowlen;
50
+ View<const std::size_t> indices;
51
+ MatrixForceIndexInput( std::size_t task_index,
52
+ std::size_t ipair,
53
+ const MatrixTimesVectorData& actiondata,
54
+ const ParallelActionsInput& input ):
55
+ rowlen(input.bookeeping[input.bookstarts[actiondata.pairs[ipair][0]]
56
+ + (1+input.ncols[actiondata.pairs[ipair][0]])*task_index]),
57
+ indices(input.bookeeping + input.bookstarts[actiondata.pairs[ipair][0]]
58
+ + (1+input.ncols[actiondata.pairs[ipair][0]])*task_index + 1,
59
+ rowlen) {}
60
+ };
61
+
62
+ class MatrixTimesVectorInput {
63
+ public:
64
+ bool noderiv;
65
+ std::size_t rowlen;
66
+ View<const std::size_t> indices;
67
+ View<const double> matrow;
68
+ View<const double> vector;
69
+ MatrixTimesVectorInput( std::size_t task_index,
70
+ std::size_t ipair,
71
+ const MatrixTimesVectorData& actiondata,
72
+ const ParallelActionsInput& input,
73
+ double* argdata ):
74
+ noderiv(input.noderiv),
75
+ rowlen(input.bookeeping[input.bookstarts[actiondata.pairs[ipair][0]]
76
+ + (1+input.ncols[actiondata.pairs[ipair][0]])*task_index]),
77
+ indices(input.bookeeping + input.bookstarts[actiondata.pairs[ipair][0]]
78
+ + (1+input.ncols[actiondata.pairs[ipair][0]])*task_index + 1,rowlen),
79
+ matrow(argdata + input.argstarts[actiondata.pairs[ipair][0]]
80
+ + task_index*input.ncols[actiondata.pairs[ipair][0]],rowlen),
81
+ vector(argdata + input.argstarts[actiondata.pairs[ipair][1]], input.shapedata[1]) {
82
+ }
83
+ };
84
+
85
+ class MatrixTimesVectorOutput {
86
+ public:
87
+ std::size_t rowlen;
88
+ View<double,1> values;
89
+ View<double> matrow_deriv;
90
+ View<double> vector_deriv;
91
+ MatrixTimesVectorOutput( std::size_t task_index,
92
+ std::size_t ipair,
93
+ std::size_t nder,
94
+ const MatrixTimesVectorData& actiondata,
95
+ const ParallelActionsInput& input,
96
+ ParallelActionsOutput& output ):
97
+ rowlen(input.bookeeping[input.bookstarts[actiondata.pairs[ipair][0]]
98
+ + (1+input.ncols[actiondata.pairs[ipair][0]])*task_index]),
99
+ values(output.values.data()+ipair),
100
+ matrow_deriv(output.derivatives.data()+ipair*nder,rowlen),
101
+ vector_deriv(output.derivatives.data()+ipair*nder+rowlen,rowlen) {
102
+ }
103
+ };
104
+
105
+ template <class T>
106
+ class MatrixTimesVectorBase : public ActionWithVector {
107
+ public:
108
+ using input_type = MatrixTimesVectorData;
109
+ using PTM = ParallelTaskManager<MatrixTimesVectorBase<T>>;
110
+ private:
111
+ /// The parallel task manager
112
+ PTM taskmanager;
113
+ public:
114
+ static void registerKeywords( Keywords& keys );
115
+ static void registerLocalKeywords( Keywords& keys );
116
+ explicit MatrixTimesVectorBase(const ActionOptions&);
117
+ std::string getOutputComponentDescription( const std::string& cname, const Keywords& keys ) const override ;
118
+ unsigned getNumberOfDerivatives() override ;
119
+ void prepare() override ;
120
+ void calculate() override ;
121
+ void applyNonZeroRankForces( std::vector<double>& outforces ) override ;
122
+ int checkTaskIsActive( const unsigned& itask ) const override ;
123
+ /// Override this so we write the graph properly
124
+ std::string writeInGraph() const override {
125
+ return "MATRIX_VECTOR_PRODUCT";
126
+ }
127
+ static void performTask( std::size_t task_index,
128
+ const MatrixTimesVectorData& actiondata,
129
+ ParallelActionsInput& input,
130
+ ParallelActionsOutput& output );
131
+ static int getNumberOfValuesPerTask( std::size_t task_index,
132
+ const MatrixTimesVectorData& actiondata );
133
+ static void getForceIndices( std::size_t task_index,
134
+ std::size_t colno,
135
+ std::size_t ntotal_force,
136
+ const MatrixTimesVectorData& actiondata,
137
+ const ParallelActionsInput& input,
138
+ ForceIndexHolder force_indices );
139
+ };
140
+
141
+ template <class T>
142
+ void MatrixTimesVectorBase<T>::registerKeywords( Keywords& keys ) {
143
+ ActionWithVector::registerKeywords(keys);
144
+ keys.setDisplayName("MATRIX_VECTOR_PRODUCT");
145
+ registerLocalKeywords( keys );
146
+ ActionWithValue::useCustomisableComponents(keys);
147
+ keys.add("hidden","NO_ACTION_LOG","suppresses printing from action on the log");
148
+ }
149
+
150
+ template <class T>
151
+ void MatrixTimesVectorBase<T>::registerLocalKeywords( Keywords& keys ) {
152
+ PTM::registerKeywords( keys );
153
+ keys.addInputKeyword("compulsory","ARG","matrix/vector/scalar","the label for the matrix and the vector/scalar that are being multiplied. Alternatively, you can provide labels for multiple matrices and a single vector or labels for a single matrix and multiple vectors. In these cases multiple matrix vector products will be computed.");
154
+ keys.add("hidden","MASKED_INPUT_ALLOWED","turns on that you are allowed to use masked inputs ");
155
+ keys.setValueDescription("vector","the vector that is obtained by taking the product between the matrix and the vector that were input");
156
+ ActionWithValue::useCustomisableComponents(keys);
157
+ }
158
+
159
+ template <class T>
160
+ std::string MatrixTimesVectorBase<T>::getOutputComponentDescription( const std::string& cname,
161
+ const Keywords& keys ) const {
162
+ if( getPntrToArgument(1)->getRank()==1 ) {
163
+ for(unsigned i=1; i<getNumberOfArguments(); ++i) {
164
+ if( getPntrToArgument(i)->getName().find(cname)!=std::string::npos ) {
165
+ return "the product of the matrix " + getPntrToArgument(0)->getName() + " and the vector " + getPntrToArgument(i)->getName();
166
+ }
167
+ }
168
+ }
169
+ for(unsigned i=0; i<getNumberOfArguments()-1; ++i) {
170
+ if( getPntrToArgument(i)->getName().find(cname)!=std::string::npos ) {
171
+ return "the product of the matrix " + getPntrToArgument(i)->getName() + " and the vector " + getPntrToArgument(getNumberOfArguments()-1)->getName();
172
+ }
173
+ }
174
+ plumed_merror( "could not understand request for component " + cname );
175
+ return "";
176
+ }
177
+
178
+ template <class T>
179
+ MatrixTimesVectorBase<T>::MatrixTimesVectorBase(const ActionOptions&ao):
180
+ Action(ao),
181
+ ActionWithVector(ao),
182
+ taskmanager(this) {
183
+ if( getNumberOfArguments()<2 ) {
184
+ error("Not enough arguments specified");
185
+ }
186
+ bool vectormask=false, derivbool = true;
187
+ for(unsigned i=0; i<getNumberOfArguments(); ++i) {
188
+ if( getPntrToArgument(i)->hasDerivatives() ) {
189
+ error("arguments should be vectors or matrices");
190
+ }
191
+ if( getPntrToArgument(i)->getRank()<=1 ) {
192
+ ActionWithVector* av=dynamic_cast<ActionWithVector*>( getPntrToArgument(i)->getPntrToAction() );
193
+ if( av && av->getNumberOfMasks()>=0 ) {
194
+ vectormask=true;
195
+ }
196
+ }
197
+ if( !getPntrToArgument(i)->isDerivativeZeroWhenValueIsZero() ) {
198
+ derivbool = false;
199
+ }
200
+ }
201
+ if( !vectormask ) {
202
+ ignoreMaskArguments();
203
+ }
204
+
205
+ std::vector<std::size_t> shape(1);
206
+ shape[0]=getPntrToArgument(0)->getShape()[0];
207
+ if( getNumberOfArguments()==2 ) {
208
+ addValue( shape );
209
+ setNotPeriodic();
210
+ if( derivbool ) {
211
+ getPntrToComponent(0)->setDerivativeIsZeroWhenValueIsZero();
212
+ }
213
+ } else {
214
+ unsigned namestart=1, nameend=getNumberOfArguments();
215
+ if( getPntrToArgument(1)->getRank()==2 ) {
216
+ namestart = 0;
217
+ nameend = getNumberOfArguments()-1;
218
+ }
219
+
220
+ for(unsigned i=namestart; i<nameend; ++i) {
221
+ std::string name = getPntrToArgument(i)->getName();
222
+ if( name.find_first_of(".")!=std::string::npos ) {
223
+ std::size_t dot=name.find_first_of(".");
224
+ name = name.substr(dot+1);
225
+ }
226
+ addComponent( name, shape );
227
+ componentIsNotPeriodic( name );
228
+ if( derivbool ) {
229
+ copyOutput( getLabel() + "." + name )->setDerivativeIsZeroWhenValueIsZero();
230
+ }
231
+ }
232
+ }
233
+ // This sets up an array in the parallel task manager to hold all the indices
234
+ // Sets up the index list in the task manager
235
+ std::size_t nder = getPntrToArgument(getNumberOfArguments()-1)->getNumberOfStoredValues();
236
+ MatrixTimesVectorData input;
237
+ input.pairs.resize( getNumberOfArguments()-1, 2 );
238
+ if( getPntrToArgument(1)->getRank()==2 ) {
239
+ for(unsigned i=1; i<getNumberOfArguments(); ++i) {
240
+ input.pairs[i-1][0] = i-1;
241
+ input.pairs[i-1][1] = getNumberOfArguments()-1;
242
+ }
243
+ input.fshift=0;
244
+ } else {
245
+ for(unsigned i=1; i<getNumberOfArguments(); ++i) {
246
+ input.pairs[i-1][0] = 0;
247
+ input.pairs[i-1][1] = i;
248
+ }
249
+ input.fshift=nder;
250
+ }
251
+ taskmanager.setActionInput( input );
252
+ }
253
+
254
+ template <class T>
255
+ unsigned MatrixTimesVectorBase<T>::getNumberOfDerivatives() {
256
+ unsigned nderivatives=0;
257
+ for(unsigned i=0; i<getNumberOfArguments(); ++i) {
258
+ nderivatives += getPntrToArgument(i)->getNumberOfStoredValues();
259
+ }
260
+ return nderivatives;
261
+ }
262
+
263
+ template <class T>
264
+ void MatrixTimesVectorBase<T>::prepare() {
265
+ ActionWithVector::prepare();
266
+ Value* myval = getPntrToComponent(0);
267
+ if( myval->getShape()[0]==getPntrToArgument(0)->getShape()[0] ) {
268
+ return;
269
+ }
270
+ std::vector<std::size_t> shape(1);
271
+ shape[0] = getPntrToArgument(0)->getShape()[0];
272
+ myval->setShape(shape);
273
+ }
274
+
275
+ template <class T>
276
+ void MatrixTimesVectorBase<T>::calculate() {
277
+ std::size_t nvectors, nder = getPntrToArgument(getNumberOfArguments()-1)->getNumberOfStoredValues();
278
+ if( getPntrToArgument(1)->getRank()==2 ) {
279
+ nvectors = 1;
280
+ } else {
281
+ nvectors = getNumberOfArguments()-1;
282
+ }
283
+ if( getName()=="MATRIX_VECTOR_PRODUCT_ROWSUMS" ) {
284
+ taskmanager.setupParallelTaskManager( nder, 0 );
285
+ } else {
286
+ taskmanager.setupParallelTaskManager( 2*nder, nvectors*nder );
287
+ }
288
+ taskmanager.runAllTasks();
289
+ }
290
+
291
+ template <class T>
292
+ int MatrixTimesVectorBase<T>::checkTaskIsActive( const unsigned& itask ) const {
293
+ for(unsigned i=0; i<getNumberOfArguments(); ++i) {
294
+ Value* myarg = getPntrToArgument(i);
295
+ if( myarg->getRank()==1 && !myarg->hasDerivatives() ) {
296
+ return 0;
297
+ } else if( myarg->getRank()==2 && !myarg->hasDerivatives() ) {
298
+ if (myarg->checkValueIsActiveForMMul(itask)) {
299
+ return 1;
300
+ }
301
+ } else {
302
+ plumed_merror("should not be in action " + getName() );
303
+ }
304
+ }
305
+ return 0;
306
+ }
307
+
308
+ template <class T>
309
+ void MatrixTimesVectorBase<T>::performTask( std::size_t task_index,
310
+ const MatrixTimesVectorData& actiondata,
311
+ ParallelActionsInput& input,
312
+ ParallelActionsOutput& output ) {
313
+ for(unsigned i=0; i<actiondata.pairs.nrows(); ++i) {
314
+ MatrixTimesVectorOutput doutput( task_index,
315
+ i,
316
+ input.nderivatives_per_scalar,
317
+ actiondata,
318
+ input,
319
+ output );
320
+ T::performTask( MatrixTimesVectorInput( task_index,
321
+ i,
322
+ actiondata,
323
+ input,
324
+ input.inputdata ),
325
+ doutput );
326
+ }
327
+ }
328
+
329
+ template <class T>
330
+ void MatrixTimesVectorBase<T>::applyNonZeroRankForces( std::vector<double>& outforces ) {
331
+ taskmanager.applyForces( outforces );
332
+ }
333
+
334
+ template <class T>
335
+ int MatrixTimesVectorBase<T>::getNumberOfValuesPerTask( std::size_t task_index,
336
+ const MatrixTimesVectorData& actiondata ) {
337
+ return 1;
338
+ }
339
+
340
+ template <class T>
341
+ void MatrixTimesVectorBase<T>::getForceIndices( std::size_t task_index,
342
+ std::size_t colno,
343
+ std::size_t ntotal_force,
344
+ const MatrixTimesVectorData& actiondata,
345
+ const ParallelActionsInput& input,
346
+ ForceIndexHolder force_indices ) {
347
+ for(unsigned i=0; i<actiondata.pairs.nrows(); ++i) {
348
+ std::size_t base = input.argstarts[actiondata.pairs[i][0]]
349
+ + task_index*input.ncols[actiondata.pairs[i][0]];
350
+ std::size_t n = input.bookeeping[input.bookstarts[actiondata.pairs[i][0]]
351
+ + (1+input.ncols[actiondata.pairs[i][0]])*task_index];
352
+ for(unsigned j=0; j<n; ++j) {
353
+ force_indices.indices[i][j] = base + j;
354
+ }
355
+ force_indices.threadsafe_derivatives_end[i] = n;
356
+ force_indices.tot_indices[i] = T::getAdditionalIndices( n,
357
+ input.argstarts[actiondata.pairs[i][1]],
358
+ MatrixForceIndexInput( task_index, i, actiondata, input ),
359
+ force_indices.indices[i] );
360
+ }
361
+ }
362
+
363
+ }
364
+ }
365
+ #endif