pylibsparseir 0.1.0__cp311-cp311-macosx_15_0_arm64.whl → 0.6.0__cp311-cp311-macosx_15_0_arm64.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.
Potentially problematic release.
This version of pylibsparseir might be problematic. Click here for more details.
- include/eigen3/Eigen/Cholesky +45 -0
- include/eigen3/Eigen/CholmodSupport +48 -0
- include/eigen3/Eigen/Core +384 -0
- include/eigen3/Eigen/Dense +7 -0
- include/eigen3/Eigen/Eigen +2 -0
- include/eigen3/Eigen/Eigenvalues +60 -0
- include/eigen3/Eigen/Geometry +59 -0
- include/eigen3/Eigen/Householder +29 -0
- include/eigen3/Eigen/IterativeLinearSolvers +48 -0
- include/eigen3/Eigen/Jacobi +32 -0
- include/eigen3/Eigen/KLUSupport +41 -0
- include/eigen3/Eigen/LU +47 -0
- include/eigen3/Eigen/MetisSupport +35 -0
- include/eigen3/Eigen/OrderingMethods +70 -0
- include/eigen3/Eigen/PaStiXSupport +49 -0
- include/eigen3/Eigen/PardisoSupport +35 -0
- include/eigen3/Eigen/QR +50 -0
- include/eigen3/Eigen/QtAlignedMalloc +39 -0
- include/eigen3/Eigen/SPQRSupport +34 -0
- include/eigen3/Eigen/SVD +50 -0
- include/eigen3/Eigen/Sparse +34 -0
- include/eigen3/Eigen/SparseCholesky +37 -0
- include/eigen3/Eigen/SparseCore +69 -0
- include/eigen3/Eigen/SparseLU +50 -0
- include/eigen3/Eigen/SparseQR +36 -0
- include/eigen3/Eigen/StdDeque +27 -0
- include/eigen3/Eigen/StdList +26 -0
- include/eigen3/Eigen/StdVector +27 -0
- include/eigen3/Eigen/SuperLUSupport +64 -0
- include/eigen3/Eigen/UmfPackSupport +40 -0
- include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
- include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
- include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
- include/eigen3/Eigen/src/Core/Array.h +417 -0
- include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
- include/eigen3/Eigen/src/Core/Assign.h +90 -0
- include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
- include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
- include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
- include/eigen3/Eigen/src/Core/Block.h +448 -0
- include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
- include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
- include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
- include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
- include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
- include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
- include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
- include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
- include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
- include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
- include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
- include/eigen3/Eigen/src/Core/Dot.h +318 -0
- include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
- include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
- include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
- include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
- include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
- include/eigen3/Eigen/src/Core/IO.h +258 -0
- include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
- include/eigen3/Eigen/src/Core/Inverse.h +117 -0
- include/eigen3/Eigen/src/Core/Map.h +171 -0
- include/eigen3/Eigen/src/Core/MapBase.h +310 -0
- include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
- include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- include/eigen3/Eigen/src/Core/Matrix.h +565 -0
- include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
- include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
- include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
- include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
- include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
- include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
- include/eigen3/Eigen/src/Core/Product.h +191 -0
- include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
- include/eigen3/Eigen/src/Core/Random.h +218 -0
- include/eigen3/Eigen/src/Core/Redux.h +515 -0
- include/eigen3/Eigen/src/Core/Ref.h +381 -0
- include/eigen3/Eigen/src/Core/Replicate.h +142 -0
- include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
- include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
- include/eigen3/Eigen/src/Core/Reverse.h +217 -0
- include/eigen3/Eigen/src/Core/Select.h +164 -0
- include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
- include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- include/eigen3/Eigen/src/Core/Solve.h +188 -0
- include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
- include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
- include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
- include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
- include/eigen3/Eigen/src/Core/Stride.h +116 -0
- include/eigen3/Eigen/src/Core/Swap.h +68 -0
- include/eigen3/Eigen/src/Core/Transpose.h +464 -0
- include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
- include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
- include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
- include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
- include/eigen3/Eigen/src/Core/Visitor.h +381 -0
- include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
- include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
- include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
- include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
- include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
- include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
- include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
- include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
- include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
- include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
- include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
- include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
- include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
- include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
- include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
- include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
- include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
- include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
- include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
- include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
- include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
- include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
- include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
- include/eigen3/Eigen/src/Householder/Householder.h +176 -0
- include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
- include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- include/eigen3/Eigen/src/LU/Determinant.h +117 -0
- include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
- include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
- include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
- include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
- include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
- include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
- include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
- include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
- include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
- include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
- include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
- include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
- include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
- include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
- include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
- include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
- include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
- include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
- include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
- include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
- include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
- include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
- include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
- include/eigen3/Eigen/src/StlSupport/details.h +84 -0
- include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- include/eigen3/Eigen/src/misc/Image.h +82 -0
- include/eigen3/Eigen/src/misc/Kernel.h +79 -0
- include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
- include/eigen3/Eigen/src/misc/blas.h +440 -0
- include/eigen3/Eigen/src/misc/lapack.h +152 -0
- include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
- include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
- include/eigen3/signature_of_eigen3_matrix_library +1 -0
- include/eigen3/unsupported/Eigen/AdolcForward +159 -0
- include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
- include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
- include/eigen3/unsupported/Eigen/AutoDiff +46 -0
- include/eigen3/unsupported/Eigen/BVH +95 -0
- include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
- include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
- include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
- include/eigen3/unsupported/Eigen/EulerAngles +43 -0
- include/eigen3/unsupported/Eigen/FFT +419 -0
- include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
- include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
- include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
- include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
- include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
- include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
- include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
- include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
- include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
- include/eigen3/unsupported/Eigen/Polynomials +137 -0
- include/eigen3/unsupported/Eigen/Skyline +39 -0
- include/eigen3/unsupported/Eigen/SparseExtra +54 -0
- include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
- include/eigen3/unsupported/Eigen/Splines +35 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
- include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
- include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
- include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
- include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
- include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
- include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
- include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
- pylibsparseir/__init__.py +31 -0
- pylibsparseir/clean_build_artifacts.py +0 -1
- pylibsparseir/core.py +178 -62
- pylibsparseir/libsparseir.dylib +0 -0
- pylibsparseir-0.6.0.dist-info/METADATA +213 -0
- pylibsparseir-0.6.0.dist-info/RECORD +545 -0
- {pylibsparseir-0.1.0.dist-info → pylibsparseir-0.6.0.dist-info}/WHEEL +1 -1
- pylibsparseir-0.6.0.dist-info/licenses/LICENSE +21 -0
- share/eigen3/cmake/Eigen3Config.cmake +37 -0
- share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
- share/eigen3/cmake/Eigen3Targets.cmake +106 -0
- share/eigen3/cmake/UseEigen3.cmake +6 -0
- share/pkgconfig/eigen3.pc +9 -0
- pylibsparseir/libsparseir.0.4.2.dylib +0 -0
- pylibsparseir/libsparseir.0.dylib +0 -0
- pylibsparseir-0.1.0.dist-info/METADATA +0 -130
- pylibsparseir-0.1.0.dist-info/RECORD +0 -12
- pylibsparseir-0.1.0.dist-info/entry_points.txt +0 -2
- pylibsparseir-0.1.0.dist-info/top_level.txt +0 -1
|
@@ -0,0 +1,1025 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008-2015 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
#ifndef EIGEN_SUPERLUSUPPORT_H
|
|
11
|
+
#define EIGEN_SUPERLUSUPPORT_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
#if defined(SUPERLU_MAJOR_VERSION) && (SUPERLU_MAJOR_VERSION >= 5)
|
|
16
|
+
#define DECL_GSSVX(PREFIX,FLOATTYPE,KEYTYPE) \
|
|
17
|
+
extern "C" { \
|
|
18
|
+
extern void PREFIX##gssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *, \
|
|
19
|
+
char *, FLOATTYPE *, FLOATTYPE *, SuperMatrix *, SuperMatrix *, \
|
|
20
|
+
void *, int, SuperMatrix *, SuperMatrix *, \
|
|
21
|
+
FLOATTYPE *, FLOATTYPE *, FLOATTYPE *, FLOATTYPE *, \
|
|
22
|
+
GlobalLU_t *, mem_usage_t *, SuperLUStat_t *, int *); \
|
|
23
|
+
} \
|
|
24
|
+
inline float SuperLU_gssvx(superlu_options_t *options, SuperMatrix *A, \
|
|
25
|
+
int *perm_c, int *perm_r, int *etree, char *equed, \
|
|
26
|
+
FLOATTYPE *R, FLOATTYPE *C, SuperMatrix *L, \
|
|
27
|
+
SuperMatrix *U, void *work, int lwork, \
|
|
28
|
+
SuperMatrix *B, SuperMatrix *X, \
|
|
29
|
+
FLOATTYPE *recip_pivot_growth, \
|
|
30
|
+
FLOATTYPE *rcond, FLOATTYPE *ferr, FLOATTYPE *berr, \
|
|
31
|
+
SuperLUStat_t *stats, int *info, KEYTYPE) { \
|
|
32
|
+
mem_usage_t mem_usage; \
|
|
33
|
+
GlobalLU_t gLU; \
|
|
34
|
+
PREFIX##gssvx(options, A, perm_c, perm_r, etree, equed, R, C, L, \
|
|
35
|
+
U, work, lwork, B, X, recip_pivot_growth, rcond, \
|
|
36
|
+
ferr, berr, &gLU, &mem_usage, stats, info); \
|
|
37
|
+
return mem_usage.for_lu; /* bytes used by the factor storage */ \
|
|
38
|
+
}
|
|
39
|
+
#else // version < 5.0
|
|
40
|
+
#define DECL_GSSVX(PREFIX,FLOATTYPE,KEYTYPE) \
|
|
41
|
+
extern "C" { \
|
|
42
|
+
extern void PREFIX##gssvx(superlu_options_t *, SuperMatrix *, int *, int *, int *, \
|
|
43
|
+
char *, FLOATTYPE *, FLOATTYPE *, SuperMatrix *, SuperMatrix *, \
|
|
44
|
+
void *, int, SuperMatrix *, SuperMatrix *, \
|
|
45
|
+
FLOATTYPE *, FLOATTYPE *, FLOATTYPE *, FLOATTYPE *, \
|
|
46
|
+
mem_usage_t *, SuperLUStat_t *, int *); \
|
|
47
|
+
} \
|
|
48
|
+
inline float SuperLU_gssvx(superlu_options_t *options, SuperMatrix *A, \
|
|
49
|
+
int *perm_c, int *perm_r, int *etree, char *equed, \
|
|
50
|
+
FLOATTYPE *R, FLOATTYPE *C, SuperMatrix *L, \
|
|
51
|
+
SuperMatrix *U, void *work, int lwork, \
|
|
52
|
+
SuperMatrix *B, SuperMatrix *X, \
|
|
53
|
+
FLOATTYPE *recip_pivot_growth, \
|
|
54
|
+
FLOATTYPE *rcond, FLOATTYPE *ferr, FLOATTYPE *berr, \
|
|
55
|
+
SuperLUStat_t *stats, int *info, KEYTYPE) { \
|
|
56
|
+
mem_usage_t mem_usage; \
|
|
57
|
+
PREFIX##gssvx(options, A, perm_c, perm_r, etree, equed, R, C, L, \
|
|
58
|
+
U, work, lwork, B, X, recip_pivot_growth, rcond, \
|
|
59
|
+
ferr, berr, &mem_usage, stats, info); \
|
|
60
|
+
return mem_usage.for_lu; /* bytes used by the factor storage */ \
|
|
61
|
+
}
|
|
62
|
+
#endif
|
|
63
|
+
|
|
64
|
+
DECL_GSSVX(s,float,float)
|
|
65
|
+
DECL_GSSVX(c,float,std::complex<float>)
|
|
66
|
+
DECL_GSSVX(d,double,double)
|
|
67
|
+
DECL_GSSVX(z,double,std::complex<double>)
|
|
68
|
+
|
|
69
|
+
#ifdef MILU_ALPHA
|
|
70
|
+
#define EIGEN_SUPERLU_HAS_ILU
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
#ifdef EIGEN_SUPERLU_HAS_ILU
|
|
74
|
+
|
|
75
|
+
// similarly for the incomplete factorization using gsisx
|
|
76
|
+
#define DECL_GSISX(PREFIX,FLOATTYPE,KEYTYPE) \
|
|
77
|
+
extern "C" { \
|
|
78
|
+
extern void PREFIX##gsisx(superlu_options_t *, SuperMatrix *, int *, int *, int *, \
|
|
79
|
+
char *, FLOATTYPE *, FLOATTYPE *, SuperMatrix *, SuperMatrix *, \
|
|
80
|
+
void *, int, SuperMatrix *, SuperMatrix *, FLOATTYPE *, FLOATTYPE *, \
|
|
81
|
+
mem_usage_t *, SuperLUStat_t *, int *); \
|
|
82
|
+
} \
|
|
83
|
+
inline float SuperLU_gsisx(superlu_options_t *options, SuperMatrix *A, \
|
|
84
|
+
int *perm_c, int *perm_r, int *etree, char *equed, \
|
|
85
|
+
FLOATTYPE *R, FLOATTYPE *C, SuperMatrix *L, \
|
|
86
|
+
SuperMatrix *U, void *work, int lwork, \
|
|
87
|
+
SuperMatrix *B, SuperMatrix *X, \
|
|
88
|
+
FLOATTYPE *recip_pivot_growth, \
|
|
89
|
+
FLOATTYPE *rcond, \
|
|
90
|
+
SuperLUStat_t *stats, int *info, KEYTYPE) { \
|
|
91
|
+
mem_usage_t mem_usage; \
|
|
92
|
+
PREFIX##gsisx(options, A, perm_c, perm_r, etree, equed, R, C, L, \
|
|
93
|
+
U, work, lwork, B, X, recip_pivot_growth, rcond, \
|
|
94
|
+
&mem_usage, stats, info); \
|
|
95
|
+
return mem_usage.for_lu; /* bytes used by the factor storage */ \
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
DECL_GSISX(s,float,float)
|
|
99
|
+
DECL_GSISX(c,float,std::complex<float>)
|
|
100
|
+
DECL_GSISX(d,double,double)
|
|
101
|
+
DECL_GSISX(z,double,std::complex<double>)
|
|
102
|
+
|
|
103
|
+
#endif
|
|
104
|
+
|
|
105
|
+
template<typename MatrixType>
|
|
106
|
+
struct SluMatrixMapHelper;
|
|
107
|
+
|
|
108
|
+
/** \internal
|
|
109
|
+
*
|
|
110
|
+
* A wrapper class for SuperLU matrices. It supports only compressed sparse matrices
|
|
111
|
+
* and dense matrices. Supernodal and other fancy format are not supported by this wrapper.
|
|
112
|
+
*
|
|
113
|
+
* This wrapper class mainly aims to avoids the need of dynamic allocation of the storage structure.
|
|
114
|
+
*/
|
|
115
|
+
struct SluMatrix : SuperMatrix
|
|
116
|
+
{
|
|
117
|
+
SluMatrix()
|
|
118
|
+
{
|
|
119
|
+
Store = &storage;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
SluMatrix(const SluMatrix& other)
|
|
123
|
+
: SuperMatrix(other)
|
|
124
|
+
{
|
|
125
|
+
Store = &storage;
|
|
126
|
+
storage = other.storage;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
SluMatrix& operator=(const SluMatrix& other)
|
|
130
|
+
{
|
|
131
|
+
SuperMatrix::operator=(static_cast<const SuperMatrix&>(other));
|
|
132
|
+
Store = &storage;
|
|
133
|
+
storage = other.storage;
|
|
134
|
+
return *this;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
struct
|
|
138
|
+
{
|
|
139
|
+
union {int nnz;int lda;};
|
|
140
|
+
void *values;
|
|
141
|
+
int *innerInd;
|
|
142
|
+
int *outerInd;
|
|
143
|
+
} storage;
|
|
144
|
+
|
|
145
|
+
void setStorageType(Stype_t t)
|
|
146
|
+
{
|
|
147
|
+
Stype = t;
|
|
148
|
+
if (t==SLU_NC || t==SLU_NR || t==SLU_DN)
|
|
149
|
+
Store = &storage;
|
|
150
|
+
else
|
|
151
|
+
{
|
|
152
|
+
eigen_assert(false && "storage type not supported");
|
|
153
|
+
Store = 0;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
template<typename Scalar>
|
|
158
|
+
void setScalarType()
|
|
159
|
+
{
|
|
160
|
+
if (internal::is_same<Scalar,float>::value)
|
|
161
|
+
Dtype = SLU_S;
|
|
162
|
+
else if (internal::is_same<Scalar,double>::value)
|
|
163
|
+
Dtype = SLU_D;
|
|
164
|
+
else if (internal::is_same<Scalar,std::complex<float> >::value)
|
|
165
|
+
Dtype = SLU_C;
|
|
166
|
+
else if (internal::is_same<Scalar,std::complex<double> >::value)
|
|
167
|
+
Dtype = SLU_Z;
|
|
168
|
+
else
|
|
169
|
+
{
|
|
170
|
+
eigen_assert(false && "Scalar type not supported by SuperLU");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
template<typename MatrixType>
|
|
175
|
+
static SluMatrix Map(MatrixBase<MatrixType>& _mat)
|
|
176
|
+
{
|
|
177
|
+
MatrixType& mat(_mat.derived());
|
|
178
|
+
eigen_assert( ((MatrixType::Flags&RowMajorBit)!=RowMajorBit) && "row-major dense matrices are not supported by SuperLU");
|
|
179
|
+
SluMatrix res;
|
|
180
|
+
res.setStorageType(SLU_DN);
|
|
181
|
+
res.setScalarType<typename MatrixType::Scalar>();
|
|
182
|
+
res.Mtype = SLU_GE;
|
|
183
|
+
|
|
184
|
+
res.nrow = internal::convert_index<int>(mat.rows());
|
|
185
|
+
res.ncol = internal::convert_index<int>(mat.cols());
|
|
186
|
+
|
|
187
|
+
res.storage.lda = internal::convert_index<int>(MatrixType::IsVectorAtCompileTime ? mat.size() : mat.outerStride());
|
|
188
|
+
res.storage.values = (void*)(mat.data());
|
|
189
|
+
return res;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
template<typename MatrixType>
|
|
193
|
+
static SluMatrix Map(SparseMatrixBase<MatrixType>& a_mat)
|
|
194
|
+
{
|
|
195
|
+
MatrixType &mat(a_mat.derived());
|
|
196
|
+
SluMatrix res;
|
|
197
|
+
if ((MatrixType::Flags&RowMajorBit)==RowMajorBit)
|
|
198
|
+
{
|
|
199
|
+
res.setStorageType(SLU_NR);
|
|
200
|
+
res.nrow = internal::convert_index<int>(mat.cols());
|
|
201
|
+
res.ncol = internal::convert_index<int>(mat.rows());
|
|
202
|
+
}
|
|
203
|
+
else
|
|
204
|
+
{
|
|
205
|
+
res.setStorageType(SLU_NC);
|
|
206
|
+
res.nrow = internal::convert_index<int>(mat.rows());
|
|
207
|
+
res.ncol = internal::convert_index<int>(mat.cols());
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
res.Mtype = SLU_GE;
|
|
211
|
+
|
|
212
|
+
res.storage.nnz = internal::convert_index<int>(mat.nonZeros());
|
|
213
|
+
res.storage.values = mat.valuePtr();
|
|
214
|
+
res.storage.innerInd = mat.innerIndexPtr();
|
|
215
|
+
res.storage.outerInd = mat.outerIndexPtr();
|
|
216
|
+
|
|
217
|
+
res.setScalarType<typename MatrixType::Scalar>();
|
|
218
|
+
|
|
219
|
+
// FIXME the following is not very accurate
|
|
220
|
+
if (int(MatrixType::Flags) & int(Upper))
|
|
221
|
+
res.Mtype = SLU_TRU;
|
|
222
|
+
if (int(MatrixType::Flags) & int(Lower))
|
|
223
|
+
res.Mtype = SLU_TRL;
|
|
224
|
+
|
|
225
|
+
eigen_assert(((int(MatrixType::Flags) & int(SelfAdjoint))==0) && "SelfAdjoint matrix shape not supported by SuperLU");
|
|
226
|
+
|
|
227
|
+
return res;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
template<typename Scalar, int Rows, int Cols, int Options, int MRows, int MCols>
|
|
232
|
+
struct SluMatrixMapHelper<Matrix<Scalar,Rows,Cols,Options,MRows,MCols> >
|
|
233
|
+
{
|
|
234
|
+
typedef Matrix<Scalar,Rows,Cols,Options,MRows,MCols> MatrixType;
|
|
235
|
+
static void run(MatrixType& mat, SluMatrix& res)
|
|
236
|
+
{
|
|
237
|
+
eigen_assert( ((Options&RowMajor)!=RowMajor) && "row-major dense matrices is not supported by SuperLU");
|
|
238
|
+
res.setStorageType(SLU_DN);
|
|
239
|
+
res.setScalarType<Scalar>();
|
|
240
|
+
res.Mtype = SLU_GE;
|
|
241
|
+
|
|
242
|
+
res.nrow = mat.rows();
|
|
243
|
+
res.ncol = mat.cols();
|
|
244
|
+
|
|
245
|
+
res.storage.lda = mat.outerStride();
|
|
246
|
+
res.storage.values = mat.data();
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
template<typename Derived>
|
|
251
|
+
struct SluMatrixMapHelper<SparseMatrixBase<Derived> >
|
|
252
|
+
{
|
|
253
|
+
typedef Derived MatrixType;
|
|
254
|
+
static void run(MatrixType& mat, SluMatrix& res)
|
|
255
|
+
{
|
|
256
|
+
if ((MatrixType::Flags&RowMajorBit)==RowMajorBit)
|
|
257
|
+
{
|
|
258
|
+
res.setStorageType(SLU_NR);
|
|
259
|
+
res.nrow = mat.cols();
|
|
260
|
+
res.ncol = mat.rows();
|
|
261
|
+
}
|
|
262
|
+
else
|
|
263
|
+
{
|
|
264
|
+
res.setStorageType(SLU_NC);
|
|
265
|
+
res.nrow = mat.rows();
|
|
266
|
+
res.ncol = mat.cols();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
res.Mtype = SLU_GE;
|
|
270
|
+
|
|
271
|
+
res.storage.nnz = mat.nonZeros();
|
|
272
|
+
res.storage.values = mat.valuePtr();
|
|
273
|
+
res.storage.innerInd = mat.innerIndexPtr();
|
|
274
|
+
res.storage.outerInd = mat.outerIndexPtr();
|
|
275
|
+
|
|
276
|
+
res.setScalarType<typename MatrixType::Scalar>();
|
|
277
|
+
|
|
278
|
+
// FIXME the following is not very accurate
|
|
279
|
+
if (MatrixType::Flags & Upper)
|
|
280
|
+
res.Mtype = SLU_TRU;
|
|
281
|
+
if (MatrixType::Flags & Lower)
|
|
282
|
+
res.Mtype = SLU_TRL;
|
|
283
|
+
|
|
284
|
+
eigen_assert(((MatrixType::Flags & SelfAdjoint)==0) && "SelfAdjoint matrix shape not supported by SuperLU");
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
namespace internal {
|
|
289
|
+
|
|
290
|
+
template<typename MatrixType>
|
|
291
|
+
SluMatrix asSluMatrix(MatrixType& mat)
|
|
292
|
+
{
|
|
293
|
+
return SluMatrix::Map(mat);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/** View a Super LU matrix as an Eigen expression */
|
|
297
|
+
template<typename Scalar, int Flags, typename Index>
|
|
298
|
+
MappedSparseMatrix<Scalar,Flags,Index> map_superlu(SluMatrix& sluMat)
|
|
299
|
+
{
|
|
300
|
+
eigen_assert(((Flags&RowMajor)==RowMajor && sluMat.Stype == SLU_NR)
|
|
301
|
+
|| ((Flags&ColMajor)==ColMajor && sluMat.Stype == SLU_NC));
|
|
302
|
+
|
|
303
|
+
Index outerSize = (Flags&RowMajor)==RowMajor ? sluMat.ncol : sluMat.nrow;
|
|
304
|
+
|
|
305
|
+
return MappedSparseMatrix<Scalar,Flags,Index>(
|
|
306
|
+
sluMat.nrow, sluMat.ncol, sluMat.storage.outerInd[outerSize],
|
|
307
|
+
sluMat.storage.outerInd, sluMat.storage.innerInd, reinterpret_cast<Scalar*>(sluMat.storage.values) );
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
} // end namespace internal
|
|
311
|
+
|
|
312
|
+
/** \ingroup SuperLUSupport_Module
|
|
313
|
+
* \class SuperLUBase
|
|
314
|
+
* \brief The base class for the direct and incomplete LU factorization of SuperLU
|
|
315
|
+
*/
|
|
316
|
+
template<typename _MatrixType, typename Derived>
|
|
317
|
+
class SuperLUBase : public SparseSolverBase<Derived>
|
|
318
|
+
{
|
|
319
|
+
protected:
|
|
320
|
+
typedef SparseSolverBase<Derived> Base;
|
|
321
|
+
using Base::derived;
|
|
322
|
+
using Base::m_isInitialized;
|
|
323
|
+
public:
|
|
324
|
+
typedef _MatrixType MatrixType;
|
|
325
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
326
|
+
typedef typename MatrixType::RealScalar RealScalar;
|
|
327
|
+
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
328
|
+
typedef Matrix<Scalar,Dynamic,1> Vector;
|
|
329
|
+
typedef Matrix<int, 1, MatrixType::ColsAtCompileTime> IntRowVectorType;
|
|
330
|
+
typedef Matrix<int, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
|
|
331
|
+
typedef Map<PermutationMatrix<Dynamic,Dynamic,int> > PermutationMap;
|
|
332
|
+
typedef SparseMatrix<Scalar> LUMatrixType;
|
|
333
|
+
enum {
|
|
334
|
+
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
335
|
+
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
public:
|
|
339
|
+
|
|
340
|
+
SuperLUBase() {}
|
|
341
|
+
|
|
342
|
+
~SuperLUBase()
|
|
343
|
+
{
|
|
344
|
+
clearFactors();
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
inline Index rows() const { return m_matrix.rows(); }
|
|
348
|
+
inline Index cols() const { return m_matrix.cols(); }
|
|
349
|
+
|
|
350
|
+
/** \returns a reference to the Super LU option object to configure the Super LU algorithms. */
|
|
351
|
+
inline superlu_options_t& options() { return m_sluOptions; }
|
|
352
|
+
|
|
353
|
+
/** \brief Reports whether previous computation was successful.
|
|
354
|
+
*
|
|
355
|
+
* \returns \c Success if computation was successful,
|
|
356
|
+
* \c NumericalIssue if the matrix.appears to be negative.
|
|
357
|
+
*/
|
|
358
|
+
ComputationInfo info() const
|
|
359
|
+
{
|
|
360
|
+
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
361
|
+
return m_info;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** Computes the sparse Cholesky decomposition of \a matrix */
|
|
365
|
+
void compute(const MatrixType& matrix)
|
|
366
|
+
{
|
|
367
|
+
derived().analyzePattern(matrix);
|
|
368
|
+
derived().factorize(matrix);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Performs a symbolic decomposition on the sparcity of \a matrix.
|
|
372
|
+
*
|
|
373
|
+
* This function is particularly useful when solving for several problems having the same structure.
|
|
374
|
+
*
|
|
375
|
+
* \sa factorize()
|
|
376
|
+
*/
|
|
377
|
+
void analyzePattern(const MatrixType& /*matrix*/)
|
|
378
|
+
{
|
|
379
|
+
m_isInitialized = true;
|
|
380
|
+
m_info = Success;
|
|
381
|
+
m_analysisIsOk = true;
|
|
382
|
+
m_factorizationIsOk = false;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
template<typename Stream>
|
|
386
|
+
void dumpMemory(Stream& /*s*/)
|
|
387
|
+
{}
|
|
388
|
+
|
|
389
|
+
protected:
|
|
390
|
+
|
|
391
|
+
void initFactorization(const MatrixType& a)
|
|
392
|
+
{
|
|
393
|
+
set_default_options(&this->m_sluOptions);
|
|
394
|
+
|
|
395
|
+
const Index size = a.rows();
|
|
396
|
+
m_matrix = a;
|
|
397
|
+
|
|
398
|
+
m_sluA = internal::asSluMatrix(m_matrix);
|
|
399
|
+
clearFactors();
|
|
400
|
+
|
|
401
|
+
m_p.resize(size);
|
|
402
|
+
m_q.resize(size);
|
|
403
|
+
m_sluRscale.resize(size);
|
|
404
|
+
m_sluCscale.resize(size);
|
|
405
|
+
m_sluEtree.resize(size);
|
|
406
|
+
|
|
407
|
+
// set empty B and X
|
|
408
|
+
m_sluB.setStorageType(SLU_DN);
|
|
409
|
+
m_sluB.setScalarType<Scalar>();
|
|
410
|
+
m_sluB.Mtype = SLU_GE;
|
|
411
|
+
m_sluB.storage.values = 0;
|
|
412
|
+
m_sluB.nrow = 0;
|
|
413
|
+
m_sluB.ncol = 0;
|
|
414
|
+
m_sluB.storage.lda = internal::convert_index<int>(size);
|
|
415
|
+
m_sluX = m_sluB;
|
|
416
|
+
|
|
417
|
+
m_extractedDataAreDirty = true;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
void init()
|
|
421
|
+
{
|
|
422
|
+
m_info = InvalidInput;
|
|
423
|
+
m_isInitialized = false;
|
|
424
|
+
m_sluL.Store = 0;
|
|
425
|
+
m_sluU.Store = 0;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
void extractData() const;
|
|
429
|
+
|
|
430
|
+
void clearFactors()
|
|
431
|
+
{
|
|
432
|
+
if(m_sluL.Store)
|
|
433
|
+
Destroy_SuperNode_Matrix(&m_sluL);
|
|
434
|
+
if(m_sluU.Store)
|
|
435
|
+
Destroy_CompCol_Matrix(&m_sluU);
|
|
436
|
+
|
|
437
|
+
m_sluL.Store = 0;
|
|
438
|
+
m_sluU.Store = 0;
|
|
439
|
+
|
|
440
|
+
memset(&m_sluL,0,sizeof m_sluL);
|
|
441
|
+
memset(&m_sluU,0,sizeof m_sluU);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// cached data to reduce reallocation, etc.
|
|
445
|
+
mutable LUMatrixType m_l;
|
|
446
|
+
mutable LUMatrixType m_u;
|
|
447
|
+
mutable IntColVectorType m_p;
|
|
448
|
+
mutable IntRowVectorType m_q;
|
|
449
|
+
|
|
450
|
+
mutable LUMatrixType m_matrix; // copy of the factorized matrix
|
|
451
|
+
mutable SluMatrix m_sluA;
|
|
452
|
+
mutable SuperMatrix m_sluL, m_sluU;
|
|
453
|
+
mutable SluMatrix m_sluB, m_sluX;
|
|
454
|
+
mutable SuperLUStat_t m_sluStat;
|
|
455
|
+
mutable superlu_options_t m_sluOptions;
|
|
456
|
+
mutable std::vector<int> m_sluEtree;
|
|
457
|
+
mutable Matrix<RealScalar,Dynamic,1> m_sluRscale, m_sluCscale;
|
|
458
|
+
mutable Matrix<RealScalar,Dynamic,1> m_sluFerr, m_sluBerr;
|
|
459
|
+
mutable char m_sluEqued;
|
|
460
|
+
|
|
461
|
+
mutable ComputationInfo m_info;
|
|
462
|
+
int m_factorizationIsOk;
|
|
463
|
+
int m_analysisIsOk;
|
|
464
|
+
mutable bool m_extractedDataAreDirty;
|
|
465
|
+
|
|
466
|
+
private:
|
|
467
|
+
SuperLUBase(SuperLUBase& ) { }
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
/** \ingroup SuperLUSupport_Module
|
|
472
|
+
* \class SuperLU
|
|
473
|
+
* \brief A sparse direct LU factorization and solver based on the SuperLU library
|
|
474
|
+
*
|
|
475
|
+
* This class allows to solve for A.X = B sparse linear problems via a direct LU factorization
|
|
476
|
+
* using the SuperLU library. The sparse matrix A must be squared and invertible. The vectors or matrices
|
|
477
|
+
* X and B can be either dense or sparse.
|
|
478
|
+
*
|
|
479
|
+
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
480
|
+
*
|
|
481
|
+
* \warning This class is only for the 4.x versions of SuperLU. The 3.x and 5.x versions are not supported.
|
|
482
|
+
*
|
|
483
|
+
* \implsparsesolverconcept
|
|
484
|
+
*
|
|
485
|
+
* \sa \ref TutorialSparseSolverConcept, class SparseLU
|
|
486
|
+
*/
|
|
487
|
+
template<typename _MatrixType>
|
|
488
|
+
class SuperLU : public SuperLUBase<_MatrixType,SuperLU<_MatrixType> >
|
|
489
|
+
{
|
|
490
|
+
public:
|
|
491
|
+
typedef SuperLUBase<_MatrixType,SuperLU> Base;
|
|
492
|
+
typedef _MatrixType MatrixType;
|
|
493
|
+
typedef typename Base::Scalar Scalar;
|
|
494
|
+
typedef typename Base::RealScalar RealScalar;
|
|
495
|
+
typedef typename Base::StorageIndex StorageIndex;
|
|
496
|
+
typedef typename Base::IntRowVectorType IntRowVectorType;
|
|
497
|
+
typedef typename Base::IntColVectorType IntColVectorType;
|
|
498
|
+
typedef typename Base::PermutationMap PermutationMap;
|
|
499
|
+
typedef typename Base::LUMatrixType LUMatrixType;
|
|
500
|
+
typedef TriangularView<LUMatrixType, Lower|UnitDiag> LMatrixType;
|
|
501
|
+
typedef TriangularView<LUMatrixType, Upper> UMatrixType;
|
|
502
|
+
|
|
503
|
+
public:
|
|
504
|
+
using Base::_solve_impl;
|
|
505
|
+
|
|
506
|
+
SuperLU() : Base() { init(); }
|
|
507
|
+
|
|
508
|
+
explicit SuperLU(const MatrixType& matrix) : Base()
|
|
509
|
+
{
|
|
510
|
+
init();
|
|
511
|
+
Base::compute(matrix);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
~SuperLU()
|
|
515
|
+
{
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/** Performs a symbolic decomposition on the sparcity of \a matrix.
|
|
519
|
+
*
|
|
520
|
+
* This function is particularly useful when solving for several problems having the same structure.
|
|
521
|
+
*
|
|
522
|
+
* \sa factorize()
|
|
523
|
+
*/
|
|
524
|
+
void analyzePattern(const MatrixType& matrix)
|
|
525
|
+
{
|
|
526
|
+
m_info = InvalidInput;
|
|
527
|
+
m_isInitialized = false;
|
|
528
|
+
Base::analyzePattern(matrix);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/** Performs a numeric decomposition of \a matrix
|
|
532
|
+
*
|
|
533
|
+
* The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
|
|
534
|
+
*
|
|
535
|
+
* \sa analyzePattern()
|
|
536
|
+
*/
|
|
537
|
+
void factorize(const MatrixType& matrix);
|
|
538
|
+
|
|
539
|
+
/** \internal */
|
|
540
|
+
template<typename Rhs,typename Dest>
|
|
541
|
+
void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const;
|
|
542
|
+
|
|
543
|
+
inline const LMatrixType& matrixL() const
|
|
544
|
+
{
|
|
545
|
+
if (m_extractedDataAreDirty) this->extractData();
|
|
546
|
+
return m_l;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
inline const UMatrixType& matrixU() const
|
|
550
|
+
{
|
|
551
|
+
if (m_extractedDataAreDirty) this->extractData();
|
|
552
|
+
return m_u;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
inline const IntColVectorType& permutationP() const
|
|
556
|
+
{
|
|
557
|
+
if (m_extractedDataAreDirty) this->extractData();
|
|
558
|
+
return m_p;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
inline const IntRowVectorType& permutationQ() const
|
|
562
|
+
{
|
|
563
|
+
if (m_extractedDataAreDirty) this->extractData();
|
|
564
|
+
return m_q;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
Scalar determinant() const;
|
|
568
|
+
|
|
569
|
+
protected:
|
|
570
|
+
|
|
571
|
+
using Base::m_matrix;
|
|
572
|
+
using Base::m_sluOptions;
|
|
573
|
+
using Base::m_sluA;
|
|
574
|
+
using Base::m_sluB;
|
|
575
|
+
using Base::m_sluX;
|
|
576
|
+
using Base::m_p;
|
|
577
|
+
using Base::m_q;
|
|
578
|
+
using Base::m_sluEtree;
|
|
579
|
+
using Base::m_sluEqued;
|
|
580
|
+
using Base::m_sluRscale;
|
|
581
|
+
using Base::m_sluCscale;
|
|
582
|
+
using Base::m_sluL;
|
|
583
|
+
using Base::m_sluU;
|
|
584
|
+
using Base::m_sluStat;
|
|
585
|
+
using Base::m_sluFerr;
|
|
586
|
+
using Base::m_sluBerr;
|
|
587
|
+
using Base::m_l;
|
|
588
|
+
using Base::m_u;
|
|
589
|
+
|
|
590
|
+
using Base::m_analysisIsOk;
|
|
591
|
+
using Base::m_factorizationIsOk;
|
|
592
|
+
using Base::m_extractedDataAreDirty;
|
|
593
|
+
using Base::m_isInitialized;
|
|
594
|
+
using Base::m_info;
|
|
595
|
+
|
|
596
|
+
void init()
|
|
597
|
+
{
|
|
598
|
+
Base::init();
|
|
599
|
+
|
|
600
|
+
set_default_options(&this->m_sluOptions);
|
|
601
|
+
m_sluOptions.PrintStat = NO;
|
|
602
|
+
m_sluOptions.ConditionNumber = NO;
|
|
603
|
+
m_sluOptions.Trans = NOTRANS;
|
|
604
|
+
m_sluOptions.ColPerm = COLAMD;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
private:
|
|
609
|
+
SuperLU(SuperLU& ) { }
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
template<typename MatrixType>
|
|
613
|
+
void SuperLU<MatrixType>::factorize(const MatrixType& a)
|
|
614
|
+
{
|
|
615
|
+
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
616
|
+
if(!m_analysisIsOk)
|
|
617
|
+
{
|
|
618
|
+
m_info = InvalidInput;
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
this->initFactorization(a);
|
|
623
|
+
|
|
624
|
+
m_sluOptions.ColPerm = COLAMD;
|
|
625
|
+
int info = 0;
|
|
626
|
+
RealScalar recip_pivot_growth, rcond;
|
|
627
|
+
RealScalar ferr, berr;
|
|
628
|
+
|
|
629
|
+
StatInit(&m_sluStat);
|
|
630
|
+
SuperLU_gssvx(&m_sluOptions, &m_sluA, m_q.data(), m_p.data(), &m_sluEtree[0],
|
|
631
|
+
&m_sluEqued, &m_sluRscale[0], &m_sluCscale[0],
|
|
632
|
+
&m_sluL, &m_sluU,
|
|
633
|
+
NULL, 0,
|
|
634
|
+
&m_sluB, &m_sluX,
|
|
635
|
+
&recip_pivot_growth, &rcond,
|
|
636
|
+
&ferr, &berr,
|
|
637
|
+
&m_sluStat, &info, Scalar());
|
|
638
|
+
StatFree(&m_sluStat);
|
|
639
|
+
|
|
640
|
+
m_extractedDataAreDirty = true;
|
|
641
|
+
|
|
642
|
+
// FIXME how to better check for errors ???
|
|
643
|
+
m_info = info == 0 ? Success : NumericalIssue;
|
|
644
|
+
m_factorizationIsOk = true;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
template<typename MatrixType>
|
|
648
|
+
template<typename Rhs,typename Dest>
|
|
649
|
+
void SuperLU<MatrixType>::_solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest>& x) const
|
|
650
|
+
{
|
|
651
|
+
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or analyzePattern()/factorize()");
|
|
652
|
+
|
|
653
|
+
const Index rhsCols = b.cols();
|
|
654
|
+
eigen_assert(m_matrix.rows()==b.rows());
|
|
655
|
+
|
|
656
|
+
m_sluOptions.Trans = NOTRANS;
|
|
657
|
+
m_sluOptions.Fact = FACTORED;
|
|
658
|
+
m_sluOptions.IterRefine = NOREFINE;
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
m_sluFerr.resize(rhsCols);
|
|
662
|
+
m_sluBerr.resize(rhsCols);
|
|
663
|
+
|
|
664
|
+
Ref<const Matrix<typename Rhs::Scalar,Dynamic,Dynamic,ColMajor> > b_ref(b);
|
|
665
|
+
Ref<const Matrix<typename Dest::Scalar,Dynamic,Dynamic,ColMajor> > x_ref(x);
|
|
666
|
+
|
|
667
|
+
m_sluB = SluMatrix::Map(b_ref.const_cast_derived());
|
|
668
|
+
m_sluX = SluMatrix::Map(x_ref.const_cast_derived());
|
|
669
|
+
|
|
670
|
+
typename Rhs::PlainObject b_cpy;
|
|
671
|
+
if(m_sluEqued!='N')
|
|
672
|
+
{
|
|
673
|
+
b_cpy = b;
|
|
674
|
+
m_sluB = SluMatrix::Map(b_cpy.const_cast_derived());
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
StatInit(&m_sluStat);
|
|
678
|
+
int info = 0;
|
|
679
|
+
RealScalar recip_pivot_growth, rcond;
|
|
680
|
+
SuperLU_gssvx(&m_sluOptions, &m_sluA,
|
|
681
|
+
m_q.data(), m_p.data(),
|
|
682
|
+
&m_sluEtree[0], &m_sluEqued,
|
|
683
|
+
&m_sluRscale[0], &m_sluCscale[0],
|
|
684
|
+
&m_sluL, &m_sluU,
|
|
685
|
+
NULL, 0,
|
|
686
|
+
&m_sluB, &m_sluX,
|
|
687
|
+
&recip_pivot_growth, &rcond,
|
|
688
|
+
&m_sluFerr[0], &m_sluBerr[0],
|
|
689
|
+
&m_sluStat, &info, Scalar());
|
|
690
|
+
StatFree(&m_sluStat);
|
|
691
|
+
|
|
692
|
+
if(x.derived().data() != x_ref.data())
|
|
693
|
+
x = x_ref;
|
|
694
|
+
|
|
695
|
+
m_info = info==0 ? Success : NumericalIssue;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// the code of this extractData() function has been adapted from the SuperLU's Matlab support code,
|
|
699
|
+
//
|
|
700
|
+
// Copyright (c) 1994 by Xerox Corporation. All rights reserved.
|
|
701
|
+
//
|
|
702
|
+
// THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
|
|
703
|
+
// EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
|
|
704
|
+
//
|
|
705
|
+
template<typename MatrixType, typename Derived>
|
|
706
|
+
void SuperLUBase<MatrixType,Derived>::extractData() const
|
|
707
|
+
{
|
|
708
|
+
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for extracting factors, you must first call either compute() or analyzePattern()/factorize()");
|
|
709
|
+
if (m_extractedDataAreDirty)
|
|
710
|
+
{
|
|
711
|
+
int upper;
|
|
712
|
+
int fsupc, istart, nsupr;
|
|
713
|
+
int lastl = 0, lastu = 0;
|
|
714
|
+
SCformat *Lstore = static_cast<SCformat*>(m_sluL.Store);
|
|
715
|
+
NCformat *Ustore = static_cast<NCformat*>(m_sluU.Store);
|
|
716
|
+
Scalar *SNptr;
|
|
717
|
+
|
|
718
|
+
const Index size = m_matrix.rows();
|
|
719
|
+
m_l.resize(size,size);
|
|
720
|
+
m_l.resizeNonZeros(Lstore->nnz);
|
|
721
|
+
m_u.resize(size,size);
|
|
722
|
+
m_u.resizeNonZeros(Ustore->nnz);
|
|
723
|
+
|
|
724
|
+
int* Lcol = m_l.outerIndexPtr();
|
|
725
|
+
int* Lrow = m_l.innerIndexPtr();
|
|
726
|
+
Scalar* Lval = m_l.valuePtr();
|
|
727
|
+
|
|
728
|
+
int* Ucol = m_u.outerIndexPtr();
|
|
729
|
+
int* Urow = m_u.innerIndexPtr();
|
|
730
|
+
Scalar* Uval = m_u.valuePtr();
|
|
731
|
+
|
|
732
|
+
Ucol[0] = 0;
|
|
733
|
+
Ucol[0] = 0;
|
|
734
|
+
|
|
735
|
+
/* for each supernode */
|
|
736
|
+
for (int k = 0; k <= Lstore->nsuper; ++k)
|
|
737
|
+
{
|
|
738
|
+
fsupc = L_FST_SUPC(k);
|
|
739
|
+
istart = L_SUB_START(fsupc);
|
|
740
|
+
nsupr = L_SUB_START(fsupc+1) - istart;
|
|
741
|
+
upper = 1;
|
|
742
|
+
|
|
743
|
+
/* for each column in the supernode */
|
|
744
|
+
for (int j = fsupc; j < L_FST_SUPC(k+1); ++j)
|
|
745
|
+
{
|
|
746
|
+
SNptr = &((Scalar*)Lstore->nzval)[L_NZ_START(j)];
|
|
747
|
+
|
|
748
|
+
/* Extract U */
|
|
749
|
+
for (int i = U_NZ_START(j); i < U_NZ_START(j+1); ++i)
|
|
750
|
+
{
|
|
751
|
+
Uval[lastu] = ((Scalar*)Ustore->nzval)[i];
|
|
752
|
+
/* Matlab doesn't like explicit zero. */
|
|
753
|
+
if (Uval[lastu] != 0.0)
|
|
754
|
+
Urow[lastu++] = U_SUB(i);
|
|
755
|
+
}
|
|
756
|
+
for (int i = 0; i < upper; ++i)
|
|
757
|
+
{
|
|
758
|
+
/* upper triangle in the supernode */
|
|
759
|
+
Uval[lastu] = SNptr[i];
|
|
760
|
+
/* Matlab doesn't like explicit zero. */
|
|
761
|
+
if (Uval[lastu] != 0.0)
|
|
762
|
+
Urow[lastu++] = L_SUB(istart+i);
|
|
763
|
+
}
|
|
764
|
+
Ucol[j+1] = lastu;
|
|
765
|
+
|
|
766
|
+
/* Extract L */
|
|
767
|
+
Lval[lastl] = 1.0; /* unit diagonal */
|
|
768
|
+
Lrow[lastl++] = L_SUB(istart + upper - 1);
|
|
769
|
+
for (int i = upper; i < nsupr; ++i)
|
|
770
|
+
{
|
|
771
|
+
Lval[lastl] = SNptr[i];
|
|
772
|
+
/* Matlab doesn't like explicit zero. */
|
|
773
|
+
if (Lval[lastl] != 0.0)
|
|
774
|
+
Lrow[lastl++] = L_SUB(istart+i);
|
|
775
|
+
}
|
|
776
|
+
Lcol[j+1] = lastl;
|
|
777
|
+
|
|
778
|
+
++upper;
|
|
779
|
+
} /* for j ... */
|
|
780
|
+
|
|
781
|
+
} /* for k ... */
|
|
782
|
+
|
|
783
|
+
// squeeze the matrices :
|
|
784
|
+
m_l.resizeNonZeros(lastl);
|
|
785
|
+
m_u.resizeNonZeros(lastu);
|
|
786
|
+
|
|
787
|
+
m_extractedDataAreDirty = false;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
template<typename MatrixType>
|
|
792
|
+
typename SuperLU<MatrixType>::Scalar SuperLU<MatrixType>::determinant() const
|
|
793
|
+
{
|
|
794
|
+
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for computing the determinant, you must first call either compute() or analyzePattern()/factorize()");
|
|
795
|
+
|
|
796
|
+
if (m_extractedDataAreDirty)
|
|
797
|
+
this->extractData();
|
|
798
|
+
|
|
799
|
+
Scalar det = Scalar(1);
|
|
800
|
+
for (int j=0; j<m_u.cols(); ++j)
|
|
801
|
+
{
|
|
802
|
+
if (m_u.outerIndexPtr()[j+1]-m_u.outerIndexPtr()[j] > 0)
|
|
803
|
+
{
|
|
804
|
+
int lastId = m_u.outerIndexPtr()[j+1]-1;
|
|
805
|
+
eigen_assert(m_u.innerIndexPtr()[lastId]<=j);
|
|
806
|
+
if (m_u.innerIndexPtr()[lastId]==j)
|
|
807
|
+
det *= m_u.valuePtr()[lastId];
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
if(PermutationMap(m_p.data(),m_p.size()).determinant()*PermutationMap(m_q.data(),m_q.size()).determinant()<0)
|
|
811
|
+
det = -det;
|
|
812
|
+
if(m_sluEqued!='N')
|
|
813
|
+
return det/m_sluRscale.prod()/m_sluCscale.prod();
|
|
814
|
+
else
|
|
815
|
+
return det;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
819
|
+
#define EIGEN_SUPERLU_HAS_ILU
|
|
820
|
+
#endif
|
|
821
|
+
|
|
822
|
+
#ifdef EIGEN_SUPERLU_HAS_ILU
|
|
823
|
+
|
|
824
|
+
/** \ingroup SuperLUSupport_Module
|
|
825
|
+
* \class SuperILU
|
|
826
|
+
* \brief A sparse direct \b incomplete LU factorization and solver based on the SuperLU library
|
|
827
|
+
*
|
|
828
|
+
* This class allows to solve for an approximate solution of A.X = B sparse linear problems via an incomplete LU factorization
|
|
829
|
+
* using the SuperLU library. This class is aimed to be used as a preconditioner of the iterative linear solvers.
|
|
830
|
+
*
|
|
831
|
+
* \warning This class is only for the 4.x versions of SuperLU. The 3.x and 5.x versions are not supported.
|
|
832
|
+
*
|
|
833
|
+
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
834
|
+
*
|
|
835
|
+
* \implsparsesolverconcept
|
|
836
|
+
*
|
|
837
|
+
* \sa \ref TutorialSparseSolverConcept, class IncompleteLUT, class ConjugateGradient, class BiCGSTAB
|
|
838
|
+
*/
|
|
839
|
+
|
|
840
|
+
template<typename _MatrixType>
|
|
841
|
+
class SuperILU : public SuperLUBase<_MatrixType,SuperILU<_MatrixType> >
|
|
842
|
+
{
|
|
843
|
+
public:
|
|
844
|
+
typedef SuperLUBase<_MatrixType,SuperILU> Base;
|
|
845
|
+
typedef _MatrixType MatrixType;
|
|
846
|
+
typedef typename Base::Scalar Scalar;
|
|
847
|
+
typedef typename Base::RealScalar RealScalar;
|
|
848
|
+
|
|
849
|
+
public:
|
|
850
|
+
using Base::_solve_impl;
|
|
851
|
+
|
|
852
|
+
SuperILU() : Base() { init(); }
|
|
853
|
+
|
|
854
|
+
SuperILU(const MatrixType& matrix) : Base()
|
|
855
|
+
{
|
|
856
|
+
init();
|
|
857
|
+
Base::compute(matrix);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
~SuperILU()
|
|
861
|
+
{
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
/** Performs a symbolic decomposition on the sparcity of \a matrix.
|
|
865
|
+
*
|
|
866
|
+
* This function is particularly useful when solving for several problems having the same structure.
|
|
867
|
+
*
|
|
868
|
+
* \sa factorize()
|
|
869
|
+
*/
|
|
870
|
+
void analyzePattern(const MatrixType& matrix)
|
|
871
|
+
{
|
|
872
|
+
Base::analyzePattern(matrix);
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/** Performs a numeric decomposition of \a matrix
|
|
876
|
+
*
|
|
877
|
+
* The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
|
|
878
|
+
*
|
|
879
|
+
* \sa analyzePattern()
|
|
880
|
+
*/
|
|
881
|
+
void factorize(const MatrixType& matrix);
|
|
882
|
+
|
|
883
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
884
|
+
/** \internal */
|
|
885
|
+
template<typename Rhs,typename Dest>
|
|
886
|
+
void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const;
|
|
887
|
+
#endif // EIGEN_PARSED_BY_DOXYGEN
|
|
888
|
+
|
|
889
|
+
protected:
|
|
890
|
+
|
|
891
|
+
using Base::m_matrix;
|
|
892
|
+
using Base::m_sluOptions;
|
|
893
|
+
using Base::m_sluA;
|
|
894
|
+
using Base::m_sluB;
|
|
895
|
+
using Base::m_sluX;
|
|
896
|
+
using Base::m_p;
|
|
897
|
+
using Base::m_q;
|
|
898
|
+
using Base::m_sluEtree;
|
|
899
|
+
using Base::m_sluEqued;
|
|
900
|
+
using Base::m_sluRscale;
|
|
901
|
+
using Base::m_sluCscale;
|
|
902
|
+
using Base::m_sluL;
|
|
903
|
+
using Base::m_sluU;
|
|
904
|
+
using Base::m_sluStat;
|
|
905
|
+
using Base::m_sluFerr;
|
|
906
|
+
using Base::m_sluBerr;
|
|
907
|
+
using Base::m_l;
|
|
908
|
+
using Base::m_u;
|
|
909
|
+
|
|
910
|
+
using Base::m_analysisIsOk;
|
|
911
|
+
using Base::m_factorizationIsOk;
|
|
912
|
+
using Base::m_extractedDataAreDirty;
|
|
913
|
+
using Base::m_isInitialized;
|
|
914
|
+
using Base::m_info;
|
|
915
|
+
|
|
916
|
+
void init()
|
|
917
|
+
{
|
|
918
|
+
Base::init();
|
|
919
|
+
|
|
920
|
+
ilu_set_default_options(&m_sluOptions);
|
|
921
|
+
m_sluOptions.PrintStat = NO;
|
|
922
|
+
m_sluOptions.ConditionNumber = NO;
|
|
923
|
+
m_sluOptions.Trans = NOTRANS;
|
|
924
|
+
m_sluOptions.ColPerm = MMD_AT_PLUS_A;
|
|
925
|
+
|
|
926
|
+
// no attempt to preserve column sum
|
|
927
|
+
m_sluOptions.ILU_MILU = SILU;
|
|
928
|
+
// only basic ILU(k) support -- no direct control over memory consumption
|
|
929
|
+
// better to use ILU_DropRule = DROP_BASIC | DROP_AREA
|
|
930
|
+
// and set ILU_FillFactor to max memory growth
|
|
931
|
+
m_sluOptions.ILU_DropRule = DROP_BASIC;
|
|
932
|
+
m_sluOptions.ILU_DropTol = NumTraits<Scalar>::dummy_precision()*10;
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
private:
|
|
936
|
+
SuperILU(SuperILU& ) { }
|
|
937
|
+
};
|
|
938
|
+
|
|
939
|
+
template<typename MatrixType>
|
|
940
|
+
void SuperILU<MatrixType>::factorize(const MatrixType& a)
|
|
941
|
+
{
|
|
942
|
+
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
943
|
+
if(!m_analysisIsOk)
|
|
944
|
+
{
|
|
945
|
+
m_info = InvalidInput;
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
this->initFactorization(a);
|
|
950
|
+
|
|
951
|
+
int info = 0;
|
|
952
|
+
RealScalar recip_pivot_growth, rcond;
|
|
953
|
+
|
|
954
|
+
StatInit(&m_sluStat);
|
|
955
|
+
SuperLU_gsisx(&m_sluOptions, &m_sluA, m_q.data(), m_p.data(), &m_sluEtree[0],
|
|
956
|
+
&m_sluEqued, &m_sluRscale[0], &m_sluCscale[0],
|
|
957
|
+
&m_sluL, &m_sluU,
|
|
958
|
+
NULL, 0,
|
|
959
|
+
&m_sluB, &m_sluX,
|
|
960
|
+
&recip_pivot_growth, &rcond,
|
|
961
|
+
&m_sluStat, &info, Scalar());
|
|
962
|
+
StatFree(&m_sluStat);
|
|
963
|
+
|
|
964
|
+
// FIXME how to better check for errors ???
|
|
965
|
+
m_info = info == 0 ? Success : NumericalIssue;
|
|
966
|
+
m_factorizationIsOk = true;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
970
|
+
template<typename MatrixType>
|
|
971
|
+
template<typename Rhs,typename Dest>
|
|
972
|
+
void SuperILU<MatrixType>::_solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest>& x) const
|
|
973
|
+
{
|
|
974
|
+
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or analyzePattern()/factorize()");
|
|
975
|
+
|
|
976
|
+
const int rhsCols = b.cols();
|
|
977
|
+
eigen_assert(m_matrix.rows()==b.rows());
|
|
978
|
+
|
|
979
|
+
m_sluOptions.Trans = NOTRANS;
|
|
980
|
+
m_sluOptions.Fact = FACTORED;
|
|
981
|
+
m_sluOptions.IterRefine = NOREFINE;
|
|
982
|
+
|
|
983
|
+
m_sluFerr.resize(rhsCols);
|
|
984
|
+
m_sluBerr.resize(rhsCols);
|
|
985
|
+
|
|
986
|
+
Ref<const Matrix<typename Rhs::Scalar,Dynamic,Dynamic,ColMajor> > b_ref(b);
|
|
987
|
+
Ref<const Matrix<typename Dest::Scalar,Dynamic,Dynamic,ColMajor> > x_ref(x);
|
|
988
|
+
|
|
989
|
+
m_sluB = SluMatrix::Map(b_ref.const_cast_derived());
|
|
990
|
+
m_sluX = SluMatrix::Map(x_ref.const_cast_derived());
|
|
991
|
+
|
|
992
|
+
typename Rhs::PlainObject b_cpy;
|
|
993
|
+
if(m_sluEqued!='N')
|
|
994
|
+
{
|
|
995
|
+
b_cpy = b;
|
|
996
|
+
m_sluB = SluMatrix::Map(b_cpy.const_cast_derived());
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
int info = 0;
|
|
1000
|
+
RealScalar recip_pivot_growth, rcond;
|
|
1001
|
+
|
|
1002
|
+
StatInit(&m_sluStat);
|
|
1003
|
+
SuperLU_gsisx(&m_sluOptions, &m_sluA,
|
|
1004
|
+
m_q.data(), m_p.data(),
|
|
1005
|
+
&m_sluEtree[0], &m_sluEqued,
|
|
1006
|
+
&m_sluRscale[0], &m_sluCscale[0],
|
|
1007
|
+
&m_sluL, &m_sluU,
|
|
1008
|
+
NULL, 0,
|
|
1009
|
+
&m_sluB, &m_sluX,
|
|
1010
|
+
&recip_pivot_growth, &rcond,
|
|
1011
|
+
&m_sluStat, &info, Scalar());
|
|
1012
|
+
StatFree(&m_sluStat);
|
|
1013
|
+
|
|
1014
|
+
if(x.derived().data() != x_ref.data())
|
|
1015
|
+
x = x_ref;
|
|
1016
|
+
|
|
1017
|
+
m_info = info==0 ? Success : NumericalIssue;
|
|
1018
|
+
}
|
|
1019
|
+
#endif
|
|
1020
|
+
|
|
1021
|
+
#endif
|
|
1022
|
+
|
|
1023
|
+
} // end namespace Eigen
|
|
1024
|
+
|
|
1025
|
+
#endif // EIGEN_SUPERLUSUPPORT_H
|