@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
|
@@ -32,514 +32,469 @@
|
|
|
32
32
|
#ifndef EIGEN_PARDISOSUPPORT_H
|
|
33
33
|
#define EIGEN_PARDISOSUPPORT_H
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
// IWYU pragma: private
|
|
36
|
+
#include "./InternalHeaderCheck.h"
|
|
37
|
+
|
|
38
|
+
namespace Eigen {
|
|
39
|
+
|
|
40
|
+
template <typename MatrixType_>
|
|
41
|
+
class PardisoLU;
|
|
42
|
+
template <typename MatrixType_, int Options = Upper>
|
|
43
|
+
class PardisoLLT;
|
|
44
|
+
template <typename MatrixType_, int Options = Upper>
|
|
45
|
+
class PardisoLDLT;
|
|
46
|
+
|
|
47
|
+
namespace internal {
|
|
48
|
+
template <typename IndexType>
|
|
49
|
+
struct pardiso_run_selector {
|
|
50
|
+
static IndexType run(_MKL_DSS_HANDLE_t pt, IndexType maxfct, IndexType mnum, IndexType type, IndexType phase,
|
|
51
|
+
IndexType n, void* a, IndexType* ia, IndexType* ja, IndexType* perm, IndexType nrhs,
|
|
52
|
+
IndexType* iparm, IndexType msglvl, void* b, void* x) {
|
|
53
|
+
IndexType error = 0;
|
|
54
|
+
::pardiso(pt, &maxfct, &mnum, &type, &phase, &n, a, ia, ja, perm, &nrhs, iparm, &msglvl, b, x, &error);
|
|
55
|
+
return error;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
template <>
|
|
59
|
+
struct pardiso_run_selector<long long int> {
|
|
60
|
+
typedef long long int IndexType;
|
|
61
|
+
static IndexType run(_MKL_DSS_HANDLE_t pt, IndexType maxfct, IndexType mnum, IndexType type, IndexType phase,
|
|
62
|
+
IndexType n, void* a, IndexType* ia, IndexType* ja, IndexType* perm, IndexType nrhs,
|
|
63
|
+
IndexType* iparm, IndexType msglvl, void* b, void* x) {
|
|
64
|
+
IndexType error = 0;
|
|
65
|
+
::pardiso_64(pt, &maxfct, &mnum, &type, &phase, &n, a, ia, ja, perm, &nrhs, iparm, &msglvl, b, x, &error);
|
|
66
|
+
return error;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
36
69
|
|
|
37
|
-
template<
|
|
38
|
-
|
|
39
|
-
template<typename _MatrixType, int Options=Upper> class PardisoLDLT;
|
|
70
|
+
template <class Pardiso>
|
|
71
|
+
struct pardiso_traits;
|
|
40
72
|
|
|
41
|
-
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
{
|
|
49
|
-
IndexType error = 0;
|
|
50
|
-
::pardiso(pt, &maxfct, &mnum, &type, &phase, &n, a, ia, ja, perm, &nrhs, iparm, &msglvl, b, x, &error);
|
|
51
|
-
return error;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
template<>
|
|
55
|
-
struct pardiso_run_selector<long long int>
|
|
56
|
-
{
|
|
57
|
-
typedef long long int IndexType;
|
|
58
|
-
static IndexType run( _MKL_DSS_HANDLE_t pt, IndexType maxfct, IndexType mnum, IndexType type, IndexType phase, IndexType n, void *a,
|
|
59
|
-
IndexType *ia, IndexType *ja, IndexType *perm, IndexType nrhs, IndexType *iparm, IndexType msglvl, void *b, void *x)
|
|
60
|
-
{
|
|
61
|
-
IndexType error = 0;
|
|
62
|
-
::pardiso_64(pt, &maxfct, &mnum, &type, &phase, &n, a, ia, ja, perm, &nrhs, iparm, &msglvl, b, x, &error);
|
|
63
|
-
return error;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
73
|
+
template <typename MatrixType_>
|
|
74
|
+
struct pardiso_traits<PardisoLU<MatrixType_> > {
|
|
75
|
+
typedef MatrixType_ MatrixType;
|
|
76
|
+
typedef typename MatrixType_::Scalar Scalar;
|
|
77
|
+
typedef typename MatrixType_::RealScalar RealScalar;
|
|
78
|
+
typedef typename MatrixType_::StorageIndex StorageIndex;
|
|
79
|
+
};
|
|
66
80
|
|
|
67
|
-
|
|
81
|
+
template <typename MatrixType_, int Options>
|
|
82
|
+
struct pardiso_traits<PardisoLLT<MatrixType_, Options> > {
|
|
83
|
+
typedef MatrixType_ MatrixType;
|
|
84
|
+
typedef typename MatrixType_::Scalar Scalar;
|
|
85
|
+
typedef typename MatrixType_::RealScalar RealScalar;
|
|
86
|
+
typedef typename MatrixType_::StorageIndex StorageIndex;
|
|
87
|
+
};
|
|
68
88
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
template<typename _MatrixType, int Options>
|
|
79
|
-
struct pardiso_traits< PardisoLLT<_MatrixType, Options> >
|
|
80
|
-
{
|
|
81
|
-
typedef _MatrixType MatrixType;
|
|
82
|
-
typedef typename _MatrixType::Scalar Scalar;
|
|
83
|
-
typedef typename _MatrixType::RealScalar RealScalar;
|
|
84
|
-
typedef typename _MatrixType::StorageIndex StorageIndex;
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
template<typename _MatrixType, int Options>
|
|
88
|
-
struct pardiso_traits< PardisoLDLT<_MatrixType, Options> >
|
|
89
|
-
{
|
|
90
|
-
typedef _MatrixType MatrixType;
|
|
91
|
-
typedef typename _MatrixType::Scalar Scalar;
|
|
92
|
-
typedef typename _MatrixType::RealScalar RealScalar;
|
|
93
|
-
typedef typename _MatrixType::StorageIndex StorageIndex;
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
} // end namespace internal
|
|
97
|
-
|
|
98
|
-
template<class Derived>
|
|
99
|
-
class PardisoImpl : public SparseSolverBase<Derived>
|
|
100
|
-
{
|
|
101
|
-
protected:
|
|
102
|
-
typedef SparseSolverBase<Derived> Base;
|
|
103
|
-
using Base::derived;
|
|
104
|
-
using Base::m_isInitialized;
|
|
105
|
-
|
|
106
|
-
typedef internal::pardiso_traits<Derived> Traits;
|
|
107
|
-
public:
|
|
108
|
-
using Base::_solve_impl;
|
|
109
|
-
|
|
110
|
-
typedef typename Traits::MatrixType MatrixType;
|
|
111
|
-
typedef typename Traits::Scalar Scalar;
|
|
112
|
-
typedef typename Traits::RealScalar RealScalar;
|
|
113
|
-
typedef typename Traits::StorageIndex StorageIndex;
|
|
114
|
-
typedef SparseMatrix<Scalar,RowMajor,StorageIndex> SparseMatrixType;
|
|
115
|
-
typedef Matrix<Scalar,Dynamic,1> VectorType;
|
|
116
|
-
typedef Matrix<StorageIndex, 1, MatrixType::ColsAtCompileTime> IntRowVectorType;
|
|
117
|
-
typedef Matrix<StorageIndex, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
|
|
118
|
-
typedef Array<StorageIndex,64,1,DontAlign> ParameterType;
|
|
119
|
-
enum {
|
|
120
|
-
ScalarIsComplex = NumTraits<Scalar>::IsComplex,
|
|
121
|
-
ColsAtCompileTime = Dynamic,
|
|
122
|
-
MaxColsAtCompileTime = Dynamic
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
PardisoImpl()
|
|
126
|
-
: m_analysisIsOk(false), m_factorizationIsOk(false)
|
|
127
|
-
{
|
|
128
|
-
eigen_assert((sizeof(StorageIndex) >= sizeof(_INTEGER_t) && sizeof(StorageIndex) <= 8) && "Non-supported index type");
|
|
129
|
-
m_iparm.setZero();
|
|
130
|
-
m_msglvl = 0; // No output
|
|
131
|
-
m_isInitialized = false;
|
|
132
|
-
}
|
|
89
|
+
template <typename MatrixType_, int Options>
|
|
90
|
+
struct pardiso_traits<PardisoLDLT<MatrixType_, Options> > {
|
|
91
|
+
typedef MatrixType_ MatrixType;
|
|
92
|
+
typedef typename MatrixType_::Scalar Scalar;
|
|
93
|
+
typedef typename MatrixType_::RealScalar RealScalar;
|
|
94
|
+
typedef typename MatrixType_::StorageIndex StorageIndex;
|
|
95
|
+
};
|
|
133
96
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
97
|
+
} // end namespace internal
|
|
98
|
+
|
|
99
|
+
template <class Derived>
|
|
100
|
+
class PardisoImpl : public SparseSolverBase<Derived> {
|
|
101
|
+
protected:
|
|
102
|
+
typedef SparseSolverBase<Derived> Base;
|
|
103
|
+
using Base::derived;
|
|
104
|
+
using Base::m_isInitialized;
|
|
105
|
+
|
|
106
|
+
typedef internal::pardiso_traits<Derived> Traits;
|
|
107
|
+
|
|
108
|
+
public:
|
|
109
|
+
using Base::_solve_impl;
|
|
110
|
+
|
|
111
|
+
typedef typename Traits::MatrixType MatrixType;
|
|
112
|
+
typedef typename Traits::Scalar Scalar;
|
|
113
|
+
typedef typename Traits::RealScalar RealScalar;
|
|
114
|
+
typedef typename Traits::StorageIndex StorageIndex;
|
|
115
|
+
typedef SparseMatrix<Scalar, RowMajor, StorageIndex> SparseMatrixType;
|
|
116
|
+
typedef Matrix<Scalar, Dynamic, 1> VectorType;
|
|
117
|
+
typedef Matrix<StorageIndex, 1, MatrixType::ColsAtCompileTime> IntRowVectorType;
|
|
118
|
+
typedef Matrix<StorageIndex, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
|
|
119
|
+
typedef Array<StorageIndex, 64, 1, DontAlign> ParameterType;
|
|
120
|
+
enum { ScalarIsComplex = NumTraits<Scalar>::IsComplex, ColsAtCompileTime = Dynamic, MaxColsAtCompileTime = Dynamic };
|
|
121
|
+
|
|
122
|
+
PardisoImpl() : m_analysisIsOk(false), m_factorizationIsOk(false) {
|
|
123
|
+
eigen_assert((sizeof(StorageIndex) >= sizeof(_INTEGER_t) && sizeof(StorageIndex) <= 8) &&
|
|
124
|
+
"Non-supported index type");
|
|
125
|
+
m_iparm.setZero();
|
|
126
|
+
m_msglvl = 0; // No output
|
|
127
|
+
m_isInitialized = false;
|
|
128
|
+
}
|
|
138
129
|
|
|
139
|
-
|
|
140
|
-
inline Index rows() const { return m_size; }
|
|
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
|
-
{
|
|
149
|
-
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
150
|
-
return m_info;
|
|
151
|
-
}
|
|
130
|
+
~PardisoImpl() { pardisoRelease(); }
|
|
152
131
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
* \sa factorize()
|
|
166
|
-
*/
|
|
167
|
-
Derived& analyzePattern(const MatrixType& matrix);
|
|
168
|
-
|
|
169
|
-
/** Performs a numeric decomposition of \a matrix
|
|
170
|
-
*
|
|
171
|
-
* The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
|
|
172
|
-
*
|
|
173
|
-
* \sa analyzePattern()
|
|
174
|
-
*/
|
|
175
|
-
Derived& factorize(const MatrixType& matrix);
|
|
176
|
-
|
|
177
|
-
Derived& compute(const MatrixType& matrix);
|
|
178
|
-
|
|
179
|
-
template<typename Rhs,typename Dest>
|
|
180
|
-
void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const;
|
|
181
|
-
|
|
182
|
-
protected:
|
|
183
|
-
void pardisoRelease()
|
|
184
|
-
{
|
|
185
|
-
if(m_isInitialized) // Factorization ran at least once
|
|
186
|
-
{
|
|
187
|
-
internal::pardiso_run_selector<StorageIndex>::run(m_pt, 1, 1, m_type, -1, internal::convert_index<StorageIndex>(m_size),0, 0, 0, m_perm.data(), 0,
|
|
188
|
-
m_iparm.data(), m_msglvl, NULL, NULL);
|
|
189
|
-
m_isInitialized = false;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
132
|
+
inline Index cols() const { return m_size; }
|
|
133
|
+
inline Index rows() const { return m_size; }
|
|
134
|
+
|
|
135
|
+
/** \brief Reports whether previous computation was successful.
|
|
136
|
+
*
|
|
137
|
+
* \returns \c Success if computation was successful,
|
|
138
|
+
* \c NumericalIssue if the matrix appears to be negative.
|
|
139
|
+
*/
|
|
140
|
+
ComputationInfo info() const {
|
|
141
|
+
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
142
|
+
return m_info;
|
|
143
|
+
}
|
|
192
144
|
|
|
193
|
-
|
|
145
|
+
/** \warning for advanced usage only.
|
|
146
|
+
* \returns a reference to the parameter array controlling PARDISO.
|
|
147
|
+
* See the PARDISO manual to know how to use it. */
|
|
148
|
+
ParameterType& pardisoParameterArray() { return m_iparm; }
|
|
149
|
+
|
|
150
|
+
/** Performs a symbolic decomposition on the sparsity of \a matrix.
|
|
151
|
+
*
|
|
152
|
+
* This function is particularly useful when solving for several problems having the same structure.
|
|
153
|
+
*
|
|
154
|
+
* \sa factorize()
|
|
155
|
+
*/
|
|
156
|
+
Derived& analyzePattern(const MatrixType& matrix);
|
|
157
|
+
|
|
158
|
+
/** Performs a numeric decomposition of \a matrix
|
|
159
|
+
*
|
|
160
|
+
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
|
161
|
+
* performed.
|
|
162
|
+
*
|
|
163
|
+
* \sa analyzePattern()
|
|
164
|
+
*/
|
|
165
|
+
Derived& factorize(const MatrixType& matrix);
|
|
166
|
+
|
|
167
|
+
Derived& compute(const MatrixType& matrix);
|
|
168
|
+
|
|
169
|
+
template <typename Rhs, typename Dest>
|
|
170
|
+
void _solve_impl(const MatrixBase<Rhs>& b, MatrixBase<Dest>& dest) const;
|
|
171
|
+
|
|
172
|
+
protected:
|
|
173
|
+
void pardisoRelease() {
|
|
174
|
+
if (m_isInitialized) // Factorization ran at least once
|
|
194
175
|
{
|
|
195
|
-
m_type
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
m_iparm[2] = 0; // Reserved. Set to zero. (??Numbers of processors, value of OMP_NUM_THREADS??)
|
|
200
|
-
m_iparm[3] = 0; // No iterative-direct algorithm
|
|
201
|
-
m_iparm[4] = 0; // No user fill-in reducing permutation
|
|
202
|
-
m_iparm[5] = 0; // Write solution into x, b is left unchanged
|
|
203
|
-
m_iparm[6] = 0; // Not in use
|
|
204
|
-
m_iparm[7] = 2; // Max numbers of iterative refinement steps
|
|
205
|
-
m_iparm[8] = 0; // Not in use
|
|
206
|
-
m_iparm[9] = 13; // Perturb the pivot elements with 1E-13
|
|
207
|
-
m_iparm[10] = symmetric ? 0 : 1; // Use nonsymmetric permutation and scaling MPS
|
|
208
|
-
m_iparm[11] = 0; // Not in use
|
|
209
|
-
m_iparm[12] = symmetric ? 0 : 1; // Maximum weighted matching algorithm is switched-off (default for symmetric).
|
|
210
|
-
// Try m_iparm[12] = 1 in case of inappropriate accuracy
|
|
211
|
-
m_iparm[13] = 0; // Output: Number of perturbed pivots
|
|
212
|
-
m_iparm[14] = 0; // Not in use
|
|
213
|
-
m_iparm[15] = 0; // Not in use
|
|
214
|
-
m_iparm[16] = 0; // Not in use
|
|
215
|
-
m_iparm[17] = -1; // Output: Number of nonzeros in the factor LU
|
|
216
|
-
m_iparm[18] = -1; // Output: Mflops for LU factorization
|
|
217
|
-
m_iparm[19] = 0; // Output: Numbers of CG Iterations
|
|
218
|
-
|
|
219
|
-
m_iparm[20] = 0; // 1x1 pivoting
|
|
220
|
-
m_iparm[26] = 0; // No matrix checker
|
|
221
|
-
m_iparm[27] = (sizeof(RealScalar) == 4) ? 1 : 0;
|
|
222
|
-
m_iparm[34] = 1; // C indexing
|
|
223
|
-
m_iparm[36] = 0; // CSR
|
|
224
|
-
m_iparm[59] = 0; // 0 - In-Core ; 1 - Automatic switch between In-Core and Out-of-Core modes ; 2 - Out-of-Core
|
|
225
|
-
|
|
226
|
-
memset(m_pt, 0, sizeof(m_pt));
|
|
176
|
+
internal::pardiso_run_selector<StorageIndex>::run(m_pt, 1, 1, m_type, -1,
|
|
177
|
+
internal::convert_index<StorageIndex>(m_size), 0, 0, 0,
|
|
178
|
+
m_perm.data(), 0, m_iparm.data(), m_msglvl, NULL, NULL);
|
|
179
|
+
m_isInitialized = false;
|
|
227
180
|
}
|
|
181
|
+
}
|
|
228
182
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
183
|
+
void pardisoInit(int type) {
|
|
184
|
+
m_type = type;
|
|
185
|
+
bool symmetric = std::abs(m_type) < 10;
|
|
186
|
+
m_iparm[0] = 1; // No solver default
|
|
187
|
+
m_iparm[1] = 2; // use Metis for the ordering
|
|
188
|
+
m_iparm[2] = 0; // Reserved. Set to zero. (??Numbers of processors, value of OMP_NUM_THREADS??)
|
|
189
|
+
m_iparm[3] = 0; // No iterative-direct algorithm
|
|
190
|
+
m_iparm[4] = 0; // No user fill-in reducing permutation
|
|
191
|
+
m_iparm[5] = 0; // Write solution into x, b is left unchanged
|
|
192
|
+
m_iparm[6] = 0; // Not in use
|
|
193
|
+
m_iparm[7] = 2; // Max numbers of iterative refinement steps
|
|
194
|
+
m_iparm[8] = 0; // Not in use
|
|
195
|
+
m_iparm[9] = 13; // Perturb the pivot elements with 1E-13
|
|
196
|
+
m_iparm[10] = symmetric ? 0 : 1; // Use nonsymmetric permutation and scaling MPS
|
|
197
|
+
m_iparm[11] = 0; // Not in use
|
|
198
|
+
m_iparm[12] = symmetric ? 0 : 1; // Maximum weighted matching algorithm is switched-off (default for symmetric).
|
|
199
|
+
// Try m_iparm[12] = 1 in case of inappropriate accuracy
|
|
200
|
+
m_iparm[13] = 0; // Output: Number of perturbed pivots
|
|
201
|
+
m_iparm[14] = 0; // Not in use
|
|
202
|
+
m_iparm[15] = 0; // Not in use
|
|
203
|
+
m_iparm[16] = 0; // Not in use
|
|
204
|
+
m_iparm[17] = -1; // Output: Number of nonzeros in the factor LU
|
|
205
|
+
m_iparm[18] = -1; // Output: Mflops for LU factorization
|
|
206
|
+
m_iparm[19] = 0; // Output: Numbers of CG Iterations
|
|
207
|
+
|
|
208
|
+
m_iparm[20] = 0; // 1x1 pivoting
|
|
209
|
+
m_iparm[26] = 0; // No matrix checker
|
|
210
|
+
m_iparm[27] = (sizeof(RealScalar) == 4) ? 1 : 0;
|
|
211
|
+
m_iparm[34] = 1; // C indexing
|
|
212
|
+
m_iparm[36] = 0; // CSR
|
|
213
|
+
m_iparm[59] = 0; // 0 - In-Core ; 1 - Automatic switch between In-Core and Out-of-Core modes ; 2 - Out-of-Core
|
|
214
|
+
|
|
215
|
+
memset(m_pt, 0, sizeof(m_pt));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
protected:
|
|
219
|
+
// cached data to reduce reallocation, etc.
|
|
220
|
+
|
|
221
|
+
void manageErrorCode(Index error) const {
|
|
222
|
+
switch (error) {
|
|
223
|
+
case 0:
|
|
224
|
+
m_info = Success;
|
|
225
|
+
break;
|
|
226
|
+
case -4:
|
|
227
|
+
case -7:
|
|
228
|
+
m_info = NumericalIssue;
|
|
229
|
+
break;
|
|
230
|
+
default:
|
|
231
|
+
m_info = InvalidInput;
|
|
246
232
|
}
|
|
233
|
+
}
|
|
247
234
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
235
|
+
mutable SparseMatrixType m_matrix;
|
|
236
|
+
mutable ComputationInfo m_info;
|
|
237
|
+
bool m_analysisIsOk, m_factorizationIsOk;
|
|
238
|
+
StorageIndex m_type, m_msglvl;
|
|
239
|
+
mutable void* m_pt[64];
|
|
240
|
+
mutable ParameterType m_iparm;
|
|
241
|
+
mutable IntColVectorType m_perm;
|
|
242
|
+
Index m_size;
|
|
257
243
|
};
|
|
258
244
|
|
|
259
|
-
template<class Derived>
|
|
260
|
-
Derived& PardisoImpl<Derived>::compute(const MatrixType& a)
|
|
261
|
-
{
|
|
245
|
+
template <class Derived>
|
|
246
|
+
Derived& PardisoImpl<Derived>::compute(const MatrixType& a) {
|
|
262
247
|
m_size = a.rows();
|
|
263
248
|
eigen_assert(a.rows() == a.cols());
|
|
264
249
|
|
|
265
250
|
pardisoRelease();
|
|
266
251
|
m_perm.setZero(m_size);
|
|
267
252
|
derived().getMatrix(a);
|
|
268
|
-
|
|
253
|
+
|
|
269
254
|
Index error;
|
|
270
|
-
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
271
|
-
|
|
272
|
-
|
|
255
|
+
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
256
|
+
m_pt, 1, 1, m_type, 12, internal::convert_index<StorageIndex>(m_size), m_matrix.valuePtr(),
|
|
257
|
+
m_matrix.outerIndexPtr(), m_matrix.innerIndexPtr(), m_perm.data(), 0, m_iparm.data(), m_msglvl, NULL, NULL);
|
|
273
258
|
manageErrorCode(error);
|
|
274
|
-
m_analysisIsOk =
|
|
275
|
-
m_factorizationIsOk =
|
|
259
|
+
m_analysisIsOk = m_info == Eigen::Success;
|
|
260
|
+
m_factorizationIsOk = m_info == Eigen::Success;
|
|
276
261
|
m_isInitialized = true;
|
|
277
262
|
return derived();
|
|
278
263
|
}
|
|
279
264
|
|
|
280
|
-
template<class Derived>
|
|
281
|
-
Derived& PardisoImpl<Derived>::analyzePattern(const MatrixType& a)
|
|
282
|
-
{
|
|
265
|
+
template <class Derived>
|
|
266
|
+
Derived& PardisoImpl<Derived>::analyzePattern(const MatrixType& a) {
|
|
283
267
|
m_size = a.rows();
|
|
284
268
|
eigen_assert(m_size == a.cols());
|
|
285
269
|
|
|
286
270
|
pardisoRelease();
|
|
287
271
|
m_perm.setZero(m_size);
|
|
288
272
|
derived().getMatrix(a);
|
|
289
|
-
|
|
273
|
+
|
|
290
274
|
Index error;
|
|
291
|
-
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
275
|
+
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
276
|
+
m_pt, 1, 1, m_type, 11, internal::convert_index<StorageIndex>(m_size), m_matrix.valuePtr(),
|
|
277
|
+
m_matrix.outerIndexPtr(), m_matrix.innerIndexPtr(), m_perm.data(), 0, m_iparm.data(), m_msglvl, NULL, NULL);
|
|
278
|
+
|
|
295
279
|
manageErrorCode(error);
|
|
296
|
-
m_analysisIsOk =
|
|
280
|
+
m_analysisIsOk = m_info == Eigen::Success;
|
|
297
281
|
m_factorizationIsOk = false;
|
|
298
282
|
m_isInitialized = true;
|
|
299
283
|
return derived();
|
|
300
284
|
}
|
|
301
285
|
|
|
302
|
-
template<class Derived>
|
|
303
|
-
Derived& PardisoImpl<Derived>::factorize(const MatrixType& a)
|
|
304
|
-
{
|
|
286
|
+
template <class Derived>
|
|
287
|
+
Derived& PardisoImpl<Derived>::factorize(const MatrixType& a) {
|
|
305
288
|
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
306
289
|
eigen_assert(m_size == a.rows() && m_size == a.cols());
|
|
307
|
-
|
|
290
|
+
|
|
308
291
|
derived().getMatrix(a);
|
|
309
292
|
|
|
310
293
|
Index error;
|
|
311
|
-
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
294
|
+
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
295
|
+
m_pt, 1, 1, m_type, 22, internal::convert_index<StorageIndex>(m_size), m_matrix.valuePtr(),
|
|
296
|
+
m_matrix.outerIndexPtr(), m_matrix.innerIndexPtr(), m_perm.data(), 0, m_iparm.data(), m_msglvl, NULL, NULL);
|
|
297
|
+
|
|
315
298
|
manageErrorCode(error);
|
|
316
|
-
m_factorizationIsOk =
|
|
299
|
+
m_factorizationIsOk = m_info == Eigen::Success;
|
|
317
300
|
return derived();
|
|
318
301
|
}
|
|
319
302
|
|
|
320
|
-
template<class Derived>
|
|
321
|
-
template<typename BDerived,typename XDerived>
|
|
322
|
-
void PardisoImpl<Derived>::_solve_impl(const MatrixBase<BDerived
|
|
323
|
-
|
|
324
|
-
if(m_iparm[0] == 0) // Factorization was not computed
|
|
303
|
+
template <class Derived>
|
|
304
|
+
template <typename BDerived, typename XDerived>
|
|
305
|
+
void PardisoImpl<Derived>::_solve_impl(const MatrixBase<BDerived>& b, MatrixBase<XDerived>& x) const {
|
|
306
|
+
if (m_iparm[0] == 0) // Factorization was not computed
|
|
325
307
|
{
|
|
326
308
|
m_info = InvalidInput;
|
|
327
309
|
return;
|
|
328
310
|
}
|
|
329
311
|
|
|
330
|
-
//Index n = m_matrix.rows();
|
|
312
|
+
// Index n = m_matrix.rows();
|
|
331
313
|
Index nrhs = Index(b.cols());
|
|
332
|
-
eigen_assert(m_size==b.rows());
|
|
333
|
-
eigen_assert(((MatrixBase<BDerived>::Flags & RowMajorBit) == 0 || nrhs == 1) &&
|
|
334
|
-
|
|
314
|
+
eigen_assert(m_size == b.rows());
|
|
315
|
+
eigen_assert(((MatrixBase<BDerived>::Flags & RowMajorBit) == 0 || nrhs == 1) &&
|
|
316
|
+
"Row-major right hand sides are not supported");
|
|
317
|
+
eigen_assert(((MatrixBase<XDerived>::Flags & RowMajorBit) == 0 || nrhs == 1) &&
|
|
318
|
+
"Row-major matrices of unknowns are not supported");
|
|
335
319
|
eigen_assert(((nrhs == 1) || b.outerStride() == b.rows()));
|
|
336
320
|
|
|
337
|
-
|
|
338
|
-
//
|
|
339
|
-
// case
|
|
340
|
-
// case
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
// }
|
|
321
|
+
// switch (transposed) {
|
|
322
|
+
// case SvNoTrans : m_iparm[11] = 0 ; break;
|
|
323
|
+
// case SvTranspose : m_iparm[11] = 2 ; break;
|
|
324
|
+
// case SvAdjoint : m_iparm[11] = 1 ; break;
|
|
325
|
+
// default:
|
|
326
|
+
// //std::cerr << "Eigen: transposition option \"" << transposed << "\" not supported by the PARDISO backend\n";
|
|
327
|
+
// m_iparm[11] = 0;
|
|
328
|
+
// }
|
|
346
329
|
|
|
347
330
|
Scalar* rhs_ptr = const_cast<Scalar*>(b.derived().data());
|
|
348
|
-
Matrix<Scalar,Dynamic,Dynamic,ColMajor> tmp;
|
|
349
|
-
|
|
331
|
+
Matrix<Scalar, Dynamic, Dynamic, ColMajor> tmp;
|
|
332
|
+
|
|
350
333
|
// Pardiso cannot solve in-place
|
|
351
|
-
if(rhs_ptr == x.derived().data())
|
|
352
|
-
{
|
|
334
|
+
if (rhs_ptr == x.derived().data()) {
|
|
353
335
|
tmp = b;
|
|
354
336
|
rhs_ptr = tmp.data();
|
|
355
337
|
}
|
|
356
|
-
|
|
338
|
+
|
|
357
339
|
Index error;
|
|
358
|
-
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
340
|
+
error = internal::pardiso_run_selector<StorageIndex>::run(
|
|
341
|
+
m_pt, 1, 1, m_type, 33, internal::convert_index<StorageIndex>(m_size), m_matrix.valuePtr(),
|
|
342
|
+
m_matrix.outerIndexPtr(), m_matrix.innerIndexPtr(), m_perm.data(), internal::convert_index<StorageIndex>(nrhs),
|
|
343
|
+
m_iparm.data(), m_msglvl, rhs_ptr, x.derived().data());
|
|
362
344
|
|
|
363
345
|
manageErrorCode(error);
|
|
364
346
|
}
|
|
365
347
|
|
|
366
|
-
|
|
367
348
|
/** \ingroup PardisoSupport_Module
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
template<typename MatrixType>
|
|
385
|
-
class PardisoLU : public PardisoImpl<
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
349
|
+
* \class PardisoLU
|
|
350
|
+
* \brief A sparse direct LU factorization and solver based on the PARDISO library
|
|
351
|
+
*
|
|
352
|
+
* This class allows to solve for A.X = B sparse linear problems via a direct LU factorization
|
|
353
|
+
* using the Intel MKL PARDISO library. The sparse matrix A must be squared and invertible.
|
|
354
|
+
* The vectors or matrices X and B can be either dense or sparse.
|
|
355
|
+
*
|
|
356
|
+
* By default, it runs in in-core mode. To enable PARDISO's out-of-core feature, set:
|
|
357
|
+
* \code solver.pardisoParameterArray()[59] = 1; \endcode
|
|
358
|
+
*
|
|
359
|
+
* \tparam MatrixType_ the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
360
|
+
*
|
|
361
|
+
* \implsparsesolverconcept
|
|
362
|
+
*
|
|
363
|
+
* \sa \ref TutorialSparseSolverConcept, class SparseLU
|
|
364
|
+
*/
|
|
365
|
+
template <typename MatrixType>
|
|
366
|
+
class PardisoLU : public PardisoImpl<PardisoLU<MatrixType> > {
|
|
367
|
+
protected:
|
|
368
|
+
typedef PardisoImpl<PardisoLU> Base;
|
|
369
|
+
using Base::m_matrix;
|
|
370
|
+
using Base::pardisoInit;
|
|
371
|
+
friend class PardisoImpl<PardisoLU<MatrixType> >;
|
|
372
|
+
|
|
373
|
+
public:
|
|
374
|
+
typedef typename Base::Scalar Scalar;
|
|
375
|
+
typedef typename Base::RealScalar RealScalar;
|
|
376
|
+
|
|
377
|
+
using Base::compute;
|
|
378
|
+
using Base::solve;
|
|
379
|
+
|
|
380
|
+
PardisoLU() : Base() { pardisoInit(Base::ScalarIsComplex ? 13 : 11); }
|
|
381
|
+
|
|
382
|
+
explicit PardisoLU(const MatrixType& matrix) : Base() {
|
|
383
|
+
pardisoInit(Base::ScalarIsComplex ? 13 : 11);
|
|
384
|
+
compute(matrix);
|
|
385
|
+
}
|
|
406
386
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
}
|
|
413
|
-
protected:
|
|
414
|
-
void getMatrix(const MatrixType& matrix)
|
|
415
|
-
{
|
|
416
|
-
m_matrix = matrix;
|
|
417
|
-
m_matrix.makeCompressed();
|
|
418
|
-
}
|
|
387
|
+
protected:
|
|
388
|
+
void getMatrix(const MatrixType& matrix) {
|
|
389
|
+
m_matrix = matrix;
|
|
390
|
+
m_matrix.makeCompressed();
|
|
391
|
+
}
|
|
419
392
|
};
|
|
420
393
|
|
|
421
394
|
/** \ingroup PardisoSupport_Module
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
template<typename MatrixType, int
|
|
441
|
-
class PardisoLLT : public PardisoImpl<
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
}
|
|
395
|
+
* \class PardisoLLT
|
|
396
|
+
* \brief A sparse direct Cholesky (LLT) factorization and solver based on the PARDISO library
|
|
397
|
+
*
|
|
398
|
+
* This class allows to solve for A.X = B sparse linear problems via a LL^T Cholesky factorization
|
|
399
|
+
* using the Intel MKL PARDISO library. The sparse matrix A must be selfajoint and positive definite.
|
|
400
|
+
* The vectors or matrices X and B can be either dense or sparse.
|
|
401
|
+
*
|
|
402
|
+
* By default, it runs in in-core mode. To enable PARDISO's out-of-core feature, set:
|
|
403
|
+
* \code solver.pardisoParameterArray()[59] = 1; \endcode
|
|
404
|
+
*
|
|
405
|
+
* \tparam MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
406
|
+
* \tparam UpLo can be any bitwise combination of Upper, Lower. The default is Upper, meaning only the upper triangular
|
|
407
|
+
* part has to be used. Upper|Lower can be used to tell both triangular parts can be used as input.
|
|
408
|
+
*
|
|
409
|
+
* \implsparsesolverconcept
|
|
410
|
+
*
|
|
411
|
+
* \sa \ref TutorialSparseSolverConcept, class SimplicialLLT
|
|
412
|
+
*/
|
|
413
|
+
template <typename MatrixType, int UpLo_>
|
|
414
|
+
class PardisoLLT : public PardisoImpl<PardisoLLT<MatrixType, UpLo_> > {
|
|
415
|
+
protected:
|
|
416
|
+
typedef PardisoImpl<PardisoLLT<MatrixType, UpLo_> > Base;
|
|
417
|
+
using Base::m_matrix;
|
|
418
|
+
using Base::pardisoInit;
|
|
419
|
+
friend class PardisoImpl<PardisoLLT<MatrixType, UpLo_> >;
|
|
420
|
+
|
|
421
|
+
public:
|
|
422
|
+
typedef typename Base::Scalar Scalar;
|
|
423
|
+
typedef typename Base::RealScalar RealScalar;
|
|
424
|
+
typedef typename Base::StorageIndex StorageIndex;
|
|
425
|
+
enum { UpLo = UpLo_ };
|
|
426
|
+
using Base::compute;
|
|
427
|
+
|
|
428
|
+
PardisoLLT() : Base() { pardisoInit(Base::ScalarIsComplex ? 4 : 2); }
|
|
429
|
+
|
|
430
|
+
explicit PardisoLLT(const MatrixType& matrix) : Base() {
|
|
431
|
+
pardisoInit(Base::ScalarIsComplex ? 4 : 2);
|
|
432
|
+
compute(matrix);
|
|
433
|
+
}
|
|
462
434
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
void getMatrix(const MatrixType& matrix)
|
|
473
|
-
{
|
|
474
|
-
// PARDISO supports only upper, row-major matrices
|
|
475
|
-
PermutationMatrix<Dynamic,Dynamic,StorageIndex> p_null;
|
|
476
|
-
m_matrix.resize(matrix.rows(), matrix.cols());
|
|
477
|
-
m_matrix.template selfadjointView<Upper>() = matrix.template selfadjointView<UpLo>().twistedBy(p_null);
|
|
478
|
-
m_matrix.makeCompressed();
|
|
479
|
-
}
|
|
435
|
+
protected:
|
|
436
|
+
void getMatrix(const MatrixType& matrix) {
|
|
437
|
+
// PARDISO supports only upper, row-major matrices
|
|
438
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> p_null;
|
|
439
|
+
m_matrix.resize(matrix.rows(), matrix.cols());
|
|
440
|
+
m_matrix.template selfadjointView<Upper>() = matrix.template selfadjointView<UpLo>().twistedBy(p_null);
|
|
441
|
+
m_matrix.makeCompressed();
|
|
442
|
+
}
|
|
480
443
|
};
|
|
481
444
|
|
|
482
445
|
/** \ingroup PardisoSupport_Module
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
{
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
446
|
+
* \class PardisoLDLT
|
|
447
|
+
* \brief A sparse direct Cholesky (LDLT) factorization and solver based on the PARDISO library
|
|
448
|
+
*
|
|
449
|
+
* This class allows to solve for A.X = B sparse linear problems via a LDL^T Cholesky factorization
|
|
450
|
+
* using the Intel MKL PARDISO library. The sparse matrix A is assumed to be selfajoint and positive definite.
|
|
451
|
+
* For complex matrices, A can also be symmetric only, see the \a Options template parameter.
|
|
452
|
+
* The vectors or matrices X and B can be either dense or sparse.
|
|
453
|
+
*
|
|
454
|
+
* By default, it runs in in-core mode. To enable PARDISO's out-of-core feature, set:
|
|
455
|
+
* \code solver.pardisoParameterArray()[59] = 1; \endcode
|
|
456
|
+
*
|
|
457
|
+
* \tparam MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
458
|
+
* \tparam Options can be any bitwise combination of Upper, Lower, and Symmetric. The default is Upper, meaning only the
|
|
459
|
+
* upper triangular part has to be used. Symmetric can be used for symmetric, non-selfadjoint complex matrices, the
|
|
460
|
+
* default being to assume a selfadjoint matrix. Upper|Lower can be used to tell both triangular parts can be used as
|
|
461
|
+
* input.
|
|
462
|
+
*
|
|
463
|
+
* \implsparsesolverconcept
|
|
464
|
+
*
|
|
465
|
+
* \sa \ref TutorialSparseSolverConcept, class SimplicialLDLT
|
|
466
|
+
*/
|
|
467
|
+
template <typename MatrixType, int Options>
|
|
468
|
+
class PardisoLDLT : public PardisoImpl<PardisoLDLT<MatrixType, Options> > {
|
|
469
|
+
protected:
|
|
470
|
+
typedef PardisoImpl<PardisoLDLT<MatrixType, Options> > Base;
|
|
471
|
+
using Base::m_matrix;
|
|
472
|
+
using Base::pardisoInit;
|
|
473
|
+
friend class PardisoImpl<PardisoLDLT<MatrixType, Options> >;
|
|
474
|
+
|
|
475
|
+
public:
|
|
476
|
+
typedef typename Base::Scalar Scalar;
|
|
477
|
+
typedef typename Base::RealScalar RealScalar;
|
|
478
|
+
typedef typename Base::StorageIndex StorageIndex;
|
|
479
|
+
using Base::compute;
|
|
480
|
+
enum { UpLo = Options & (Upper | Lower) };
|
|
481
|
+
|
|
482
|
+
PardisoLDLT() : Base() { pardisoInit(Base::ScalarIsComplex ? (bool(Options & Symmetric) ? 6 : -4) : -2); }
|
|
483
|
+
|
|
484
|
+
explicit PardisoLDLT(const MatrixType& matrix) : Base() {
|
|
485
|
+
pardisoInit(Base::ScalarIsComplex ? (bool(Options & Symmetric) ? 6 : -4) : -2);
|
|
486
|
+
compute(matrix);
|
|
487
|
+
}
|
|
525
488
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
void getMatrix(const MatrixType& matrix)
|
|
534
|
-
{
|
|
535
|
-
// PARDISO supports only upper, row-major matrices
|
|
536
|
-
PermutationMatrix<Dynamic,Dynamic,StorageIndex> p_null;
|
|
537
|
-
m_matrix.resize(matrix.rows(), matrix.cols());
|
|
538
|
-
m_matrix.template selfadjointView<Upper>() = matrix.template selfadjointView<UpLo>().twistedBy(p_null);
|
|
539
|
-
m_matrix.makeCompressed();
|
|
540
|
-
}
|
|
489
|
+
void getMatrix(const MatrixType& matrix) {
|
|
490
|
+
// PARDISO supports only upper, row-major matrices
|
|
491
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> p_null;
|
|
492
|
+
m_matrix.resize(matrix.rows(), matrix.cols());
|
|
493
|
+
m_matrix.template selfadjointView<Upper>() = matrix.template selfadjointView<UpLo>().twistedBy(p_null);
|
|
494
|
+
m_matrix.makeCompressed();
|
|
495
|
+
}
|
|
541
496
|
};
|
|
542
497
|
|
|
543
|
-
}
|
|
498
|
+
} // end namespace Eigen
|
|
544
499
|
|
|
545
|
-
#endif
|
|
500
|
+
#endif // EIGEN_PARDISOSUPPORT_H
|