hillclimber 0.1.6__cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_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 +41 -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 +416 -0
- hillclimber/nodes.py +6 -0
- hillclimber/opes.py +359 -0
- hillclimber/pycv.py +362 -0
- hillclimber/selectors.py +230 -0
- hillclimber/virtual_atoms.py +341 -0
- hillclimber-0.1.6.dist-info/METADATA +325 -0
- hillclimber-0.1.6.dist-info/RECORD +475 -0
- hillclimber-0.1.6.dist-info/WHEEL +6 -0
- hillclimber-0.1.6.dist-info/entry_points.txt +8 -0
- hillclimber-0.1.6.dist-info/licenses/LICENSE +165 -0
- hillclimber-0.1.6.dist-info/sboms/auditwheel.cdx.json +1 -0
- hillclimber.libs/libgomp-a49a47f9.so.1.0.0 +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-gnu.so +0 -0
- plumed/_plumed_core.cpython-312-aarch64-linux-gnu.so +0 -0
- plumed/_plumed_core.cpython-313-aarch64-linux-gnu.so +0 -0
- plumed/_plumed_core.cpython-314-aarch64-linux-gnu.so +0 -0
- plumed/_plumed_core.cpython-314t-aarch64-linux-gnu.so +0 -0
- plumedCommunications.cpython-311-aarch64-linux-gnu.so +0 -0
- plumedCommunications.cpython-312-aarch64-linux-gnu.so +0 -0
- plumedCommunications.cpython-313-aarch64-linux-gnu.so +0 -0
- plumedCommunications.cpython-314-aarch64-linux-gnu.so +0 -0
- plumedCommunications.cpython-314t-aarch64-linux-gnu.so +0 -0
- plumedCommunications.pyi +431 -0
|
@@ -0,0 +1,721 @@
|
|
|
1
|
+
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
2
|
+
Copyright (c) 2011-2023 The plumed team
|
|
3
|
+
(see the PEOPLE file at the root of the distribution for a list of names)
|
|
4
|
+
|
|
5
|
+
See http://www.plumed.org for more information.
|
|
6
|
+
|
|
7
|
+
This file is part of plumed, version 2.
|
|
8
|
+
|
|
9
|
+
plumed is free software: you can redistribute it and/or modify
|
|
10
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
11
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
12
|
+
(at your option) any later version.
|
|
13
|
+
|
|
14
|
+
plumed is distributed in the hope that it will be useful,
|
|
15
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17
|
+
GNU Lesser General Public License for more details.
|
|
18
|
+
|
|
19
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
20
|
+
along with plumed. If not, see <http://www.gnu.org/licenses/>.
|
|
21
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
|
|
22
|
+
#ifndef __PLUMED_tools_Matrix_h
|
|
23
|
+
#define __PLUMED_tools_Matrix_h
|
|
24
|
+
#include <vector>
|
|
25
|
+
#include <string>
|
|
26
|
+
#include <set>
|
|
27
|
+
#include <cmath>
|
|
28
|
+
#include "Exception.h"
|
|
29
|
+
#include "MatrixSquareBracketsAccess.h"
|
|
30
|
+
#include "Tools.h"
|
|
31
|
+
#include "Log.h"
|
|
32
|
+
#include "../lapack/lapack.h"
|
|
33
|
+
|
|
34
|
+
namespace PLMD {
|
|
35
|
+
|
|
36
|
+
/// Calculate the dot product between two vectors
|
|
37
|
+
template <typename T> T dotProduct( const std::vector<T>& A, const std::vector<T>& B ) {
|
|
38
|
+
plumed_assert( A.size()==B.size() );
|
|
39
|
+
T val;
|
|
40
|
+
for(unsigned i=0; i<A.size(); ++i) {
|
|
41
|
+
val+=A[i]*B[i];
|
|
42
|
+
}
|
|
43
|
+
return val;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// Calculate the dot product between a vector and itself
|
|
47
|
+
template <typename T> T norm( const std::vector<T>& A ) {
|
|
48
|
+
T val;
|
|
49
|
+
for(unsigned i=0; i<A.size(); ++i) {
|
|
50
|
+
val+=A[i]*A[i];
|
|
51
|
+
}
|
|
52
|
+
return val;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// This class stores a full matrix and allows one to do some simple matrix operations
|
|
56
|
+
template <typename T>
|
|
57
|
+
class Matrix:
|
|
58
|
+
public MatrixSquareBracketsAccess<Matrix<T>,T> {
|
|
59
|
+
/// Multiply matrix by scalar
|
|
60
|
+
template <typename U> friend Matrix<U> operator*(U&, const Matrix<U>& );
|
|
61
|
+
/// Matrix matrix multiply
|
|
62
|
+
template <typename U> friend void mult( const Matrix<U>&, const Matrix<U>&, Matrix<U>& );
|
|
63
|
+
/// Matrix times a std::vector
|
|
64
|
+
template <typename U> friend void mult( const Matrix<U>&, const std::vector<U>&, std::vector<U>& );
|
|
65
|
+
/// std::vector times a Matrix
|
|
66
|
+
template <typename U> friend void mult( const std::vector<U>&, const Matrix<U>&, std::vector<U>& );
|
|
67
|
+
/// Matrix transpose
|
|
68
|
+
template <typename U> friend void transpose( const Matrix<U>&, Matrix<U>& );
|
|
69
|
+
/// Output the entire matrix on a single line
|
|
70
|
+
template <typename U> friend Log& operator<<(Log&, const Matrix<U>& );
|
|
71
|
+
/// Output the Matrix in matrix form
|
|
72
|
+
template <typename U> friend void matrixOut( Log&, const Matrix<U>& );
|
|
73
|
+
/// Diagonalize a symmetric matrix - returns zero if diagonalization worked
|
|
74
|
+
template <typename U> friend int diagMat( const Matrix<U>&, std::vector<U>&, Matrix<U>& );
|
|
75
|
+
/// Calculate the Moore-Penrose Pseudoinverse of a matrix
|
|
76
|
+
template <typename U> friend int pseudoInvert( const Matrix<U>&, Matrix<U>& );
|
|
77
|
+
/// Calculate the logarithm of the determinant of a symmetric matrix - returns zero if succesfull
|
|
78
|
+
template <typename U> friend int logdet( const Matrix<U>&, U& );
|
|
79
|
+
/// Invert a matrix (works for both symmetric and asymmetric matrices) - returns zero if sucesfull
|
|
80
|
+
template <typename U> friend int Invert( const Matrix<U>&, Matrix<U>& );
|
|
81
|
+
/// Do a cholesky decomposition of a matrix
|
|
82
|
+
template <typename U> friend void cholesky( const Matrix<U>&, Matrix<U>& );
|
|
83
|
+
/// Solve a system of equations using the cholesky decomposition
|
|
84
|
+
template <typename U> friend void chol_elsolve( const Matrix<U>&, const std::vector<U>&, std::vector<U>& );
|
|
85
|
+
private:
|
|
86
|
+
/// Number of elements in matrix (nrows*ncols)
|
|
87
|
+
unsigned sz;
|
|
88
|
+
/// Number of rows in matrix
|
|
89
|
+
unsigned rw;
|
|
90
|
+
/// Number of columns in matrix
|
|
91
|
+
unsigned cl;
|
|
92
|
+
/// The data in the matrix
|
|
93
|
+
std::vector<T> data;
|
|
94
|
+
template <typename Y>
|
|
95
|
+
struct openAccVectorHelper {
|
|
96
|
+
using pointer = Y*;
|
|
97
|
+
size_t sz=0;
|
|
98
|
+
pointer data=nullptr;
|
|
99
|
+
void toACCDevice() const {
|
|
100
|
+
#pragma acc enter data copyin(this[0:1],sz,data[0:sz])
|
|
101
|
+
}
|
|
102
|
+
void removeFromACCDevice() const {
|
|
103
|
+
#pragma acc exit data delete(data[0:sz],sz,this[0:1])
|
|
104
|
+
}
|
|
105
|
+
void update(std::vector<Y>&x) {
|
|
106
|
+
data = x.data();
|
|
107
|
+
sz = x.size();
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
openAccVectorHelper<T> helper{};
|
|
111
|
+
|
|
112
|
+
public:
|
|
113
|
+
explicit Matrix(const unsigned nr=0, const unsigned nc=0 ) : sz(nr*nc), rw(nr), cl(nc), data(nr*nc) {
|
|
114
|
+
helper.update(data);
|
|
115
|
+
}
|
|
116
|
+
void toACCDevice() const {
|
|
117
|
+
#pragma acc enter data copyin(this[0:1])
|
|
118
|
+
helper.toACCDevice();
|
|
119
|
+
}
|
|
120
|
+
void removeFromACCDevice() const {
|
|
121
|
+
helper.removeFromACCDevice();
|
|
122
|
+
// and delete
|
|
123
|
+
#pragma acc exit data delete( this[0:1])
|
|
124
|
+
}
|
|
125
|
+
Matrix(const Matrix<T>& t) : sz(t.sz), rw(t.rw), cl(t.cl), data(t.data) {
|
|
126
|
+
helper.update(data);
|
|
127
|
+
}
|
|
128
|
+
/// Resize the matrix
|
|
129
|
+
void resize( const unsigned nr, const unsigned nc ) {
|
|
130
|
+
rw=nr;
|
|
131
|
+
cl=nc;
|
|
132
|
+
sz=nr*nc;
|
|
133
|
+
data.resize(sz);
|
|
134
|
+
helper.update(data);
|
|
135
|
+
}
|
|
136
|
+
/// Return the number of rows
|
|
137
|
+
inline unsigned nrows() const {
|
|
138
|
+
return rw;
|
|
139
|
+
}
|
|
140
|
+
/// Return the number of columns
|
|
141
|
+
inline unsigned ncols() const {
|
|
142
|
+
return cl;
|
|
143
|
+
}
|
|
144
|
+
/// Return the contents of the matrix as a vector of length rw*cl
|
|
145
|
+
inline std::vector<T>& getVector() {
|
|
146
|
+
return data;
|
|
147
|
+
}
|
|
148
|
+
/// Set the matrix from a vector input
|
|
149
|
+
inline void setFromVector( const std::vector<T>& vecin ) {
|
|
150
|
+
plumed_assert( vecin.size()==sz );
|
|
151
|
+
for(unsigned i=0; i<sz; ++i) {
|
|
152
|
+
data[i]=vecin[i];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/// Return element i,j of the matrix
|
|
156
|
+
inline const T& operator () (const unsigned& i, const unsigned& j) const {
|
|
157
|
+
return helper.data[j+i*cl];
|
|
158
|
+
// return data[j+i*cl];
|
|
159
|
+
}
|
|
160
|
+
/// Return a referenre to element i,j of the matrix
|
|
161
|
+
inline T& operator () (const unsigned& i, const unsigned& j) {
|
|
162
|
+
return helper.data[j+i*cl];
|
|
163
|
+
// return data[j+i*cl];
|
|
164
|
+
}
|
|
165
|
+
/// Set all elements of the matrix equal to the value of v
|
|
166
|
+
Matrix<T>& operator=(const T& v) {
|
|
167
|
+
for(unsigned i=0; i<sz; ++i) {
|
|
168
|
+
data[i]=v;
|
|
169
|
+
}
|
|
170
|
+
return *this;
|
|
171
|
+
}
|
|
172
|
+
/// Set the Matrix equal to another Matrix
|
|
173
|
+
Matrix<T>& operator=(const Matrix<T>& m) {
|
|
174
|
+
sz=m.sz;
|
|
175
|
+
rw=m.rw;
|
|
176
|
+
cl=m.cl;
|
|
177
|
+
data=m.data;
|
|
178
|
+
helper.update(data);
|
|
179
|
+
return *this;
|
|
180
|
+
}
|
|
181
|
+
/// Set the Matrix equal to the value of a standard vector - used for readin
|
|
182
|
+
Matrix<T>& operator=(const std::vector<T>& v) {
|
|
183
|
+
plumed_dbg_assert( v.size()==sz );
|
|
184
|
+
for(unsigned i=0; i<sz; ++i) {
|
|
185
|
+
data[i]=v[i];
|
|
186
|
+
}
|
|
187
|
+
return *this;
|
|
188
|
+
}
|
|
189
|
+
/// Add v to all elements of the Matrix
|
|
190
|
+
Matrix<T> operator+=(const T& v) {
|
|
191
|
+
for(unsigned i=0; i<sz; ++i) {
|
|
192
|
+
data[i]+=v;
|
|
193
|
+
}
|
|
194
|
+
return *this;
|
|
195
|
+
}
|
|
196
|
+
/// Multiply all elements by v
|
|
197
|
+
Matrix<T> operator*=(const T& v) {
|
|
198
|
+
for(unsigned i=0; i<sz; ++i) {
|
|
199
|
+
data[i]*=v;
|
|
200
|
+
}
|
|
201
|
+
return *this;
|
|
202
|
+
}
|
|
203
|
+
/// Matrix addition
|
|
204
|
+
Matrix<T>& operator+=(const Matrix<T>& m) {
|
|
205
|
+
plumed_dbg_assert( m.rw==rw && m.cl==cl );
|
|
206
|
+
data+=m.data;
|
|
207
|
+
return *this;
|
|
208
|
+
}
|
|
209
|
+
/// Subtract v from all elements of the Matrix
|
|
210
|
+
Matrix<T> operator-=(const T& v) {
|
|
211
|
+
for(unsigned i=0; i<sz; ++i) {
|
|
212
|
+
data-=v;
|
|
213
|
+
}
|
|
214
|
+
return *this;
|
|
215
|
+
}
|
|
216
|
+
/// Matrix subtraction
|
|
217
|
+
Matrix<T>& operator-=(const Matrix<T>& m) {
|
|
218
|
+
plumed_dbg_assert( m.rw==rw && m.cl==cl );
|
|
219
|
+
data-=m.data;
|
|
220
|
+
return *this;
|
|
221
|
+
}
|
|
222
|
+
/// Test if the matrix is symmetric or not
|
|
223
|
+
unsigned isSymmetric() const {
|
|
224
|
+
if (rw!=cl) {
|
|
225
|
+
return 0;
|
|
226
|
+
}
|
|
227
|
+
unsigned sym=1;
|
|
228
|
+
for(unsigned i=1; i<rw; ++i)
|
|
229
|
+
for(unsigned j=0; j<i; ++j)
|
|
230
|
+
if( std::fabs(data[i+j*cl]-data[j+i*cl])>1.e-10 ) {
|
|
231
|
+
sym=0;
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
return sym;
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
/// Multiply matrix by scalar
|
|
239
|
+
template <typename T> Matrix<T> operator*(T& v, const Matrix<T>& m ) {
|
|
240
|
+
Matrix<T> new_m(m);
|
|
241
|
+
new_m*=v;
|
|
242
|
+
return new_m;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
template <typename T> void mult( const Matrix<T>& A, const Matrix<T>& B, Matrix<T>& C ) {
|
|
246
|
+
plumed_assert(A.cl==B.rw);
|
|
247
|
+
if( A.rw !=C.rw || B.cl !=C.cl ) {
|
|
248
|
+
C.resize( A.rw, B.cl );
|
|
249
|
+
}
|
|
250
|
+
C=static_cast<T>( 0 );
|
|
251
|
+
for(unsigned i=0; i<A.rw; ++i)
|
|
252
|
+
for(unsigned j=0; j<B.cl; ++j)
|
|
253
|
+
for (unsigned k=0; k<A.cl; ++k) {
|
|
254
|
+
C(i,j)+=A(i,k)*B(k,j);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
template <typename T> void mult( const Matrix<T>& A, const std::vector<T>& B, std::vector<T>& C) {
|
|
259
|
+
plumed_assert( A.cl==B.size() );
|
|
260
|
+
if( C.size()!=A.rw ) {
|
|
261
|
+
C.resize(A.rw);
|
|
262
|
+
}
|
|
263
|
+
for(unsigned i=0; i<A.rw; ++i) {
|
|
264
|
+
C[i]= static_cast<T>( 0 );
|
|
265
|
+
}
|
|
266
|
+
for(unsigned i=0; i<A.rw; ++i)
|
|
267
|
+
for(unsigned k=0; k<A.cl; ++k) {
|
|
268
|
+
C[i]+=A(i,k)*B[k] ;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
template <typename T> void mult( const std::vector<T>& A, const Matrix<T>& B, std::vector<T>& C) {
|
|
273
|
+
plumed_assert( B.rw==A.size() );
|
|
274
|
+
if( C.size()!=B.cl ) {
|
|
275
|
+
C.resize( B.cl );
|
|
276
|
+
}
|
|
277
|
+
for(unsigned i=0; i<B.cl; ++i) {
|
|
278
|
+
C[i]=static_cast<T>( 0 );
|
|
279
|
+
}
|
|
280
|
+
for(unsigned i=0; i<B.cl; ++i)
|
|
281
|
+
for(unsigned k=0; k<B.rw; ++k) {
|
|
282
|
+
C[i]+=A[k]*B(k,i);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
template <typename T> void transpose( const Matrix<T>& A, Matrix<T>& AT ) {
|
|
287
|
+
if( A.rw!=AT.cl || A.cl!=AT.rw ) {
|
|
288
|
+
AT.resize( A.cl, A.rw );
|
|
289
|
+
}
|
|
290
|
+
for(unsigned i=0; i<A.cl; ++i)
|
|
291
|
+
for(unsigned j=0; j<A.rw; ++j) {
|
|
292
|
+
AT(i,j)=A(j,i);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
template <typename T> Log& operator<<(Log& ostr, const Matrix<T>& mat) {
|
|
297
|
+
for(unsigned i=0; i<mat.sz; ++i) {
|
|
298
|
+
ostr<<mat.data[i]<<" ";
|
|
299
|
+
}
|
|
300
|
+
return ostr;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
template <typename T> void matrixOut( Log& ostr, const Matrix<T>& mat) {
|
|
304
|
+
for(unsigned i=0; i<mat.rw; ++i) {
|
|
305
|
+
for(unsigned j=0; j<mat.cl; ++j) {
|
|
306
|
+
ostr<<mat(i,j)<<" ";
|
|
307
|
+
}
|
|
308
|
+
ostr<<"\n";
|
|
309
|
+
}
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
template <typename T> int diagMat( const Matrix<T>& A, std::vector<T>& eigenvals, Matrix<T>& eigenvecs ) {
|
|
314
|
+
|
|
315
|
+
// Check matrix is square and symmetric
|
|
316
|
+
plumed_assert( A.rw==A.cl );
|
|
317
|
+
plumed_assert( A.isSymmetric()==1 );
|
|
318
|
+
std::vector<T> da(A.sz);
|
|
319
|
+
unsigned k=0;
|
|
320
|
+
std::vector<T> evals(A.cl);
|
|
321
|
+
// Transfer the matrix to the local array
|
|
322
|
+
for (unsigned i=0; i<A.cl; ++i)
|
|
323
|
+
for (unsigned j=0; j<A.rw; ++j) {
|
|
324
|
+
da[k++]=static_cast<T>( A(j,i) );
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
int n=A.cl;
|
|
328
|
+
int lwork=-1;
|
|
329
|
+
int liwork=-1;
|
|
330
|
+
int m;
|
|
331
|
+
int info=0;
|
|
332
|
+
int one=1;
|
|
333
|
+
std::vector<T> work(A.cl);
|
|
334
|
+
std::vector<int> iwork(A.cl);
|
|
335
|
+
T vl, vu, abstol=0.0;
|
|
336
|
+
std::vector<int> isup(2*A.cl);
|
|
337
|
+
std::vector<T> evecs(A.sz);
|
|
338
|
+
if constexpr (std::is_same_v<T,double>) {
|
|
339
|
+
plumed_lapack_dsyevr("V", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
340
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
341
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
342
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
343
|
+
plumed_lapack_ssyevr("V", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
344
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
345
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
346
|
+
} else {
|
|
347
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "diagMat is only compatible with float and double");
|
|
348
|
+
}
|
|
349
|
+
if (info!=0) {
|
|
350
|
+
return info;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Retrieve correct sizes for work and iwork then reallocate
|
|
354
|
+
liwork=iwork[0];
|
|
355
|
+
iwork.resize(liwork);
|
|
356
|
+
lwork=static_cast<int>( work[0] );
|
|
357
|
+
work.resize(lwork);
|
|
358
|
+
|
|
359
|
+
if constexpr (std::is_same_v<T,double>) {
|
|
360
|
+
plumed_lapack_dsyevr("V", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
361
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
362
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
363
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
364
|
+
plumed_lapack_ssyevr("V", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
365
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
366
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
367
|
+
} else {
|
|
368
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "diagMat is only compatible with float and double");
|
|
369
|
+
}
|
|
370
|
+
if (info!=0) {
|
|
371
|
+
return info;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
if( eigenvals.size()!=A.cl ) {
|
|
375
|
+
eigenvals.resize( A.cl );
|
|
376
|
+
}
|
|
377
|
+
if( eigenvecs.rw!=A.rw || eigenvecs.cl!=A.cl ) {
|
|
378
|
+
eigenvecs.resize( A.rw, A.cl );
|
|
379
|
+
}
|
|
380
|
+
k=0;
|
|
381
|
+
for(unsigned i=0; i<A.cl; ++i) {
|
|
382
|
+
eigenvals[i]=evals[i];
|
|
383
|
+
// N.B. For ease of producing projectors we store the eigenvectors
|
|
384
|
+
// ROW-WISE in the eigenvectors matrix. The first index is the
|
|
385
|
+
// eigenvector number and the second the component
|
|
386
|
+
for(unsigned j=0; j<A.rw; ++j) {
|
|
387
|
+
eigenvecs(i,j)=evecs[k++];
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// This changes eigenvectors so that the first non-null element
|
|
392
|
+
// of each of them is positive
|
|
393
|
+
// We can do it because the phase is arbitrary, and helps making
|
|
394
|
+
// the result reproducible
|
|
395
|
+
for(int i=0; i<n; ++i) {
|
|
396
|
+
int j;
|
|
397
|
+
for(j=0; j<n; j++)
|
|
398
|
+
if(eigenvecs(i,j)*eigenvecs(i,j)>1e-14) {
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
if(j<n)
|
|
402
|
+
if(eigenvecs(i,j)<0.0)
|
|
403
|
+
for(j=0; j<n; j++) {
|
|
404
|
+
eigenvecs(i,j)*=-1;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return 0;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
template <typename T> int pseudoInvert( const Matrix<T>& A, Matrix<T>& pseudoinverse ) {
|
|
411
|
+
std::vector<T> da(A.sz);
|
|
412
|
+
unsigned k=0;
|
|
413
|
+
// Transfer the matrix to the local array
|
|
414
|
+
for (unsigned i=0; i<A.cl; ++i)
|
|
415
|
+
for (unsigned j=0; j<A.rw; ++j) {
|
|
416
|
+
da[k++]=static_cast<T>( A(j,i) );
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
int nsv;
|
|
420
|
+
int info=0;
|
|
421
|
+
int nrows=A.rw, ncols=A.cl;
|
|
422
|
+
if(A.rw>A.cl) {
|
|
423
|
+
nsv=A.cl;
|
|
424
|
+
} else {
|
|
425
|
+
nsv=A.rw;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// Create some containers for stuff from single value decomposition
|
|
429
|
+
std::vector<T> S(nsv);
|
|
430
|
+
std::vector<T> U(nrows*nrows);
|
|
431
|
+
std::vector<T> VT(ncols*ncols);
|
|
432
|
+
std::vector<int> iwork(8*nsv);
|
|
433
|
+
|
|
434
|
+
// This optimizes the size of the work array used in lapack singular value decomposition
|
|
435
|
+
int lwork=-1;
|
|
436
|
+
std::vector<T> work(1);
|
|
437
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
438
|
+
plumed_lapack_dgesdd( "A", &nrows, &ncols, da.data(), &nrows, S.data(),
|
|
439
|
+
U.data(), &nrows, VT.data(), &ncols, work.data(),
|
|
440
|
+
&lwork, iwork.data(), &info );
|
|
441
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
442
|
+
plumed_lapack_sgesdd( "A", &nrows, &ncols, da.data(), &nrows, S.data(),
|
|
443
|
+
U.data(), &nrows, VT.data(), &ncols, work.data(),
|
|
444
|
+
&lwork, iwork.data(), &info );
|
|
445
|
+
} else {
|
|
446
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "pseudoInvert works only for float and double");
|
|
447
|
+
}
|
|
448
|
+
if(info!=0) {
|
|
449
|
+
return info;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Retrieve correct sizes for work and rellocate
|
|
453
|
+
lwork=(int) work[0];
|
|
454
|
+
work.resize(lwork);
|
|
455
|
+
|
|
456
|
+
// This does the singular value decomposition
|
|
457
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
458
|
+
plumed_lapack_dgesdd( "A", &nrows, &ncols, da.data(), &nrows, S.data(),
|
|
459
|
+
U.data(), &nrows, VT.data(), &ncols, work.data(),
|
|
460
|
+
&lwork, iwork.data(), &info );
|
|
461
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
462
|
+
plumed_lapack_sgesdd( "A", &nrows, &ncols, da.data(), &nrows, S.data(),
|
|
463
|
+
U.data(), &nrows, VT.data(), &ncols, work.data(),
|
|
464
|
+
&lwork, iwork.data(), &info );
|
|
465
|
+
} else {
|
|
466
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "pseudoInvert works only for float and double");
|
|
467
|
+
}
|
|
468
|
+
if(info!=0) {
|
|
469
|
+
return info;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// Compute the tolerance on the singular values ( machine epsilon * number of singular values * maximum singular value )
|
|
473
|
+
T tol;
|
|
474
|
+
tol=S[0];
|
|
475
|
+
for(int i=1; i<nsv; ++i) {
|
|
476
|
+
if( S[i]>tol ) {
|
|
477
|
+
tol=S[i];
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
tol*=nsv*epsilon;
|
|
481
|
+
|
|
482
|
+
// Get the inverses of the singlular values
|
|
483
|
+
Matrix<T> Si( ncols, nrows );
|
|
484
|
+
Si=0.0;
|
|
485
|
+
for(int i=0; i<nsv; ++i) {
|
|
486
|
+
if( S[i]>tol ) {
|
|
487
|
+
Si(i,i)=1./S[i];
|
|
488
|
+
} else {
|
|
489
|
+
Si(i,i)=0.0;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// Now extract matrices for pseudoinverse
|
|
494
|
+
Matrix<T> V( ncols, ncols ), UT( nrows, nrows ), tmp( ncols, nrows );
|
|
495
|
+
k=0;
|
|
496
|
+
for(int i=0; i<nrows; ++i) {
|
|
497
|
+
for(int j=0; j<nrows; ++j) {
|
|
498
|
+
UT(i,j)=U[k++];
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
k=0;
|
|
502
|
+
for(int i=0; i<ncols; ++i) {
|
|
503
|
+
for(int j=0; j<ncols; ++j) {
|
|
504
|
+
V(i,j)=VT[k++];
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// And do matrix algebra to construct the pseudoinverse
|
|
509
|
+
if( pseudoinverse.rw!=static_cast<unsigned>(ncols)
|
|
510
|
+
|| pseudoinverse.cl!=static_cast<unsigned>(nrows) ) {
|
|
511
|
+
pseudoinverse.resize( ncols, nrows );
|
|
512
|
+
}
|
|
513
|
+
mult( V, Si, tmp );
|
|
514
|
+
mult( tmp, UT, pseudoinverse );
|
|
515
|
+
|
|
516
|
+
return 0;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
template <typename T> int Invert( const Matrix<T>& A, Matrix<T>& inverse ) {
|
|
520
|
+
|
|
521
|
+
if( A.isSymmetric()==1 ) {
|
|
522
|
+
// GAT -- I only ever use symmetric matrices so I can invert them like this.
|
|
523
|
+
// I choose to do this as I have had problems with the more general way of doing this that
|
|
524
|
+
// is implemented below.
|
|
525
|
+
std::vector<T> eval(A.rw);
|
|
526
|
+
Matrix<T> evec(A.rw,A.cl), tevec(A.rw,A.cl);
|
|
527
|
+
int err;
|
|
528
|
+
err=diagMat( A, eval, evec );
|
|
529
|
+
if(err!=0) {
|
|
530
|
+
return err;
|
|
531
|
+
}
|
|
532
|
+
for (unsigned i=0; i<A.rw; ++i)
|
|
533
|
+
for (unsigned j=0; j<A.cl; ++j) {
|
|
534
|
+
tevec(i,j)=evec(j,i)/eval[j];
|
|
535
|
+
}
|
|
536
|
+
mult(tevec,evec,inverse);
|
|
537
|
+
} else {
|
|
538
|
+
std::vector<T> da(A.sz);
|
|
539
|
+
std::vector<int> ipiv(A.cl);
|
|
540
|
+
unsigned k=0;
|
|
541
|
+
int n=A.rw;
|
|
542
|
+
int info=0;
|
|
543
|
+
for(unsigned i=0; i<A.cl; ++i)
|
|
544
|
+
for(unsigned j=0; j<A.rw; ++j) {
|
|
545
|
+
da[k++]=static_cast<T>( A(j,i) );
|
|
546
|
+
}
|
|
547
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
548
|
+
plumed_lapack_dgetrf(&n,&n,da.data(),&n,ipiv.data(),&info);
|
|
549
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
550
|
+
plumed_lapack_sgetrf(&n,&n,da.data(),&n,ipiv.data(),&info);
|
|
551
|
+
} else {
|
|
552
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "Invert works only for float and double");
|
|
553
|
+
}
|
|
554
|
+
if(info!=0) {
|
|
555
|
+
return info;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
int lwork=-1;
|
|
559
|
+
std::vector<T> work(A.cl);
|
|
560
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
561
|
+
plumed_lapack_dgetri(&n,da.data(),&n,ipiv.data(),work.data(),&lwork,&info);
|
|
562
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
563
|
+
plumed_lapack_sgetri(&n,da.data(),&n,ipiv.data(),work.data(),&lwork,&info);
|
|
564
|
+
} else {
|
|
565
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "Invert works only for float and double");
|
|
566
|
+
}
|
|
567
|
+
if(info!=0) {
|
|
568
|
+
return info;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
lwork=static_cast<int>( work[0] );
|
|
572
|
+
work.resize(lwork);
|
|
573
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
574
|
+
plumed_lapack_dgetri(&n,da.data(),&n,ipiv.data(),work.data(),&lwork,&info);
|
|
575
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
576
|
+
plumed_lapack_sgetri(&n,da.data(),&n,ipiv.data(),work.data(),&lwork,&info);
|
|
577
|
+
} else {
|
|
578
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "Invert works only for float and double");
|
|
579
|
+
}
|
|
580
|
+
if(info!=0) {
|
|
581
|
+
return info;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
if( inverse.cl!=A.cl || inverse.rw!=A.rw ) {
|
|
585
|
+
inverse.resize(A.rw,A.cl);
|
|
586
|
+
}
|
|
587
|
+
k=0;
|
|
588
|
+
for(unsigned i=0; i<A.rw; ++i)
|
|
589
|
+
for(unsigned j=0; j<A.cl; ++j) {
|
|
590
|
+
inverse(j,i)=da[k++];
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
return 0;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
template <typename T> void cholesky( const Matrix<T>& A, Matrix<T>& B ) {
|
|
598
|
+
|
|
599
|
+
plumed_assert( A.rw==A.cl && A.isSymmetric() );
|
|
600
|
+
Matrix<T> L(A.rw,A.cl);
|
|
601
|
+
L=0.;
|
|
602
|
+
std::vector<T> D(A.rw,0.);
|
|
603
|
+
for(unsigned i=0; i<A.rw; ++i) {
|
|
604
|
+
L(i,i)=static_cast<T>( 1 );
|
|
605
|
+
for (unsigned j=0; j<i; ++j) {
|
|
606
|
+
L(i,j)=A(i,j);
|
|
607
|
+
for (unsigned k=0; k<j; ++k) {
|
|
608
|
+
L(i,j)-=L(i,k)*L(j,k)*D[k];
|
|
609
|
+
}
|
|
610
|
+
if (D[j]!=0.) {
|
|
611
|
+
L(i,j)/=D[j];
|
|
612
|
+
} else {
|
|
613
|
+
L(i,j)=static_cast<T>( 0 );
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
D[i]=A(i,i);
|
|
617
|
+
for (unsigned k=0; k<i; ++k) {
|
|
618
|
+
D[i]-=L(i,k)*L(i,k)*D[k];
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
for(unsigned i=0; i<A.rw; ++i) {
|
|
623
|
+
D[i]=(D[i]>0.?std::sqrt(D[i]):0.);
|
|
624
|
+
}
|
|
625
|
+
if( B.rw!=A.rw || B.cl!=A.cl ) {
|
|
626
|
+
B.resize( A.rw, A.cl);
|
|
627
|
+
}
|
|
628
|
+
B=0.;
|
|
629
|
+
for(unsigned i=0; i<A.rw; ++i)
|
|
630
|
+
for(unsigned j=0; j<=i; ++j) {
|
|
631
|
+
B(i,j)+=L(i,j)*D[j];
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
template <typename T> void chol_elsolve( const Matrix<T>& M, const std::vector<T>& b, std::vector<T>& y ) {
|
|
636
|
+
|
|
637
|
+
plumed_assert( M.rw==M.cl && M(0,1)==0.0 && b.size()==M.rw );
|
|
638
|
+
if( y.size()!=M.rw ) {
|
|
639
|
+
y.resize( M.rw );
|
|
640
|
+
}
|
|
641
|
+
for(unsigned i=0; i<M.rw; ++i) {
|
|
642
|
+
y[i]=b[i];
|
|
643
|
+
for(unsigned j=0; j<i; ++j) {
|
|
644
|
+
y[i]-=M(i,j)*y[j];
|
|
645
|
+
}
|
|
646
|
+
y[i]*=1.0/M(i,i);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
template <typename T> int logdet( const Matrix<T>& M, T& ldet ) {
|
|
651
|
+
// Check matrix is square and symmetric
|
|
652
|
+
plumed_assert( M.rw==M.cl || M.isSymmetric() );
|
|
653
|
+
|
|
654
|
+
std::vector<T> da(M.sz);
|
|
655
|
+
unsigned k=0;
|
|
656
|
+
std::vector<T> evals(M.cl);
|
|
657
|
+
// Transfer the matrix to the local array
|
|
658
|
+
for (unsigned i=0; i<M.rw; ++i)
|
|
659
|
+
for (unsigned j=0; j<M.cl; ++j) {
|
|
660
|
+
da[k++]=static_cast<T>( M(j,i) );
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
int n=M.cl;
|
|
664
|
+
int lwork=-1;
|
|
665
|
+
int liwork=-1;
|
|
666
|
+
int info=0;
|
|
667
|
+
int m;
|
|
668
|
+
int one=1;
|
|
669
|
+
std::vector<T> work(M.rw);
|
|
670
|
+
std::vector<int> iwork(M.rw);
|
|
671
|
+
T vl, vu, abstol=0.0;
|
|
672
|
+
std::vector<int> isup(2*M.rw);
|
|
673
|
+
std::vector<T> evecs(M.sz);
|
|
674
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
675
|
+
plumed_lapack_dsyevr("N", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
676
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
677
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
678
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
679
|
+
plumed_lapack_ssyevr("N", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
680
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
681
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
682
|
+
} else {
|
|
683
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "logdet works only for float and double");
|
|
684
|
+
}
|
|
685
|
+
if (info!=0) {
|
|
686
|
+
return info;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
// Retrieve correct sizes for work and iwork then reallocate
|
|
690
|
+
lwork=static_cast<int>( work[0] );
|
|
691
|
+
work.resize(lwork);
|
|
692
|
+
liwork=iwork[0];
|
|
693
|
+
iwork.resize(liwork);
|
|
694
|
+
if constexpr (std::is_same_v<T,double> ) {
|
|
695
|
+
plumed_lapack_dsyevr("N", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
696
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
697
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
698
|
+
} else if constexpr (std::is_same_v<T,float>) {
|
|
699
|
+
plumed_lapack_ssyevr("N", "I", "U", &n, da.data(), &n, &vl, &vu, &one, &n,
|
|
700
|
+
&abstol, &m, evals.data(), evecs.data(), &n,
|
|
701
|
+
isup.data(), work.data(), &lwork, iwork.data(), &liwork, &info);
|
|
702
|
+
} else {
|
|
703
|
+
static_assert(std::is_same_v<T,double> || std::is_same_v<T,float>, "logdet works only for float and double");
|
|
704
|
+
}
|
|
705
|
+
if (info!=0) {
|
|
706
|
+
return info;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
// Transfer the eigenvalues and eigenvectors to the output
|
|
710
|
+
ldet=0;
|
|
711
|
+
for(unsigned i=0; i<M.cl; i++) {
|
|
712
|
+
ldet+=log(evals[i]);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
return 0;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
}
|
|
721
|
+
#endif
|