@smake/eigen 1.0.2 → 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 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- 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 +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -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 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- 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 +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- 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 +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- 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 +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- 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 +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- 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 +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- 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 +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- 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 -46
- 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 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- 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 +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- 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 +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- 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 +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- 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 +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- 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 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- 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 +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- 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 +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- 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 +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- 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 +371 -414
- 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 +146 -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 +814 -618
- 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 +273 -255
- 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 +90 -101
- 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 +125 -133
- 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 +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- 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 -732
- 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 +480 -380
- 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 +9976 -16182
- 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.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- 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/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- 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 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -10,351 +10,339 @@
|
|
|
10
10
|
#ifndef EIGEN_PASTIXSUPPORT_H
|
|
11
11
|
#define EIGEN_PASTIXSUPPORT_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
#if defined(DCOMPLEX)
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
#define PASTIX_COMPLEX COMPLEX
|
|
20
|
+
#define PASTIX_DCOMPLEX DCOMPLEX
|
|
18
21
|
#else
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
#define PASTIX_COMPLEX std::complex<float>
|
|
23
|
+
#define PASTIX_DCOMPLEX std::complex<double>
|
|
21
24
|
#endif
|
|
22
25
|
|
|
23
26
|
/** \ingroup PaStiXSupport_Module
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
template<typename
|
|
32
|
-
|
|
33
|
-
template<typename
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, double *vals, int *perm, int * invp, double *x, int nbrhs, int *iparm, double *dparm)
|
|
75
|
-
{
|
|
76
|
-
if (n == 0) { ptr = NULL; idx = NULL; vals = NULL; }
|
|
77
|
-
if (nbrhs == 0) {x = NULL; nbrhs=1;}
|
|
78
|
-
d_pastix(pastix_data, pastix_comm, n, ptr, idx, vals, perm, invp, x, nbrhs, iparm, dparm);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, std::complex<float> *vals, int *perm, int * invp, std::complex<float> *x, int nbrhs, int *iparm, double *dparm)
|
|
82
|
-
{
|
|
83
|
-
if (n == 0) { ptr = NULL; idx = NULL; vals = NULL; }
|
|
84
|
-
if (nbrhs == 0) {x = NULL; nbrhs=1;}
|
|
85
|
-
c_pastix(pastix_data, pastix_comm, n, ptr, idx, reinterpret_cast<PASTIX_COMPLEX*>(vals), perm, invp, reinterpret_cast<PASTIX_COMPLEX*>(x), nbrhs, iparm, dparm);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, std::complex<double> *vals, int *perm, int * invp, std::complex<double> *x, int nbrhs, int *iparm, double *dparm)
|
|
89
|
-
{
|
|
90
|
-
if (n == 0) { ptr = NULL; idx = NULL; vals = NULL; }
|
|
91
|
-
if (nbrhs == 0) {x = NULL; nbrhs=1;}
|
|
92
|
-
z_pastix(pastix_data, pastix_comm, n, ptr, idx, reinterpret_cast<PASTIX_DCOMPLEX*>(vals), perm, invp, reinterpret_cast<PASTIX_DCOMPLEX*>(x), nbrhs, iparm, dparm);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Convert the matrix to Fortran-style Numbering
|
|
96
|
-
template <typename MatrixType>
|
|
97
|
-
void c_to_fortran_numbering (MatrixType& mat)
|
|
98
|
-
{
|
|
99
|
-
if ( !(mat.outerIndexPtr()[0]) )
|
|
100
|
-
{
|
|
101
|
-
int i;
|
|
102
|
-
for(i = 0; i <= mat.rows(); ++i)
|
|
103
|
-
++mat.outerIndexPtr()[i];
|
|
104
|
-
for(i = 0; i < mat.nonZeros(); ++i)
|
|
105
|
-
++mat.innerIndexPtr()[i];
|
|
106
|
-
}
|
|
27
|
+
* \brief Interface to the PaStix solver
|
|
28
|
+
*
|
|
29
|
+
* This class is used to solve the linear systems A.X = B via the PaStix library.
|
|
30
|
+
* The matrix can be either real or complex, symmetric or not.
|
|
31
|
+
*
|
|
32
|
+
* \sa TutorialSparseDirectSolvers
|
|
33
|
+
*/
|
|
34
|
+
template <typename MatrixType_, bool IsStrSym = false>
|
|
35
|
+
class PastixLU;
|
|
36
|
+
template <typename MatrixType_, int Options>
|
|
37
|
+
class PastixLLT;
|
|
38
|
+
template <typename MatrixType_, int Options>
|
|
39
|
+
class PastixLDLT;
|
|
40
|
+
|
|
41
|
+
namespace internal {
|
|
42
|
+
|
|
43
|
+
template <class Pastix>
|
|
44
|
+
struct pastix_traits;
|
|
45
|
+
|
|
46
|
+
template <typename MatrixType_>
|
|
47
|
+
struct pastix_traits<PastixLU<MatrixType_> > {
|
|
48
|
+
typedef MatrixType_ MatrixType;
|
|
49
|
+
typedef typename MatrixType_::Scalar Scalar;
|
|
50
|
+
typedef typename MatrixType_::RealScalar RealScalar;
|
|
51
|
+
typedef typename MatrixType_::StorageIndex StorageIndex;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
template <typename MatrixType_, int Options>
|
|
55
|
+
struct pastix_traits<PastixLLT<MatrixType_, Options> > {
|
|
56
|
+
typedef MatrixType_ MatrixType;
|
|
57
|
+
typedef typename MatrixType_::Scalar Scalar;
|
|
58
|
+
typedef typename MatrixType_::RealScalar RealScalar;
|
|
59
|
+
typedef typename MatrixType_::StorageIndex StorageIndex;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
template <typename MatrixType_, int Options>
|
|
63
|
+
struct pastix_traits<PastixLDLT<MatrixType_, Options> > {
|
|
64
|
+
typedef MatrixType_ MatrixType;
|
|
65
|
+
typedef typename MatrixType_::Scalar Scalar;
|
|
66
|
+
typedef typename MatrixType_::RealScalar RealScalar;
|
|
67
|
+
typedef typename MatrixType_::StorageIndex StorageIndex;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, float *vals,
|
|
71
|
+
int *perm, int *invp, float *x, int nbrhs, int *iparm, double *dparm) {
|
|
72
|
+
if (n == 0) {
|
|
73
|
+
ptr = NULL;
|
|
74
|
+
idx = NULL;
|
|
75
|
+
vals = NULL;
|
|
107
76
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
77
|
+
if (nbrhs == 0) {
|
|
78
|
+
x = NULL;
|
|
79
|
+
nbrhs = 1;
|
|
80
|
+
}
|
|
81
|
+
s_pastix(pastix_data, pastix_comm, n, ptr, idx, vals, perm, invp, x, nbrhs, iparm, dparm);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, double *vals,
|
|
85
|
+
int *perm, int *invp, double *x, int nbrhs, int *iparm, double *dparm) {
|
|
86
|
+
if (n == 0) {
|
|
87
|
+
ptr = NULL;
|
|
88
|
+
idx = NULL;
|
|
89
|
+
vals = NULL;
|
|
90
|
+
}
|
|
91
|
+
if (nbrhs == 0) {
|
|
92
|
+
x = NULL;
|
|
93
|
+
nbrhs = 1;
|
|
94
|
+
}
|
|
95
|
+
d_pastix(pastix_data, pastix_comm, n, ptr, idx, vals, perm, invp, x, nbrhs, iparm, dparm);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx,
|
|
99
|
+
std::complex<float> *vals, int *perm, int *invp, std::complex<float> *x, int nbrhs, int *iparm,
|
|
100
|
+
double *dparm) {
|
|
101
|
+
if (n == 0) {
|
|
102
|
+
ptr = NULL;
|
|
103
|
+
idx = NULL;
|
|
104
|
+
vals = NULL;
|
|
122
105
|
}
|
|
106
|
+
if (nbrhs == 0) {
|
|
107
|
+
x = NULL;
|
|
108
|
+
nbrhs = 1;
|
|
109
|
+
}
|
|
110
|
+
c_pastix(pastix_data, pastix_comm, n, ptr, idx, reinterpret_cast<PASTIX_COMPLEX *>(vals), perm, invp,
|
|
111
|
+
reinterpret_cast<PASTIX_COMPLEX *>(x), nbrhs, iparm, dparm);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx,
|
|
115
|
+
std::complex<double> *vals, int *perm, int *invp, std::complex<double> *x, int nbrhs,
|
|
116
|
+
int *iparm, double *dparm) {
|
|
117
|
+
if (n == 0) {
|
|
118
|
+
ptr = NULL;
|
|
119
|
+
idx = NULL;
|
|
120
|
+
vals = NULL;
|
|
121
|
+
}
|
|
122
|
+
if (nbrhs == 0) {
|
|
123
|
+
x = NULL;
|
|
124
|
+
nbrhs = 1;
|
|
125
|
+
}
|
|
126
|
+
z_pastix(pastix_data, pastix_comm, n, ptr, idx, reinterpret_cast<PASTIX_DCOMPLEX *>(vals), perm, invp,
|
|
127
|
+
reinterpret_cast<PASTIX_DCOMPLEX *>(x), nbrhs, iparm, dparm);
|
|
123
128
|
}
|
|
124
129
|
|
|
125
|
-
//
|
|
126
|
-
|
|
130
|
+
// Convert the matrix to Fortran-style Numbering
|
|
131
|
+
template <typename MatrixType>
|
|
132
|
+
void c_to_fortran_numbering(MatrixType &mat) {
|
|
133
|
+
if (!(mat.outerIndexPtr()[0])) {
|
|
134
|
+
int i;
|
|
135
|
+
for (i = 0; i <= mat.rows(); ++i) ++mat.outerIndexPtr()[i];
|
|
136
|
+
for (i = 0; i < mat.nonZeros(); ++i) ++mat.innerIndexPtr()[i];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Convert to C-style Numbering
|
|
141
|
+
template <typename MatrixType>
|
|
142
|
+
void fortran_to_c_numbering(MatrixType &mat) {
|
|
143
|
+
// Check the Numbering
|
|
144
|
+
if (mat.outerIndexPtr()[0] == 1) { // Convert to C-style numbering
|
|
145
|
+
int i;
|
|
146
|
+
for (i = 0; i <= mat.rows(); ++i) --mat.outerIndexPtr()[i];
|
|
147
|
+
for (i = 0; i < mat.nonZeros(); ++i) --mat.innerIndexPtr()[i];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} // namespace internal
|
|
151
|
+
|
|
152
|
+
// This is the base class to interface with PaStiX functions.
|
|
153
|
+
// Users should not used this class directly.
|
|
127
154
|
template <class Derived>
|
|
128
|
-
class PastixBase : public SparseSolverBase<Derived>
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
template<typename Rhs,typename Dest>
|
|
162
|
-
bool _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &x) const;
|
|
163
|
-
|
|
164
|
-
/** Returns a reference to the integer vector IPARM of PaStiX parameters
|
|
165
|
-
* to modify the default parameters.
|
|
166
|
-
* The statistics related to the different phases of factorization and solve are saved here as well
|
|
167
|
-
* \sa analyzePattern() factorize()
|
|
168
|
-
*/
|
|
169
|
-
Array<StorageIndex,IPARM_SIZE,1>& iparm()
|
|
170
|
-
{
|
|
171
|
-
return m_iparm;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/** Return a reference to a particular index parameter of the IPARM vector
|
|
175
|
-
* \sa iparm()
|
|
176
|
-
*/
|
|
177
|
-
|
|
178
|
-
int& iparm(int idxparam)
|
|
179
|
-
{
|
|
180
|
-
return m_iparm(idxparam);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/** Returns a reference to the double vector DPARM of PaStiX parameters
|
|
184
|
-
* The statistics related to the different phases of factorization and solve are saved here as well
|
|
185
|
-
* \sa analyzePattern() factorize()
|
|
186
|
-
*/
|
|
187
|
-
Array<double,DPARM_SIZE,1>& dparm()
|
|
188
|
-
{
|
|
189
|
-
return m_dparm;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
/** Return a reference to a particular index parameter of the DPARM vector
|
|
194
|
-
* \sa dparm()
|
|
195
|
-
*/
|
|
196
|
-
double& dparm(int idxparam)
|
|
197
|
-
{
|
|
198
|
-
return m_dparm(idxparam);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
inline Index cols() const { return m_size; }
|
|
202
|
-
inline Index rows() const { return m_size; }
|
|
203
|
-
|
|
204
|
-
/** \brief Reports whether previous computation was successful.
|
|
205
|
-
*
|
|
206
|
-
* \returns \c Success if computation was succesful,
|
|
207
|
-
* \c NumericalIssue if the PaStiX reports a problem
|
|
208
|
-
* \c InvalidInput if the input matrix is invalid
|
|
209
|
-
*
|
|
210
|
-
* \sa iparm()
|
|
211
|
-
*/
|
|
212
|
-
ComputationInfo info() const
|
|
213
|
-
{
|
|
214
|
-
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
215
|
-
return m_info;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
protected:
|
|
219
|
-
|
|
220
|
-
// Initialize the Pastix data structure, check the matrix
|
|
221
|
-
void init();
|
|
222
|
-
|
|
223
|
-
// Compute the ordering and the symbolic factorization
|
|
224
|
-
void analyzePattern(ColSpMatrix& mat);
|
|
225
|
-
|
|
226
|
-
// Compute the numerical factorization
|
|
227
|
-
void factorize(ColSpMatrix& mat);
|
|
228
|
-
|
|
229
|
-
// Free all the data allocated by Pastix
|
|
230
|
-
void clean()
|
|
231
|
-
{
|
|
232
|
-
eigen_assert(m_initisOk && "The Pastix structure should be allocated first");
|
|
233
|
-
m_iparm(IPARM_START_TASK) = API_TASK_CLEAN;
|
|
234
|
-
m_iparm(IPARM_END_TASK) = API_TASK_CLEAN;
|
|
235
|
-
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, (Scalar*)0,
|
|
236
|
-
m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
void compute(ColSpMatrix& mat);
|
|
240
|
-
|
|
241
|
-
int m_initisOk;
|
|
242
|
-
int m_analysisIsOk;
|
|
243
|
-
int m_factorizationIsOk;
|
|
244
|
-
mutable ComputationInfo m_info;
|
|
245
|
-
mutable pastix_data_t *m_pastixdata; // Data structure for pastix
|
|
246
|
-
mutable int m_comm; // The MPI communicator identifier
|
|
247
|
-
mutable Array<int,IPARM_SIZE,1> m_iparm; // integer vector for the input parameters
|
|
248
|
-
mutable Array<double,DPARM_SIZE,1> m_dparm; // Scalar vector for the input parameters
|
|
249
|
-
mutable Matrix<StorageIndex,Dynamic,1> m_perm; // Permutation vector
|
|
250
|
-
mutable Matrix<StorageIndex,Dynamic,1> m_invp; // Inverse permutation vector
|
|
251
|
-
mutable int m_size; // Size of the matrix
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
/** Initialize the PaStiX data structure.
|
|
255
|
-
*A first call to this function fills iparm and dparm with the default PaStiX parameters
|
|
256
|
-
* \sa iparm() dparm()
|
|
155
|
+
class PastixBase : public SparseSolverBase<Derived> {
|
|
156
|
+
protected:
|
|
157
|
+
typedef SparseSolverBase<Derived> Base;
|
|
158
|
+
using Base::derived;
|
|
159
|
+
using Base::m_isInitialized;
|
|
160
|
+
|
|
161
|
+
public:
|
|
162
|
+
using Base::_solve_impl;
|
|
163
|
+
|
|
164
|
+
typedef typename internal::pastix_traits<Derived>::MatrixType MatrixType_;
|
|
165
|
+
typedef MatrixType_ MatrixType;
|
|
166
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
167
|
+
typedef typename MatrixType::RealScalar RealScalar;
|
|
168
|
+
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
169
|
+
typedef Matrix<Scalar, Dynamic, 1> Vector;
|
|
170
|
+
typedef SparseMatrix<Scalar, ColMajor> ColSpMatrix;
|
|
171
|
+
enum { ColsAtCompileTime = MatrixType::ColsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime };
|
|
172
|
+
|
|
173
|
+
public:
|
|
174
|
+
PastixBase() : m_initisOk(false), m_analysisIsOk(false), m_factorizationIsOk(false), m_pastixdata(0), m_size(0) {
|
|
175
|
+
init();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
~PastixBase() { clean(); }
|
|
179
|
+
|
|
180
|
+
template <typename Rhs, typename Dest>
|
|
181
|
+
bool _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &x) const;
|
|
182
|
+
|
|
183
|
+
/** Returns a reference to the integer vector IPARM of PaStiX parameters
|
|
184
|
+
* to modify the default parameters.
|
|
185
|
+
* The statistics related to the different phases of factorization and solve are saved here as well
|
|
186
|
+
* \sa analyzePattern() factorize()
|
|
257
187
|
*/
|
|
188
|
+
Array<StorageIndex, IPARM_SIZE, 1> &iparm() { return m_iparm; }
|
|
189
|
+
|
|
190
|
+
/** Return a reference to a particular index parameter of the IPARM vector
|
|
191
|
+
* \sa iparm()
|
|
192
|
+
*/
|
|
193
|
+
|
|
194
|
+
int &iparm(int idxparam) { return m_iparm(idxparam); }
|
|
195
|
+
|
|
196
|
+
/** Returns a reference to the double vector DPARM of PaStiX parameters
|
|
197
|
+
* The statistics related to the different phases of factorization and solve are saved here as well
|
|
198
|
+
* \sa analyzePattern() factorize()
|
|
199
|
+
*/
|
|
200
|
+
Array<double, DPARM_SIZE, 1> &dparm() { return m_dparm; }
|
|
201
|
+
|
|
202
|
+
/** Return a reference to a particular index parameter of the DPARM vector
|
|
203
|
+
* \sa dparm()
|
|
204
|
+
*/
|
|
205
|
+
double &dparm(int idxparam) { return m_dparm(idxparam); }
|
|
206
|
+
|
|
207
|
+
inline Index cols() const { return m_size; }
|
|
208
|
+
inline Index rows() const { return m_size; }
|
|
209
|
+
|
|
210
|
+
/** \brief Reports whether previous computation was successful.
|
|
211
|
+
*
|
|
212
|
+
* \returns \c Success if computation was successful,
|
|
213
|
+
* \c NumericalIssue if the PaStiX reports a problem
|
|
214
|
+
* \c InvalidInput if the input matrix is invalid
|
|
215
|
+
*
|
|
216
|
+
* \sa iparm()
|
|
217
|
+
*/
|
|
218
|
+
ComputationInfo info() const {
|
|
219
|
+
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
220
|
+
return m_info;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
protected:
|
|
224
|
+
// Initialize the Pastix data structure, check the matrix
|
|
225
|
+
void init();
|
|
226
|
+
|
|
227
|
+
// Compute the ordering and the symbolic factorization
|
|
228
|
+
void analyzePattern(ColSpMatrix &mat);
|
|
229
|
+
|
|
230
|
+
// Compute the numerical factorization
|
|
231
|
+
void factorize(ColSpMatrix &mat);
|
|
232
|
+
|
|
233
|
+
// Free all the data allocated by Pastix
|
|
234
|
+
void clean() {
|
|
235
|
+
eigen_assert(m_initisOk && "The Pastix structure should be allocated first");
|
|
236
|
+
m_iparm(IPARM_START_TASK) = API_TASK_CLEAN;
|
|
237
|
+
m_iparm(IPARM_END_TASK) = API_TASK_CLEAN;
|
|
238
|
+
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, (Scalar *)0, m_perm.data(), m_invp.data(), 0, 0,
|
|
239
|
+
m_iparm.data(), m_dparm.data());
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
void compute(ColSpMatrix &mat);
|
|
243
|
+
|
|
244
|
+
int m_initisOk;
|
|
245
|
+
int m_analysisIsOk;
|
|
246
|
+
int m_factorizationIsOk;
|
|
247
|
+
mutable ComputationInfo m_info;
|
|
248
|
+
mutable pastix_data_t *m_pastixdata; // Data structure for pastix
|
|
249
|
+
mutable int m_comm; // The MPI communicator identifier
|
|
250
|
+
mutable Array<int, IPARM_SIZE, 1> m_iparm; // integer vector for the input parameters
|
|
251
|
+
mutable Array<double, DPARM_SIZE, 1> m_dparm; // Scalar vector for the input parameters
|
|
252
|
+
mutable Matrix<StorageIndex, Dynamic, 1> m_perm; // Permutation vector
|
|
253
|
+
mutable Matrix<StorageIndex, Dynamic, 1> m_invp; // Inverse permutation vector
|
|
254
|
+
mutable int m_size; // Size of the matrix
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
/** Initialize the PaStiX data structure.
|
|
258
|
+
*A first call to this function fills iparm and dparm with the default PaStiX parameters
|
|
259
|
+
* \sa iparm() dparm()
|
|
260
|
+
*/
|
|
258
261
|
template <class Derived>
|
|
259
|
-
void PastixBase<Derived>::init()
|
|
260
|
-
|
|
261
|
-
m_size = 0;
|
|
262
|
+
void PastixBase<Derived>::init() {
|
|
263
|
+
m_size = 0;
|
|
262
264
|
m_iparm.setZero(IPARM_SIZE);
|
|
263
265
|
m_dparm.setZero(DPARM_SIZE);
|
|
264
|
-
|
|
266
|
+
|
|
265
267
|
m_iparm(IPARM_MODIFY_PARAMETER) = API_NO;
|
|
266
|
-
pastix(&m_pastixdata, MPI_COMM_WORLD,
|
|
267
|
-
|
|
268
|
-
0, 0, 0, 1, m_iparm.data(), m_dparm.data());
|
|
269
|
-
|
|
268
|
+
pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, 0, 0, 0, 0, 1, m_iparm.data(), m_dparm.data());
|
|
269
|
+
|
|
270
270
|
m_iparm[IPARM_MATRIX_VERIFICATION] = API_NO;
|
|
271
|
-
m_iparm[IPARM_VERBOSE]
|
|
272
|
-
m_iparm[IPARM_ORDERING]
|
|
273
|
-
m_iparm[IPARM_INCOMPLETE]
|
|
274
|
-
m_iparm[IPARM_OOC_LIMIT]
|
|
275
|
-
m_iparm[IPARM_RHS_MAKING]
|
|
271
|
+
m_iparm[IPARM_VERBOSE] = API_VERBOSE_NOT;
|
|
272
|
+
m_iparm[IPARM_ORDERING] = API_ORDER_SCOTCH;
|
|
273
|
+
m_iparm[IPARM_INCOMPLETE] = API_NO;
|
|
274
|
+
m_iparm[IPARM_OOC_LIMIT] = 2000;
|
|
275
|
+
m_iparm[IPARM_RHS_MAKING] = API_RHS_B;
|
|
276
276
|
m_iparm(IPARM_MATRIX_VERIFICATION) = API_NO;
|
|
277
|
-
|
|
277
|
+
|
|
278
278
|
m_iparm(IPARM_START_TASK) = API_TASK_INIT;
|
|
279
279
|
m_iparm(IPARM_END_TASK) = API_TASK_INIT;
|
|
280
|
-
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, (Scalar*)0,
|
|
281
|
-
|
|
282
|
-
|
|
280
|
+
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, (Scalar *)0, 0, 0, 0, 0, m_iparm.data(),
|
|
281
|
+
m_dparm.data());
|
|
282
|
+
|
|
283
283
|
// Check the returned error
|
|
284
|
-
if(m_iparm(IPARM_ERROR_NUMBER)) {
|
|
284
|
+
if (m_iparm(IPARM_ERROR_NUMBER)) {
|
|
285
285
|
m_info = InvalidInput;
|
|
286
286
|
m_initisOk = false;
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
287
|
+
} else {
|
|
289
288
|
m_info = Success;
|
|
290
289
|
m_initisOk = true;
|
|
291
290
|
}
|
|
292
291
|
}
|
|
293
292
|
|
|
294
293
|
template <class Derived>
|
|
295
|
-
void PastixBase<Derived>::compute(ColSpMatrix&
|
|
296
|
-
{
|
|
294
|
+
void PastixBase<Derived>::compute(ColSpMatrix &mat) {
|
|
297
295
|
eigen_assert(mat.rows() == mat.cols() && "The input matrix should be squared");
|
|
298
|
-
|
|
299
|
-
analyzePattern(mat);
|
|
296
|
+
|
|
297
|
+
analyzePattern(mat);
|
|
300
298
|
factorize(mat);
|
|
301
|
-
|
|
299
|
+
|
|
302
300
|
m_iparm(IPARM_MATRIX_VERIFICATION) = API_NO;
|
|
303
301
|
}
|
|
304
302
|
|
|
305
|
-
|
|
306
303
|
template <class Derived>
|
|
307
|
-
void PastixBase<Derived>::analyzePattern(ColSpMatrix&
|
|
308
|
-
{
|
|
304
|
+
void PastixBase<Derived>::analyzePattern(ColSpMatrix &mat) {
|
|
309
305
|
eigen_assert(m_initisOk && "The initialization of PaSTiX failed");
|
|
310
|
-
|
|
306
|
+
|
|
311
307
|
// clean previous calls
|
|
312
|
-
if(m_size>0)
|
|
313
|
-
|
|
314
|
-
|
|
308
|
+
if (m_size > 0) clean();
|
|
309
|
+
|
|
315
310
|
m_size = internal::convert_index<int>(mat.rows());
|
|
316
311
|
m_perm.resize(m_size);
|
|
317
312
|
m_invp.resize(m_size);
|
|
318
|
-
|
|
313
|
+
|
|
319
314
|
m_iparm(IPARM_START_TASK) = API_TASK_ORDERING;
|
|
320
315
|
m_iparm(IPARM_END_TASK) = API_TASK_ANALYSE;
|
|
321
316
|
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, m_size, mat.outerIndexPtr(), mat.innerIndexPtr(),
|
|
322
|
-
|
|
323
|
-
|
|
317
|
+
mat.valuePtr(), m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
|
|
318
|
+
|
|
324
319
|
// Check the returned error
|
|
325
|
-
if(m_iparm(IPARM_ERROR_NUMBER))
|
|
326
|
-
{
|
|
320
|
+
if (m_iparm(IPARM_ERROR_NUMBER)) {
|
|
327
321
|
m_info = NumericalIssue;
|
|
328
322
|
m_analysisIsOk = false;
|
|
329
|
-
}
|
|
330
|
-
else
|
|
331
|
-
{
|
|
323
|
+
} else {
|
|
332
324
|
m_info = Success;
|
|
333
325
|
m_analysisIsOk = true;
|
|
334
326
|
}
|
|
335
327
|
}
|
|
336
328
|
|
|
337
329
|
template <class Derived>
|
|
338
|
-
void PastixBase<Derived>::factorize(ColSpMatrix&
|
|
339
|
-
|
|
340
|
-
// if(&m_cpyMat != &mat) m_cpyMat = mat;
|
|
330
|
+
void PastixBase<Derived>::factorize(ColSpMatrix &mat) {
|
|
331
|
+
// if(&m_cpyMat != &mat) m_cpyMat = mat;
|
|
341
332
|
eigen_assert(m_analysisIsOk && "The analysis phase should be called before the factorization phase");
|
|
342
333
|
m_iparm(IPARM_START_TASK) = API_TASK_NUMFACT;
|
|
343
334
|
m_iparm(IPARM_END_TASK) = API_TASK_NUMFACT;
|
|
344
335
|
m_size = internal::convert_index<int>(mat.rows());
|
|
345
|
-
|
|
336
|
+
|
|
346
337
|
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, m_size, mat.outerIndexPtr(), mat.innerIndexPtr(),
|
|
347
|
-
|
|
348
|
-
|
|
338
|
+
mat.valuePtr(), m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
|
|
339
|
+
|
|
349
340
|
// Check the returned error
|
|
350
|
-
if(m_iparm(IPARM_ERROR_NUMBER))
|
|
351
|
-
{
|
|
341
|
+
if (m_iparm(IPARM_ERROR_NUMBER)) {
|
|
352
342
|
m_info = NumericalIssue;
|
|
353
343
|
m_factorizationIsOk = false;
|
|
354
344
|
m_isInitialized = false;
|
|
355
|
-
}
|
|
356
|
-
else
|
|
357
|
-
{
|
|
345
|
+
} else {
|
|
358
346
|
m_info = Success;
|
|
359
347
|
m_factorizationIsOk = true;
|
|
360
348
|
m_isInitialized = true;
|
|
@@ -362,317 +350,283 @@ void PastixBase<Derived>::factorize(ColSpMatrix& mat)
|
|
|
362
350
|
}
|
|
363
351
|
|
|
364
352
|
/* Solve the system */
|
|
365
|
-
template<typename Base>
|
|
366
|
-
template<typename Rhs,typename Dest>
|
|
367
|
-
bool PastixBase<Base>::_solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &x) const
|
|
368
|
-
{
|
|
353
|
+
template <typename Base>
|
|
354
|
+
template <typename Rhs, typename Dest>
|
|
355
|
+
bool PastixBase<Base>::_solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &x) const {
|
|
369
356
|
eigen_assert(m_isInitialized && "The matrix should be factorized first");
|
|
370
|
-
EIGEN_STATIC_ASSERT((Dest::Flags&RowMajorBit)==0,
|
|
371
|
-
THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
|
357
|
+
EIGEN_STATIC_ASSERT((Dest::Flags & RowMajorBit) == 0, THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
|
372
358
|
int rhs = 1;
|
|
373
|
-
|
|
359
|
+
|
|
374
360
|
x = b; /* on return, x is overwritten by the computed solution */
|
|
375
|
-
|
|
376
|
-
for (int i = 0; i < b.cols(); i++){
|
|
377
|
-
m_iparm[IPARM_START_TASK]
|
|
378
|
-
m_iparm[IPARM_END_TASK]
|
|
379
|
-
|
|
361
|
+
|
|
362
|
+
for (int i = 0; i < b.cols(); i++) {
|
|
363
|
+
m_iparm[IPARM_START_TASK] = API_TASK_SOLVE;
|
|
364
|
+
m_iparm[IPARM_END_TASK] = API_TASK_REFINE;
|
|
365
|
+
|
|
380
366
|
internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, internal::convert_index<int>(x.rows()), 0, 0, 0,
|
|
381
367
|
m_perm.data(), m_invp.data(), &x(0, i), rhs, m_iparm.data(), m_dparm.data());
|
|
382
368
|
}
|
|
383
|
-
|
|
369
|
+
|
|
384
370
|
// Check the returned error
|
|
385
|
-
m_info = m_iparm(IPARM_ERROR_NUMBER)==0 ? Success : NumericalIssue;
|
|
386
|
-
|
|
387
|
-
return m_iparm(IPARM_ERROR_NUMBER)==0;
|
|
371
|
+
m_info = m_iparm(IPARM_ERROR_NUMBER) == 0 ? Success : NumericalIssue;
|
|
372
|
+
|
|
373
|
+
return m_iparm(IPARM_ERROR_NUMBER) == 0;
|
|
388
374
|
}
|
|
389
375
|
|
|
390
376
|
/** \ingroup PaStiXSupport_Module
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
template<typename
|
|
412
|
-
class PastixLU : public PastixBase<
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
419
|
-
|
|
420
|
-
public:
|
|
421
|
-
PastixLU() : Base()
|
|
422
|
-
{
|
|
423
|
-
init();
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
explicit PastixLU(const MatrixType& matrix):Base()
|
|
427
|
-
{
|
|
428
|
-
init();
|
|
429
|
-
compute(matrix);
|
|
430
|
-
}
|
|
431
|
-
/** Compute the LU supernodal factorization of \p matrix.
|
|
432
|
-
* iparm and dparm can be used to tune the PaStiX parameters.
|
|
433
|
-
* see the PaStiX user's manual
|
|
434
|
-
* \sa analyzePattern() factorize()
|
|
435
|
-
*/
|
|
436
|
-
void compute (const MatrixType& matrix)
|
|
437
|
-
{
|
|
438
|
-
m_structureIsUptodate = false;
|
|
439
|
-
ColSpMatrix temp;
|
|
440
|
-
grabMatrix(matrix, temp);
|
|
441
|
-
Base::compute(temp);
|
|
442
|
-
}
|
|
443
|
-
/** Compute the LU symbolic factorization of \p matrix using its sparsity pattern.
|
|
444
|
-
* Several ordering methods can be used at this step. See the PaStiX user's manual.
|
|
445
|
-
* The result of this operation can be used with successive matrices having the same pattern as \p matrix
|
|
446
|
-
* \sa factorize()
|
|
447
|
-
*/
|
|
448
|
-
void analyzePattern(const MatrixType& matrix)
|
|
449
|
-
{
|
|
450
|
-
m_structureIsUptodate = false;
|
|
451
|
-
ColSpMatrix temp;
|
|
452
|
-
grabMatrix(matrix, temp);
|
|
453
|
-
Base::analyzePattern(temp);
|
|
454
|
-
}
|
|
377
|
+
* \class PastixLU
|
|
378
|
+
* \brief Sparse direct LU solver based on PaStiX library
|
|
379
|
+
*
|
|
380
|
+
* This class is used to solve the linear systems A.X = B with a supernodal LU
|
|
381
|
+
* factorization in the PaStiX library. The matrix A should be squared and nonsingular
|
|
382
|
+
* PaStiX requires that the matrix A has a symmetric structural pattern.
|
|
383
|
+
* This interface can symmetrize the input matrix otherwise.
|
|
384
|
+
* The vectors or matrices X and B can be either dense or sparse.
|
|
385
|
+
*
|
|
386
|
+
* \tparam MatrixType_ the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
387
|
+
* \tparam IsStrSym Indicates if the input matrix has a symmetric pattern, default is false
|
|
388
|
+
* NOTE : Note that if the analysis and factorization phase are called separately,
|
|
389
|
+
* the input matrix will be symmetrized at each call, hence it is advised to
|
|
390
|
+
* symmetrize the matrix in a end-user program and set \p IsStrSym to true
|
|
391
|
+
*
|
|
392
|
+
* \implsparsesolverconcept
|
|
393
|
+
*
|
|
394
|
+
* \sa \ref TutorialSparseSolverConcept, class SparseLU
|
|
395
|
+
*
|
|
396
|
+
*/
|
|
397
|
+
template <typename MatrixType_, bool IsStrSym>
|
|
398
|
+
class PastixLU : public PastixBase<PastixLU<MatrixType_> > {
|
|
399
|
+
public:
|
|
400
|
+
typedef MatrixType_ MatrixType;
|
|
401
|
+
typedef PastixBase<PastixLU<MatrixType> > Base;
|
|
402
|
+
typedef typename Base::ColSpMatrix ColSpMatrix;
|
|
403
|
+
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
455
404
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
405
|
+
public:
|
|
406
|
+
PastixLU() : Base() { init(); }
|
|
407
|
+
|
|
408
|
+
explicit PastixLU(const MatrixType &matrix) : Base() {
|
|
409
|
+
init();
|
|
410
|
+
compute(matrix);
|
|
411
|
+
}
|
|
412
|
+
/** Compute the LU supernodal factorization of \p matrix.
|
|
413
|
+
* iparm and dparm can be used to tune the PaStiX parameters.
|
|
414
|
+
* see the PaStiX user's manual
|
|
415
|
+
* \sa analyzePattern() factorize()
|
|
416
|
+
*/
|
|
417
|
+
void compute(const MatrixType &matrix) {
|
|
418
|
+
m_structureIsUptodate = false;
|
|
419
|
+
ColSpMatrix temp;
|
|
420
|
+
grabMatrix(matrix, temp);
|
|
421
|
+
Base::compute(temp);
|
|
422
|
+
}
|
|
423
|
+
/** Compute the LU symbolic factorization of \p matrix using its sparsity pattern.
|
|
424
|
+
* Several ordering methods can be used at this step. See the PaStiX user's manual.
|
|
425
|
+
* The result of this operation can be used with successive matrices having the same pattern as \p matrix
|
|
426
|
+
* \sa factorize()
|
|
427
|
+
*/
|
|
428
|
+
void analyzePattern(const MatrixType &matrix) {
|
|
429
|
+
m_structureIsUptodate = false;
|
|
430
|
+
ColSpMatrix temp;
|
|
431
|
+
grabMatrix(matrix, temp);
|
|
432
|
+
Base::analyzePattern(temp);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/** Compute the LU supernodal factorization of \p matrix
|
|
436
|
+
* WARNING The matrix \p matrix should have the same structural pattern
|
|
437
|
+
* as the same used in the analysis phase.
|
|
438
|
+
* \sa analyzePattern()
|
|
439
|
+
*/
|
|
440
|
+
void factorize(const MatrixType &matrix) {
|
|
441
|
+
ColSpMatrix temp;
|
|
442
|
+
grabMatrix(matrix, temp);
|
|
443
|
+
Base::factorize(temp);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
protected:
|
|
447
|
+
void init() {
|
|
448
|
+
m_structureIsUptodate = false;
|
|
449
|
+
m_iparm(IPARM_SYM) = API_SYM_NO;
|
|
450
|
+
m_iparm(IPARM_FACTORIZATION) = API_FACT_LU;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
void grabMatrix(const MatrixType &matrix, ColSpMatrix &out) {
|
|
454
|
+
if (IsStrSym)
|
|
455
|
+
out = matrix;
|
|
456
|
+
else {
|
|
457
|
+
if (!m_structureIsUptodate) {
|
|
458
|
+
// update the transposed structure
|
|
459
|
+
m_transposedStructure = matrix.transpose();
|
|
460
|
+
|
|
461
|
+
// Set the elements of the matrix to zero
|
|
462
|
+
for (Index j = 0; j < m_transposedStructure.outerSize(); ++j)
|
|
463
|
+
for (typename ColSpMatrix::InnerIterator it(m_transposedStructure, j); it; ++it) it.valueRef() = 0.0;
|
|
464
|
+
|
|
465
|
+
m_structureIsUptodate = true;
|
|
496
466
|
}
|
|
497
|
-
|
|
467
|
+
|
|
468
|
+
out = m_transposedStructure + matrix;
|
|
498
469
|
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
470
|
+
internal::c_to_fortran_numbering(out);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
using Base::m_dparm;
|
|
474
|
+
using Base::m_iparm;
|
|
475
|
+
|
|
476
|
+
ColSpMatrix m_transposedStructure;
|
|
477
|
+
bool m_structureIsUptodate;
|
|
505
478
|
};
|
|
506
479
|
|
|
507
480
|
/** \ingroup PaStiXSupport_Module
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
template<typename
|
|
524
|
-
class PastixLLT : public PastixBase<
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
typedef typename Base::ColSpMatrix ColSpMatrix;
|
|
530
|
-
|
|
531
|
-
public:
|
|
532
|
-
enum { UpLo = _UpLo };
|
|
533
|
-
PastixLLT() : Base()
|
|
534
|
-
{
|
|
535
|
-
init();
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
explicit PastixLLT(const MatrixType& matrix):Base()
|
|
539
|
-
{
|
|
540
|
-
init();
|
|
541
|
-
compute(matrix);
|
|
542
|
-
}
|
|
481
|
+
* \class PastixLLT
|
|
482
|
+
* \brief A sparse direct supernodal Cholesky (LLT) factorization and solver based on the PaStiX library
|
|
483
|
+
*
|
|
484
|
+
* This class is used to solve the linear systems A.X = B via a LL^T supernodal Cholesky factorization
|
|
485
|
+
* available in the PaStiX library. The matrix A should be symmetric and positive definite
|
|
486
|
+
* WARNING Selfadjoint complex matrices are not supported in the current version of PaStiX
|
|
487
|
+
* The vectors or matrices X and B can be either dense or sparse
|
|
488
|
+
*
|
|
489
|
+
* \tparam MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
490
|
+
* \tparam UpLo The part of the matrix to use : Lower or Upper. The default is Lower as required by PaStiX
|
|
491
|
+
*
|
|
492
|
+
* \implsparsesolverconcept
|
|
493
|
+
*
|
|
494
|
+
* \sa \ref TutorialSparseSolverConcept, class SimplicialLLT
|
|
495
|
+
*/
|
|
496
|
+
template <typename MatrixType_, int UpLo_>
|
|
497
|
+
class PastixLLT : public PastixBase<PastixLLT<MatrixType_, UpLo_> > {
|
|
498
|
+
public:
|
|
499
|
+
typedef MatrixType_ MatrixType;
|
|
500
|
+
typedef PastixBase<PastixLLT<MatrixType, UpLo_> > Base;
|
|
501
|
+
typedef typename Base::ColSpMatrix ColSpMatrix;
|
|
543
502
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
void compute (const MatrixType& matrix)
|
|
548
|
-
{
|
|
549
|
-
ColSpMatrix temp;
|
|
550
|
-
grabMatrix(matrix, temp);
|
|
551
|
-
Base::compute(temp);
|
|
552
|
-
}
|
|
503
|
+
public:
|
|
504
|
+
enum { UpLo = UpLo_ };
|
|
505
|
+
PastixLLT() : Base() { init(); }
|
|
553
506
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
507
|
+
explicit PastixLLT(const MatrixType &matrix) : Base() {
|
|
508
|
+
init();
|
|
509
|
+
compute(matrix);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/** Compute the L factor of the LL^T supernodal factorization of \p matrix
|
|
513
|
+
* \sa analyzePattern() factorize()
|
|
514
|
+
*/
|
|
515
|
+
void compute(const MatrixType &matrix) {
|
|
516
|
+
ColSpMatrix temp;
|
|
517
|
+
grabMatrix(matrix, temp);
|
|
518
|
+
Base::compute(temp);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/** Compute the LL^T symbolic factorization of \p matrix using its sparsity pattern
|
|
522
|
+
* The result of this operation can be used with successive matrices having the same pattern as \p matrix
|
|
523
|
+
* \sa factorize()
|
|
524
|
+
*/
|
|
525
|
+
void analyzePattern(const MatrixType &matrix) {
|
|
526
|
+
ColSpMatrix temp;
|
|
527
|
+
grabMatrix(matrix, temp);
|
|
528
|
+
Base::analyzePattern(temp);
|
|
529
|
+
}
|
|
530
|
+
/** Compute the LL^T supernodal numerical factorization of \p matrix
|
|
531
|
+
* \sa analyzePattern()
|
|
532
|
+
*/
|
|
533
|
+
void factorize(const MatrixType &matrix) {
|
|
534
|
+
ColSpMatrix temp;
|
|
535
|
+
grabMatrix(matrix, temp);
|
|
536
|
+
Base::factorize(temp);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
protected:
|
|
540
|
+
using Base::m_iparm;
|
|
541
|
+
|
|
542
|
+
void init() {
|
|
543
|
+
m_iparm(IPARM_SYM) = API_SYM_YES;
|
|
544
|
+
m_iparm(IPARM_FACTORIZATION) = API_FACT_LLT;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
void grabMatrix(const MatrixType &matrix, ColSpMatrix &out) {
|
|
548
|
+
out.resize(matrix.rows(), matrix.cols());
|
|
549
|
+
// Pastix supports only lower, column-major matrices
|
|
550
|
+
out.template selfadjointView<Lower>() = matrix.template selfadjointView<UpLo>();
|
|
551
|
+
internal::c_to_fortran_numbering(out);
|
|
552
|
+
}
|
|
589
553
|
};
|
|
590
554
|
|
|
591
555
|
/** \ingroup PaStiXSupport_Module
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
template<typename
|
|
608
|
-
class PastixLDLT : public PastixBase<
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
typedef typename Base::ColSpMatrix ColSpMatrix;
|
|
614
|
-
|
|
615
|
-
public:
|
|
616
|
-
enum { UpLo = _UpLo };
|
|
617
|
-
PastixLDLT():Base()
|
|
618
|
-
{
|
|
619
|
-
init();
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
explicit PastixLDLT(const MatrixType& matrix):Base()
|
|
623
|
-
{
|
|
624
|
-
init();
|
|
625
|
-
compute(matrix);
|
|
626
|
-
}
|
|
556
|
+
* \class PastixLDLT
|
|
557
|
+
* \brief A sparse direct supernodal Cholesky (LLT) factorization and solver based on the PaStiX library
|
|
558
|
+
*
|
|
559
|
+
* This class is used to solve the linear systems A.X = B via a LDL^T supernodal Cholesky factorization
|
|
560
|
+
* available in the PaStiX library. The matrix A should be symmetric and positive definite
|
|
561
|
+
* WARNING Selfadjoint complex matrices are not supported in the current version of PaStiX
|
|
562
|
+
* The vectors or matrices X and B can be either dense or sparse
|
|
563
|
+
*
|
|
564
|
+
* \tparam MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
565
|
+
* \tparam UpLo The part of the matrix to use : Lower or Upper. The default is Lower as required by PaStiX
|
|
566
|
+
*
|
|
567
|
+
* \implsparsesolverconcept
|
|
568
|
+
*
|
|
569
|
+
* \sa \ref TutorialSparseSolverConcept, class SimplicialLDLT
|
|
570
|
+
*/
|
|
571
|
+
template <typename MatrixType_, int UpLo_>
|
|
572
|
+
class PastixLDLT : public PastixBase<PastixLDLT<MatrixType_, UpLo_> > {
|
|
573
|
+
public:
|
|
574
|
+
typedef MatrixType_ MatrixType;
|
|
575
|
+
typedef PastixBase<PastixLDLT<MatrixType, UpLo_> > Base;
|
|
576
|
+
typedef typename Base::ColSpMatrix ColSpMatrix;
|
|
627
577
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
void compute (const MatrixType& matrix)
|
|
632
|
-
{
|
|
633
|
-
ColSpMatrix temp;
|
|
634
|
-
grabMatrix(matrix, temp);
|
|
635
|
-
Base::compute(temp);
|
|
636
|
-
}
|
|
578
|
+
public:
|
|
579
|
+
enum { UpLo = UpLo_ };
|
|
580
|
+
PastixLDLT() : Base() { init(); }
|
|
637
581
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
void analyzePattern(const MatrixType& matrix)
|
|
643
|
-
{
|
|
644
|
-
ColSpMatrix temp;
|
|
645
|
-
grabMatrix(matrix, temp);
|
|
646
|
-
Base::analyzePattern(temp);
|
|
647
|
-
}
|
|
648
|
-
/** Compute the LDL^T supernodal numerical factorization of \p matrix
|
|
649
|
-
*
|
|
650
|
-
*/
|
|
651
|
-
void factorize(const MatrixType& matrix)
|
|
652
|
-
{
|
|
653
|
-
ColSpMatrix temp;
|
|
654
|
-
grabMatrix(matrix, temp);
|
|
655
|
-
Base::factorize(temp);
|
|
656
|
-
}
|
|
582
|
+
explicit PastixLDLT(const MatrixType &matrix) : Base() {
|
|
583
|
+
init();
|
|
584
|
+
compute(matrix);
|
|
585
|
+
}
|
|
657
586
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
587
|
+
/** Compute the L and D factors of the LDL^T factorization of \p matrix
|
|
588
|
+
* \sa analyzePattern() factorize()
|
|
589
|
+
*/
|
|
590
|
+
void compute(const MatrixType &matrix) {
|
|
591
|
+
ColSpMatrix temp;
|
|
592
|
+
grabMatrix(matrix, temp);
|
|
593
|
+
Base::compute(temp);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/** Compute the LDL^T symbolic factorization of \p matrix using its sparsity pattern
|
|
597
|
+
* The result of this operation can be used with successive matrices having the same pattern as \p matrix
|
|
598
|
+
* \sa factorize()
|
|
599
|
+
*/
|
|
600
|
+
void analyzePattern(const MatrixType &matrix) {
|
|
601
|
+
ColSpMatrix temp;
|
|
602
|
+
grabMatrix(matrix, temp);
|
|
603
|
+
Base::analyzePattern(temp);
|
|
604
|
+
}
|
|
605
|
+
/** Compute the LDL^T supernodal numerical factorization of \p matrix
|
|
606
|
+
*
|
|
607
|
+
*/
|
|
608
|
+
void factorize(const MatrixType &matrix) {
|
|
609
|
+
ColSpMatrix temp;
|
|
610
|
+
grabMatrix(matrix, temp);
|
|
611
|
+
Base::factorize(temp);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
protected:
|
|
615
|
+
using Base::m_iparm;
|
|
616
|
+
|
|
617
|
+
void init() {
|
|
618
|
+
m_iparm(IPARM_SYM) = API_SYM_YES;
|
|
619
|
+
m_iparm(IPARM_FACTORIZATION) = API_FACT_LDLT;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
void grabMatrix(const MatrixType &matrix, ColSpMatrix &out) {
|
|
623
|
+
// Pastix supports only lower, column-major matrices
|
|
624
|
+
out.resize(matrix.rows(), matrix.cols());
|
|
625
|
+
out.template selfadjointView<Lower>() = matrix.template selfadjointView<UpLo>();
|
|
626
|
+
internal::c_to_fortran_numbering(out);
|
|
627
|
+
}
|
|
674
628
|
};
|
|
675
629
|
|
|
676
|
-
}
|
|
630
|
+
} // end namespace Eigen
|
|
677
631
|
|
|
678
632
|
#endif
|