pyvale 2026.1.1__cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- include/eigen3/Eigen/Cholesky +45 -0
- include/eigen3/Eigen/CholmodSupport +48 -0
- include/eigen3/Eigen/Core +384 -0
- include/eigen3/Eigen/Dense +7 -0
- include/eigen3/Eigen/Eigen +2 -0
- include/eigen3/Eigen/Eigenvalues +60 -0
- include/eigen3/Eigen/Geometry +59 -0
- include/eigen3/Eigen/Householder +29 -0
- include/eigen3/Eigen/IterativeLinearSolvers +48 -0
- include/eigen3/Eigen/Jacobi +32 -0
- include/eigen3/Eigen/KLUSupport +41 -0
- include/eigen3/Eigen/LU +47 -0
- include/eigen3/Eigen/MetisSupport +35 -0
- include/eigen3/Eigen/OrderingMethods +70 -0
- include/eigen3/Eigen/PaStiXSupport +49 -0
- include/eigen3/Eigen/PardisoSupport +35 -0
- include/eigen3/Eigen/QR +50 -0
- include/eigen3/Eigen/QtAlignedMalloc +39 -0
- include/eigen3/Eigen/SPQRSupport +34 -0
- include/eigen3/Eigen/SVD +50 -0
- include/eigen3/Eigen/Sparse +34 -0
- include/eigen3/Eigen/SparseCholesky +37 -0
- include/eigen3/Eigen/SparseCore +69 -0
- include/eigen3/Eigen/SparseLU +50 -0
- include/eigen3/Eigen/SparseQR +36 -0
- include/eigen3/Eigen/StdDeque +27 -0
- include/eigen3/Eigen/StdList +26 -0
- include/eigen3/Eigen/StdVector +27 -0
- include/eigen3/Eigen/SuperLUSupport +64 -0
- include/eigen3/Eigen/UmfPackSupport +40 -0
- include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
- include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
- include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
- include/eigen3/Eigen/src/Core/Array.h +417 -0
- include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
- include/eigen3/Eigen/src/Core/Assign.h +90 -0
- include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
- include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
- include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
- include/eigen3/Eigen/src/Core/Block.h +448 -0
- include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
- include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
- include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
- include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
- include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
- include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
- include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
- include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
- include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
- include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
- include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
- include/eigen3/Eigen/src/Core/Dot.h +318 -0
- include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
- include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
- include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
- include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
- include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
- include/eigen3/Eigen/src/Core/IO.h +258 -0
- include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
- include/eigen3/Eigen/src/Core/Inverse.h +117 -0
- include/eigen3/Eigen/src/Core/Map.h +171 -0
- include/eigen3/Eigen/src/Core/MapBase.h +310 -0
- include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
- include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- include/eigen3/Eigen/src/Core/Matrix.h +565 -0
- include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
- include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
- include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
- include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
- include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
- include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
- include/eigen3/Eigen/src/Core/Product.h +191 -0
- include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
- include/eigen3/Eigen/src/Core/Random.h +218 -0
- include/eigen3/Eigen/src/Core/Redux.h +515 -0
- include/eigen3/Eigen/src/Core/Ref.h +381 -0
- include/eigen3/Eigen/src/Core/Replicate.h +142 -0
- include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
- include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
- include/eigen3/Eigen/src/Core/Reverse.h +217 -0
- include/eigen3/Eigen/src/Core/Select.h +164 -0
- include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
- include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- include/eigen3/Eigen/src/Core/Solve.h +188 -0
- include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
- include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
- include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
- include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
- include/eigen3/Eigen/src/Core/Stride.h +116 -0
- include/eigen3/Eigen/src/Core/Swap.h +68 -0
- include/eigen3/Eigen/src/Core/Transpose.h +464 -0
- include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
- include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
- include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
- include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
- include/eigen3/Eigen/src/Core/Visitor.h +381 -0
- include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
- include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
- include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
- include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
- include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
- include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
- include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
- include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
- include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
- include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
- include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
- include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
- include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
- include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
- include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
- include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
- include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
- include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
- include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
- include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
- include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
- include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
- include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
- include/eigen3/Eigen/src/Householder/Householder.h +176 -0
- include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
- include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- include/eigen3/Eigen/src/LU/Determinant.h +117 -0
- include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
- include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
- include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
- include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
- include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
- include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
- include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
- include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
- include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
- include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
- include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
- include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
- include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
- include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
- include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
- include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
- include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
- include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
- include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
- include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
- include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
- include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
- include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
- include/eigen3/Eigen/src/StlSupport/details.h +84 -0
- include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- include/eigen3/Eigen/src/misc/Image.h +82 -0
- include/eigen3/Eigen/src/misc/Kernel.h +79 -0
- include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
- include/eigen3/Eigen/src/misc/blas.h +440 -0
- include/eigen3/Eigen/src/misc/lapack.h +152 -0
- include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
- include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
- include/eigen3/signature_of_eigen3_matrix_library +1 -0
- include/eigen3/unsupported/Eigen/AdolcForward +159 -0
- include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
- include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
- include/eigen3/unsupported/Eigen/AutoDiff +46 -0
- include/eigen3/unsupported/Eigen/BVH +95 -0
- include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
- include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
- include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
- include/eigen3/unsupported/Eigen/EulerAngles +43 -0
- include/eigen3/unsupported/Eigen/FFT +419 -0
- include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
- include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
- include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
- include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
- include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
- include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
- include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
- include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
- include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
- include/eigen3/unsupported/Eigen/Polynomials +137 -0
- include/eigen3/unsupported/Eigen/Skyline +39 -0
- include/eigen3/unsupported/Eigen/SparseExtra +54 -0
- include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
- include/eigen3/unsupported/Eigen/Splines +35 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
- include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
- include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
- include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
- include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
- include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
- include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
- include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
- pyvale/__init__.py +23 -0
- pyvale/blender/__init__.py +23 -0
- pyvale/blender/blendercalibrationdata.py +17 -0
- pyvale/blender/blenderexceptions.py +8 -0
- pyvale/blender/blenderlightdata.py +26 -0
- pyvale/blender/blendermaterialdata.py +15 -0
- pyvale/blender/blenderrenderdata.py +35 -0
- pyvale/blender/blenderscene.py +493 -0
- pyvale/blender/blendertools.py +449 -0
- pyvale/calib/__init__.py +11 -0
- pyvale/calib/calibcpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/calib/calibdotdetect.py +510 -0
- pyvale/calib/calibparams.py +47 -0
- pyvale/calib/calibstereo.py +441 -0
- pyvale/calib/cpp/bindings.cpp +22 -0
- pyvale/calib/cpp/calibdotdetect.cpp +16 -0
- pyvale/calib/cpp/calibdotdetect.hpp +20 -0
- pyvale/calib/cpp/calibopt.cpp +347 -0
- pyvale/calib/cpp/calibopt.hpp +84 -0
- pyvale/calib/cpp/calibstereo.cpp +95 -0
- pyvale/calib/cpp/calibstereo.hpp +27 -0
- pyvale/common_cpp/__init__.py +5 -0
- pyvale/common_cpp/bindings.cpp +33 -0
- pyvale/common_cpp/common_cpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/common_cpp/defines.hpp +39 -0
- pyvale/common_cpp/dicsignalhandler.cpp +16 -0
- pyvale/common_cpp/dicsignalhandler.hpp +11 -0
- pyvale/common_cpp/pocketfft_hdronly.h +3744 -0
- pyvale/common_cpp/progressbar.hpp +107 -0
- pyvale/common_cpp/util.cpp +19 -0
- pyvale/common_cpp/util.hpp +72 -0
- pyvale/common_py/util.py +63 -0
- pyvale/data/DIC_Challenge_Star_Noise_Def.tiff +0 -0
- pyvale/data/DIC_Challenge_Star_Noise_Ref.tiff +0 -0
- pyvale/data/__init__.py +5 -0
- pyvale/data/cal_target.tiff +0 -0
- pyvale/data/calib.caldat +26 -0
- pyvale/data/case00_HEX20_out.e +0 -0
- pyvale/data/case00_HEX27_out.e +0 -0
- pyvale/data/case00_HEX8_out.e +0 -0
- pyvale/data/case00_TET10_out.e +0 -0
- pyvale/data/case00_TET14_out.e +0 -0
- pyvale/data/case00_TET4_out.e +0 -0
- pyvale/data/case16_d_out.e +0 -0
- pyvale/data/case16_out.e +0 -0
- pyvale/data/case17_out.e +0 -0
- pyvale/data/case18_d_out.e +0 -0
- pyvale/data/case18_out.e +0 -0
- pyvale/data/case26_out.e +0 -0
- pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff +0 -0
- pyvale/data/plate_hole_def0000.tiff +0 -0
- pyvale/data/plate_hole_def0001.tiff +0 -0
- pyvale/data/plate_hole_ref0000.tiff +0 -0
- pyvale/data/plate_rigid_def0000.tiff +0 -0
- pyvale/data/plate_rigid_def0001.tiff +0 -0
- pyvale/data/plate_rigid_def_25px.tiff +0 -0
- pyvale/data/plate_rigid_def_50px.tiff +0 -0
- pyvale/data/plate_rigid_ref0000.tiff +0 -0
- pyvale/dataset/__init__.py +7 -0
- pyvale/dataset/dataset.py +483 -0
- pyvale/dic/__init__.py +15 -0
- pyvale/dic/cpp/bindings.cpp +52 -0
- pyvale/dic/cpp/dicfourier.cpp +705 -0
- pyvale/dic/cpp/dicfourier.hpp +410 -0
- pyvale/dic/cpp/dicinterpolator.cpp +633 -0
- pyvale/dic/cpp/dicinterpolator.hpp +162 -0
- pyvale/dic/cpp/dicmain.cpp +214 -0
- pyvale/dic/cpp/dicmain.hpp +61 -0
- pyvale/dic/cpp/dicoptimizer.cpp +564 -0
- pyvale/dic/cpp/dicoptimizer.hpp +279 -0
- pyvale/dic/cpp/dicresults.cpp +239 -0
- pyvale/dic/cpp/dicresults.hpp +64 -0
- pyvale/dic/cpp/dicrg.cpp +55 -0
- pyvale/dic/cpp/dicrg.hpp +52 -0
- pyvale/dic/cpp/dicscanmethod.cpp +819 -0
- pyvale/dic/cpp/dicscanmethod.hpp +119 -0
- pyvale/dic/cpp/dicshapefunc.cpp +117 -0
- pyvale/dic/cpp/dicshapefunc.hpp +40 -0
- pyvale/dic/cpp/dicsubset.cpp +325 -0
- pyvale/dic/cpp/dicsubset.hpp +122 -0
- pyvale/dic/cpp/dicutil.cpp +108 -0
- pyvale/dic/cpp/dicutil.hpp +96 -0
- pyvale/dic/cuda/malloc.cu +99 -0
- pyvale/dic/cuda/malloc.hpp +17 -0
- pyvale/dic/dic2d.py +190 -0
- pyvale/dic/dic2dconv.py +6 -0
- pyvale/dic/dic2dcpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/dic/dicchecks.py +455 -0
- pyvale/dic/dicdataimport.py +402 -0
- pyvale/dic/dicregionofinterest.py +1163 -0
- pyvale/dic/dicresults.py +58 -0
- pyvale/examples/__init__.py +5 -0
- pyvale/examples/basicsensorsim/README.md +2 -0
- pyvale/examples/basicsensorsim/ex0_quickstart.py +139 -0
- pyvale/examples/basicsensorsim/ex1_scalar_sensors.py +240 -0
- pyvale/examples/basicsensorsim/ex2_vector_tensor_sensors.py +280 -0
- pyvale/examples/basicsensorsim/ex3_experiment_simulator.py +397 -0
- pyvale/examples/blenderimagedef/README.md +2 -0
- pyvale/examples/blenderimagedef/ex1_blender_scene2d.py +176 -0
- pyvale/examples/blenderimagedef/ex2_blender_imagedef2d.py +177 -0
- pyvale/examples/blenderimagedef/ex3_blender_scenestereo.py +205 -0
- pyvale/examples/blenderimagedef/ex4_blender_imagedefstereo.py +213 -0
- pyvale/examples/blenderimagedef/ex5_blender_calibstereo.py +190 -0
- pyvale/examples/dic/README.md +2 -0
- pyvale/examples/dic/ex1_region_of_interest.py +101 -0
- pyvale/examples/dic/ex2_plate_with_hole.py +155 -0
- pyvale/examples/dic/ex3_plate_with_hole_strain.py +99 -0
- pyvale/examples/dic/ex4_dic_blender.py +97 -0
- pyvale/examples/dic/ex5_dic_challenge.py +107 -0
- pyvale/examples/extsensorsim/README.md +2 -0
- pyvale/examples/extsensorsim/ex1_byosimdata.py +211 -0
- pyvale/examples/extsensorsim/ex2_meshfreesensors.py +174 -0
- pyvale/examples/extsensorsim/ex3a_scal2d.py +151 -0
- pyvale/examples/extsensorsim/ex3b_scal3d.py +150 -0
- pyvale/examples/extsensorsim/ex3c_vec2d.py +163 -0
- pyvale/examples/extsensorsim/ex3d_vec3d.py +169 -0
- pyvale/examples/extsensorsim/ex3e_tens2d.py +170 -0
- pyvale/examples/extsensorsim/ex3f_tens3d.py +198 -0
- pyvale/examples/extsensorsim/ex4a_basicerrs_scal2d.py +201 -0
- pyvale/examples/extsensorsim/ex4b_fielderrs_scal3d.py +197 -0
- pyvale/examples/extsensorsim/ex4c_angleerrs_vec2d.py +215 -0
- pyvale/examples/extsensorsim/ex4d_fieldlockerrs_vec3d.py +184 -0
- pyvale/examples/extsensorsim/ex4e_chainfielderrs_vec2d.py +233 -0
- pyvale/examples/extsensorsim/ex4f_caliberrs_scal2d.py +167 -0
- pyvale/examples/extsensorsim/ex4g_spatavgerrs_scal2d.py +146 -0
- pyvale/examples/extsensorsim/ex5a_expsim_thermmech2d.py +350 -0
- pyvale/examples/extsensorsim/ex5b_expsim_thermmech3d.py +358 -0
- pyvale/examples/genanalyticdata/ex1_1_scalarvisualisation.py +41 -0
- pyvale/examples/genanalyticdata/ex1_2_scalarcasebuild.py +43 -0
- pyvale/examples/genanalyticdata/ex2_1_analyticsensors.py +86 -0
- pyvale/examples/genanalyticdata/ex2_2_analyticsensors_nomesh.py +89 -0
- pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +84 -0
- pyvale/examples/mooseherder/README.md +2 -0
- pyvale/examples/mooseherder/ex0_create_moose_config.py +65 -0
- pyvale/examples/mooseherder/ex1a_modify_moose_input.py +71 -0
- pyvale/examples/mooseherder/ex1b_modify_gmsh_input.py +69 -0
- pyvale/examples/mooseherder/ex2a_run_moose_once.py +80 -0
- pyvale/examples/mooseherder/ex2b_run_gmsh_once.py +64 -0
- pyvale/examples/mooseherder/ex2c_run_both_once.py +114 -0
- pyvale/examples/mooseherder/ex3_run_moose_seq_para.py +157 -0
- pyvale/examples/mooseherder/ex4_run_gmsh-moose_seq_para.py +176 -0
- pyvale/examples/mooseherder/ex5_run_moose_paramulti.py +136 -0
- pyvale/examples/mooseherder/ex6_read_moose_exodus.py +163 -0
- pyvale/examples/mooseherder/ex7a_read_moose_herd_results.py +153 -0
- pyvale/examples/mooseherder/ex7b_read_multi_herd_results.py +116 -0
- pyvale/examples/mooseherder/ex7c_read_multi_gmshmoose_results.py +127 -0
- pyvale/examples/mooseherder/ex7d_readconfig_multi_gmshmoose_results.py +143 -0
- pyvale/examples/mooseherder/ex8_read_existing_sweep_output.py +72 -0
- pyvale/examples/rasterimagedef/ex_rastenp.py +194 -0
- pyvale/examples/rasterimagedef/ex_rastercyth_oneframe.py +206 -0
- pyvale/examples/rasterimagedef/ex_rastercyth_static_cypara.py +189 -0
- pyvale/examples/rasterimagedef/ex_rastercyth_static_pypara.py +219 -0
- pyvale/examples/visualisation/ex1_visualisation_options.py +111 -0
- pyvale/mooseherder/__init__.py +55 -0
- pyvale/mooseherder/directorymanager.py +408 -0
- pyvale/mooseherder/exceptions.py +10 -0
- pyvale/mooseherder/exodusloader.py +762 -0
- pyvale/mooseherder/gmshrunner.py +158 -0
- pyvale/mooseherder/inputmodifier.py +240 -0
- pyvale/mooseherder/mooseconfig.py +212 -0
- pyvale/mooseherder/mooseherd.py +539 -0
- pyvale/mooseherder/mooserunner.py +307 -0
- pyvale/mooseherder/outputloader.py +17 -0
- pyvale/mooseherder/simdata.py +93 -0
- pyvale/mooseherder/simloaderbyfield.py +211 -0
- pyvale/mooseherder/simloaderbytime.py +193 -0
- pyvale/mooseherder/simloadopts.py +55 -0
- pyvale/mooseherder/simloadtools.py +465 -0
- pyvale/mooseherder/simrunner.py +31 -0
- pyvale/mooseherder/simsaver.py +401 -0
- pyvale/mooseherder/sweeploader.py +358 -0
- pyvale/mooseherder/sweeptools.py +76 -0
- pyvale/sensorsim/__init__.py +86 -0
- pyvale/sensorsim/camera.py +147 -0
- pyvale/sensorsim/cameradata.py +72 -0
- pyvale/sensorsim/cameradata2d.py +84 -0
- pyvale/sensorsim/camerasensor.py +147 -0
- pyvale/sensorsim/camerastereo.py +217 -0
- pyvale/sensorsim/cameratools.py +484 -0
- pyvale/sensorsim/cython/rastercyth.c +32404 -0
- pyvale/sensorsim/cython/rastercyth.html +3392 -0
- pyvale/sensorsim/cython/rastercyth.py +684 -0
- pyvale/sensorsim/enums.py +16 -0
- pyvale/sensorsim/errordriftcalc.py +104 -0
- pyvale/sensorsim/errorintegrator.py +359 -0
- pyvale/sensorsim/errorrand.py +105 -0
- pyvale/sensorsim/errorsimulator.py +137 -0
- pyvale/sensorsim/errorsyscalib.py +93 -0
- pyvale/sensorsim/errorsysdep.py +197 -0
- pyvale/sensorsim/errorsysfield.py +383 -0
- pyvale/sensorsim/errorsysindep.py +209 -0
- pyvale/sensorsim/exceptions.py +14 -0
- pyvale/sensorsim/experimentsimio.py +94 -0
- pyvale/sensorsim/experimentsimulator.py +615 -0
- pyvale/sensorsim/experimentstats.py +115 -0
- pyvale/sensorsim/field.py +127 -0
- pyvale/sensorsim/fieldconverter.py +378 -0
- pyvale/sensorsim/fieldinterp.py +89 -0
- pyvale/sensorsim/fieldinterpmesh.py +119 -0
- pyvale/sensorsim/fieldinterppoints.py +93 -0
- pyvale/sensorsim/fieldsampler.py +110 -0
- pyvale/sensorsim/fieldscalar.py +94 -0
- pyvale/sensorsim/fieldtensor.py +150 -0
- pyvale/sensorsim/fieldtransform.py +388 -0
- pyvale/sensorsim/fieldvector.py +136 -0
- pyvale/sensorsim/generatorsrandom.py +420 -0
- pyvale/sensorsim/imagedef2d.py +577 -0
- pyvale/sensorsim/imagetools.py +137 -0
- pyvale/sensorsim/integratorfactory.py +240 -0
- pyvale/sensorsim/integratorquadrature.py +217 -0
- pyvale/sensorsim/integratorrectangle.py +165 -0
- pyvale/sensorsim/integratorspatial.py +89 -0
- pyvale/sensorsim/integratortype.py +43 -0
- pyvale/sensorsim/logger.py +23 -0
- pyvale/sensorsim/plotting_logs.py +22 -0
- pyvale/sensorsim/raster.py +31 -0
- pyvale/sensorsim/rastercy.py +107 -0
- pyvale/sensorsim/rasternp.py +627 -0
- pyvale/sensorsim/rasteropts.py +58 -0
- pyvale/sensorsim/renderer.py +47 -0
- pyvale/sensorsim/rendermesh.py +137 -0
- pyvale/sensorsim/renderscene.py +51 -0
- pyvale/sensorsim/sensorarray.py +178 -0
- pyvale/sensorsim/sensordata.py +74 -0
- pyvale/sensorsim/sensordescriptor.py +275 -0
- pyvale/sensorsim/sensorfactory.py +179 -0
- pyvale/sensorsim/sensorspoint.py +308 -0
- pyvale/sensorsim/sensortools.py +113 -0
- pyvale/sensorsim/simtools.py +300 -0
- pyvale/sensorsim/visualexpplotter.py +201 -0
- pyvale/sensorsim/visualimagedef.py +74 -0
- pyvale/sensorsim/visualimages.py +76 -0
- pyvale/sensorsim/visualopts.py +507 -0
- pyvale/sensorsim/visualsimanimator.py +111 -0
- pyvale/sensorsim/visualsimplotter.py +180 -0
- pyvale/sensorsim/visualsimsensors.py +343 -0
- pyvale/sensorsim/visualtools.py +136 -0
- pyvale/sensorsim/visualtraceanimator.py +77 -0
- pyvale/sensorsim/visualtraceplotter.py +296 -0
- pyvale/simcases/case00_HEX20.i +242 -0
- pyvale/simcases/case00_HEX27.i +242 -0
- pyvale/simcases/case00_HEX8.i +242 -0
- pyvale/simcases/case00_TET10.i +242 -0
- pyvale/simcases/case00_TET14.i +242 -0
- pyvale/simcases/case00_TET4.i +242 -0
- pyvale/simcases/case01.i +101 -0
- pyvale/simcases/case02.i +156 -0
- pyvale/simcases/case03.i +136 -0
- pyvale/simcases/case04.i +181 -0
- pyvale/simcases/case05.i +234 -0
- pyvale/simcases/case06.i +305 -0
- pyvale/simcases/case07.geo +135 -0
- pyvale/simcases/case07.i +87 -0
- pyvale/simcases/case08.geo +144 -0
- pyvale/simcases/case08.i +153 -0
- pyvale/simcases/case09.geo +204 -0
- pyvale/simcases/case09.i +87 -0
- pyvale/simcases/case10.geo +204 -0
- pyvale/simcases/case10.i +257 -0
- pyvale/simcases/case11.geo +337 -0
- pyvale/simcases/case11.i +147 -0
- pyvale/simcases/case12.geo +388 -0
- pyvale/simcases/case12.i +329 -0
- pyvale/simcases/case13.i +140 -0
- pyvale/simcases/case14.i +159 -0
- pyvale/simcases/case15.geo +337 -0
- pyvale/simcases/case15.i +150 -0
- pyvale/simcases/case16.geo +391 -0
- pyvale/simcases/case16.i +357 -0
- pyvale/simcases/case16_d.i +360 -0
- pyvale/simcases/case16_u.i +360 -0
- pyvale/simcases/case17.geo +138 -0
- pyvale/simcases/case17.i +144 -0
- pyvale/simcases/case18.i +271 -0
- pyvale/simcases/case18_d.i +271 -0
- pyvale/simcases/case18_u.i +271 -0
- pyvale/simcases/case19.geo +252 -0
- pyvale/simcases/case19.i +99 -0
- pyvale/simcases/case20.geo +252 -0
- pyvale/simcases/case20.i +250 -0
- pyvale/simcases/case21.geo +74 -0
- pyvale/simcases/case21.i +155 -0
- pyvale/simcases/case22.geo +82 -0
- pyvale/simcases/case22.i +140 -0
- pyvale/simcases/case23.geo +164 -0
- pyvale/simcases/case23.i +140 -0
- pyvale/simcases/case24.geo +79 -0
- pyvale/simcases/case24.i +123 -0
- pyvale/simcases/case25.geo +82 -0
- pyvale/simcases/case25.i +140 -0
- pyvale/simcases/case26.geo +166 -0
- pyvale/simcases/case26.i +140 -0
- pyvale/simcases/cases_dictionary.yaml +336 -0
- pyvale/simcases/run_1case.py +60 -0
- pyvale/simcases/run_all_cases.py +69 -0
- pyvale/simcases/run_build_case.py +64 -0
- pyvale/simcases/run_example_cases.py +69 -0
- pyvale/strain/__init__.py +13 -0
- pyvale/strain/cpp/bindings.cpp +25 -0
- pyvale/strain/cpp/smooth.cpp +140 -0
- pyvale/strain/cpp/smooth.hpp +53 -0
- pyvale/strain/cpp/strain.cpp +390 -0
- pyvale/strain/cpp/strain.hpp +177 -0
- pyvale/strain/strain.py +117 -0
- pyvale/strain/strain_cpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/strain/strainchecks.py +47 -0
- pyvale/strain/strainimport.py +303 -0
- pyvale/strain/strainresults.py +55 -0
- pyvale/verif/__init__.py +15 -0
- pyvale/verif/analyticmeshgen.py +102 -0
- pyvale/verif/analyticsimdatafactory.py +125 -0
- pyvale/verif/analyticsimdatagenerator.py +368 -0
- pyvale/verif/matchsimdata.py +113 -0
- pyvale/verif/pointsens.py +120 -0
- pyvale/verif/pointsensconst.py +19 -0
- pyvale/verif/pointsensmech.py +270 -0
- pyvale/verif/pointsensmultiphys.py +184 -0
- pyvale/verif/pointsensscalar.py +383 -0
- pyvale/verif/pointsenstensor.py +159 -0
- pyvale/verif/pointsensvector.py +157 -0
- pyvale-2026.1.1.dist-info/METADATA +98 -0
- pyvale-2026.1.1.dist-info/RECORD +860 -0
- pyvale-2026.1.1.dist-info/WHEEL +6 -0
- pyvale-2026.1.1.dist-info/licenses/LICENSE +21 -0
- pyvale.libs/libgomp-65f46eca.so.1.0.0 +0 -0
- share/eigen3/cmake/Eigen3Config.cmake +37 -0
- share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
- share/eigen3/cmake/Eigen3Targets.cmake +106 -0
- share/eigen3/cmake/UseEigen3.cmake +6 -0
- share/pkgconfig/eigen3.pc +9 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# ================================================================================
|
|
2
|
+
# Example: DIC Challenge 2.0 Comparison
|
|
3
|
+
#
|
|
4
|
+
# pyvale: the python validation engine
|
|
5
|
+
# License: MIT
|
|
6
|
+
# Copyright (C) 2024 The Computer Aided Validation Team
|
|
7
|
+
# ================================================================================
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Strain and Deformation Gradient Calculations
|
|
11
|
+
---------------------------------------------
|
|
12
|
+
|
|
13
|
+
This example follows on from the previous one. It assumes that the DIC results
|
|
14
|
+
have already been generated in the current working directory and are ready to
|
|
15
|
+
be used for strain calculations.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import matplotlib.pyplot as plt
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
# pyvale modules
|
|
22
|
+
import pyvale.dic as dic
|
|
23
|
+
import pyvale.strain as strain
|
|
24
|
+
|
|
25
|
+
# %%
|
|
26
|
+
# We'll start by importing the DIC data from the previous example.
|
|
27
|
+
|
|
28
|
+
# create a directory for the the different outputs
|
|
29
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
30
|
+
if not output_path.is_dir():
|
|
31
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
32
|
+
|
|
33
|
+
# specify where our input data is
|
|
34
|
+
input_data = output_path / "dic_results_*.csv"
|
|
35
|
+
|
|
36
|
+
# %%
|
|
37
|
+
# You can calculate strain directly from the DIC results.
|
|
38
|
+
# It's not necessary to load the data beforehand — you can simply pass the
|
|
39
|
+
# filename (or pattern) to the `data` argument. If you used a custom delimiter
|
|
40
|
+
# or saved in binary format, make sure to specify those as well.
|
|
41
|
+
|
|
42
|
+
# %%
|
|
43
|
+
# At a minimum, you need to specify the strain window size and the element type
|
|
44
|
+
# used within the window. The valid options for `window_element` are:
|
|
45
|
+
#
|
|
46
|
+
# - `4` for bilinear
|
|
47
|
+
# - `9` for biquadratic
|
|
48
|
+
#
|
|
49
|
+
# The output will always include the window coordinates and the full deformation
|
|
50
|
+
# gradient tensor. If you also specify a `strain_formulation`, the corresponding
|
|
51
|
+
# 2D strain tensor will be included in the output.
|
|
52
|
+
strain.calculate_2d(data=input_data, window_size=5, window_element=4,
|
|
53
|
+
output_basepath=output_path)
|
|
54
|
+
|
|
55
|
+
# %%
|
|
56
|
+
# Once the strain calculation is complete, you can import the results using
|
|
57
|
+
# :func:`pyvale.strain.import_2d`.
|
|
58
|
+
#
|
|
59
|
+
# Be sure to specify the delimiter, format (binary or not), and layout.
|
|
60
|
+
strain_output = output_path / "strain_dic_results_*.csv"
|
|
61
|
+
straindata = strain.import_2d(data=strain_output,
|
|
62
|
+
binary=False, delimiter=",",
|
|
63
|
+
layout="matrix")
|
|
64
|
+
|
|
65
|
+
# %%
|
|
66
|
+
# Here's a simple example of how to visualize the deformation gradient components
|
|
67
|
+
# for the first deformation step using matplotlib.
|
|
68
|
+
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
|
|
69
|
+
axes = axes.flatten()
|
|
70
|
+
fig.suptitle('Deformation Gradient for ' + straindata.filenames[0])
|
|
71
|
+
|
|
72
|
+
im1 = axes[0].pcolor(straindata.window_x, straindata.window_y, straindata.def_xx[0])
|
|
73
|
+
im2 = axes[1].pcolor(straindata.window_x, straindata.window_y, straindata.def_xy[0])
|
|
74
|
+
im3 = axes[2].pcolor(straindata.window_x, straindata.window_y, straindata.def_yx[0])
|
|
75
|
+
im4 = axes[3].pcolor(straindata.window_x, straindata.window_y, straindata.def_yy[0])
|
|
76
|
+
|
|
77
|
+
# titles
|
|
78
|
+
axes[0].set_title('deformation gradient xx')
|
|
79
|
+
axes[1].set_title('deformation gradient xy')
|
|
80
|
+
axes[2].set_title('deformation gradient yx')
|
|
81
|
+
axes[3].set_title('deformation gradient yy')
|
|
82
|
+
|
|
83
|
+
for aa in axes:
|
|
84
|
+
aa.set_aspect('equal')
|
|
85
|
+
|
|
86
|
+
# Colorbars
|
|
87
|
+
fig.colorbar(im1, ax=axes[0])
|
|
88
|
+
fig.colorbar(im2, ax=axes[1])
|
|
89
|
+
fig.colorbar(im3, ax=axes[2])
|
|
90
|
+
fig.colorbar(im4, ax=axes[3])
|
|
91
|
+
|
|
92
|
+
plt.tight_layout()
|
|
93
|
+
plt.show()
|
|
94
|
+
|
|
95
|
+
# %%
|
|
96
|
+
# .. image:: ../../../../_static/plate_with_hole_def_grad.png
|
|
97
|
+
# :alt: Displacement and cost values
|
|
98
|
+
# :width: 800px
|
|
99
|
+
# :align: center
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#================================================================================
|
|
2
|
+
#Example: DIC with images generated by blender
|
|
3
|
+
#
|
|
4
|
+
#pyvale: the python validation engine
|
|
5
|
+
#License: MIT
|
|
6
|
+
#Copyright (C) 2024 The Computer Aided Validation Team
|
|
7
|
+
#================================================================================
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
DIC with images generated from a virtual blender experiment
|
|
11
|
+
------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
This example looks at taking the virtual experiments conducted using the blender
|
|
14
|
+
module and taking it one step further and performing a DIC calculation on the
|
|
15
|
+
simulated data. For this to work, you'll need to complete the `2D image
|
|
16
|
+
deformation example <https://computer-aided-validation-laboratory.github.io/pyvale/examples/renderblender/ex1_2_blenderdeformed.html>`_ using the blender module first.
|
|
17
|
+
|
|
18
|
+
**We'd recommend downloading both examples (links can be
|
|
19
|
+
found at the bottom of each example) and placing them within the same folder on
|
|
20
|
+
your device. That way the relative file paths below will not need to be
|
|
21
|
+
changed.**
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import matplotlib.pyplot as plt
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
import numpy as np
|
|
27
|
+
import os
|
|
28
|
+
|
|
29
|
+
# pyvale imports
|
|
30
|
+
import pyvale.dic as dic
|
|
31
|
+
|
|
32
|
+
#subset size
|
|
33
|
+
subset_size = 21
|
|
34
|
+
|
|
35
|
+
# rename the reference image so that that we can distinguish between reference
|
|
36
|
+
# and deformed images
|
|
37
|
+
if os.path.exists("./blenderimages/blenderimage_0.tiff"):
|
|
38
|
+
os.rename("./blenderimages/blenderimage_0.tiff",
|
|
39
|
+
"./blenderimages/reference.tiff")
|
|
40
|
+
|
|
41
|
+
ref_img = "./blenderimages/reference.tiff"
|
|
42
|
+
def_img = "./blenderimages/blenderimage_*.tiff"
|
|
43
|
+
|
|
44
|
+
# Interactive ROI selection
|
|
45
|
+
roi = dic.RegionOfInterest(ref_img)
|
|
46
|
+
roi.interactive_selection(subset_size)
|
|
47
|
+
|
|
48
|
+
#output_path
|
|
49
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
50
|
+
if not output_path.is_dir():
|
|
51
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
52
|
+
|
|
53
|
+
# DIC Calculation
|
|
54
|
+
dic.calculate_2d(reference=ref_img,
|
|
55
|
+
deformed=def_img,
|
|
56
|
+
roi_mask=roi.mask,
|
|
57
|
+
seed=roi.seed,
|
|
58
|
+
subset_size=subset_size,
|
|
59
|
+
subset_step=10,
|
|
60
|
+
shape_function="AFFINE",
|
|
61
|
+
max_displacement=20,
|
|
62
|
+
correlation_criteria="ZNSSD",
|
|
63
|
+
output_basepath=output_path,
|
|
64
|
+
output_prefix="blender_dic_")
|
|
65
|
+
|
|
66
|
+
# Import the Results
|
|
67
|
+
data_path = output_path / "blender_dic_*.csv"
|
|
68
|
+
dicdata = dic.import_2d(data=data_path, delimiter=",",
|
|
69
|
+
layout='matrix', binary=False)
|
|
70
|
+
|
|
71
|
+
# %%
|
|
72
|
+
# As an example we can plot the v-component of displacement for each of the
|
|
73
|
+
# eight deformation images
|
|
74
|
+
|
|
75
|
+
# Setup plot
|
|
76
|
+
fig, axes = plt.subplots(2, 4, figsize=(15, 5))
|
|
77
|
+
axes = axes.flatten()
|
|
78
|
+
|
|
79
|
+
# Compute global min and max for consistent color scaling
|
|
80
|
+
vmin = np.nanmin(dicdata.v)
|
|
81
|
+
vmax = np.nanmax(dicdata.v)
|
|
82
|
+
print(vmin,vmax)
|
|
83
|
+
|
|
84
|
+
# loop over images and add to subplots
|
|
85
|
+
for i in range(len(dicdata.filenames)):
|
|
86
|
+
im = axes[i].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.v[i], vmin=vmin, vmax=vmax)
|
|
87
|
+
axes[i].set_title(dicdata.filenames[i])
|
|
88
|
+
fig.colorbar(im, ax=axes[i])
|
|
89
|
+
|
|
90
|
+
plt.tight_layout()
|
|
91
|
+
plt.show()
|
|
92
|
+
|
|
93
|
+
# %%
|
|
94
|
+
# .. image:: ../../../../_static/dic_blender_plot.png
|
|
95
|
+
# :alt: DIC Comparison with ground truth
|
|
96
|
+
# :width: 800px
|
|
97
|
+
# :align: center
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# ================================================================================
|
|
2
|
+
# Example: DIC Challenge 2.0 Comparison
|
|
3
|
+
#
|
|
4
|
+
# pyvale: the python validation engine
|
|
5
|
+
# License: MIT
|
|
6
|
+
# Copyright (C) 2024 The Computer Aided Validation Team
|
|
7
|
+
# ================================================================================
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Comparison to the 2.0 2D DIC Challenge
|
|
11
|
+
---------------------------------------------
|
|
12
|
+
|
|
13
|
+
The DIC challenge provides a framework for comparison and validation of existing
|
|
14
|
+
DIC Codes. More information can be found at `https://idics.org/challenge/
|
|
15
|
+
<https://idics.org/challenge/>`_. In this example we look at a comparison to a
|
|
16
|
+
image generated with ±0.5 pixel sinusoidal vertical displacement amplitude “star”
|
|
17
|
+
pattern with varying spatial frequency. More information on the image creation
|
|
18
|
+
can be found in the `original paper
|
|
19
|
+
<https://link.springer.com/article/10.1007/s11340-021-00806-6>`_. In this
|
|
20
|
+
example we'll look at the convergence to the peak vertical discplacement value
|
|
21
|
+
of 0.5 pixels along a particular correlation direction.
|
|
22
|
+
|
|
23
|
+
As always, we'll start with importing the required libraries:
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
import matplotlib.pyplot as plt
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
# pyvale imports
|
|
30
|
+
import pyvale.dataset as dataset
|
|
31
|
+
import pyvale.dic as dic
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# %%
|
|
36
|
+
# There's a pair of DIC challenge images that come as part of the Pyvale install.
|
|
37
|
+
# We can preload them with:
|
|
38
|
+
ref_pattern = dataset.dic_challenge_ref()
|
|
39
|
+
def_pattern = dataset.dic_challenge_def()
|
|
40
|
+
subset_size = 17
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# %%
|
|
44
|
+
# we need to select our region of interest. For this example, we are only
|
|
45
|
+
# interested in the subsets along the mid horizontal line.
|
|
46
|
+
# We can use :func:`roi.rect_boundary` to exclude a large border region so we
|
|
47
|
+
# only correlate along the horizontal at the midpoint for our selected subset
|
|
48
|
+
# size
|
|
49
|
+
roi = dic.RegionOfInterest(ref_image=ref_pattern)
|
|
50
|
+
subset_radius = subset_size // 2
|
|
51
|
+
roi.rect_boundary(left=50,right=50,top=250-subset_radius,bottom=250-subset_radius)
|
|
52
|
+
roi.show_image()
|
|
53
|
+
|
|
54
|
+
# create a directory for the the different outputs
|
|
55
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
56
|
+
if not output_path.is_dir():
|
|
57
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
58
|
+
|
|
59
|
+
# %%
|
|
60
|
+
# .. image:: ../../../../_static/dic_challenge_roi.png
|
|
61
|
+
# :alt: Selected roi
|
|
62
|
+
# :width: 800px
|
|
63
|
+
# :align: center
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# %%
|
|
67
|
+
# To perform the correlation we need to select a seed point. Ideally, this is
|
|
68
|
+
# somewhere in the region where the displacements are small with low noise.
|
|
69
|
+
# Here we'll select it to be [3500,250], which is close to the right hand
|
|
70
|
+
# boundary where the spatial frequency is lower. The results will be saved in
|
|
71
|
+
# the current working directory with a filename prefix of subset_size_19_*.txt
|
|
72
|
+
# If you are feeling adventorous you could investigate the effect of varying the
|
|
73
|
+
# subset size by placing the above and below sections in a loop.
|
|
74
|
+
dic.calculate_2d(reference=ref_pattern,
|
|
75
|
+
deformed=def_pattern,
|
|
76
|
+
roi_mask=roi.mask,
|
|
77
|
+
subset_size=subset_size,
|
|
78
|
+
subset_step=1,
|
|
79
|
+
seed=[3500,250],
|
|
80
|
+
max_displacement=10,
|
|
81
|
+
output_basepath=output_path)
|
|
82
|
+
|
|
83
|
+
# %%
|
|
84
|
+
# We can import the results in the standard way
|
|
85
|
+
data_path = output_path / "dic_results_DIC_Challenge*.csv"
|
|
86
|
+
dicdata = dic.import_2d(data=data_path, layout='column',
|
|
87
|
+
binary=False, delimiter=",")
|
|
88
|
+
|
|
89
|
+
# &&
|
|
90
|
+
# Finally a simple plot of the calculated displacements at y=2500. This could be
|
|
91
|
+
# extended and compared to other DIC engines used in the 2.0 DIC challenge. A
|
|
92
|
+
# link to the dataset can be found under '2D-DIC Challenge 2.0' can be found
|
|
93
|
+
# at `https://idics.org/challenge/ <https://idics.org/challenge/>`_
|
|
94
|
+
plt.figure()
|
|
95
|
+
plt.xlabel("subset x location [px]")
|
|
96
|
+
plt.ylabel("Displacement [px]")
|
|
97
|
+
plt.grid(True)
|
|
98
|
+
plt.axhline(y=0.5, color='red', linestyle='--', linewidth=4)
|
|
99
|
+
plt.plot(dicdata.ss_x, dicdata.v[0,:])
|
|
100
|
+
plt.tight_layout()
|
|
101
|
+
plt.show()
|
|
102
|
+
|
|
103
|
+
# %%
|
|
104
|
+
# .. image:: ../../../../_static/dic_challenge_plot.png
|
|
105
|
+
# :alt: DIC Comparison with ground truth
|
|
106
|
+
# :width: 600px
|
|
107
|
+
# :align: center
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""Bring your own simulation data
|
|
8
|
+
================================================================================
|
|
9
|
+
|
|
10
|
+
In this example we demonstrate how you can load your own simulation data from
|
|
11
|
+
either plain text or numpy binary array files into a `SimData` object for use
|
|
12
|
+
with the pyvale sensor simulation engine. We do this by first converting and
|
|
13
|
+
saving an exodus simulation output file in plain text so we can see the format
|
|
14
|
+
that is expected when we load the data.
|
|
15
|
+
|
|
16
|
+
This example only demonstrates how to load simulation data into a `SimData`
|
|
17
|
+
object
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
import numpy as np
|
|
22
|
+
import matplotlib.pyplot as plt
|
|
23
|
+
|
|
24
|
+
# pyvale imports
|
|
25
|
+
import pyvale.mooseherder as mh
|
|
26
|
+
import pyvale.sensorsim as sens
|
|
27
|
+
import pyvale.dataset as dataset
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
#%%
|
|
31
|
+
# 1. Save existing SimData to csv
|
|
32
|
+
# --------------------------------
|
|
33
|
+
#
|
|
34
|
+
# We are going to start by loading one the pre-packaged simulation datasets in
|
|
35
|
+
# exodus format that comes with `pyvale`. We are then going to take the
|
|
36
|
+
# `SimData` object and save it to the csv/txt format and numpy array formats
|
|
37
|
+
# that can be loaded into `pyvale` so we can see what structure these files need
|
|
38
|
+
# to be.
|
|
39
|
+
data_path: Path = dataset.element_case_output_path(dataset.EElemTest.HEX20)
|
|
40
|
+
sim_data: mh.SimData = mh.ExodusLoader(data_path).load_all_sim_data()
|
|
41
|
+
|
|
42
|
+
#%%
|
|
43
|
+
# Let's create our standard pyvale output directory in our current working
|
|
44
|
+
# directory so we know where to find the csv and npy files we are going to
|
|
45
|
+
# create from our `SimData` object.
|
|
46
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
47
|
+
if not output_path.is_dir():
|
|
48
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
49
|
+
|
|
50
|
+
#%%
|
|
51
|
+
# All the simulation IO for `pyvale` can be found in the `mooseherder` module.
|
|
52
|
+
# Here we will save our fields in both formats `BY_TIME` and `BY_FIELD`. For the
|
|
53
|
+
# `BY_TIME` case each file will be a time step or frame were the rows
|
|
54
|
+
# correspond to the coordinate and the column corresponds to the individual
|
|
55
|
+
# field. For the plain text version the column headers will be the keys from
|
|
56
|
+
# the `SimData.node_vars` dictionary. `BY_FIELD` means there will be one file
|
|
57
|
+
# per field where the rows are the coordinate and the columns are the time
|
|
58
|
+
# steps. In this case the field key will appear in the file name. We will see
|
|
59
|
+
# later that we can load field in either of these formats.
|
|
60
|
+
#
|
|
61
|
+
# For saving the array files we can either use plain `TXT` or numpy binary
|
|
62
|
+
# format `NPY`- here we save both.
|
|
63
|
+
#
|
|
64
|
+
# Finally, we use the simulation tag of "hex20" which will be a prefix on the
|
|
65
|
+
# files we output so we can identify the simulation.
|
|
66
|
+
save_opts = mh.SimDataSaveOpts(fields_save_by=mh.ESaveFieldOpt.BOTH,
|
|
67
|
+
array_format = mh.ESaveArray.BOTH,
|
|
68
|
+
sim_tag="hex20")
|
|
69
|
+
|
|
70
|
+
mh.save_sim_data_to_arrays(output_path,sim_data,save_opts)
|
|
71
|
+
|
|
72
|
+
#%%
|
|
73
|
+
# Now if we have a look at the files in the pyvale-output directory we can see
|
|
74
|
+
# what the expected format is going to be. There are two key files we need: 1)
|
|
75
|
+
# the list of nodal coordinates for the simulation; and 2) the list of time
|
|
76
|
+
# steps. These can be found in the files: "hex20_coords" and "hex20_time.csv".
|
|
77
|
+
# We can also choose not to load these from disk and build the numpy arrays
|
|
78
|
+
# ourselves programmatically.
|
|
79
|
+
#
|
|
80
|
+
# The connectivity table is optional as we will see in out example on mesh free
|
|
81
|
+
# virtual sensors but we will load it here to demonstrate mesh-based sensors. In
|
|
82
|
+
# this case each meshed object in the simulation has a connectivity table
|
|
83
|
+
# labelled "connectX" where X is an integer specifying the unique mesh in the
|
|
84
|
+
# simulation. The "hex20_connect1.csv" has the shape 20 by number of elements
|
|
85
|
+
# in the mesh as we are using 20 node hexahedral elements.
|
|
86
|
+
#
|
|
87
|
+
# We can also see the field files which are labelled "hex20_node_field_*" with
|
|
88
|
+
# a suffix of "frameX" for fields saved 'by time step' or a suffix of the field
|
|
89
|
+
# key for the case where we have saved 'by field'.
|
|
90
|
+
|
|
91
|
+
#%%
|
|
92
|
+
# Before we load the data we will specify a common file suffix and the paths to
|
|
93
|
+
# the coordinate and time files.
|
|
94
|
+
|
|
95
|
+
suffix: str = ".csv" # can be changed to ".npy"
|
|
96
|
+
coords_file: str = "hex20_coords" + suffix
|
|
97
|
+
time_step_file: str = "hex20_time" + suffix
|
|
98
|
+
|
|
99
|
+
#%%
|
|
100
|
+
# 2. Load SimData 'by time'
|
|
101
|
+
# -------------------------
|
|
102
|
+
#
|
|
103
|
+
# First let's load the data 'by time'. This is a bit more complicated than 'by
|
|
104
|
+
# field' as we need to specify how to slice into each frame to extract each
|
|
105
|
+
# nodal field variable as well as specifying the wildcard pattern to search for
|
|
106
|
+
# in the list of output time steps.
|
|
107
|
+
#
|
|
108
|
+
# We create the `field_slices` dictionary keyed by the same string we want the
|
|
109
|
+
# field variable to have when it is loaded into `SimData.node_vars`. The value
|
|
110
|
+
# for each key is then a slice specifying the column for the field variable in
|
|
111
|
+
# the time step/frame file to read.
|
|
112
|
+
#
|
|
113
|
+
# We then create the wildcard pattern used to find the field files in the
|
|
114
|
+
# `field_pattern` variable below.
|
|
115
|
+
|
|
116
|
+
field_pattern = f"hex20_node_field_frame*{suffix}"
|
|
117
|
+
|
|
118
|
+
field_slices = {"disp_x": slice(0,1),
|
|
119
|
+
"disp_y": slice(1,2),
|
|
120
|
+
"disp_z": slice(2,3),
|
|
121
|
+
"temperature": slice(9,10),}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
connect_pattern = f"hex20_connect*"
|
|
125
|
+
|
|
126
|
+
#%%
|
|
127
|
+
# We create our load options specifying that we will load the data single
|
|
128
|
+
# threaded and not using the multi-processing library (the default). For loading
|
|
129
|
+
# large datasets the number of workers can be changed to a positive integer
|
|
130
|
+
# based on the number of threads available on your machine. Parallelisation will
|
|
131
|
+
# only be helpful if your files are large and you have many of them. Here we
|
|
132
|
+
# have a fairly small simulation with few files so single threaded will be
|
|
133
|
+
# faster.
|
|
134
|
+
#
|
|
135
|
+
# We can now create our loader and use it to load all the simulation data into
|
|
136
|
+
# our `SimData` object which we can now use with the rest of the `pyvale` tools.
|
|
137
|
+
|
|
138
|
+
workers: int | None = None
|
|
139
|
+
load_opts = mh.SimLoadOpts(workers=workers)
|
|
140
|
+
|
|
141
|
+
sim_loader = mh.SimLoaderByTime(load_dir=output_path,
|
|
142
|
+
coords_file=coords_file,
|
|
143
|
+
time_step_file=time_step_file,
|
|
144
|
+
node_files=field_pattern,
|
|
145
|
+
node_slices=field_slices,
|
|
146
|
+
connect_files=connect_pattern,
|
|
147
|
+
glob_file=None,
|
|
148
|
+
glob_slices=None,
|
|
149
|
+
load_opts=load_opts)
|
|
150
|
+
|
|
151
|
+
sim_data_load: mh.SimData = sim_loader.load_all_sim_data()
|
|
152
|
+
|
|
153
|
+
#%%
|
|
154
|
+
# Let's print some summary data to the terminal so we can see what our `SimData`
|
|
155
|
+
# object contains:
|
|
156
|
+
print(80*"-")
|
|
157
|
+
print("SIM DATA: by time")
|
|
158
|
+
print(80*"-")
|
|
159
|
+
sens.print_sim_data(sim_data_load)
|
|
160
|
+
print()
|
|
161
|
+
|
|
162
|
+
#%%
|
|
163
|
+
# 3. Load SimData 'by field'
|
|
164
|
+
# --------------------------
|
|
165
|
+
#
|
|
166
|
+
# Now we will load the data 'by field' which is the simplest case as it is most
|
|
167
|
+
# similar to how the `SimData` object stores our nodal fields. Specifically,
|
|
168
|
+
# each nodal variable is a numpy array where the first dimension corresponds to
|
|
169
|
+
# the position in the coordinate array and the second dimension is the time
|
|
170
|
+
# step. Here we don't need to slice into field arrays so can just provide a
|
|
171
|
+
# dictionary where keys are the same as what we want in our `SimData.node_vars`
|
|
172
|
+
# dictionary and the values are strings specifying the file names for that
|
|
173
|
+
# field.
|
|
174
|
+
|
|
175
|
+
field_keys = {"disp_x","disp_y","disp_z","temperature"}
|
|
176
|
+
|
|
177
|
+
prefix = "hex20_node_field"
|
|
178
|
+
|
|
179
|
+
field_files = {}
|
|
180
|
+
for ff in field_keys:
|
|
181
|
+
field_files[ff] = f"{prefix}_{ff}{suffix}"
|
|
182
|
+
|
|
183
|
+
#%%
|
|
184
|
+
# When we load data 'by field' the files generally do not have header rows so we
|
|
185
|
+
# set this to None in the load options. Other than that loading the simulation
|
|
186
|
+
# data into our `SimData` object is exactly the same as we did previously.
|
|
187
|
+
|
|
188
|
+
load_opts = mh.SimLoadOpts(node_field_header=None,
|
|
189
|
+
workers=workers)
|
|
190
|
+
|
|
191
|
+
sim_loader = mh.SimLoaderByField(load_dir=output_path,
|
|
192
|
+
coords_file=coords_file,
|
|
193
|
+
time_step_file=time_step_file,
|
|
194
|
+
node_field_files=field_files,
|
|
195
|
+
connect_files=connect_pattern,
|
|
196
|
+
glob_file=None,
|
|
197
|
+
glob_slices=None,
|
|
198
|
+
load_opts=load_opts)
|
|
199
|
+
|
|
200
|
+
sim_data_load: mh.SimData = sim_loader.load_all_sim_data()
|
|
201
|
+
|
|
202
|
+
print(80*"-")
|
|
203
|
+
print("SIM DATA: by field")
|
|
204
|
+
print(80*"-")
|
|
205
|
+
sens.print_sim_data(sim_data_load)
|
|
206
|
+
|
|
207
|
+
#%%
|
|
208
|
+
# That's it for this example! We will leave it as an exercise to load the strain
|
|
209
|
+
# fields from the files in the output directory and to connect the `SimData`
|
|
210
|
+
# object you have just loaded to the rest of the `pyvale` sensor simulation
|
|
211
|
+
# engine.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""Mesh-free virtual sensors
|
|
8
|
+
================================================================================
|
|
9
|
+
|
|
10
|
+
This example shows the ability of the pyvale sensor simulation module to apply
|
|
11
|
+
virtual sensors for the case where the provided simulation data is a point
|
|
12
|
+
cloud and does not contain a structured mesh with a connectivity table. For this
|
|
13
|
+
case pyvale uses a Delaunay triangulation to perform linear interpolation of
|
|
14
|
+
the simulation point cloud at the virtual sensor locations. The mesh free
|
|
15
|
+
method is computationally more expensive than the mesh based method, especially
|
|
16
|
+
in 3D, but it does give much more flexibility in input simulation data.
|
|
17
|
+
|
|
18
|
+
The only difference between the mesh-based and mesh-free cases from a user
|
|
19
|
+
interface perspective is that there is no connectivity table in the `SimData`
|
|
20
|
+
object created by the user. Otherwise creating a sensor array is exactly the
|
|
21
|
+
same as all previous examples - apart from the computational overhead of the
|
|
22
|
+
mesh-free interpolation.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import copy
|
|
26
|
+
import time
|
|
27
|
+
import numpy as np
|
|
28
|
+
import pyvale as pyv
|
|
29
|
+
|
|
30
|
+
# pyvale imports
|
|
31
|
+
import pyvale.mooseherder as mh
|
|
32
|
+
import pyvale.sensorsim as sens
|
|
33
|
+
import pyvale.verif as verif
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
#%%
|
|
37
|
+
# 1. Create analytic simulation data
|
|
38
|
+
# ----------------------------------
|
|
39
|
+
# For this example we are going to use a generated analytic dataset instead of
|
|
40
|
+
# a finite element simulation as we want an analytic function for the measured
|
|
41
|
+
# field that is linear so we can see that mesh-free interpolation matches the
|
|
42
|
+
# mesh-based interpolation. For finite element simulations using non-tetrahedral
|
|
43
|
+
# and/or high order elements the mesh-free method will not match the mesh-based.
|
|
44
|
+
#
|
|
45
|
+
# The analytic case is a rectangular plate that is 10x7.5 units in length with
|
|
46
|
+
# a mesh of 40x30 elements. The physical field is scalar with a bi-linear
|
|
47
|
+
# spatial gradient of 20/10 = 2 in the X direction and 10/7.5 = 1.33 in the Y
|
|
48
|
+
# direction.
|
|
49
|
+
#
|
|
50
|
+
# Initially the generated `SimData` object is mesh-based so we create a copy and
|
|
51
|
+
# then set the connectivity table dictionary to None to indicate that our data
|
|
52
|
+
# is mesh-free.
|
|
53
|
+
(sim_data,_) = verif.analyticsimdatafactory.scalar_linear_2d()
|
|
54
|
+
|
|
55
|
+
sim_data_nomesh = copy.deepcopy(sim_data)
|
|
56
|
+
sim_data_nomesh.connect = None
|
|
57
|
+
|
|
58
|
+
#%%
|
|
59
|
+
# We will use the same `SensorData` for the mesh-free and mesh-based sensor
|
|
60
|
+
# arrays. First, we use a helper function to get the limiting dimensions of the
|
|
61
|
+
# plate and use this to create our sensor position array. Then we specify our
|
|
62
|
+
# sample times and use our sensor positions and sample times to create our
|
|
63
|
+
# `SensorData` object.
|
|
64
|
+
|
|
65
|
+
sim_dims = sens.simtools.get_sim_dims(sim_data)
|
|
66
|
+
sens_pos = sens.gen_pos_grid_inside(num_sensors=(4,2,1),
|
|
67
|
+
x_lims=sim_dims["x"],
|
|
68
|
+
y_lims=sim_dims["y"],
|
|
69
|
+
z_lims=(0.0,0.0))
|
|
70
|
+
|
|
71
|
+
sample_times = np.linspace(0.0,np.max(sim_data.time),50)
|
|
72
|
+
|
|
73
|
+
sens_data = sens.SensorData(positions=sens_pos,
|
|
74
|
+
sample_times=sample_times)
|
|
75
|
+
|
|
76
|
+
#%%
|
|
77
|
+
# 2. Build virtual sensor arrays
|
|
78
|
+
# --------------------------------
|
|
79
|
+
# Now we create our virtual sensor arrays. There is no difference between the
|
|
80
|
+
# mesh-based and mesh-free case in how these are created as `pyvale`
|
|
81
|
+
# automatically detects that the connectivity table in the `SimData` object is
|
|
82
|
+
# None and creates the Delaunay triangulation for later interpolation to virtual
|
|
83
|
+
# sensor locations.
|
|
84
|
+
#
|
|
85
|
+
# The triangulation is computationally expensive, especially in 3D. For the 2D
|
|
86
|
+
# case shown here with 1200 elements creating the sensor array is about 6
|
|
87
|
+
# times slower than the mesh-based case.
|
|
88
|
+
|
|
89
|
+
start_time = time.perf_counter()
|
|
90
|
+
tc_array: sens.SensorsPoint = sens.SensorFactory.scalar_point(
|
|
91
|
+
sim_data,
|
|
92
|
+
sens_data,
|
|
93
|
+
comp_key="temperature",
|
|
94
|
+
spatial_dims=sens.EDim.TWOD,
|
|
95
|
+
descriptor=sens.DescriptorFactory.temperature(),
|
|
96
|
+
)
|
|
97
|
+
mesh_time = (time.perf_counter() - start_time)*1000.0
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
start_time = time.perf_counter()
|
|
101
|
+
tc_array_nomesh: sens.SensorsPoint = sens.SensorFactory.scalar_point(
|
|
102
|
+
sim_data_nomesh,
|
|
103
|
+
sens_data,
|
|
104
|
+
comp_key="temperature",
|
|
105
|
+
spatial_dims=sens.EDim.TWOD,
|
|
106
|
+
descriptor=sens.DescriptorFactory.temperature(),
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
nomesh_time = (time.perf_counter() - start_time)*1000.0
|
|
110
|
+
|
|
111
|
+
print(80*"-")
|
|
112
|
+
print("Sensor Array Creation Times:")
|
|
113
|
+
print(f"Mesh based = {mesh_time:.3f} milliseconds")
|
|
114
|
+
print(f"Mesh free = {nomesh_time:.3f} milliseconds\n")
|
|
115
|
+
|
|
116
|
+
#%%
|
|
117
|
+
# 3. Run simulated experiment
|
|
118
|
+
# ------------------------------------
|
|
119
|
+
# Now we can simulate some measurements for the mesh-based and mesh-free cases
|
|
120
|
+
# and compare the time taken for the calculation. Rough testing shows that the
|
|
121
|
+
# mesh-free case takes about 5 times longer than the mesh-based case.
|
|
122
|
+
|
|
123
|
+
start_time = time.perf_counter()
|
|
124
|
+
meas = tc_array.get_measurements()
|
|
125
|
+
mesh_time = (time.perf_counter() - start_time)*1000.0
|
|
126
|
+
|
|
127
|
+
start_time = time.perf_counter()
|
|
128
|
+
meas_nomesh = tc_array_nomesh.get_measurements()
|
|
129
|
+
nomesh_time = (time.perf_counter() - start_time)*1000.0
|
|
130
|
+
|
|
131
|
+
print(80*"-")
|
|
132
|
+
print("Measurement Simulation Times")
|
|
133
|
+
print(f"Mesh based = {mesh_time:.3f} milliseconds")
|
|
134
|
+
print(f"Mesh free = {nomesh_time:.3f} milliseconds\n")
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
#%%
|
|
138
|
+
# 4. Analyse the results
|
|
139
|
+
# ----------------------------------
|
|
140
|
+
# Finally, we can compare the measurements for both sensor arrays. As our
|
|
141
|
+
# virtual sensors are measuring a linear field in 2D with linear elements the
|
|
142
|
+
# mesh-based and mesh-free cases should agree exactly (especially because we
|
|
143
|
+
# are not simulating any measurement errors).
|
|
144
|
+
|
|
145
|
+
print(80*"-")
|
|
146
|
+
print("MESH BASED INTERPOLATION")
|
|
147
|
+
sens.print_measurements(tc_array,
|
|
148
|
+
slice(0,1), # Sensor 1
|
|
149
|
+
slice(0,1), # Component 1: scalar field = 1 component
|
|
150
|
+
slice (meas.shape[2]-5,meas.shape[2]))
|
|
151
|
+
|
|
152
|
+
print("MESH FREE INTERPOLATION")
|
|
153
|
+
sens.print_measurements(tc_array_nomesh,
|
|
154
|
+
slice(0,1), # Sensor 1
|
|
155
|
+
slice(0,1), # Component 1: scalar field = 1 component
|
|
156
|
+
slice (meas_nomesh.shape[2]-5,meas_nomesh.shape[2]))
|
|
157
|
+
|
|
158
|
+
print(f"\n{np.allclose(meas,meas_nomesh)=}")
|
|
159
|
+
print(80*"-")
|
|
160
|
+
|
|
161
|
+
# %%
|
|
162
|
+
# Example terminal output with timings and numerical comparison between
|
|
163
|
+
# mesh-based and mesh-free virtual sensors:
|
|
164
|
+
#
|
|
165
|
+
# .. image:: ../../../../_static/ext_ex2_term_out.png
|
|
166
|
+
# :alt: Terminal output comparing mesh-based and mesh-free sensors.
|
|
167
|
+
# :width: 700px
|
|
168
|
+
# :align: center
|
|
169
|
+
|
|
170
|
+
#%%
|
|
171
|
+
# That's it for this example! Mesh-free virtual sensors work in exactly the same
|
|
172
|
+
# way as the mesh-based sensors, they are just a bit more computationally heavy
|
|
173
|
+
# and slower.
|
|
174
|
+
|