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.
- hillclimber/__init__.py +39 -0
- hillclimber/actions.py +53 -0
- hillclimber/analysis.py +590 -0
- hillclimber/biases.py +293 -0
- hillclimber/calc.py +22 -0
- hillclimber/cvs.py +1070 -0
- hillclimber/interfaces.py +133 -0
- hillclimber/metadynamics.py +325 -0
- hillclimber/nodes.py +6 -0
- hillclimber/opes.py +359 -0
- hillclimber/selectors.py +230 -0
- hillclimber/virtual_atoms.py +341 -0
- hillclimber-0.1.5.dist-info/METADATA +210 -0
- hillclimber-0.1.5.dist-info/RECORD +472 -0
- hillclimber-0.1.5.dist-info/WHEEL +5 -0
- hillclimber-0.1.5.dist-info/entry_points.txt +8 -0
- hillclimber-0.1.5.dist-info/licenses/LICENSE +165 -0
- hillclimber-0.1.5.dist-info/sboms/auditwheel.cdx.json +1 -0
- hillclimber.libs/libgcc_s-2d945d6c.so.1 +0 -0
- hillclimber.libs/libgomp-1ede7ee7.so.1.0.0 +0 -0
- hillclimber.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- plumed/__init__.py +104 -0
- plumed/_lib/bin/plumed +0 -0
- plumed/_lib/bin/plumed-config +9 -0
- plumed/_lib/bin/plumed-patch +9 -0
- plumed/_lib/include/plumed/adjmat/AdjacencyMatrixBase.h +659 -0
- plumed/_lib/include/plumed/adjmat/ContactMatrix.h +59 -0
- plumed/_lib/include/plumed/asmjit/arch.h +228 -0
- plumed/_lib/include/plumed/asmjit/arm.h +43 -0
- plumed/_lib/include/plumed/asmjit/asmjit.h +69 -0
- plumed/_lib/include/plumed/asmjit/asmjit_apibegin.h +143 -0
- plumed/_lib/include/plumed/asmjit/asmjit_apiend.h +93 -0
- plumed/_lib/include/plumed/asmjit/asmjit_build.h +971 -0
- plumed/_lib/include/plumed/asmjit/assembler.h +183 -0
- plumed/_lib/include/plumed/asmjit/base.h +56 -0
- plumed/_lib/include/plumed/asmjit/codebuilder.h +944 -0
- plumed/_lib/include/plumed/asmjit/codecompiler.h +767 -0
- plumed/_lib/include/plumed/asmjit/codeemitter.h +528 -0
- plumed/_lib/include/plumed/asmjit/codeholder.h +777 -0
- plumed/_lib/include/plumed/asmjit/constpool.h +286 -0
- plumed/_lib/include/plumed/asmjit/cpuinfo.h +402 -0
- plumed/_lib/include/plumed/asmjit/func.h +1327 -0
- plumed/_lib/include/plumed/asmjit/globals.h +370 -0
- plumed/_lib/include/plumed/asmjit/inst.h +137 -0
- plumed/_lib/include/plumed/asmjit/logging.h +317 -0
- plumed/_lib/include/plumed/asmjit/misc_p.h +103 -0
- plumed/_lib/include/plumed/asmjit/moved_string.h +318 -0
- plumed/_lib/include/plumed/asmjit/operand.h +1599 -0
- plumed/_lib/include/plumed/asmjit/osutils.h +207 -0
- plumed/_lib/include/plumed/asmjit/regalloc_p.h +597 -0
- plumed/_lib/include/plumed/asmjit/runtime.h +227 -0
- plumed/_lib/include/plumed/asmjit/simdtypes.h +1104 -0
- plumed/_lib/include/plumed/asmjit/utils.h +1387 -0
- plumed/_lib/include/plumed/asmjit/vmem.h +183 -0
- plumed/_lib/include/plumed/asmjit/x86.h +45 -0
- plumed/_lib/include/plumed/asmjit/x86assembler.h +125 -0
- plumed/_lib/include/plumed/asmjit/x86builder.h +117 -0
- plumed/_lib/include/plumed/asmjit/x86compiler.h +322 -0
- plumed/_lib/include/plumed/asmjit/x86emitter.h +5149 -0
- plumed/_lib/include/plumed/asmjit/x86globals.h +535 -0
- plumed/_lib/include/plumed/asmjit/x86inst.h +2547 -0
- plumed/_lib/include/plumed/asmjit/x86instimpl_p.h +74 -0
- plumed/_lib/include/plumed/asmjit/x86internal_p.h +108 -0
- plumed/_lib/include/plumed/asmjit/x86logging_p.h +92 -0
- plumed/_lib/include/plumed/asmjit/x86misc.h +417 -0
- plumed/_lib/include/plumed/asmjit/x86operand.h +1133 -0
- plumed/_lib/include/plumed/asmjit/x86regalloc_p.h +734 -0
- plumed/_lib/include/plumed/asmjit/zone.h +1157 -0
- plumed/_lib/include/plumed/bias/Bias.h +82 -0
- plumed/_lib/include/plumed/bias/ReweightBase.h +58 -0
- plumed/_lib/include/plumed/blas/blas.h +253 -0
- plumed/_lib/include/plumed/blas/def_external.h +61 -0
- plumed/_lib/include/plumed/blas/def_internal.h +97 -0
- plumed/_lib/include/plumed/blas/real.h +49 -0
- plumed/_lib/include/plumed/cltools/CLTool.h +32 -0
- plumed/_lib/include/plumed/clusters/ClusteringBase.h +70 -0
- plumed/_lib/include/plumed/colvar/Colvar.h +32 -0
- plumed/_lib/include/plumed/colvar/ColvarInput.h +68 -0
- plumed/_lib/include/plumed/colvar/ColvarShortcut.h +81 -0
- plumed/_lib/include/plumed/colvar/CoordinationBase.h +52 -0
- plumed/_lib/include/plumed/colvar/MultiColvarTemplate.h +333 -0
- plumed/_lib/include/plumed/colvar/PathMSDBase.h +101 -0
- plumed/_lib/include/plumed/colvar/RMSDVector.h +78 -0
- plumed/_lib/include/plumed/config/Config.h +118 -0
- plumed/_lib/include/plumed/config/version.h +9 -0
- plumed/_lib/include/plumed/contour/ContourFindingObject.h +87 -0
- plumed/_lib/include/plumed/contour/DistanceFromContourBase.h +82 -0
- plumed/_lib/include/plumed/contour/FindContour.h +67 -0
- plumed/_lib/include/plumed/core/Action.h +540 -0
- plumed/_lib/include/plumed/core/ActionAnyorder.h +48 -0
- plumed/_lib/include/plumed/core/ActionAtomistic.h +343 -0
- plumed/_lib/include/plumed/core/ActionForInterface.h +99 -0
- plumed/_lib/include/plumed/core/ActionPilot.h +57 -0
- plumed/_lib/include/plumed/core/ActionRegister.h +124 -0
- plumed/_lib/include/plumed/core/ActionSet.h +163 -0
- plumed/_lib/include/plumed/core/ActionSetup.h +48 -0
- plumed/_lib/include/plumed/core/ActionShortcut.h +73 -0
- plumed/_lib/include/plumed/core/ActionToGetData.h +59 -0
- plumed/_lib/include/plumed/core/ActionToPutData.h +101 -0
- plumed/_lib/include/plumed/core/ActionWithArguments.h +140 -0
- plumed/_lib/include/plumed/core/ActionWithMatrix.h +87 -0
- plumed/_lib/include/plumed/core/ActionWithValue.h +258 -0
- plumed/_lib/include/plumed/core/ActionWithVector.h +94 -0
- plumed/_lib/include/plumed/core/ActionWithVirtualAtom.h +123 -0
- plumed/_lib/include/plumed/core/CLTool.h +177 -0
- plumed/_lib/include/plumed/core/CLToolMain.h +102 -0
- plumed/_lib/include/plumed/core/CLToolRegister.h +108 -0
- plumed/_lib/include/plumed/core/Colvar.h +115 -0
- plumed/_lib/include/plumed/core/DataPassingObject.h +94 -0
- plumed/_lib/include/plumed/core/DataPassingTools.h +54 -0
- plumed/_lib/include/plumed/core/DomainDecomposition.h +120 -0
- plumed/_lib/include/plumed/core/ExchangePatterns.h +47 -0
- plumed/_lib/include/plumed/core/FlexibleBin.h +63 -0
- plumed/_lib/include/plumed/core/GREX.h +61 -0
- plumed/_lib/include/plumed/core/GenericMolInfo.h +89 -0
- plumed/_lib/include/plumed/core/Group.h +41 -0
- plumed/_lib/include/plumed/core/ModuleMap.h +30 -0
- plumed/_lib/include/plumed/core/ParallelTaskManager.h +1023 -0
- plumed/_lib/include/plumed/core/PbcAction.h +61 -0
- plumed/_lib/include/plumed/core/PlumedMain.h +632 -0
- plumed/_lib/include/plumed/core/PlumedMainInitializer.h +118 -0
- plumed/_lib/include/plumed/core/RegisterBase.h +340 -0
- plumed/_lib/include/plumed/core/TargetDist.h +48 -0
- plumed/_lib/include/plumed/core/Value.h +547 -0
- plumed/_lib/include/plumed/core/WithCmd.h +93 -0
- plumed/_lib/include/plumed/dimred/SMACOF.h +55 -0
- plumed/_lib/include/plumed/drr/DRR.h +383 -0
- plumed/_lib/include/plumed/drr/colvar_UIestimator.h +777 -0
- plumed/_lib/include/plumed/fisst/legendre_rule_fast.h +44 -0
- plumed/_lib/include/plumed/function/Custom.h +54 -0
- plumed/_lib/include/plumed/function/Function.h +85 -0
- plumed/_lib/include/plumed/function/FunctionOfMatrix.h +368 -0
- plumed/_lib/include/plumed/function/FunctionOfScalar.h +135 -0
- plumed/_lib/include/plumed/function/FunctionOfVector.h +296 -0
- plumed/_lib/include/plumed/function/FunctionSetup.h +180 -0
- plumed/_lib/include/plumed/function/FunctionShortcut.h +130 -0
- plumed/_lib/include/plumed/function/FunctionWithSingleArgument.h +165 -0
- plumed/_lib/include/plumed/gridtools/ActionWithGrid.h +43 -0
- plumed/_lib/include/plumed/gridtools/EvaluateGridFunction.h +99 -0
- plumed/_lib/include/plumed/gridtools/FunctionOfGrid.h +295 -0
- plumed/_lib/include/plumed/gridtools/GridCoordinatesObject.h +179 -0
- plumed/_lib/include/plumed/gridtools/GridSearch.h +135 -0
- plumed/_lib/include/plumed/gridtools/Interpolator.h +45 -0
- plumed/_lib/include/plumed/gridtools/KDE.h +455 -0
- plumed/_lib/include/plumed/gridtools/RDF.h +40 -0
- plumed/_lib/include/plumed/gridtools/SumOfKernels.h +219 -0
- plumed/_lib/include/plumed/isdb/MetainferenceBase.h +398 -0
- plumed/_lib/include/plumed/lapack/def_external.h +207 -0
- plumed/_lib/include/plumed/lapack/def_internal.h +388 -0
- plumed/_lib/include/plumed/lapack/lapack.h +899 -0
- plumed/_lib/include/plumed/lapack/lapack_limits.h +79 -0
- plumed/_lib/include/plumed/lapack/real.h +50 -0
- plumed/_lib/include/plumed/lepton/CompiledExpression.h +164 -0
- plumed/_lib/include/plumed/lepton/CustomFunction.h +143 -0
- plumed/_lib/include/plumed/lepton/Exception.h +93 -0
- plumed/_lib/include/plumed/lepton/ExpressionProgram.h +137 -0
- plumed/_lib/include/plumed/lepton/ExpressionTreeNode.h +145 -0
- plumed/_lib/include/plumed/lepton/Lepton.h +85 -0
- plumed/_lib/include/plumed/lepton/MSVC_erfc.h +123 -0
- plumed/_lib/include/plumed/lepton/Operation.h +1302 -0
- plumed/_lib/include/plumed/lepton/ParsedExpression.h +165 -0
- plumed/_lib/include/plumed/lepton/Parser.h +111 -0
- plumed/_lib/include/plumed/lepton/windowsIncludes.h +73 -0
- plumed/_lib/include/plumed/mapping/Path.h +44 -0
- plumed/_lib/include/plumed/mapping/PathProjectionCalculator.h +57 -0
- plumed/_lib/include/plumed/matrixtools/MatrixOperationBase.h +54 -0
- plumed/_lib/include/plumed/matrixtools/MatrixTimesMatrix.h +309 -0
- plumed/_lib/include/plumed/matrixtools/MatrixTimesVectorBase.h +365 -0
- plumed/_lib/include/plumed/matrixtools/OuterProduct.h +238 -0
- plumed/_lib/include/plumed/maze/Core.h +65 -0
- plumed/_lib/include/plumed/maze/Loss.h +86 -0
- plumed/_lib/include/plumed/maze/Member.h +66 -0
- plumed/_lib/include/plumed/maze/Memetic.h +799 -0
- plumed/_lib/include/plumed/maze/Optimizer.h +357 -0
- plumed/_lib/include/plumed/maze/Random_MT.h +156 -0
- plumed/_lib/include/plumed/maze/Tools.h +183 -0
- plumed/_lib/include/plumed/metatomic/vesin.h +188 -0
- plumed/_lib/include/plumed/molfile/Gromacs.h +2013 -0
- plumed/_lib/include/plumed/molfile/endianswap.h +217 -0
- plumed/_lib/include/plumed/molfile/fastio.h +683 -0
- plumed/_lib/include/plumed/molfile/largefiles.h +78 -0
- plumed/_lib/include/plumed/molfile/libmolfile_plugin.h +77 -0
- plumed/_lib/include/plumed/molfile/molfile_plugin.h +1034 -0
- plumed/_lib/include/plumed/molfile/periodic_table.h +248 -0
- plumed/_lib/include/plumed/molfile/readpdb.h +447 -0
- plumed/_lib/include/plumed/molfile/vmdplugin.h +236 -0
- plumed/_lib/include/plumed/multicolvar/MultiColvarShortcuts.h +45 -0
- plumed/_lib/include/plumed/opes/ExpansionCVs.h +79 -0
- plumed/_lib/include/plumed/sasa/Sasa.h +32 -0
- plumed/_lib/include/plumed/secondarystructure/SecondaryStructureBase.h +372 -0
- plumed/_lib/include/plumed/setup/ActionSetup.h +25 -0
- plumed/_lib/include/plumed/small_vector/small_vector.h +6114 -0
- plumed/_lib/include/plumed/symfunc/CoordinationNumbers.h +41 -0
- plumed/_lib/include/plumed/tools/Angle.h +52 -0
- plumed/_lib/include/plumed/tools/AtomDistribution.h +138 -0
- plumed/_lib/include/plumed/tools/AtomNumber.h +152 -0
- plumed/_lib/include/plumed/tools/BiasRepresentation.h +106 -0
- plumed/_lib/include/plumed/tools/BitmaskEnum.h +167 -0
- plumed/_lib/include/plumed/tools/Brent1DRootSearch.h +159 -0
- plumed/_lib/include/plumed/tools/CheckInRange.h +44 -0
- plumed/_lib/include/plumed/tools/Citations.h +74 -0
- plumed/_lib/include/plumed/tools/ColvarOutput.h +118 -0
- plumed/_lib/include/plumed/tools/Communicator.h +316 -0
- plumed/_lib/include/plumed/tools/ConjugateGradient.h +80 -0
- plumed/_lib/include/plumed/tools/DLLoader.h +79 -0
- plumed/_lib/include/plumed/tools/ERMSD.h +73 -0
- plumed/_lib/include/plumed/tools/Exception.h +406 -0
- plumed/_lib/include/plumed/tools/File.h +28 -0
- plumed/_lib/include/plumed/tools/FileBase.h +153 -0
- plumed/_lib/include/plumed/tools/FileTools.h +37 -0
- plumed/_lib/include/plumed/tools/ForwardDecl.h +54 -0
- plumed/_lib/include/plumed/tools/Grid.h +638 -0
- plumed/_lib/include/plumed/tools/HistogramBead.h +136 -0
- plumed/_lib/include/plumed/tools/IFile.h +117 -0
- plumed/_lib/include/plumed/tools/KernelFunctions.h +113 -0
- plumed/_lib/include/plumed/tools/Keywords.h +380 -0
- plumed/_lib/include/plumed/tools/LatticeReduction.h +66 -0
- plumed/_lib/include/plumed/tools/LeptonCall.h +64 -0
- plumed/_lib/include/plumed/tools/LinkCells.h +126 -0
- plumed/_lib/include/plumed/tools/Log.h +41 -0
- plumed/_lib/include/plumed/tools/LoopUnroller.h +163 -0
- plumed/_lib/include/plumed/tools/Matrix.h +721 -0
- plumed/_lib/include/plumed/tools/MatrixSquareBracketsAccess.h +138 -0
- plumed/_lib/include/plumed/tools/MergeVectorTools.h +153 -0
- plumed/_lib/include/plumed/tools/Minimise1DBrent.h +244 -0
- plumed/_lib/include/plumed/tools/MinimiseBase.h +120 -0
- plumed/_lib/include/plumed/tools/MolDataClass.h +51 -0
- plumed/_lib/include/plumed/tools/NeighborList.h +112 -0
- plumed/_lib/include/plumed/tools/OFile.h +286 -0
- plumed/_lib/include/plumed/tools/OpenACC.h +180 -0
- plumed/_lib/include/plumed/tools/OpenMP.h +75 -0
- plumed/_lib/include/plumed/tools/PDB.h +154 -0
- plumed/_lib/include/plumed/tools/Pbc.h +139 -0
- plumed/_lib/include/plumed/tools/PlumedHandle.h +105 -0
- plumed/_lib/include/plumed/tools/RMSD.h +493 -0
- plumed/_lib/include/plumed/tools/Random.h +80 -0
- plumed/_lib/include/plumed/tools/RootFindingBase.h +79 -0
- plumed/_lib/include/plumed/tools/Stopwatch.h +475 -0
- plumed/_lib/include/plumed/tools/Subprocess.h +142 -0
- plumed/_lib/include/plumed/tools/SwitchingFunction.h +208 -0
- plumed/_lib/include/plumed/tools/Tensor.h +724 -0
- plumed/_lib/include/plumed/tools/TokenizedLine.h +123 -0
- plumed/_lib/include/plumed/tools/Tools.h +638 -0
- plumed/_lib/include/plumed/tools/Torsion.h +55 -0
- plumed/_lib/include/plumed/tools/TrajectoryParser.h +118 -0
- plumed/_lib/include/plumed/tools/Tree.h +61 -0
- plumed/_lib/include/plumed/tools/TypesafePtr.h +463 -0
- plumed/_lib/include/plumed/tools/Units.h +167 -0
- plumed/_lib/include/plumed/tools/Vector.h +433 -0
- plumed/_lib/include/plumed/tools/View.h +296 -0
- plumed/_lib/include/plumed/tools/View2D.h +100 -0
- plumed/_lib/include/plumed/tools/h36.h +39 -0
- plumed/_lib/include/plumed/vatom/ActionWithVirtualAtom.h +32 -0
- plumed/_lib/include/plumed/ves/BasisFunctions.h +380 -0
- plumed/_lib/include/plumed/ves/CoeffsBase.h +310 -0
- plumed/_lib/include/plumed/ves/CoeffsMatrix.h +220 -0
- plumed/_lib/include/plumed/ves/CoeffsVector.h +251 -0
- plumed/_lib/include/plumed/ves/FermiSwitchingFunction.h +74 -0
- plumed/_lib/include/plumed/ves/GridIntegrationWeights.h +50 -0
- plumed/_lib/include/plumed/ves/GridLinearInterpolation.h +81 -0
- plumed/_lib/include/plumed/ves/GridProjWeights.h +61 -0
- plumed/_lib/include/plumed/ves/LinearBasisSetExpansion.h +303 -0
- plumed/_lib/include/plumed/ves/Optimizer.h +444 -0
- plumed/_lib/include/plumed/ves/TargetDistModifer.h +53 -0
- plumed/_lib/include/plumed/ves/TargetDistribution.h +266 -0
- plumed/_lib/include/plumed/ves/VesBias.h +545 -0
- plumed/_lib/include/plumed/ves/VesTools.h +142 -0
- plumed/_lib/include/plumed/ves/WaveletGrid.h +75 -0
- plumed/_lib/include/plumed/volumes/ActionVolume.h +268 -0
- plumed/_lib/include/plumed/volumes/VolumeShortcut.h +147 -0
- plumed/_lib/include/plumed/wrapper/Plumed.h +5025 -0
- plumed/_lib/include/plumed/xdrfile/xdrfile.h +663 -0
- plumed/_lib/include/plumed/xdrfile/xdrfile_trr.h +89 -0
- plumed/_lib/include/plumed/xdrfile/xdrfile_xtc.h +90 -0
- plumed/_lib/lib/PythonCVInterface.so +0 -0
- plumed/_lib/lib/libplumed.a +0 -0
- plumed/_lib/lib/libplumed.so +0 -0
- plumed/_lib/lib/libplumedKernel.so +0 -0
- plumed/_lib/lib/libplumedWrapper.a +0 -0
- plumed/_lib/lib/pkgconfig/plumed.pc +13 -0
- plumed/_lib/lib/pkgconfig/plumedInternals.pc +13 -0
- plumed/_lib/lib/pkgconfig/plumedWrapper.pc +13 -0
- plumed/_lib/lib/plumed/fortran/plumed.f90 +879 -0
- plumed/_lib/lib/plumed/fortran/plumed_f08.f90 +2625 -0
- plumed/_lib/lib/plumed/modulefile +69 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.config +43 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt +543 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt.preplumed +540 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp +1628 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1590 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h +103 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h.preplumed +99 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp +2527 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2513 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +408 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +394 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp +2348 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2091 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp +3573 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3495 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1506 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1402 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp +997 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +906 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp +2780 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2738 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.config +43 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt +549 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt.preplumed +546 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h +104 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp +2624 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2610 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +409 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +395 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp +2419 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2164 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp +3546 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3468 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp +991 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +900 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp +2895 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2849 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp +886 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +880 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +347 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +345 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.config +43 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt +575 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt.preplumed +572 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h +104 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp +2564 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2550 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h +410 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +396 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp +2435 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp.preplumed +2187 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp +3592 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3514 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp +958 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp.preplumed +929 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp +2987 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp.preplumed +2941 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp +904 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +898 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +353 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +351 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.config +39 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake +82 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake.preplumed +82 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp +162 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp.preplumed +154 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp +107 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp.preplumed +99 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h +120 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h.preplumed +111 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp +215 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp.preplumed +197 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h +87 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h.preplumed +86 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp +2971 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp.preplumed +2970 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h +430 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h.preplumed +429 -0
- plumed/_lib/lib/plumed/patches/namd-2.12.config +30 -0
- plumed/_lib/lib/plumed/patches/namd-2.12.diff +267 -0
- plumed/_lib/lib/plumed/patches/namd-2.13.config +30 -0
- plumed/_lib/lib/plumed/patches/namd-2.13.diff +267 -0
- plumed/_lib/lib/plumed/patches/namd-2.14.config +30 -0
- plumed/_lib/lib/plumed/patches/namd-2.14.diff +268 -0
- plumed/_lib/lib/plumed/patches/patch.sh +500 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.config +25 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90 +368 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90.preplumed +366 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90 +71 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90.preplumed +24 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90 +62 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90 +189 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90.preplumed +185 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.config +26 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90 +422 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90.preplumed +420 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90 +70 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90 +62 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90 +233 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90.preplumed +230 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.config +28 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile +175 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile.preplumed +171 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90 +486 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90.preplumed +484 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90 +74 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90 +64 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90 +532 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90.preplumed +518 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.config +28 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile +249 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile.preplumed +244 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90 +532 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90.preplumed +535 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90 +74 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90 +64 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90 +569 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90.preplumed +560 -0
- plumed/_lib/lib/plumed/plumed-config +9 -0
- plumed/_lib/lib/plumed/plumed-mklib +9 -0
- plumed/_lib/lib/plumed/plumed-newcv +9 -0
- plumed/_lib/lib/plumed/plumed-partial_tempering +9 -0
- plumed/_lib/lib/plumed/plumed-patch +9 -0
- plumed/_lib/lib/plumed/plumed-runtime +0 -0
- plumed/_lib/lib/plumed/plumed-selector +9 -0
- plumed/_lib/lib/plumed/plumed-vim2html +9 -0
- plumed/_lib/lib/plumed/scripts/config.sh +126 -0
- plumed/_lib/lib/plumed/scripts/mklib.sh +175 -0
- plumed/_lib/lib/plumed/scripts/newcv.sh +26 -0
- plumed/_lib/lib/plumed/scripts/partial_tempering.sh +319 -0
- plumed/_lib/lib/plumed/scripts/patch.sh +4 -0
- plumed/_lib/lib/plumed/scripts/selector.sh +234 -0
- plumed/_lib/lib/plumed/scripts/vim2html.sh +190 -0
- plumed/_lib/lib/plumed/src/colvar/Template.cpp +116 -0
- plumed/_lib/lib/plumed/src/config/compile_options.sh +3 -0
- plumed/_lib/lib/plumed/src/config/config.txt +179 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake +8 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake.runtime +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake.shared +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake.static +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc +8 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc.runtime +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc.shared +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc.static +5 -0
- plumed/_lib/lib/plumed/vim/scripts.vim +6 -0
- plumed/_plumed_core.cpython-311-aarch64-linux-musl.so +0 -0
- plumed/_plumed_core.cpython-312-aarch64-linux-musl.so +0 -0
- plumed/_plumed_core.cpython-313-aarch64-linux-musl.so +0 -0
- plumedCommunications.cpython-311-aarch64-linux-musl.so +0 -0
- plumedCommunications.cpython-312-aarch64-linux-musl.so +0 -0
- plumedCommunications.cpython-313-aarch64-linux-musl.so +0 -0
- plumedCommunications.pyi +431 -0
|
@@ -0,0 +1,296 @@
|
|
|
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_FunctionOfVector_h
|
|
23
|
+
#define __PLUMED_function_FunctionOfVector_h
|
|
24
|
+
|
|
25
|
+
#include "../core/ActionWithVector.h"
|
|
26
|
+
#include "../core/ParallelTaskManager.h"
|
|
27
|
+
#include "../core/ActionSetup.h"
|
|
28
|
+
#include "FunctionSetup.h"
|
|
29
|
+
#include "Custom.h"
|
|
30
|
+
|
|
31
|
+
namespace PLMD {
|
|
32
|
+
namespace function {
|
|
33
|
+
|
|
34
|
+
template <class T>
|
|
35
|
+
class FunctionOfVector : public ActionWithVector {
|
|
36
|
+
public:
|
|
37
|
+
using input_type = FunctionData<T>;
|
|
38
|
+
using PTM = ParallelTaskManager<FunctionOfVector<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
|
+
public:
|
|
45
|
+
static void registerKeywords(Keywords&);
|
|
46
|
+
explicit FunctionOfVector(const ActionOptions&);
|
|
47
|
+
~FunctionOfVector() {}
|
|
48
|
+
std::string getOutputComponentDescription( const std::string& cname, const Keywords& keys ) const override ;
|
|
49
|
+
/// Get the number of derivatives for this action
|
|
50
|
+
unsigned getNumberOfDerivatives() override ;
|
|
51
|
+
/// Resize vectors that are the wrong size
|
|
52
|
+
void prepare() override ;
|
|
53
|
+
/// Get the label to write in the graph
|
|
54
|
+
std::string writeInGraph() const override ;
|
|
55
|
+
/// This builds the task list for the action
|
|
56
|
+
void calculate() override;
|
|
57
|
+
/// Add some forces
|
|
58
|
+
void applyNonZeroRankForces( std::vector<double>& outforces ) override ;
|
|
59
|
+
/// Get the input data
|
|
60
|
+
void getInputData( std::vector<double>& inputdata ) const override ;
|
|
61
|
+
/// Calculate the function
|
|
62
|
+
static void performTask( std::size_t task_index,
|
|
63
|
+
const FunctionData<T>& actiondata,
|
|
64
|
+
ParallelActionsInput& input,
|
|
65
|
+
ParallelActionsOutput& output );
|
|
66
|
+
/// Get the indices of the forces
|
|
67
|
+
static int getNumberOfValuesPerTask( std::size_t task_index, const FunctionData<T>& actiondata );
|
|
68
|
+
static void getForceIndices( std::size_t task_index,
|
|
69
|
+
std::size_t colno,
|
|
70
|
+
std::size_t ntotal_force,
|
|
71
|
+
const FunctionData<T>& actiondata,
|
|
72
|
+
const ParallelActionsInput& input,
|
|
73
|
+
ForceIndexHolder force_indices );
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
template <class T>
|
|
77
|
+
void FunctionOfVector<T>::registerKeywords(Keywords& keys ) {
|
|
78
|
+
Action::registerKeywords(keys);
|
|
79
|
+
ActionWithValue::registerKeywords(keys);
|
|
80
|
+
ActionWithArguments::registerKeywords(keys);
|
|
81
|
+
std::string name = keys.getDisplayName();
|
|
82
|
+
std::size_t und=name.find("_VECTOR");
|
|
83
|
+
keys.setDisplayName( name.substr(0,und) );
|
|
84
|
+
keys.addInputKeyword("compulsory","ARG","scalar/vector","the labels of the scalar and vector that on which the function is being calculated elementwise");
|
|
85
|
+
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");
|
|
86
|
+
keys.add("hidden","NO_ACTION_LOG","suppresses printing from action on the log");
|
|
87
|
+
T::registerKeywords( keys );
|
|
88
|
+
if( keys.getDisplayName()=="SUM" ) {
|
|
89
|
+
keys.setValueDescription("scalar","the sum of all the elements in the input vector");
|
|
90
|
+
} else if( keys.getDisplayName()=="MEAN" ) {
|
|
91
|
+
keys.setValueDescription("scalar","the mean of all the elements in the input vector");
|
|
92
|
+
} else if( keys.getDisplayName()=="HIGHEST" ) {
|
|
93
|
+
keys.setValueDescription("scalar/vector","the largest element of the input vector if one vector specified. If multiple vectors of the same size specified the largest elements of these vector computed elementwise.");
|
|
94
|
+
keys.addInputKeyword("optional","MASK","vector","the label for a sparse vector that should be used to determine which elements of the vector should be computed");
|
|
95
|
+
} else if( keys.getDisplayName()=="LOWEST" ) {
|
|
96
|
+
keys.setValueDescription("scalar/vector","the smallest element in the input vector if one vector specified. If multiple vectors of the same size specified the largest elements of these vector computed elementwise.");
|
|
97
|
+
keys.addInputKeyword("optional","MASK","vector","the label for a sparse vector that should be used to determine which elements of the vector should be computed");
|
|
98
|
+
} else if( keys.getDisplayName()=="SORT" ) {
|
|
99
|
+
keys.setValueDescription("vector","a vector that has been sorted into ascending order");
|
|
100
|
+
keys.addInputKeyword("optional","MASK","vector","the label for a sparse vector that should be used to determine which elements of the vector should be computed");
|
|
101
|
+
} else if( keys.outputComponentExists(".#!value") ) {
|
|
102
|
+
keys.addInputKeyword("optional","MASK","vector","the label for a sparse vector that should be used to determine which elements of the vector should be computed");
|
|
103
|
+
keys.setValueDescription("vector","the vector obtained by doing an element-wise application of " + keys.getOutputComponentDescription(".#!value") + " to the input vectors");
|
|
104
|
+
}
|
|
105
|
+
PTM::registerKeywords( keys );
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
template <class T>
|
|
109
|
+
FunctionOfVector<T>::FunctionOfVector(const ActionOptions&ao):
|
|
110
|
+
Action(ao),
|
|
111
|
+
ActionWithVector(ao),
|
|
112
|
+
taskmanager(this),
|
|
113
|
+
argstart(0) {
|
|
114
|
+
// Check if first argument is grid
|
|
115
|
+
if( getPntrToArgument(0)->getRank()>0 && getPntrToArgument(0)->hasDerivatives() ) {
|
|
116
|
+
argstart=1;
|
|
117
|
+
}
|
|
118
|
+
if( getNumberOfArguments()==argstart ) {
|
|
119
|
+
error("no arguments specified");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if( getPntrToArgument(argstart)->getRank()!=1 ) {
|
|
123
|
+
error("first argument to this action must be a vector");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Get the number of arguments
|
|
127
|
+
unsigned nargs = getNumberOfArguments();
|
|
128
|
+
int nmasks = getNumberOfMasks();
|
|
129
|
+
if( nargs>=static_cast<unsigned>(nmasks) && nmasks>0 ) {
|
|
130
|
+
nargs = nargs - nmasks;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Get the shape of the output
|
|
134
|
+
std::size_t nscalars = 0;
|
|
135
|
+
std::vector<std::size_t> shape(1);
|
|
136
|
+
shape[0]=getPntrToArgument(argstart)->getShape()[0];
|
|
137
|
+
for(unsigned i=argstart+1; i<nargs; ++i) {
|
|
138
|
+
if( getPntrToArgument(i)->getRank()==0 ) {
|
|
139
|
+
nscalars++;
|
|
140
|
+
} else if( getPntrToArgument(i)->getRank()==1 ) {
|
|
141
|
+
if( getPntrToArgument(i)->getShape()[0]!=shape[0] ) {
|
|
142
|
+
error("mismatch between sizes of input arguments");
|
|
143
|
+
} else if( nscalars>0 ) {
|
|
144
|
+
error("scalars should be specified in argument list after all vectors");
|
|
145
|
+
}
|
|
146
|
+
} else {
|
|
147
|
+
error("input arguments should be vectors or scalars");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if( nmasks>0 && getPntrToArgument(getNumberOfArguments()-nmasks)->getShape()[0]!=shape[0] ) {
|
|
151
|
+
error("input mask has wrong size");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Setup the function and the values
|
|
155
|
+
// Get the function data from the parallel task manager, to avoid copies
|
|
156
|
+
auto & myfunc = taskmanager.getActionInput();
|
|
157
|
+
myfunc.argstart = argstart;
|
|
158
|
+
myfunc.nscalars = nscalars;
|
|
159
|
+
FunctionData<T>::setup( myfunc.f, keywords.getOutputComponents(), shape, false, this );
|
|
160
|
+
// Setup the parallel task manager
|
|
161
|
+
taskmanager.setupParallelTaskManager( nargs-argstart, nscalars );
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
template <class T>
|
|
165
|
+
std::string FunctionOfVector<T>::getOutputComponentDescription( const std::string& cname, const Keywords& keys ) const {
|
|
166
|
+
if( getName().find("SORT")==std::string::npos ) {
|
|
167
|
+
return ActionWithValue::getOutputComponentDescription( cname, keys );
|
|
168
|
+
}
|
|
169
|
+
return "the " + cname + "th largest element in the input vectors";
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
template <class T>
|
|
173
|
+
std::string FunctionOfVector<T>::writeInGraph() const {
|
|
174
|
+
std::size_t und = getName().find_last_of("_");
|
|
175
|
+
return getName().substr(0,und);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
template <class T>
|
|
179
|
+
unsigned FunctionOfVector<T>::getNumberOfDerivatives() {
|
|
180
|
+
unsigned nder = 0;
|
|
181
|
+
for(unsigned i=argstart; i<getNumberOfArguments(); ++i) {
|
|
182
|
+
nder += getPntrToArgument(i)->getNumberOfStoredValues();
|
|
183
|
+
}
|
|
184
|
+
return nder;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
template <class T>
|
|
188
|
+
void FunctionOfVector<T>::prepare() {
|
|
189
|
+
std::vector<std::size_t> shape(1);
|
|
190
|
+
for(unsigned i=argstart; i<getNumberOfArguments(); ++i) {
|
|
191
|
+
if( getPntrToArgument(i)->getRank()==1 ) {
|
|
192
|
+
shape[0] = getPntrToArgument(i)->getShape()[0];
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
for(unsigned i=0; i<getNumberOfComponents(); ++i) {
|
|
197
|
+
Value* myval = getPntrToComponent(i);
|
|
198
|
+
if( myval->getRank()==1 && myval->getShape()[0]!=shape[0] ) {
|
|
199
|
+
myval->setShape(shape);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
ActionWithVector::prepare();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
template <class T>
|
|
206
|
+
void FunctionOfVector<T>::getInputData( std::vector<double>& inputdata ) const {
|
|
207
|
+
unsigned nargs = getNumberOfArguments();
|
|
208
|
+
int nmasks = getNumberOfMasks();
|
|
209
|
+
if( nargs>=static_cast<unsigned>(nmasks) && nmasks>0 ) {
|
|
210
|
+
nargs = nargs - nmasks;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
std::size_t ntasks = 0;
|
|
214
|
+
for(unsigned i=argstart; i<nargs; ++i) {
|
|
215
|
+
if( getPntrToArgument(i)->getRank()==1 ) {
|
|
216
|
+
ntasks = getPntrToArgument(i)->getShape()[0];
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
std::size_t ndata = static_cast<std::size_t>(nargs-argstart)*ntasks;
|
|
222
|
+
if( inputdata.size()!=ndata ) {
|
|
223
|
+
inputdata.resize( ndata );
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
for(unsigned j=argstart; j<nargs; ++j) {
|
|
227
|
+
const Value* myarg = getPntrToArgument(j);
|
|
228
|
+
if( myarg->getRank()==0 ) {
|
|
229
|
+
double val = myarg->get();
|
|
230
|
+
for(unsigned i=0; i<ntasks; ++i) {
|
|
231
|
+
inputdata[(nargs-argstart)*i + j-argstart] = val;
|
|
232
|
+
}
|
|
233
|
+
} else {
|
|
234
|
+
for(unsigned i=0; i<ntasks; ++i) {
|
|
235
|
+
inputdata[(nargs-argstart)*i + j-argstart] = myarg->get(i);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
template <class T>
|
|
242
|
+
void FunctionOfVector<T>::calculate() {
|
|
243
|
+
// This is done if we are calculating a function of multiple cvs
|
|
244
|
+
taskmanager.runAllTasks();
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
template <class T>
|
|
248
|
+
void FunctionOfVector<T>::performTask( std::size_t task_index,
|
|
249
|
+
const FunctionData<T>& actiondata,
|
|
250
|
+
ParallelActionsInput& input,
|
|
251
|
+
ParallelActionsOutput& output ) {
|
|
252
|
+
auto funcout = FunctionOutput::create( input.ncomponents,
|
|
253
|
+
output.values.data(),
|
|
254
|
+
input.nderivatives_per_scalar,
|
|
255
|
+
output.derivatives.data() );
|
|
256
|
+
T::calc( actiondata.f,
|
|
257
|
+
input.noderiv,
|
|
258
|
+
View<const double>( input.inputdata + task_index*input.nderivatives_per_scalar,
|
|
259
|
+
input.nderivatives_per_scalar ),
|
|
260
|
+
funcout );
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
template <class T>
|
|
264
|
+
void FunctionOfVector<T>::applyNonZeroRankForces( std::vector<double>& outforces ) {
|
|
265
|
+
taskmanager.applyForces( outforces );
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
template <class T>
|
|
269
|
+
int FunctionOfVector<T>::getNumberOfValuesPerTask( std::size_t task_index, const FunctionData<T>& actiondata ) {
|
|
270
|
+
return 1;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
template <class T>
|
|
274
|
+
void FunctionOfVector<T>::getForceIndices( std::size_t task_index,
|
|
275
|
+
std::size_t colno,
|
|
276
|
+
std::size_t ntotal_force,
|
|
277
|
+
const FunctionData<T>& actiondata,
|
|
278
|
+
const ParallelActionsInput& input,
|
|
279
|
+
ForceIndexHolder force_indices ) {
|
|
280
|
+
|
|
281
|
+
unsigned vector_end = actiondata.argstart + input.nderivatives_per_scalar - actiondata.nscalars;
|
|
282
|
+
for(unsigned j=0; j<input.ncomponents; ++j) {
|
|
283
|
+
for(unsigned k=actiondata.argstart; k<vector_end; ++k) {
|
|
284
|
+
force_indices.indices[j][k-actiondata.argstart] = input.argstarts[k] + task_index;
|
|
285
|
+
}
|
|
286
|
+
for(unsigned k=vector_end; k<vector_end+actiondata.nscalars; ++k) {
|
|
287
|
+
force_indices.indices[j][k-actiondata.argstart] = input.argstarts[k];
|
|
288
|
+
}
|
|
289
|
+
force_indices.threadsafe_derivatives_end[j] = input.nderivatives_per_scalar-actiondata.nscalars;
|
|
290
|
+
force_indices.tot_indices[j] = input.nderivatives_per_scalar;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
#endif
|
|
@@ -0,0 +1,180 @@
|
|
|
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_FunctionSetup_h
|
|
23
|
+
#define __PLUMED_function_FunctionSetup_h
|
|
24
|
+
|
|
25
|
+
#include "../core/ActionWithValue.h"
|
|
26
|
+
#include "../core/ActionWithArguments.h"
|
|
27
|
+
#include "../core/ActionWithVector.h"
|
|
28
|
+
|
|
29
|
+
namespace PLMD {
|
|
30
|
+
namespace function {
|
|
31
|
+
|
|
32
|
+
struct FunctionOptions {
|
|
33
|
+
/// Is the derivative zero if the value is zero
|
|
34
|
+
bool derivativeZeroIfValueIsZero = false;
|
|
35
|
+
/// Are multiple components registered with a single name as in SphericalHarmonic and Moments
|
|
36
|
+
std::vector<std::string> multipleValuesForEachRegisteredComponent;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
template <class T>
|
|
40
|
+
struct FunctionData {
|
|
41
|
+
/// Set equal to one if we are doing EvaluateGridFunction
|
|
42
|
+
unsigned argstart = 0;
|
|
43
|
+
// Number of scalars that appear in input
|
|
44
|
+
unsigned nscalars = 0;
|
|
45
|
+
T f;
|
|
46
|
+
// This is for setting up the functions
|
|
47
|
+
static void setup( T& myfunc,
|
|
48
|
+
const std::vector<std::string>& components,
|
|
49
|
+
const std::vector<std::size_t>& shape,
|
|
50
|
+
bool hasderiv,
|
|
51
|
+
ActionWithValue* action );
|
|
52
|
+
#ifdef __PLUMED_USE_OPENACC
|
|
53
|
+
void toACCDevice() const {
|
|
54
|
+
#pragma acc enter data copyin(this[0:1], argstart, nscalars)
|
|
55
|
+
f.toACCDevice();
|
|
56
|
+
}
|
|
57
|
+
void removeFromACCDevice() const {
|
|
58
|
+
f.removeFromACCDevice();
|
|
59
|
+
#pragma acc exit data delete(nscalars, argstart, this[0:1])
|
|
60
|
+
}
|
|
61
|
+
#endif //__PLUMED_USE_OPENACC
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
template <class T>
|
|
65
|
+
void FunctionData<T>::setup( T& myfunc,
|
|
66
|
+
const std::vector<std::string>& components,
|
|
67
|
+
const std::vector<std::size_t>& shape,
|
|
68
|
+
bool hasderiv,
|
|
69
|
+
ActionWithValue* action ) {
|
|
70
|
+
ActionWithArguments* aarg = action->castToActionWithArguments();
|
|
71
|
+
plumed_assert( aarg );
|
|
72
|
+
FunctionOptions options;
|
|
73
|
+
T::read( myfunc, aarg, options );
|
|
74
|
+
|
|
75
|
+
if( action->keywords.getDisplayName()=="SORT" ) {
|
|
76
|
+
for(unsigned j=0; j<aarg->getNumberOfArguments(); ++j) {
|
|
77
|
+
std::string num;
|
|
78
|
+
Tools::convert( j+1, num );
|
|
79
|
+
if( hasderiv ) {
|
|
80
|
+
action->addComponentWithDerivatives( num, shape );
|
|
81
|
+
} else {
|
|
82
|
+
action->addComponent( num, shape );
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
for(unsigned i=0; i<components.size(); ++i) {
|
|
87
|
+
if( options.multipleValuesForEachRegisteredComponent.size()>0 ) {
|
|
88
|
+
for(unsigned j=0; j<options.multipleValuesForEachRegisteredComponent.size(); ++j) {
|
|
89
|
+
if( hasderiv ) {
|
|
90
|
+
action->addComponentWithDerivatives( components[i] + options.multipleValuesForEachRegisteredComponent[j], shape );
|
|
91
|
+
} else {
|
|
92
|
+
action->addComponent( components[i] + options.multipleValuesForEachRegisteredComponent[j], shape );
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
} else if( components[i]==".#!value" ) {
|
|
96
|
+
if( hasderiv ) {
|
|
97
|
+
action->addValueWithDerivatives( shape );
|
|
98
|
+
} else {
|
|
99
|
+
action->addValue( shape );
|
|
100
|
+
}
|
|
101
|
+
} else if( components[i].find_first_of("_")!=std::string::npos ) {
|
|
102
|
+
if( aarg->getNumberOfArguments()==1 && hasderiv ) {
|
|
103
|
+
action->addValueWithDerivatives( shape );
|
|
104
|
+
} else if( aarg->getNumberOfArguments()==1 ) {
|
|
105
|
+
action->addValue( shape );
|
|
106
|
+
} else {
|
|
107
|
+
for(unsigned j=0; j<aarg->getNumberOfArguments(); ++j) {
|
|
108
|
+
if( hasderiv ) {
|
|
109
|
+
action->addComponentWithDerivatives( (aarg->getPntrToArgument(j))->getName() + components[i], shape );
|
|
110
|
+
} else {
|
|
111
|
+
action->addComponent( (aarg->getPntrToArgument(j))->getName() + components[i], shape );
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
} else {
|
|
116
|
+
if( hasderiv ) {
|
|
117
|
+
action->addComponentWithDerivatives( components[i], shape );
|
|
118
|
+
} else {
|
|
119
|
+
action->addComponent( components[i], shape );
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if( options.derivativeZeroIfValueIsZero ) {
|
|
125
|
+
for(unsigned i=0; i<action->getNumberOfComponents(); ++i) {
|
|
126
|
+
(action->copyOutput(i))->setDerivativeIsZeroWhenValueIsZero();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if( action->keywords.exists("PERIODIC") ) {
|
|
130
|
+
plumed_assert( action->keywords.getDisplayName()!="DIFFERENCE" );
|
|
131
|
+
std::vector<std::string> period;
|
|
132
|
+
action->parseVector("PERIODIC",period);
|
|
133
|
+
if( period.size()==1 ) {
|
|
134
|
+
if( period[0]!="NO") {
|
|
135
|
+
action->error("input to PERIODIC keyword does not make sense");
|
|
136
|
+
}
|
|
137
|
+
action->setNotPeriodic();
|
|
138
|
+
return;
|
|
139
|
+
} else if( period.size()!=2 ) {
|
|
140
|
+
action->error("input to PERIODIC keyword does not make sense");
|
|
141
|
+
}
|
|
142
|
+
for(unsigned i=0; i<action->getNumberOfComponents(); ++i) {
|
|
143
|
+
(action->copyOutput(i))->setDomain( period[0], period[1] );
|
|
144
|
+
}
|
|
145
|
+
} else if( action->keywords.getDisplayName()=="DIFFERENCE" ) {
|
|
146
|
+
if( aarg->getPntrToArgument(0)->isPeriodic() ) {
|
|
147
|
+
std::string min, max;
|
|
148
|
+
aarg->getPntrToArgument(0)->getDomain( min, max );
|
|
149
|
+
action->setPeriodic(min,max);
|
|
150
|
+
} else if( aarg->getPntrToArgument(1)->isPeriodic() ) {
|
|
151
|
+
std::string min, max;
|
|
152
|
+
aarg->getPntrToArgument(0)->getDomain( min, max );
|
|
153
|
+
action->setPeriodic( min, max );
|
|
154
|
+
} else {
|
|
155
|
+
action->setNotPeriodic();
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
for(unsigned i=0; i<action->getNumberOfComponents(); ++i) {
|
|
159
|
+
(action->copyOutput(i))->setNotPeriodic();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
struct FunctionOutput {
|
|
165
|
+
View<double> values;
|
|
166
|
+
View2D<double> derivs;
|
|
167
|
+
static FunctionOutput create( unsigned nvals,
|
|
168
|
+
double* vals,
|
|
169
|
+
unsigned ndev,
|
|
170
|
+
double* devs ) {
|
|
171
|
+
return FunctionOutput{
|
|
172
|
+
View<double>(vals,nvals),
|
|
173
|
+
View2D<double>(devs,nvals,ndev)
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
} // namespace function
|
|
179
|
+
} // namespace PLMD
|
|
180
|
+
#endif
|
|
@@ -0,0 +1,130 @@
|
|
|
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_FunctionShortcut_h
|
|
23
|
+
#define __PLUMED_function_FunctionShortcut_h
|
|
24
|
+
|
|
25
|
+
#include "../core/ActionShortcut.h"
|
|
26
|
+
#include "../core/PlumedMain.h"
|
|
27
|
+
#include "../core/ActionSet.h"
|
|
28
|
+
#include "../core/ActionRegister.h"
|
|
29
|
+
#include "../core/ActionWithArguments.h"
|
|
30
|
+
#include "../core/Value.h"
|
|
31
|
+
|
|
32
|
+
namespace PLMD {
|
|
33
|
+
namespace function {
|
|
34
|
+
|
|
35
|
+
template <class T>
|
|
36
|
+
class FunctionShortcut : public ActionShortcut {
|
|
37
|
+
private:
|
|
38
|
+
/// The function that is being computed
|
|
39
|
+
T myfunc;
|
|
40
|
+
public:
|
|
41
|
+
static void registerKeywords(Keywords&);
|
|
42
|
+
explicit FunctionShortcut(const ActionOptions&);
|
|
43
|
+
static void createAction( ActionShortcut* action, const std::vector<Value*>& vals, const std::string& allargs );
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
template <class T>
|
|
47
|
+
void FunctionShortcut<T>::registerKeywords(Keywords& keys ) {
|
|
48
|
+
ActionShortcut::registerKeywords( keys );
|
|
49
|
+
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");
|
|
50
|
+
keys.addActionNameSuffix("_SCALAR");
|
|
51
|
+
keys.addActionNameSuffix("_ONEARG");
|
|
52
|
+
keys.addActionNameSuffix("_VECTOR");
|
|
53
|
+
keys.addActionNameSuffix("_MATRIX");
|
|
54
|
+
keys.addActionNameSuffix("_GRID");
|
|
55
|
+
T tfunc;
|
|
56
|
+
tfunc.registerKeywords( keys );
|
|
57
|
+
if( keys.getDisplayName()=="SUM" || keys.getDisplayName()=="CUSTOM" || keys.getDisplayName()=="MATHEVAL" ) {
|
|
58
|
+
keys.addInputKeyword("compulsory","ARG","scalar/vector/matrix/grid","the values input to this function");
|
|
59
|
+
} else {
|
|
60
|
+
keys.addInputKeyword("compulsory","ARG","scalar/vector/matrix","the values input to this function");
|
|
61
|
+
}
|
|
62
|
+
if( keys.outputComponentExists(".#!value") && keys.getDisplayName()!="DIFFERENCE" ) {
|
|
63
|
+
keys.addInputKeyword("optional","MASK","vector/matrix","the label for a sparse vector/matrix that should be used to determine which elements of the vector/matrix should be computed");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
template <class T>
|
|
68
|
+
FunctionShortcut<T>::FunctionShortcut(const ActionOptions&ao):
|
|
69
|
+
Action(ao),
|
|
70
|
+
ActionShortcut(ao) {
|
|
71
|
+
std::vector<std::string> args;
|
|
72
|
+
parseVector("ARG",args);
|
|
73
|
+
std::string allargs=args[0];
|
|
74
|
+
for(unsigned i=1; i<args.size(); ++i) {
|
|
75
|
+
allargs += "," + args[i];
|
|
76
|
+
}
|
|
77
|
+
std::vector<Value*> vals;
|
|
78
|
+
ActionWithArguments::interpretArgumentList( args, plumed.getActionSet(), this, vals );
|
|
79
|
+
if( vals.size()==0 ) {
|
|
80
|
+
error("found no input arguments to function");
|
|
81
|
+
}
|
|
82
|
+
createAction( this, vals, allargs );
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
template <class T>
|
|
86
|
+
void FunctionShortcut<T>::createAction( ActionShortcut* action, const std::vector<Value*>& vals, const std::string& allargs ) {
|
|
87
|
+
unsigned maxrank=vals[0]->getRank();
|
|
88
|
+
bool isgrid=false;
|
|
89
|
+
for(unsigned i=0; i<vals.size(); ++i) {
|
|
90
|
+
if( vals[i]->getRank()>0 && vals[i]->hasDerivatives() ) {
|
|
91
|
+
isgrid=true;
|
|
92
|
+
}
|
|
93
|
+
if( vals[i]->getRank()>maxrank ) {
|
|
94
|
+
maxrank=vals[i]->getRank();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if( isgrid ) {
|
|
98
|
+
if( actionRegister().check( action->getName() + "_GRID") ) {
|
|
99
|
+
action->readInputLine( action->getShortcutLabel() + ": " + action->getName() + "_GRID ARG=" + allargs + " " + action->convertInputLineToString() );
|
|
100
|
+
} else {
|
|
101
|
+
plumed_merror("there is no action registered that allows you to do " + action->getName() + " with functions on a grid");
|
|
102
|
+
}
|
|
103
|
+
} else if( maxrank==0 ) {
|
|
104
|
+
if( actionRegister().check( action->getName() + "_SCALAR") ) {
|
|
105
|
+
action->readInputLine( action->getShortcutLabel() + ": " + action->getName() + "_SCALAR ARG=" + allargs + " " + action->convertInputLineToString() );
|
|
106
|
+
} else {
|
|
107
|
+
plumed_merror("there is no action registered that allows you to do " + action->getName() + " with scalars");
|
|
108
|
+
}
|
|
109
|
+
} else if( vals.size()==1 && actionRegister().check( action->getName() + "_ONEARG") ) {
|
|
110
|
+
action->readInputLine( action->getShortcutLabel() + ": " + action->getName() + "_ONEARG ARG=" + allargs + " " + action->convertInputLineToString() );
|
|
111
|
+
} else if( maxrank==1 ) {
|
|
112
|
+
if( actionRegister().check( action->getName() + "_VECTOR") ) {
|
|
113
|
+
action->readInputLine( action->getShortcutLabel() + ": " + action->getName() + "_VECTOR ARG=" + allargs + " " + action->convertInputLineToString() );
|
|
114
|
+
} else {
|
|
115
|
+
plumed_merror("there is no action registered that allows you to do " + action->getName() + " with vectors");
|
|
116
|
+
}
|
|
117
|
+
} else if( maxrank==2 ) {
|
|
118
|
+
if( actionRegister().check( action->getName() + "_MATRIX") ) {
|
|
119
|
+
action->readInputLine( action->getShortcutLabel() + ": " + action->getName() + "_MATRIX ARG=" + allargs + " " + action->convertInputLineToString() );
|
|
120
|
+
} else {
|
|
121
|
+
plumed_merror("there is no action registered that allows you to do " + action->getName() + " with matrices");
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
plumed_error();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
#endif
|