@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.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. 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
- namespace Eigen {
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
16
+ namespace Eigen {
14
17
 
15
18
  #if defined(DCOMPLEX)
16
- #define PASTIX_COMPLEX COMPLEX
17
- #define PASTIX_DCOMPLEX DCOMPLEX
19
+ #define PASTIX_COMPLEX COMPLEX
20
+ #define PASTIX_DCOMPLEX DCOMPLEX
18
21
  #else
19
- #define PASTIX_COMPLEX std::complex<float>
20
- #define PASTIX_DCOMPLEX std::complex<double>
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
- * \brief Interface to the PaStix solver
25
- *
26
- * This class is used to solve the linear systems A.X = B via the PaStix library.
27
- * The matrix can be either real or complex, symmetric or not.
28
- *
29
- * \sa TutorialSparseDirectSolvers
30
- */
31
- template<typename _MatrixType, bool IsStrSym = false> class PastixLU;
32
- template<typename _MatrixType, int Options> class PastixLLT;
33
- template<typename _MatrixType, int Options> class PastixLDLT;
34
-
35
- namespace internal
36
- {
37
-
38
- template<class Pastix> struct pastix_traits;
39
-
40
- template<typename _MatrixType>
41
- struct pastix_traits< PastixLU<_MatrixType> >
42
- {
43
- typedef _MatrixType MatrixType;
44
- typedef typename _MatrixType::Scalar Scalar;
45
- typedef typename _MatrixType::RealScalar RealScalar;
46
- typedef typename _MatrixType::StorageIndex StorageIndex;
47
- };
48
-
49
- template<typename _MatrixType, int Options>
50
- struct pastix_traits< PastixLLT<_MatrixType,Options> >
51
- {
52
- typedef _MatrixType MatrixType;
53
- typedef typename _MatrixType::Scalar Scalar;
54
- typedef typename _MatrixType::RealScalar RealScalar;
55
- typedef typename _MatrixType::StorageIndex StorageIndex;
56
- };
57
-
58
- template<typename _MatrixType, int Options>
59
- struct pastix_traits< PastixLDLT<_MatrixType,Options> >
60
- {
61
- typedef _MatrixType MatrixType;
62
- typedef typename _MatrixType::Scalar Scalar;
63
- typedef typename _MatrixType::RealScalar RealScalar;
64
- typedef typename _MatrixType::StorageIndex StorageIndex;
65
- };
66
-
67
- inline void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, float *vals, int *perm, int * invp, float *x, int nbrhs, int *iparm, double *dparm)
68
- {
69
- if (n == 0) { ptr = NULL; idx = NULL; vals = NULL; }
70
- if (nbrhs == 0) {x = NULL; nbrhs=1;}
71
- s_pastix(pastix_data, pastix_comm, n, ptr, idx, vals, perm, invp, x, nbrhs, iparm, dparm);
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
- // Convert to C-style Numbering
110
- template <typename MatrixType>
111
- void fortran_to_c_numbering (MatrixType& mat)
112
- {
113
- // Check the Numbering
114
- if ( mat.outerIndexPtr()[0] == 1 )
115
- { // Convert to C-style numbering
116
- int i;
117
- for(i = 0; i <= mat.rows(); ++i)
118
- --mat.outerIndexPtr()[i];
119
- for(i = 0; i < mat.nonZeros(); ++i)
120
- --mat.innerIndexPtr()[i];
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
- // This is the base class to interface with PaStiX functions.
126
- // Users should not used this class directly.
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
- protected:
131
- typedef SparseSolverBase<Derived> Base;
132
- using Base::derived;
133
- using Base::m_isInitialized;
134
- public:
135
- using Base::_solve_impl;
136
-
137
- typedef typename internal::pastix_traits<Derived>::MatrixType _MatrixType;
138
- typedef _MatrixType MatrixType;
139
- typedef typename MatrixType::Scalar Scalar;
140
- typedef typename MatrixType::RealScalar RealScalar;
141
- typedef typename MatrixType::StorageIndex StorageIndex;
142
- typedef Matrix<Scalar,Dynamic,1> Vector;
143
- typedef SparseMatrix<Scalar, ColMajor> ColSpMatrix;
144
- enum {
145
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
146
- MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
147
- };
148
-
149
- public:
150
-
151
- PastixBase() : m_initisOk(false), m_analysisIsOk(false), m_factorizationIsOk(false), m_pastixdata(0), m_size(0)
152
- {
153
- init();
154
- }
155
-
156
- ~PastixBase()
157
- {
158
- clean();
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
- 0, 0, 0, 0,
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] = 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;
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
- 0, 0, 0, 0, m_iparm.data(), m_dparm.data());
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& mat)
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& mat)
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
- clean();
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
- mat.valuePtr(), m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
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& mat)
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
- mat.valuePtr(), m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
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] = API_TASK_SOLVE;
378
- m_iparm[IPARM_END_TASK] = API_TASK_REFINE;
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
- * \class PastixLU
392
- * \brief Sparse direct LU solver based on PaStiX library
393
- *
394
- * This class is used to solve the linear systems A.X = B with a supernodal LU
395
- * factorization in the PaStiX library. The matrix A should be squared and nonsingular
396
- * PaStiX requires that the matrix A has a symmetric structural pattern.
397
- * This interface can symmetrize the input matrix otherwise.
398
- * The vectors or matrices X and B can be either dense or sparse.
399
- *
400
- * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
401
- * \tparam IsStrSym Indicates if the input matrix has a symmetric pattern, default is false
402
- * NOTE : Note that if the analysis and factorization phase are called separately,
403
- * the input matrix will be symmetrized at each call, hence it is advised to
404
- * symmetrize the matrix in a end-user program and set \p IsStrSym to true
405
- *
406
- * \implsparsesolverconcept
407
- *
408
- * \sa \ref TutorialSparseSolverConcept, class SparseLU
409
- *
410
- */
411
- template<typename _MatrixType, bool IsStrSym>
412
- class PastixLU : public PastixBase< PastixLU<_MatrixType> >
413
- {
414
- public:
415
- typedef _MatrixType MatrixType;
416
- typedef PastixBase<PastixLU<MatrixType> > Base;
417
- typedef typename Base::ColSpMatrix ColSpMatrix;
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
- /** Compute the LU supernodal factorization of \p matrix
457
- * WARNING The matrix \p matrix should have the same structural pattern
458
- * as the same used in the analysis phase.
459
- * \sa analyzePattern()
460
- */
461
- void factorize(const MatrixType& matrix)
462
- {
463
- ColSpMatrix temp;
464
- grabMatrix(matrix, temp);
465
- Base::factorize(temp);
466
- }
467
- protected:
468
-
469
- void init()
470
- {
471
- m_structureIsUptodate = false;
472
- m_iparm(IPARM_SYM) = API_SYM_NO;
473
- m_iparm(IPARM_FACTORIZATION) = API_FACT_LU;
474
- }
475
-
476
- void grabMatrix(const MatrixType& matrix, ColSpMatrix& out)
477
- {
478
- if(IsStrSym)
479
- out = matrix;
480
- else
481
- {
482
- if(!m_structureIsUptodate)
483
- {
484
- // update the transposed structure
485
- m_transposedStructure = matrix.transpose();
486
-
487
- // Set the elements of the matrix to zero
488
- for (Index j=0; j<m_transposedStructure.outerSize(); ++j)
489
- for(typename ColSpMatrix::InnerIterator it(m_transposedStructure, j); it; ++it)
490
- it.valueRef() = 0.0;
491
-
492
- m_structureIsUptodate = true;
493
- }
494
-
495
- out = m_transposedStructure + matrix;
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
- internal::c_to_fortran_numbering(out);
467
+
468
+ out = m_transposedStructure + matrix;
498
469
  }
499
-
500
- using Base::m_iparm;
501
- using Base::m_dparm;
502
-
503
- ColSpMatrix m_transposedStructure;
504
- bool m_structureIsUptodate;
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
- * \class PastixLLT
509
- * \brief A sparse direct supernodal Cholesky (LLT) factorization and solver based on the PaStiX library
510
- *
511
- * This class is used to solve the linear systems A.X = B via a LL^T supernodal Cholesky factorization
512
- * available in the PaStiX library. The matrix A should be symmetric and positive definite
513
- * WARNING Selfadjoint complex matrices are not supported in the current version of PaStiX
514
- * The vectors or matrices X and B can be either dense or sparse
515
- *
516
- * \tparam MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
517
- * \tparam UpLo The part of the matrix to use : Lower or Upper. The default is Lower as required by PaStiX
518
- *
519
- * \implsparsesolverconcept
520
- *
521
- * \sa \ref TutorialSparseSolverConcept, class SimplicialLLT
522
- */
523
- template<typename _MatrixType, int _UpLo>
524
- class PastixLLT : public PastixBase< PastixLLT<_MatrixType, _UpLo> >
525
- {
526
- public:
527
- typedef _MatrixType MatrixType;
528
- typedef PastixBase<PastixLLT<MatrixType, _UpLo> > Base;
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
- /** Compute the L factor of the LL^T supernodal factorization of \p matrix
545
- * \sa analyzePattern() factorize()
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
- /** Compute the LL^T symbolic factorization of \p matrix using its sparsity pattern
555
- * The result of this operation can be used with successive matrices having the same pattern as \p matrix
556
- * \sa factorize()
557
- */
558
- void analyzePattern(const MatrixType& matrix)
559
- {
560
- ColSpMatrix temp;
561
- grabMatrix(matrix, temp);
562
- Base::analyzePattern(temp);
563
- }
564
- /** Compute the LL^T supernodal numerical factorization of \p matrix
565
- * \sa analyzePattern()
566
- */
567
- void factorize(const MatrixType& matrix)
568
- {
569
- ColSpMatrix temp;
570
- grabMatrix(matrix, temp);
571
- Base::factorize(temp);
572
- }
573
- protected:
574
- using Base::m_iparm;
575
-
576
- void init()
577
- {
578
- m_iparm(IPARM_SYM) = API_SYM_YES;
579
- m_iparm(IPARM_FACTORIZATION) = API_FACT_LLT;
580
- }
581
-
582
- void grabMatrix(const MatrixType& matrix, ColSpMatrix& out)
583
- {
584
- out.resize(matrix.rows(), matrix.cols());
585
- // Pastix supports only lower, column-major matrices
586
- out.template selfadjointView<Lower>() = matrix.template selfadjointView<UpLo>();
587
- internal::c_to_fortran_numbering(out);
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
- * \class PastixLDLT
593
- * \brief A sparse direct supernodal Cholesky (LLT) factorization and solver based on the PaStiX library
594
- *
595
- * This class is used to solve the linear systems A.X = B via a LDL^T supernodal Cholesky factorization
596
- * available in the PaStiX library. The matrix A should be symmetric and positive definite
597
- * WARNING Selfadjoint complex matrices are not supported in the current version of PaStiX
598
- * The vectors or matrices X and B can be either dense or sparse
599
- *
600
- * \tparam MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
601
- * \tparam UpLo The part of the matrix to use : Lower or Upper. The default is Lower as required by PaStiX
602
- *
603
- * \implsparsesolverconcept
604
- *
605
- * \sa \ref TutorialSparseSolverConcept, class SimplicialLDLT
606
- */
607
- template<typename _MatrixType, int _UpLo>
608
- class PastixLDLT : public PastixBase< PastixLDLT<_MatrixType, _UpLo> >
609
- {
610
- public:
611
- typedef _MatrixType MatrixType;
612
- typedef PastixBase<PastixLDLT<MatrixType, _UpLo> > Base;
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
- /** Compute the L and D factors of the LDL^T factorization of \p matrix
629
- * \sa analyzePattern() factorize()
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
- /** Compute the LDL^T symbolic factorization of \p matrix using its sparsity pattern
639
- * The result of this operation can be used with successive matrices having the same pattern as \p matrix
640
- * \sa factorize()
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
- protected:
659
- using Base::m_iparm;
660
-
661
- void init()
662
- {
663
- m_iparm(IPARM_SYM) = API_SYM_YES;
664
- m_iparm(IPARM_FACTORIZATION) = API_FACT_LDLT;
665
- }
666
-
667
- void grabMatrix(const MatrixType& matrix, ColSpMatrix& out)
668
- {
669
- // Pastix supports only lower, column-major matrices
670
- out.resize(matrix.rows(), matrix.cols());
671
- out.template selfadjointView<Lower>() = matrix.template selfadjointView<UpLo>();
672
- internal::c_to_fortran_numbering(out);
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
- } // end namespace Eigen
630
+ } // end namespace Eigen
677
631
 
678
632
  #endif