@smake/eigen 1.1.0 → 1.1.1
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.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -11,40 +11,41 @@
|
|
|
11
11
|
#ifndef EIGEN_INCOMPLETE_LUT_H
|
|
12
12
|
#define EIGEN_INCOMPLETE_LUT_H
|
|
13
13
|
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
14
16
|
|
|
15
17
|
namespace Eigen {
|
|
16
18
|
|
|
17
19
|
namespace internal {
|
|
18
20
|
|
|
19
21
|
/** \internal
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
* Compute a quick-sort split of a vector
|
|
23
|
+
* On output, the vector row is permuted such that its elements satisfy
|
|
24
|
+
* abs(row(i)) >= abs(row(ncut)) if i<ncut
|
|
25
|
+
* abs(row(i)) <= abs(row(ncut)) if i>ncut
|
|
26
|
+
* \param row The vector of values
|
|
27
|
+
* \param ind The array of index for the elements in @p row
|
|
28
|
+
* \param ncut The number of largest elements to keep
|
|
29
|
+
**/
|
|
28
30
|
template <typename VectorV, typename VectorI>
|
|
29
|
-
Index QuickSplit(VectorV
|
|
30
|
-
{
|
|
31
|
+
Index QuickSplit(VectorV& row, VectorI& ind, Index ncut) {
|
|
31
32
|
typedef typename VectorV::RealScalar RealScalar;
|
|
32
|
-
using std::swap;
|
|
33
33
|
using std::abs;
|
|
34
|
+
using std::swap;
|
|
34
35
|
Index mid;
|
|
35
36
|
Index n = row.size(); /* length of the vector */
|
|
36
|
-
Index first, last
|
|
37
|
+
Index first, last;
|
|
37
38
|
|
|
38
39
|
ncut--; /* to fit the zero-based indices */
|
|
39
40
|
first = 0;
|
|
40
|
-
last = n-1;
|
|
41
|
-
if (ncut < first || ncut > last
|
|
41
|
+
last = n - 1;
|
|
42
|
+
if (ncut < first || ncut > last) return 0;
|
|
42
43
|
|
|
43
44
|
do {
|
|
44
45
|
mid = first;
|
|
45
46
|
RealScalar abskey = abs(row(mid));
|
|
46
47
|
for (Index j = first + 1; j <= last; j++) {
|
|
47
|
-
if (
|
|
48
|
+
if (abs(row(j)) > abskey) {
|
|
48
49
|
++mid;
|
|
49
50
|
swap(row(mid), row(j));
|
|
50
51
|
swap(ind(mid), ind(j));
|
|
@@ -54,157 +55,152 @@ Index QuickSplit(VectorV &row, VectorI &ind, Index ncut)
|
|
|
54
55
|
swap(row(mid), row(first));
|
|
55
56
|
swap(ind(mid), ind(first));
|
|
56
57
|
|
|
57
|
-
if (mid > ncut)
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
if (mid > ncut)
|
|
59
|
+
last = mid - 1;
|
|
60
|
+
else if (mid < ncut)
|
|
61
|
+
first = mid + 1;
|
|
62
|
+
} while (mid != ncut);
|
|
60
63
|
|
|
61
64
|
return 0; /* mid is equal to ncut */
|
|
62
65
|
}
|
|
63
66
|
|
|
64
|
-
}// end namespace internal
|
|
67
|
+
} // end namespace internal
|
|
65
68
|
|
|
66
69
|
/** \ingroup IterativeLinearSolvers_Module
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
template <typename
|
|
99
|
-
class IncompleteLUT : public SparseSolverBase<IncompleteLUT<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
{
|
|
129
|
-
eigen_assert(fillfactor != 0);
|
|
130
|
-
compute(mat);
|
|
131
|
-
}
|
|
70
|
+
* \class IncompleteLUT
|
|
71
|
+
* \brief Incomplete LU factorization with dual-threshold strategy
|
|
72
|
+
*
|
|
73
|
+
* \implsparsesolverconcept
|
|
74
|
+
*
|
|
75
|
+
* During the numerical factorization, two dropping rules are used :
|
|
76
|
+
* 1) any element whose magnitude is less than some tolerance is dropped.
|
|
77
|
+
* This tolerance is obtained by multiplying the input tolerance @p droptol
|
|
78
|
+
* by the average magnitude of all the original elements in the current row.
|
|
79
|
+
* 2) After the elimination of the row, only the @p fill largest elements in
|
|
80
|
+
* the L part and the @p fill largest elements in the U part are kept
|
|
81
|
+
* (in addition to the diagonal element ). Note that @p fill is computed from
|
|
82
|
+
* the input parameter @p fillfactor which is used the ratio to control the fill_in
|
|
83
|
+
* relatively to the initial number of nonzero elements.
|
|
84
|
+
*
|
|
85
|
+
* The two extreme cases are when @p droptol=0 (to keep all the @p fill*2 largest elements)
|
|
86
|
+
* and when @p fill=n/2 with @p droptol being different to zero.
|
|
87
|
+
*
|
|
88
|
+
* References : Yousef Saad, ILUT: A dual threshold incomplete LU factorization,
|
|
89
|
+
* Numerical Linear Algebra with Applications, 1(4), pp 387-402, 1994.
|
|
90
|
+
*
|
|
91
|
+
* NOTE : The following implementation is derived from the ILUT implementation
|
|
92
|
+
* in the SPARSKIT package, Copyright (C) 2005, the Regents of the University of Minnesota
|
|
93
|
+
* released under the terms of the GNU LGPL:
|
|
94
|
+
* http://www-users.cs.umn.edu/~saad/software/SPARSKIT/README
|
|
95
|
+
* However, Yousef Saad gave us permission to relicense his ILUT code to MPL2.
|
|
96
|
+
* See the Eigen mailing list archive, thread: ILUT, date: July 8, 2012:
|
|
97
|
+
* http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2012/07/msg00064.html
|
|
98
|
+
* alternatively, on GMANE:
|
|
99
|
+
* http://comments.gmane.org/gmane.comp.lib.eigen/3302
|
|
100
|
+
*/
|
|
101
|
+
template <typename Scalar_, typename StorageIndex_ = int>
|
|
102
|
+
class IncompleteLUT : public SparseSolverBase<IncompleteLUT<Scalar_, StorageIndex_> > {
|
|
103
|
+
protected:
|
|
104
|
+
typedef SparseSolverBase<IncompleteLUT> Base;
|
|
105
|
+
using Base::m_isInitialized;
|
|
106
|
+
|
|
107
|
+
public:
|
|
108
|
+
typedef Scalar_ Scalar;
|
|
109
|
+
typedef StorageIndex_ StorageIndex;
|
|
110
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
111
|
+
typedef Matrix<Scalar, Dynamic, 1> Vector;
|
|
112
|
+
typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
|
|
113
|
+
typedef SparseMatrix<Scalar, RowMajor, StorageIndex> FactorType;
|
|
114
|
+
|
|
115
|
+
enum { ColsAtCompileTime = Dynamic, MaxColsAtCompileTime = Dynamic };
|
|
116
|
+
|
|
117
|
+
public:
|
|
118
|
+
IncompleteLUT()
|
|
119
|
+
: m_droptol(NumTraits<Scalar>::dummy_precision()),
|
|
120
|
+
m_fillfactor(10),
|
|
121
|
+
m_analysisIsOk(false),
|
|
122
|
+
m_factorizationIsOk(false) {}
|
|
123
|
+
|
|
124
|
+
template <typename MatrixType>
|
|
125
|
+
explicit IncompleteLUT(const MatrixType& mat, const RealScalar& droptol = NumTraits<Scalar>::dummy_precision(),
|
|
126
|
+
int fillfactor = 10)
|
|
127
|
+
: m_droptol(droptol), m_fillfactor(fillfactor), m_analysisIsOk(false), m_factorizationIsOk(false) {
|
|
128
|
+
eigen_assert(fillfactor != 0);
|
|
129
|
+
compute(mat);
|
|
130
|
+
}
|
|
132
131
|
|
|
133
|
-
|
|
132
|
+
/** \brief Extraction Method for L-Factor */
|
|
133
|
+
const FactorType matrixL() const;
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
/** \brief Extraction Method for U-Factor */
|
|
136
|
+
const FactorType matrixU() const;
|
|
136
137
|
|
|
137
|
-
|
|
138
|
-
*
|
|
139
|
-
* \returns \c Success if computation was successful,
|
|
140
|
-
* \c NumericalIssue if the matrix.appears to be negative.
|
|
141
|
-
*/
|
|
142
|
-
ComputationInfo info() const
|
|
143
|
-
{
|
|
144
|
-
eigen_assert(m_isInitialized && "IncompleteLUT is not initialized.");
|
|
145
|
-
return m_info;
|
|
146
|
-
}
|
|
138
|
+
constexpr Index rows() const noexcept { return m_lu.rows(); }
|
|
147
139
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
template<typename MatrixType>
|
|
160
|
-
IncompleteLUT& compute(const MatrixType& amat)
|
|
161
|
-
{
|
|
162
|
-
analyzePattern(amat);
|
|
163
|
-
factorize(amat);
|
|
164
|
-
return *this;
|
|
165
|
-
}
|
|
140
|
+
constexpr Index cols() const noexcept { return m_lu.cols(); }
|
|
141
|
+
|
|
142
|
+
/** \brief Reports whether previous computation was successful.
|
|
143
|
+
*
|
|
144
|
+
* \returns \c Success if computation was successful,
|
|
145
|
+
* \c NumericalIssue if the matrix.appears to be negative.
|
|
146
|
+
*/
|
|
147
|
+
ComputationInfo info() const {
|
|
148
|
+
eigen_assert(m_isInitialized && "IncompleteLUT is not initialized.");
|
|
149
|
+
return m_info;
|
|
150
|
+
}
|
|
166
151
|
|
|
167
|
-
|
|
168
|
-
|
|
152
|
+
template <typename MatrixType>
|
|
153
|
+
void analyzePattern(const MatrixType& amat);
|
|
154
|
+
|
|
155
|
+
template <typename MatrixType>
|
|
156
|
+
void factorize(const MatrixType& amat);
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Compute an incomplete LU factorization with dual threshold on the matrix mat
|
|
160
|
+
* No pivoting is done in this version
|
|
161
|
+
*
|
|
162
|
+
**/
|
|
163
|
+
template <typename MatrixType>
|
|
164
|
+
IncompleteLUT& compute(const MatrixType& amat) {
|
|
165
|
+
analyzePattern(amat);
|
|
166
|
+
factorize(amat);
|
|
167
|
+
return *this;
|
|
168
|
+
}
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
{
|
|
173
|
-
x = m_Pinv * b;
|
|
174
|
-
x = m_lu.template triangularView<UnitLower>().solve(x);
|
|
175
|
-
x = m_lu.template triangularView<Upper>().solve(x);
|
|
176
|
-
x = m_P * x;
|
|
177
|
-
}
|
|
170
|
+
void setDroptol(const RealScalar& droptol);
|
|
171
|
+
void setFillfactor(int fillfactor);
|
|
178
172
|
|
|
179
|
-
|
|
173
|
+
template <typename Rhs, typename Dest>
|
|
174
|
+
void _solve_impl(const Rhs& b, Dest& x) const {
|
|
175
|
+
x = m_Pinv * b;
|
|
176
|
+
x = m_lu.template triangularView<UnitLower>().solve(x);
|
|
177
|
+
x = m_lu.template triangularView<Upper>().solve(x);
|
|
178
|
+
x = m_P * x;
|
|
179
|
+
}
|
|
180
180
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
ComputationInfo m_info;
|
|
197
|
-
PermutationMatrix<Dynamic,Dynamic,StorageIndex> m_P; // Fill-reducing permutation
|
|
198
|
-
PermutationMatrix<Dynamic,Dynamic,StorageIndex> m_Pinv; // Inverse permutation
|
|
181
|
+
protected:
|
|
182
|
+
/** keeps off-diagonal entries; drops diagonal entries */
|
|
183
|
+
struct keep_diag {
|
|
184
|
+
inline bool operator()(const Index& row, const Index& col, const Scalar&) const { return row != col; }
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
protected:
|
|
188
|
+
FactorType m_lu;
|
|
189
|
+
RealScalar m_droptol;
|
|
190
|
+
int m_fillfactor;
|
|
191
|
+
bool m_analysisIsOk;
|
|
192
|
+
bool m_factorizationIsOk;
|
|
193
|
+
ComputationInfo m_info;
|
|
194
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> m_P; // Fill-reducing permutation
|
|
195
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> m_Pinv; // Inverse permutation
|
|
199
196
|
};
|
|
200
197
|
|
|
201
198
|
/**
|
|
202
199
|
* Set control parameter droptol
|
|
203
200
|
* \param droptol Drop any element whose magnitude is less than this tolerance
|
|
204
201
|
**/
|
|
205
|
-
template<typename Scalar, typename StorageIndex>
|
|
206
|
-
void IncompleteLUT<Scalar,StorageIndex>::setDroptol(const RealScalar& droptol)
|
|
207
|
-
{
|
|
202
|
+
template <typename Scalar, typename StorageIndex>
|
|
203
|
+
void IncompleteLUT<Scalar, StorageIndex>::setDroptol(const RealScalar& droptol) {
|
|
208
204
|
this->m_droptol = droptol;
|
|
209
205
|
}
|
|
210
206
|
|
|
@@ -212,53 +208,72 @@ void IncompleteLUT<Scalar,StorageIndex>::setDroptol(const RealScalar& droptol)
|
|
|
212
208
|
* Set control parameter fillfactor
|
|
213
209
|
* \param fillfactor This is used to compute the number @p fill_in of largest elements to keep on each row.
|
|
214
210
|
**/
|
|
215
|
-
template<typename Scalar, typename StorageIndex>
|
|
216
|
-
void IncompleteLUT<Scalar,StorageIndex>::setFillfactor(int fillfactor)
|
|
217
|
-
{
|
|
211
|
+
template <typename Scalar, typename StorageIndex>
|
|
212
|
+
void IncompleteLUT<Scalar, StorageIndex>::setFillfactor(int fillfactor) {
|
|
218
213
|
this->m_fillfactor = fillfactor;
|
|
219
214
|
}
|
|
220
215
|
|
|
216
|
+
/**
|
|
217
|
+
* get L-Factor
|
|
218
|
+
* \return L-Factor is a matrix containing the lower triangular part of the sparse matrix. All elements of the matrix
|
|
219
|
+
* above the main diagonal are zero.
|
|
220
|
+
**/
|
|
221
|
+
template <typename Scalar, typename StorageIndex>
|
|
222
|
+
const typename IncompleteLUT<Scalar, StorageIndex>::FactorType IncompleteLUT<Scalar, StorageIndex>::matrixL() const {
|
|
223
|
+
eigen_assert(m_factorizationIsOk && "factorize() should be called first");
|
|
224
|
+
return m_lu.template triangularView<UnitLower>();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* get U-Factor
|
|
229
|
+
* \return L-Factor is a matrix containing the upper triangular part of the sparse matrix. All elements of the matrix
|
|
230
|
+
* below the main diagonal are zero.
|
|
231
|
+
**/
|
|
232
|
+
template <typename Scalar, typename StorageIndex>
|
|
233
|
+
const typename IncompleteLUT<Scalar, StorageIndex>::FactorType IncompleteLUT<Scalar, StorageIndex>::matrixU() const {
|
|
234
|
+
eigen_assert(m_factorizationIsOk && "Factorization must be computed first.");
|
|
235
|
+
return m_lu.template triangularView<Upper>();
|
|
236
|
+
}
|
|
237
|
+
|
|
221
238
|
template <typename Scalar, typename StorageIndex>
|
|
222
|
-
template<typename
|
|
223
|
-
void IncompleteLUT<Scalar,StorageIndex>::analyzePattern(const
|
|
224
|
-
{
|
|
239
|
+
template <typename MatrixType_>
|
|
240
|
+
void IncompleteLUT<Scalar, StorageIndex>::analyzePattern(const MatrixType_& amat) {
|
|
225
241
|
// Compute the Fill-reducing permutation
|
|
226
242
|
// Since ILUT does not perform any numerical pivoting,
|
|
227
243
|
// it is highly preferable to keep the diagonal through symmetric permutations.
|
|
228
244
|
// To this end, let's symmetrize the pattern and perform AMD on it.
|
|
229
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> mat1 = amat;
|
|
230
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> mat2 = amat.transpose();
|
|
245
|
+
SparseMatrix<Scalar, ColMajor, StorageIndex> mat1 = amat;
|
|
246
|
+
SparseMatrix<Scalar, ColMajor, StorageIndex> mat2 = amat.transpose();
|
|
231
247
|
// FIXME for a matrix with nearly symmetric pattern, mat2+mat1 is the appropriate choice.
|
|
232
248
|
// on the other hand for a really non-symmetric pattern, mat2*mat1 should be preferred...
|
|
233
|
-
SparseMatrix<Scalar,ColMajor, StorageIndex> AtA = mat2 + mat1;
|
|
249
|
+
SparseMatrix<Scalar, ColMajor, StorageIndex> AtA = mat2 + mat1;
|
|
234
250
|
AMDOrdering<StorageIndex> ordering;
|
|
235
|
-
ordering(AtA,m_P);
|
|
236
|
-
m_Pinv
|
|
251
|
+
ordering(AtA, m_P);
|
|
252
|
+
m_Pinv = m_P.inverse(); // cache the inverse permutation
|
|
237
253
|
m_analysisIsOk = true;
|
|
238
254
|
m_factorizationIsOk = false;
|
|
239
255
|
m_isInitialized = true;
|
|
240
256
|
}
|
|
241
257
|
|
|
242
258
|
template <typename Scalar, typename StorageIndex>
|
|
243
|
-
template<typename
|
|
244
|
-
void IncompleteLUT<Scalar,StorageIndex>::factorize(const
|
|
245
|
-
|
|
259
|
+
template <typename MatrixType_>
|
|
260
|
+
void IncompleteLUT<Scalar, StorageIndex>::factorize(const MatrixType_& amat) {
|
|
261
|
+
using internal::convert_index;
|
|
262
|
+
using std::abs;
|
|
246
263
|
using std::sqrt;
|
|
247
264
|
using std::swap;
|
|
248
|
-
using std::abs;
|
|
249
|
-
using internal::convert_index;
|
|
250
265
|
|
|
251
266
|
eigen_assert((amat.rows() == amat.cols()) && "The factorization should be done on a square matrix");
|
|
252
267
|
Index n = amat.cols(); // Size of the matrix
|
|
253
|
-
m_lu.resize(n,n);
|
|
268
|
+
m_lu.resize(n, n);
|
|
254
269
|
// Declare Working vectors and variables
|
|
255
|
-
Vector u(n)
|
|
256
|
-
VectorI ju(n);
|
|
257
|
-
VectorI jr(n);
|
|
270
|
+
Vector u(n); // real values of the row -- maximum size is n --
|
|
271
|
+
VectorI ju(n); // column position of the values in u -- maximum size is n
|
|
272
|
+
VectorI jr(n); // Indicate the position of the nonzero elements in the vector u -- A zero location is indicated by -1
|
|
258
273
|
|
|
259
274
|
// Apply the fill-reducing permutation
|
|
260
275
|
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
261
|
-
SparseMatrix<Scalar,RowMajor, StorageIndex> mat;
|
|
276
|
+
SparseMatrix<Scalar, RowMajor, StorageIndex> mat;
|
|
262
277
|
mat = amat.twistedBy(m_Pinv);
|
|
263
278
|
|
|
264
279
|
// Initialization
|
|
@@ -267,44 +282,37 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
267
282
|
u.fill(0);
|
|
268
283
|
|
|
269
284
|
// number of largest elements to keep in each row:
|
|
270
|
-
Index fill_in = (amat.nonZeros()*m_fillfactor)/n + 1;
|
|
285
|
+
Index fill_in = (amat.nonZeros() * m_fillfactor) / n + 1;
|
|
271
286
|
if (fill_in > n) fill_in = n;
|
|
272
287
|
|
|
273
288
|
// number of largest nonzero elements to keep in the L and the U part of the current row:
|
|
274
|
-
Index nnzL = fill_in/2;
|
|
289
|
+
Index nnzL = fill_in / 2;
|
|
275
290
|
Index nnzU = nnzL;
|
|
276
291
|
m_lu.reserve(n * (nnzL + nnzU + 1));
|
|
277
292
|
|
|
278
293
|
// global loop over the rows of the sparse matrix
|
|
279
|
-
for (Index ii = 0; ii < n; ii++)
|
|
280
|
-
{
|
|
294
|
+
for (Index ii = 0; ii < n; ii++) {
|
|
281
295
|
// 1 - copy the lower and the upper part of the row i of mat in the working vector u
|
|
282
296
|
|
|
283
|
-
Index sizeu = 1;
|
|
284
|
-
Index sizel = 0;
|
|
285
|
-
ju(ii)
|
|
286
|
-
u(ii)
|
|
287
|
-
jr(ii)
|
|
297
|
+
Index sizeu = 1; // number of nonzero elements in the upper part of the current row
|
|
298
|
+
Index sizel = 0; // number of nonzero elements in the lower part of the current row
|
|
299
|
+
ju(ii) = convert_index<StorageIndex>(ii);
|
|
300
|
+
u(ii) = 0;
|
|
301
|
+
jr(ii) = convert_index<StorageIndex>(ii);
|
|
288
302
|
RealScalar rownorm = 0;
|
|
289
303
|
|
|
290
|
-
typename FactorType::InnerIterator j_it(mat, ii);
|
|
291
|
-
for (; j_it; ++j_it)
|
|
292
|
-
{
|
|
304
|
+
typename FactorType::InnerIterator j_it(mat, ii); // Iterate through the current row ii
|
|
305
|
+
for (; j_it; ++j_it) {
|
|
293
306
|
Index k = j_it.index();
|
|
294
|
-
if (k < ii)
|
|
295
|
-
{
|
|
307
|
+
if (k < ii) {
|
|
296
308
|
// copy the lower part
|
|
297
309
|
ju(sizel) = convert_index<StorageIndex>(k);
|
|
298
310
|
u(sizel) = j_it.value();
|
|
299
311
|
jr(k) = convert_index<StorageIndex>(sizel);
|
|
300
312
|
++sizel;
|
|
301
|
-
}
|
|
302
|
-
else if (k == ii)
|
|
303
|
-
{
|
|
313
|
+
} else if (k == ii) {
|
|
304
314
|
u(ii) = j_it.value();
|
|
305
|
-
}
|
|
306
|
-
else
|
|
307
|
-
{
|
|
315
|
+
} else {
|
|
308
316
|
// copy the upper part
|
|
309
317
|
Index jpos = ii + sizeu;
|
|
310
318
|
ju(jpos) = convert_index<StorageIndex>(k);
|
|
@@ -316,8 +324,7 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
316
324
|
}
|
|
317
325
|
|
|
318
326
|
// 2 - detect possible zero row
|
|
319
|
-
if(rownorm==0)
|
|
320
|
-
{
|
|
327
|
+
if (rownorm == 0) {
|
|
321
328
|
m_info = NumericalIssue;
|
|
322
329
|
return;
|
|
323
330
|
}
|
|
@@ -327,15 +334,13 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
327
334
|
// 3 - eliminate the previous nonzero rows
|
|
328
335
|
Index jj = 0;
|
|
329
336
|
Index len = 0;
|
|
330
|
-
while (jj < sizel)
|
|
331
|
-
{
|
|
337
|
+
while (jj < sizel) {
|
|
332
338
|
// In order to eliminate in the correct order,
|
|
333
339
|
// we must select first the smallest column index among ju(jj:sizel)
|
|
334
340
|
Index k;
|
|
335
|
-
Index minrow = ju.segment(jj,sizel-jj).minCoeff(&k);
|
|
341
|
+
Index minrow = ju.segment(jj, sizel - jj).minCoeff(&k); // k is relative to the segment
|
|
336
342
|
k += jj;
|
|
337
|
-
if (minrow != ju(jj))
|
|
338
|
-
{
|
|
343
|
+
if (minrow != ju(jj)) {
|
|
339
344
|
// swap the two locations
|
|
340
345
|
Index j = ju(jj);
|
|
341
346
|
swap(ju(jj), ju(k));
|
|
@@ -349,55 +354,51 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
349
354
|
// Start elimination
|
|
350
355
|
typename FactorType::InnerIterator ki_it(m_lu, minrow);
|
|
351
356
|
while (ki_it && ki_it.index() < minrow) ++ki_it;
|
|
352
|
-
eigen_internal_assert(ki_it && ki_it.col()==minrow);
|
|
357
|
+
eigen_internal_assert(ki_it && ki_it.col() == minrow);
|
|
353
358
|
Scalar fact = u(jj) / ki_it.value();
|
|
354
359
|
|
|
355
360
|
// drop too small elements
|
|
356
|
-
if(abs(fact) <= m_droptol)
|
|
357
|
-
{
|
|
361
|
+
if (abs(fact) <= m_droptol) {
|
|
358
362
|
jj++;
|
|
359
363
|
continue;
|
|
360
364
|
}
|
|
361
365
|
|
|
362
366
|
// linear combination of the current row ii and the row minrow
|
|
363
367
|
++ki_it;
|
|
364
|
-
for (; ki_it; ++ki_it)
|
|
365
|
-
{
|
|
368
|
+
for (; ki_it; ++ki_it) {
|
|
366
369
|
Scalar prod = fact * ki_it.value();
|
|
367
|
-
Index j
|
|
368
|
-
Index jpos
|
|
369
|
-
if (jpos == -1)
|
|
370
|
+
Index j = ki_it.index();
|
|
371
|
+
Index jpos = jr(j);
|
|
372
|
+
if (jpos == -1) // fill-in element
|
|
370
373
|
{
|
|
371
374
|
Index newpos;
|
|
372
|
-
if (j >= ii)
|
|
375
|
+
if (j >= ii) // dealing with the upper part
|
|
373
376
|
{
|
|
374
377
|
newpos = ii + sizeu;
|
|
375
378
|
sizeu++;
|
|
376
|
-
eigen_internal_assert(sizeu<=n);
|
|
377
|
-
}
|
|
378
|
-
else // dealing with the lower part
|
|
379
|
+
eigen_internal_assert(sizeu <= n);
|
|
380
|
+
} else // dealing with the lower part
|
|
379
381
|
{
|
|
380
382
|
newpos = sizel;
|
|
381
383
|
sizel++;
|
|
382
|
-
eigen_internal_assert(sizel<=ii);
|
|
384
|
+
eigen_internal_assert(sizel <= ii);
|
|
383
385
|
}
|
|
384
386
|
ju(newpos) = convert_index<StorageIndex>(j);
|
|
385
387
|
u(newpos) = -prod;
|
|
386
388
|
jr(j) = convert_index<StorageIndex>(newpos);
|
|
387
|
-
}
|
|
388
|
-
else
|
|
389
|
+
} else
|
|
389
390
|
u(jpos) -= prod;
|
|
390
391
|
}
|
|
391
392
|
// store the pivot element
|
|
392
|
-
u(len)
|
|
393
|
+
u(len) = fact;
|
|
393
394
|
ju(len) = convert_index<StorageIndex>(minrow);
|
|
394
395
|
++len;
|
|
395
396
|
|
|
396
397
|
jj++;
|
|
397
|
-
}
|
|
398
|
+
} // end of the elimination on the row ii
|
|
398
399
|
|
|
399
400
|
// reset the upper part of the pointer jr to zero
|
|
400
|
-
for(Index k = 0; k <sizeu; k++) jr(ju(ii+k)) = -1;
|
|
401
|
+
for (Index k = 0; k < sizeu; k++) jr(ju(ii + k)) = -1;
|
|
401
402
|
|
|
402
403
|
// 4 - partially sort and insert the elements in the m_lu matrix
|
|
403
404
|
|
|
@@ -410,36 +411,31 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
410
411
|
|
|
411
412
|
// store the largest m_fill elements of the L part
|
|
412
413
|
m_lu.startVec(ii);
|
|
413
|
-
for(Index k = 0; k < len; k++)
|
|
414
|
-
m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
|
|
414
|
+
for (Index k = 0; k < len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
|
|
415
415
|
|
|
416
416
|
// store the diagonal element
|
|
417
417
|
// apply a shifting rule to avoid zero pivots (we are doing an incomplete factorization)
|
|
418
|
-
if (u(ii) == Scalar(0))
|
|
419
|
-
u(ii) = sqrt(m_droptol) * rownorm;
|
|
418
|
+
if (u(ii) == Scalar(0)) u(ii) = sqrt(m_droptol) * rownorm;
|
|
420
419
|
m_lu.insertBackByOuterInnerUnordered(ii, ii) = u(ii);
|
|
421
420
|
|
|
422
421
|
// sort the U-part of the row
|
|
423
422
|
// apply the dropping rule first
|
|
424
423
|
len = 0;
|
|
425
|
-
for(Index k = 1; k < sizeu; k++)
|
|
426
|
-
|
|
427
|
-
if(abs(u(ii+k)) > m_droptol * rownorm )
|
|
428
|
-
{
|
|
424
|
+
for (Index k = 1; k < sizeu; k++) {
|
|
425
|
+
if (abs(u(ii + k)) > m_droptol * rownorm) {
|
|
429
426
|
++len;
|
|
430
|
-
u(ii + len)
|
|
427
|
+
u(ii + len) = u(ii + k);
|
|
431
428
|
ju(ii + len) = ju(ii + k);
|
|
432
429
|
}
|
|
433
430
|
}
|
|
434
|
-
sizeu = len + 1;
|
|
431
|
+
sizeu = len + 1; // +1 to take into account the diagonal element
|
|
435
432
|
len = (std::min)(sizeu, nnzU);
|
|
436
|
-
typename Vector::SegmentReturnType uu(u.segment(ii+1, sizeu-1));
|
|
437
|
-
typename VectorI::SegmentReturnType juu(ju.segment(ii+1, sizeu-1));
|
|
433
|
+
typename Vector::SegmentReturnType uu(u.segment(ii + 1, sizeu - 1));
|
|
434
|
+
typename VectorI::SegmentReturnType juu(ju.segment(ii + 1, sizeu - 1));
|
|
438
435
|
internal::QuickSplit(uu, juu, len);
|
|
439
436
|
|
|
440
437
|
// store the largest elements of the U part
|
|
441
|
-
for(Index k = ii + 1; k < ii + len; k++)
|
|
442
|
-
m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
|
|
438
|
+
for (Index k = ii + 1; k < ii + len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
|
|
443
439
|
}
|
|
444
440
|
m_lu.finalize();
|
|
445
441
|
m_lu.makeCompressed();
|
|
@@ -448,6 +444,6 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
|
|
|
448
444
|
m_info = Success;
|
|
449
445
|
}
|
|
450
446
|
|
|
451
|
-
}
|
|
447
|
+
} // end namespace Eigen
|
|
452
448
|
|
|
453
|
-
#endif
|
|
449
|
+
#endif // EIGEN_INCOMPLETE_LUT_H
|