From fe3968e223b7aeb98c95c75ada12ceeb762e1164 Mon Sep 17 00:00:00 2001 From: yuiyuiui <2946723935@qq.com> Date: Wed, 24 Dec 2025 20:50:41 +0800 Subject: [PATCH 1/7] reformat and revise subspace draft --- src/factorizations/blocklanczos.jl | 60 +++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index 3c5ba531..179aa05b 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -173,7 +173,8 @@ function initialize( X₁ = Block(map(Base.Fix2(scale, one(α)), X₀.vec)) # Orthogonalization of the initial block - _, good_idx = block_qr!(X₁, iter.qr_tol) + _, good_idx, is_draft = block_qr!(X₁, iter.qr_tol) + is_draft && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." X₁ = X₁[good_idx] V = OrthonormalBasis(X₁.vec) bs = length(X₁) # block size of the first block @@ -205,9 +206,17 @@ function expand!( R = state.R[1:(state.R_size)] bs = length(R) V = state.V + Rcopy = copy(R) # Calculate the new basis and B - B, good_idx = block_qr!(R, iter.qr_tol) + B, good_idx, is_draft = block_qr!(R, iter.qr_tol) + if is_draft # Prevent column subspace of R from drifting caused by an excessively small β in block_qr! + block_reorthogonalize!(R, V) + _, good_idx, is_draft = block_qr!(R, iter.qr_tol) + B = block_inner(R[good_idx], Rcopy) # Make sure R = XB + end + is_draft && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." + bs_next = length(good_idx) push!(V, R[good_idx]) state.H[(k + 1):(k + bs_next), (k - bs + 1):k] = view(B, 1:bs_next, 1:bs) @@ -237,7 +246,6 @@ function block_lanczosrecurrence( ) # Apply the operator and calculate the M. Get Xnext and Mnext. bs, bs_prev = size(B) - S = eltype(B) k = length(V) X = Block(V[(k - bs + 1):k]) AX = apply(operator, X) @@ -295,14 +303,16 @@ This function performs a QR factorization of a block of abstract vectors using t It takes as input a block of abstract vectors and a tolerance parameter, which is used to determine whether a vector is considered numerically zero. The operation is performed in-place, transforming the input block into a block of orthonormal vectors. -The function returns a matrix of size `(r, p)` and a vector of indices goodidx. Here, `p` denotes the number of input vectors, +The function returns a matrix of size `(r, p)`, a vector of indices goodidx and a boolean flag is_draft. Here, `p` denotes the number of input vectors, and `r` is the numerical rank of the input block. The matrix represents the upper-triangular factor of the QR decomposition, restricted to the `r` linearly independent components. The vector `goodidx` contains the indices of the non-zero (i.e., numerically independent) vectors in the orthonormalized block. +If a small value of β is detected, the function will carry out an additional reorthogonalization step to further ensure the input block vectors are orthonormalized. +In such cases, is_draft is set to true to indicate potential numerical instability. """ function block_qr!(block::Block, tol::Real) n = length(block) - rank_shrink = false + is_draft = false idx = trues(n) r₁₁ = inner(block[1], block[1]) R = zeros(typeof(r₁₁), n, n) @@ -312,28 +322,42 @@ function block_qr!(block::Block, tol::Real) block[1] = scale!!(block[1], 1 / β) else block[1] = zerovector!!(block[1]) - rank_shrink = true idx[1] = false end - @inbounds for j in 2:n + for j in 2:n + # first MGS for i in 1:(j - 1) R[i, j] = inner(block[i], block[j]) block[j] = add!!(block[j], block[i], -R[i, j]) end β = norm(block[j]) - if β > tol - R[j, j] = β - block[j] = scale!!(block[j], 1 / β) - else + + if β < tol block[j] = zerovector!!(block[j]) - rank_shrink = true idx[j] = false + continue + else + R[j, j] = β + block[j] = scale!!(block[j], 1 / β) + # DGKS reorthogonalization + if β < 100 * tol + is_draft = true + for i in 1:(j - 1) + δ = inner(block[i], block[j]) + R[i, j] += δ + block[j] = add!!(block[j], block[i], -δ) + end + β = norm(block[j]) + if β < tol + block[j] = zerovector!!(block[j]) + idx[j] = false + else + R[j, j] = β + block[j] = scale!!(block[j], 1 / β) + end + end end end - if rank_shrink - good_idx = findall(idx) - return R[good_idx, :], good_idx - else - return R, collect(Int, 1:n) - end + good_idx = findall(idx) + return R[good_idx, :], good_idx, is_draft end From 42aaeb1fbdffdc1f22ec1f84f203bbb42caa51c3 Mon Sep 17 00:00:00 2001 From: yuiyuiui <2946723935@qq.com> Date: Wed, 4 Feb 2026 10:07:09 +0800 Subject: [PATCH 2/7] add test for issue #143 and revise drift --- src/factorizations/blocklanczos.jl | 22 +++---- test/issues.jl | 93 ++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 11 deletions(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index 179aa05b..8bb1457a 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -173,8 +173,8 @@ function initialize( X₁ = Block(map(Base.Fix2(scale, one(α)), X₀.vec)) # Orthogonalization of the initial block - _, good_idx, is_draft = block_qr!(X₁, iter.qr_tol) - is_draft && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." + _, good_idx, is_drift = block_qr!(X₁, iter.qr_tol) + is_drift && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." X₁ = X₁[good_idx] V = OrthonormalBasis(X₁.vec) bs = length(X₁) # block size of the first block @@ -209,13 +209,13 @@ function expand!( Rcopy = copy(R) # Calculate the new basis and B - B, good_idx, is_draft = block_qr!(R, iter.qr_tol) - if is_draft # Prevent column subspace of R from drifting caused by an excessively small β in block_qr! + B, good_idx, is_drift = block_qr!(R, iter.qr_tol) + if is_drift # Prevent column subspace of R from drifting caused by an excessively small β in block_qr! block_reorthogonalize!(R, V) - _, good_idx, is_draft = block_qr!(R, iter.qr_tol) + _, good_idx, is_drift = block_qr!(R, iter.qr_tol) B = block_inner(R[good_idx], Rcopy) # Make sure R = XB end - is_draft && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." + is_drift && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." bs_next = length(good_idx) push!(V, R[good_idx]) @@ -303,16 +303,16 @@ This function performs a QR factorization of a block of abstract vectors using t It takes as input a block of abstract vectors and a tolerance parameter, which is used to determine whether a vector is considered numerically zero. The operation is performed in-place, transforming the input block into a block of orthonormal vectors. -The function returns a matrix of size `(r, p)`, a vector of indices goodidx and a boolean flag is_draft. Here, `p` denotes the number of input vectors, +The function returns a matrix of size `(r, p)`, a vector of indices goodidx and a boolean flag is_drift. Here, `p` denotes the number of input vectors, and `r` is the numerical rank of the input block. The matrix represents the upper-triangular factor of the QR decomposition, restricted to the `r` linearly independent components. The vector `goodidx` contains the indices of the non-zero (i.e., numerically independent) vectors in the orthonormalized block. If a small value of β is detected, the function will carry out an additional reorthogonalization step to further ensure the input block vectors are orthonormalized. -In such cases, is_draft is set to true to indicate potential numerical instability. +In such cases, is_drift is set to true to indicate potential numerical instability. """ function block_qr!(block::Block, tol::Real) n = length(block) - is_draft = false + is_drift = false idx = trues(n) r₁₁ = inner(block[1], block[1]) R = zeros(typeof(r₁₁), n, n) @@ -341,7 +341,7 @@ function block_qr!(block::Block, tol::Real) block[j] = scale!!(block[j], 1 / β) # DGKS reorthogonalization if β < 100 * tol - is_draft = true + is_drift = true for i in 1:(j - 1) δ = inner(block[i], block[j]) R[i, j] += δ @@ -359,5 +359,5 @@ function block_qr!(block::Block, tol::Real) end end good_idx = findall(idx) - return R[good_idx, :], good_idx, is_draft + return R[good_idx, :], good_idx, is_drift end diff --git a/test/issues.jl b/test/issues.jl index cdc9581f..807c3f01 100644 --- a/test/issues.jl +++ b/test/issues.jl @@ -34,3 +34,96 @@ end @test info.converged ≥ 1 @test all(≈(1.0), vals[1:(info.converged)]) end + +# https://github.com/Jutho/KrylovKit.jl/issues/143 +@testset "Issue #143" begin + A = [ + 10024.25356852279 1428.6251475796844 146.32921409786178 -5825.105535499953 -8671.830412256508 -435.72962751503286 -435.7296275673929 82.77259787940591 82.77259738541186 -714.8167065980089 -1121.261057635746 -56.2637966622882 -56.2637963390501 -162.99968322595055 -162.99968189997603 3.45283449174475 3.4528344881010566 -101.2646156602821 -162.9869926175108 -160.10450344739752 -160.10450281266358 -162.98699373464325 48.22747151220074 -0.43357566666886543 594.9543398291324 594.954339728482 -15.163023492754974 -21.35552720424608 -21.3555271605477 -15.163023469861352 -67.0222046097202 -43.68202055784805 -43.68202059766126 -67.0222045575418 -20.842179935236523 3.176955598124615 3.1769556061970903 -20.842179912422104 -43.844446571619734 -43.84444650972497 -71.91761400200963 -71.91761348114426 557.7181170776 -3593.6748850333697 -3593.6748842945617 557.7181168234881 -6.636396240630142 -2.306159003813252 -3.433177268528114 -6.544212725113956 -6.63639624732843 -6.5442127342656145 -3.4331772670687295 -19.952844401095824 -19.83843515878668 -9.596457985057066 -19.95284440920183 -9.59645799830108 -9.537129127209779 0.0 -9.537129162700705 -20.49748222241172 -1687.7828148009623 -1671.330072637544 -578.7502786751252 -0.0031252925851325206 -1687.7828108846543 -578.7502793899085 -0.0031252925924096903 -1671.3300756067806 -1.0967349353871034 + 1428.6251475796844 3135.7650562900512 435.68039113590504 180.94459046600588 -2973.32548132554 82.77259792424316 82.7725980533475 -379.0616387246289 -379.06163872462884 0.0 -376.5908520174514 7.972896312146836 7.972896320201961 10.280464478355288 10.28046447444987 -46.64987823477029 -46.649877886325086 16.19785550380041 -46.612085279005676 -35.838483358987816 -35.83848328363477 -46.61208571191568 -309.34934332749026 0.0 1771.5544134227805 1771.5544134227805 1.7938606173373146 -5.663692130085152 -5.663692146849877 1.7938606190153954 -21.39621232703441 3.176955628615508 3.176955637485565 -21.39621231890626 -4.852284006375733 -44.84510231977838 -44.84510232839665 -4.852283953542262 -5.346178994624623 -5.346178936731853 -45.0024155786474 -45.00241611029361 -3687.067613482691 557.7384528515037 557.7384541856707 -3687.067613482691 -0.8601937945755359 0.20334493473192045 -0.850360036867677 0.29181365597329 -0.8601937933334296 0.29181365597329 -0.8503600373563277 -3.290926382979562 0.0 -3.321111169072697 -3.2909263915920404 -3.321111178921021 -6.890246596872159 -6.8663545347694335 -6.890246589731719 -7.064686493496346 -582.0469536762479 -0.0005538197006212592 51.84001296374422 -578.7498035202127 -582.0469557381933 51.840012084834115 -578.7498042349937 -0.0005538197006212592 -0.1967702778364937 + 146.32921409786178 435.68039113590504 9838.623932050275 18.533538920851726 110.36346361848297 -2973.3254813255494 -2973.3254813255476 -8852.775002344473 -8852.775002344473 0.0 8.708870613171829 -376.59085426629264 -376.5908514135216 -1121.2610515639428 -1121.2610458679835 -1121.2610698417902 -1121.2610613479546 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.16136594190998443 -0.16136594215362896 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -5825.105535499953 180.94459046600588 18.533538920851726 24577.154159608905 0.0 0.9605744534998707 0.9605744570294802 6.624049976338272 6.624049944266149 -4667.248192104644 -6948.129045393917 -355.71584032234813 -355.71583762793927 0.3617311871636146 0.3617311885610494 0.3595896549770436 0.35958965554891864 0.0 0.38262286268460743 0.44903308635592126 0.44903308555261773 0.3826228641966812 2.9512160096229674 -2.2452266739090256 59.96092966053942 59.96093018494843 -36.88529879761102 -114.56459078381943 -114.56458955216142 -36.88529866207681 0.19757103848460922 0.0 0.0 0.19757103848460922 0.0 0.19094687302593513 0.19094687336488958 0.0 0.0 0.0 0.20180473349412906 0.2018047333728004 33.14877372475418 -0.01572313854173927 -0.015723138513611158 33.14877260863916 -14.692415116196658 -9.27518296922867 -13.807958136289304 -13.890191255142854 -14.692415058134223 -13.890191308803248 -13.807958114329756 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.007066302861682478 -0.006918057720732247 -2307.3471884513187 -0.006686108952601649 -0.007066302857434089 -2307.3472085882136 -0.0066861089644703236 -0.006918057720732247 -2.3250632131420756 + -8671.830412256508 -2973.32548132554 110.36346361848297 0.0 22006.154088052037 9.484062937812308 9.484062946131925 17.403482651651455 17.403482673424183 0.0 -2333.624099739877 0.7213208321534695 0.72132083792631 -353.68894909827935 -353.68894722146945 -353.6889547852886 -353.68895210944726 0.9912062877481058 2.278441529744459 1.3369504752349584 1.3369504752349584 2.2784415253029726 0.0 0.0 357.77111563801327 357.77111719938785 0.06635693613134855 0.0 0.0 0.06635693615895637 -109.82223587924749 -38.308675382237595 -38.30867535400063 -109.82223436690262 -36.687728014163675 -114.62872332989535 -114.62872209835116 -36.68772787854726 0.20180473998897708 0.20180473936118049 0.0 0.0 -0.015723138672933696 33.194614694847616 33.194614659265135 -0.015723138672933696 0.0 0.0 -4.63759150657059 -4.6652103994682435 0.0 -4.665210466544579 -4.637591513945994 -14.692415101630433 -27.615914047696407 -27.780382601001726 -14.69241498628661 -27.780382437843283 -14.692415202392764 -27.615916533596014 -14.692415144330335 0.0 -0.0023733144723587177 -2307.347158768608 -0.0007803874025482052 -2307.347266354563 -0.0023733144649755477 -0.0007803874028728855 -2307.3472864914547 -2307.347158768608 -0.7809042772990892 + -435.72962751503286 82.77259792424316 -2973.3254813255494 0.9605744534998707 9.484062937812308 29350.4010634347 0.0 0.0 0.0 0.0 0.4675527987843884 -2333.6241140587913 0.0 0.0 0.0 -6948.129099827515 0.0 -2111.1720973919782 -6948.12910249182 -6948.1289343634335 0.0 0.0 0.0 0.0 0.0 -0.835616816943483 0.0 0.0 0.0 -241.89872354476827 0.0 -751.7504809206526 0.0 0.0 0.0 0.0 0.0 -720.2289159356066 0.0 0.0 0.0 0.0 0.0 -0.10736725058114675 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -435.7296275673929 82.7725980533475 -2973.3254813255476 0.9605744570294802 9.484062946131925 0.0 29350.401077097158 0.0 0.0 0.0 0.4675527935041075 0.0 -2333.6241008730335 0.0 0.0 0.0 -6948.129060568261 -2111.172097391977 0.0 0.0 -6948.1289383264775 -6948.129170300008 0.0 0.0 -0.835616816943483 0.0 -241.89872443361975 0.0 0.0 0.0 0.0 0.0 -751.7504803692925 0.0 -720.228918582072 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.10736724936860083 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 82.77259787940591 -379.0616387246289 -8852.775002344473 6.624049976338272 17.403482651651455 0.0 0.0 22705.009995671495 0.0 0.0 1.3920909733036604 0.0 0.0 -2333.62408649972 0.0 0.0 0.0 0.0 0.0 -2333.6240857562043 0.0 -2333.6241379662724 -6285.800759729422 0.0 -0.2806533267557003 0.0 0.0 -252.48568046020608 0.0 0.0 0.0 0.0 0.0 -720.2289061983765 0.0 -751.7505038823706 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.107367246272398 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 82.77259738541186 -379.06163872462884 -8852.775002344473 6.624049944266149 17.403482673424183 0.0 0.0 0.0 22705.009989020014 0.0 1.392090991211482 0.0 0.0 0.0 -2333.6240685196917 0.0 0.0 0.0 -2333.6241226647644 0.0 -2333.6240772559267 0.0 -6285.800759729424 0.0 0.0 -0.2806533267557003 0.0 0.0 -252.48567774755904 0.0 -720.2289161165364 0.0 0.0 0.0 0.0 0.0 -751.7504958057391 0.0 0.0 0.0 0.0 0.0 -0.10736724765356745 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -714.8167065980089 0.0 0.0 -4667.248192104644 0.0 0.0 0.0 0.0 0.0 30394.766567554972 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -16.648962398928038 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -1121.261057635746 -376.5908520174514 8.708870613171829 -6948.129045393917 -2333.624099739877 0.4675527987843884 0.4675527935041075 1.3920909733036604 1.392090991211482 0.0 30502.914533743013 0.058608370814354514 0.05860837013792819 0.17450047618595418 0.17450047935938545 0.1745004787844975 0.17450047677050676 0.0 0.18317603405456345 0.0 0.0 0.18317603160480161 0.0 0.0 28.608363818390384 28.608363671862865 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.10145014772635046 -0.0340734196298944 -0.03407341924508818 -0.10145014642129843 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.01334915305973647 -0.012716912558942849 -0.004271148879386504 -0.012716912517047265 -0.013349152881207407 -0.004271148830091199 -0.012716912370275493 -0.012716912327675588 -4.21598350955927 + -56.2637966622882 7.972896312146836 -376.59085426629264 -355.71584032234813 0.7213208321534695 -2333.6241140587913 0.0 0.0 0.0 0.0 0.058608370814354514 35284.94780058033 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.196324581575648 -1809.6828350463893 -5646.607041554868 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -188.4663849727706 -561.139542962298 -564.4813752292746 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.08339921369450594 0.0 0.0 0.0 0.0 0.0 0.0 + -56.2637963390501 7.972896320201961 -376.5908514135216 -355.71583762793927 0.72132083792631 0.0 -2333.6241008730335 0.0 0.0 0.0 0.05860837013792819 0.0 35284.94761569817 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.196324581575648 0.0 0.0 0.0 -5646.607054124888 -1809.6828331366737 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -188.46638318821536 0.0 0.0 0.0 -564.4813833453807 -561.1395438547077 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.08339921273195702 0.0 0.0 0.0 + -162.99968322595055 10.280464478355288 -1121.2610515639428 0.3617311871636146 -353.68894909827935 0.0 0.0 -2333.62408649972 0.0 0.0 0.17450047618595418 0.0 0.0 32278.185474035243 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0811202824615966 0.0 0.0 0.0 0.0 0.0 -5388.147094423187 -1896.4901765717077 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -189.58879233340784 0.0 0.0 0.0 0.0 -561.1394749611916 -564.4814037065493 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.08339921245258086 0.0 + -162.99968189997603 10.28046447444987 -1121.2610458679835 0.3617311885610494 -353.68894722146945 0.0 0.0 0.0 -2333.6240685196917 0.0 0.17450047935938545 0.0 0.0 0.0 32278.185291758957 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0811202856038475 0.0 0.0 0.0 0.0 0.0 0.0 -1896.490177670255 -5388.147092376298 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -189.5887930658246 0.0 0.0 -561.1395099200861 0.0 0.0 -564.4814050032325 0.0 0.0 0.0 0.0 0.0 -0.0833992139692625 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 3.45283449174475 -46.64987823477029 -1121.2610698417902 0.3595896549770436 -353.6889547852886 -6948.129099827515 0.0 0.0 0.0 0.0 0.1745004787844975 0.0 0.0 0.0 0.0 32020.03672438474 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1809.6828381041312 -5646.607044982525 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -188.46638288848632 0.0 0.0 -564.4813940200895 0.0 0.0 0.0 -561.1395441544464 0.0 0.0 0.0 0.0 0.0 -0.08339921369450566 0.0 0.0 0.0 0.0 0.0 + 3.4528344881010566 -46.649877886325086 -1121.2610613479546 0.35958965554891864 -353.68895210944726 0.0 -6948.129060568261 0.0 0.0 0.0 0.17450047677050676 0.0 0.0 0.0 0.0 0.0 32020.03653805733 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5646.607057552552 -1809.6828361944165 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -188.46638318821468 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -564.4813860928349 0.0 -561.139541750932 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.08339921273195675 0.0 0.0 + -101.2646156602821 16.19785550380041 0.0 0.0 0.9912062877481058 -2111.1720973919782 -2111.172097391977 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 39093.0220361019 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2055.637926635575 0.0 0.0 -2055.637923369731 0.0 0.0 0.0 0.0 -6120.453461628121 0.0 0.0 -6120.453451904403 -6517.920618866774 -6517.920583261844 0.0 0.0 0.0 -0.7052390649423907 -0.705239060598603 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -162.9869926175108 -46.612085279005676 0.0 0.38262286268460743 2.278441529744459 -6948.12910249182 0.0 0.0 -2333.6241226647644 0.0 0.18317603405456345 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32418.618678723305 0.0 0.0 0.0 0.0 0.0 0.0 -2.0811202685001327 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1903.1429206290907 0.0 -5666.414916880266 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -200.53843580458286 0.0 0.0 -597.082851475908 0.0 0.0 0.0 0.0 0.0 0.0 -597.0828532111829 0.0 -0.08754553176151948 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -160.10450344739752 -35.838483358987816 0.0 0.44903308635592126 1.3369504752349584 -6948.1289343634335 0.0 -2333.6240857562043 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 35336.94673305333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1896.4901611469181 0.0 0.0 0.0 -1896.4901336837984 0.0 0.0 0.0 -5646.60710293089 0.0 0.0 0.0 -1903.1429208256714 -5666.4149801075 0.0 0.0 -0.21460689727475965 0.0 -0.6389702719428734 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -160.10450281266358 -35.83848328363477 0.0 0.44903308555261773 1.3369504752349584 0.0 -6948.1289383264775 0.0 -2333.6240772559267 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 35336.9467168525 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1896.4901576540315 0.0 0.0 0.0 -1896.4901363846916 0.0 0.0 0.0 -5646.607092531175 0.0 -1903.1429278873957 0.0 0.0 -5666.415047167205 -0.6389702719428734 0.0 -0.21460689689083584 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -162.98699373464325 -46.61208571191568 0.0 0.3826228641966812 2.2784415253029726 0.0 -6948.129170300008 -2333.6241379662724 0.0 0.0 0.18317603160480161 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 32418.61894693181 0.0 0.0 -2.0811202685001327 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1903.1429226888451 0.0 -5666.414983703508 0.0 0.0 0.0 0.0 -200.53843659708357 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -597.0828467884677 0.0 -597.0828555707732 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.087545530590702 0.0 0.0 0.0 0.0 + 48.22747151220074 -309.34934332749026 0.0 2.9512160096229674 0.0 0.0 0.0 -6285.800759729422 -6285.800759729424 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 27548.177364371993 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2055.6379011560666 0.0 0.0 -2055.6378967027777 0.0 0.0 0.0 0.0 0.0 0.0 -2189.1327623969833 -2189.1327479534616 -0.23686416513901967 0.0 0.0 -0.23686416513901967 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -0.43357566666886543 0.0 0.0 -2.2452266739090256 0.0 0.0 0.0 0.0 0.0 -16.648962398928038 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.26677334277161424 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 594.9543398291324 1771.5544134227805 -0.16136594190998443 59.96092966053942 357.77111563801327 0.0 -0.835616816943483 -0.2806533267557003 0.0 0.0 28.608363818390384 0.0 -6.196324581575648 -2.0811202824615966 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0811202685001327 0.0 0.0 2893.2295750156486 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5246.660843601585 -1762.1627906429335 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -529.8509176100155 -177.95767479499997 -529.8509244262688 0.0 0.0 0.0 0.0 -0.0781176093372119 + 594.954339728482 1771.5544134227805 -0.16136594215362896 59.96093018494843 357.77111719938785 -0.835616816943483 0.0 0.0 -0.2806533267557003 0.0 28.608363671862865 -6.196324581575648 0.0 0.0 -2.0811202856038475 0.0 0.0 0.0 -2.0811202685001327 0.0 0.0 0.0 0.0 0.0 0.0 2893.2295753611807 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1762.1627903449569 -5246.660843601585 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -177.95767634808993 -529.8509290504365 -529.8509176100155 -0.07811760894278927 + -15.163023492754974 1.7938606173373146 0.0 -36.88529879761102 0.06635693613134855 0.0 -241.89872443361975 0.0 0.0 0.0 0.0 -1809.6828350463893 0.0 0.0 0.0 0.0 0.0 -2055.637926635575 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 41915.80788301135 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.013320748981595 0.0 -5394.687109609028 -1799.3801671340102 -5357.471915996492 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5851265010209279 0.0 0.0 0.0 0.0 0.0 0.0 + -21.35552720424608 -5.663692130085152 0.0 -114.56459078381943 0.0 0.0 0.0 -252.48568046020608 0.0 0.0 0.0 -5646.607041554868 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1896.4901611469181 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36677.7238476021 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.529983596307442 -1724.824305380718 0.0 0.0 -1740.6446240693385 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.18993370762455367 0.0 0.0 0.0 0.0 0.0 0.0 + -21.3555271605477 -5.663692146849877 0.0 -114.56458955216142 0.0 0.0 0.0 0.0 -252.48567774755904 0.0 0.0 0.0 -5646.607054124888 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1896.4901576540315 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36677.723749223755 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.529983596307442 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1724.8243116420308 -1740.6446256070549 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.1899337079617096 0.0 0.0 0.0 + -15.163023469861352 1.7938606190153954 0.0 -36.88529866207681 0.06635693615895637 -241.89872354476827 0.0 0.0 0.0 0.0 0.0 0.0 -1809.6828331366737 0.0 0.0 0.0 0.0 -2055.637923369731 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 41915.80782828021 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.013320764432163 0.0 0.0 0.0 -1799.3801897771018 0.0 0.0 -5394.68710661503 0.0 -5357.471918273863 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5851265012643698 0.0 0.0 0.0 + -67.0222046097202 -21.39621232703441 0.0 0.19757103848460922 -109.82223587924749 0.0 0.0 0.0 -720.2289161165364 0.0 0.0 0.0 0.0 -5388.147094423187 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2055.6379011560666 0.0 0.0 0.0 0.0 0.0 0.0 0.0 34186.79126487367 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.019655930067749 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1811.8793941644383 -1799.380243536654 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.1965227252164447 0.0 + -43.68202055784805 3.176955628615508 0.0 0.0 -38.308675382237595 -751.7504809206526 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1896.4901765717077 0.0 0.0 0.0 0.0 0.0 -1896.4901336837984 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 38814.55956453366 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.8573205366897478 0.0 0.0 0.0 0.0 0.0 -1740.6446705133517 0.0 0.0 0.0 -5135.489523921311 0.0 -5182.592872560411 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5655083664163928 0.0 + -43.68202059766126 3.176955637485565 0.0 0.0 -38.30867535400063 0.0 -751.7504803692925 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1896.490177670255 0.0 0.0 0.0 0.0 0.0 -1896.4901363846916 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 38814.55959748588 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.8573205486525954 0.0 0.0 0.0 0.0 0.0 0.0 -1740.6446739850585 0.0 0.0 0.0 0.0 -5135.489537361081 -5182.592887928717 0.0 0.0 0.0 0.0 0.0 -0.5655083664163928 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -67.0222045575418 -21.39621231890626 0.0 0.19757103848460922 -109.82223436690262 0.0 0.0 -720.2289061983765 0.0 0.0 0.0 0.0 0.0 0.0 -5388.147092376298 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2055.6378967027777 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 34186.79108669362 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0196559295400145 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.3801286380394 0.0 -1811.8793955559788 0.0 0.0 0.0 0.0 0.0 0.0 -0.1965227252164447 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -20.842179935236523 -4.852284006375733 0.0 0.0 -36.687728014163675 0.0 -720.228918582072 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1809.6828381041312 0.0 -6120.453461628121 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 38747.32364702128 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.3801890122033 0.0 0.0 0.0 0.0 0.0 -5394.687113710614 -5357.471915396351 0.0 0.0 0.0 0.0 0.0 -0.5851265010209237 0.0 0.0 0.0 0.0 0.0 + 3.176955598124615 -44.84510231977838 0.0 0.19094687302593513 -114.62872332989535 0.0 0.0 -751.7505038823706 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5646.607044982525 0.0 0.0 0.0 -5646.60710293089 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 33763.91513627063 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1740.6446545643128 0.0 0.0 -1724.8243091570546 0.0 0.0 0.0 0.0 0.0 0.0 -0.18993370762455367 0.0 0.0 0.0 0.0 0.0 + 3.1769556061970903 -44.84510232839665 0.0 0.19094687336488958 -114.62872209835116 0.0 0.0 0.0 -751.7504958057391 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5646.607057552552 0.0 0.0 0.0 -5646.607092531175 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 33763.91503805473 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1740.6446571085737 0.0 0.0 -1724.8243154183658 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.1899337079617096 0.0 0.0 + -20.842179912422104 -4.852283953542262 0.0 0.0 -36.68772787854726 -720.2289159356066 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1809.6828361944165 -6120.453451904403 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 38747.323643171905 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.3801897770888 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5357.472047863067 -5394.687110716615 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5851265012643657 0.0 0.0 + -43.844446571619734 -5.346178994624623 0.0 0.0 0.20180473998897708 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6517.920618866774 -1903.1429206290907 0.0 -1903.1429278873957 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 43032.30533085363 0.0 0.0 0.0 0.0 0.0 -1.7885994647321972 0.0 0.0 0.0 0.0 0.0 -1799.4031493740802 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5357.540396349298 -5512.220446554533 -0.5976650111213667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -43.84444650972497 -5.346178936731853 0.0 0.0 0.20180473936118049 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6517.920583261844 0.0 -1903.1429208256714 0.0 -1903.1429226888451 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 43032.30524328015 0.0 0.0 0.0 -1.788599470397395 0.0 0.0 -1799.4031521109189 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5357.540404497955 0.0 0.0 -5512.220472203078 0.0 0.0 0.0 0.0 -0.5976650092620841 0.0 0.0 0.0 0.0 + -71.91761400200963 -45.0024155786474 0.0 0.20180473349412906 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5666.414916880266 -5666.4149801075 0.0 0.0 -2189.1327623969833 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 38063.27330476277 0.0 0.0 0.0 0.0 -1.7885994325497492 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.4031225782635 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1851.354599525686 -0.20073395621157314 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -71.91761348114426 -45.00241611029361 0.0 0.2018047333728004 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5666.415047167205 -5666.414983703508 -2189.1327479534616 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 38063.2734960871 -1.7885994325497492 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.4031227557384 0.0 0.0 0.0 0.0 -1851.3546128958508 0.0 0.0 0.0 0.0 -0.20073395609088826 0.0 0.0 0.0 0.0 + 557.7181170776 -3687.067613482691 0.0 33.14877372475418 -0.015723138672933696 0.0 0.0 0.0 -0.10736724765356745 0.0 -0.10145014772635046 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.6389702719428734 0.0 -0.23686416513901967 0.0 -5246.660843601585 0.0 0.0 0.0 -5.529983596307442 0.0 -2.019655930067749 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7885994325497492 11479.776004089537 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1723.7888879680274 -1714.0239557744799 0.0 0.0 0.0 0.0 0.0 0.0 -0.1866092364427366 + -3593.6748850333697 557.7384528515037 0.0 -0.01572313854173927 33.194614694847616 -0.10736725058114675 0.0 0.0 0.0 0.0 -0.0340734196298944 0.0 0.0 0.0 0.0 0.0 0.0 -0.7052390649423907 0.0 -0.21460689727475965 0.0 0.0 0.0 0.0 -1762.1627906429335 0.0 0.0 0.0 0.0 -6.013320764432163 0.0 -1.8573205366897478 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.788599470397395 0.0 0.0 0.0 16161.58652118614 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5132.4063941190325 0.0 -1714.0239838142154 -5103.33253881262 0.0 0.0 0.0 0.0 -0.555610076064462 + -3593.6748842945617 557.7384541856707 0.0 -0.015723138513611158 33.194614659265135 0.0 -0.10736724936860083 0.0 0.0 0.0 -0.03407341924508818 0.0 0.0 0.0 0.0 0.0 0.0 -0.705239060598603 0.0 0.0 -0.21460689689083584 0.0 0.0 0.0 0.0 -1762.1627903449569 -6.013320748981595 0.0 0.0 0.0 0.0 0.0 -1.8573205486525954 0.0 0.0 0.0 0.0 0.0 -1.7885994647321972 0.0 0.0 0.0 0.0 0.0 16161.586531394927 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5132.406412300998 -1714.023985931111 -5103.3325451154615 0.0 -0.5556100754683878 + 557.7181168234881 -3687.067613482691 0.0 33.14877260863916 -0.015723138672933696 0.0 0.0 -0.107367246272398 0.0 0.0 -0.10145014642129843 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.6389702719428734 0.0 0.0 -0.23686416513901967 0.0 0.0 -5246.660843601585 0.0 -5.529983596307442 0.0 0.0 0.0 0.0 0.0 -2.0196559295400145 0.0 0.0 0.0 0.0 0.0 0.0 -1.7885994325497492 0.0 0.0 0.0 0.0 11479.776003657511 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1723.7888864017066 0.0 0.0 -1714.0239557744799 -0.1866092301694055 + -6.636396240630142 -0.8601937945755359 0.0 -14.692415116196658 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -200.53843659708357 0.0 0.0 0.0 0.0 -5394.687109609028 -1724.824305380718 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.4031521109189 0.0 0.0 0.0 0.0 0.0 0.0 43961.466430581844 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.6104245767599097 0.0 -5.522086986257802 0.0 0.0 0.0 0.0 + -2.306159003813252 0.20334493473192045 0.0 -9.27518296922867 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -188.4663849727706 -188.46638318821536 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.3801671340102 0.0 0.0 -1799.3801897771018 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 42628.96433438222 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.55556127384905 0.0 0.0 -5.55556127382145 0.0 0.0 0.0 + -3.433177268528114 -0.850360036867677 0.0 -13.807958136289304 -4.63759150657059 0.0 0.0 0.0 0.0 0.0 0.0 -561.139542962298 0.0 0.0 0.0 0.0 -188.46638318821468 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5357.471915996492 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.3801897770888 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 39701.67835216255 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.55556127382145 0.0 0.0 + -6.544212725113956 0.29181365597329 0.0 -13.890191255142854 -4.6652103994682435 0.0 0.0 0.0 0.0 0.0 0.0 -564.4813752292746 0.0 -189.58879233340784 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1740.6446240693385 0.0 0.0 0.0 -1740.6446705133517 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 39272.79903423964 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7986896276434348 0.0 0.0 0.0 0.0 -5.355416061345302 0.0 + -6.63639624732843 -0.8601937933334296 0.0 -14.692415058134223 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -200.53843580458286 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1724.8243116420308 -5394.68710661503 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.4031493740802 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 43961.466421624704 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.5220869972271425 0.0 0.0 0.0 0.0 -1.6104245772431138 0.0 0.0 0.0 + -6.5442127342656145 0.29181365597329 0.0 -13.890191308803248 -4.665210466544579 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -564.4813833453807 0.0 -189.5887930658246 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1740.6446256070549 0.0 0.0 0.0 -1740.6446739850585 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 39272.79919939769 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.355416061345302 0.0 0.0 0.0 -1.7986896350982724 0.0 0.0 0.0 + -3.4331772670687295 -0.8503600373563277 0.0 -13.807958114329756 -4.637591513945994 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -561.1395438547077 0.0 0.0 -188.46638288848632 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5357.471918273863 0.0 0.0 0.0 0.0 -1799.3801890122033 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 39701.67835217708 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.55556127384905 0.0 0.0 0.0 0.0 0.0 + -19.952844401095824 -3.290926382979562 0.0 0.0 -14.692415101630433 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -597.082851475908 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1811.8793941644383 -5135.489523921311 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.4031225782635 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 41380.03955483894 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.854668347300711 0.0 0.0 0.0 0.0 0.0 0.0 -1.6104245711525331 0.0 + -19.83843515878668 0.0 0.0 0.0 -27.615914047696407 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -561.1394749611916 -561.1395099200861 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.380243536654 0.0 0.0 -1799.3801286380394 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 37434.81271054591 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.865911139721844 0.0 0.0 0.0 0.0 0.0 -1.8659111397218422 0.0 + -9.596457985057066 -3.321111169072697 0.0 0.0 -27.780382601001726 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -564.4814037065493 0.0 -564.4813940200895 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5182.592872560411 0.0 0.0 0.0 -1740.6446545643128 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36450.9721446839 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7986896276434219 0.0 0.0 0.0 0.0 0.0 + -19.95284440920183 -3.2909263915920404 0.0 0.0 -14.69241498628661 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -597.0828467884677 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5135.489537361081 -1811.8793955559788 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1799.4031227557384 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 41380.039532960334 0.0 0.0 0.0 0.0 0.0 0.0 -1.6104245711525331 0.0 0.0 -1.854668352276606 0.0 0.0 0.0 0.0 + -9.59645799830108 -3.321111178921021 0.0 0.0 -27.780382437843283 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -564.4814050032325 0.0 -564.4813860928349 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5182.592887928717 0.0 0.0 0.0 -1740.6446571085737 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36450.972108240705 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7986896350982595 0.0 0.0 + -9.537129127209779 -6.890246596872159 0.0 0.0 -14.692415202392764 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -597.0828555707732 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5394.687113710614 -1724.8243091570546 0.0 0.0 0.0 -5357.540404497955 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 41051.8186040716 0.0 0.0 0.0 0.0 0.0 0.0 -1.6104245767598981 0.0 0.0 0.0 0.0 0.0 + 0.0 -6.8663545347694335 0.0 0.0 -27.615916533596014 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -561.1395441544464 -561.139541750932 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5357.471915396351 0.0 0.0 -5357.472047863067 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 36774.39257112109 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -9.537129162700705 -6.890246589731719 0.0 0.0 -14.692415144330335 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -597.0828532111829 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1724.8243154183658 -5394.687110716615 -5357.540396349298 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 41051.818589334594 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.610424577243102 0.0 0.0 + -20.49748222241172 -7.064686493496346 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5512.220446554533 -5512.220472203078 -1851.354599525686 -1851.3546128958508 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 46474.89048129531 -1.6546968891737428 0.0 0.0 0.0 -1.6546968870252792 0.0 0.0 0.0 0.0 + -1687.7828148009623 -582.0469536762479 0.0 -0.007066302861682478 -0.0023733144723587177 0.0 0.0 0.0 0.0 0.0 -0.01334915305973647 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.08754553176151948 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5976650111213667 0.0 -0.20073395621157314 0.0 -1723.7888879680274 -5132.4063941190325 0.0 0.0 0.0 0.0 0.0 0.0 -5.5220869972271425 0.0 0.0 -1.854668347300711 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.6546968891737428 21642.32126398862 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.574462117548007 + -1671.330072637544 -0.0005538197006212592 0.0 -0.006918057720732247 -2307.347158768608 0.0 0.0 0.0 0.0 0.0 -0.012716912558942849 0.0 0.0 0.0 -0.0833992139692625 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -529.8509176100155 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5655083664163928 -0.1965227252164447 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1714.0239557744799 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.355416061345302 0.0 0.0 -1.865911139721844 0.0 -1.6104245711525331 0.0 0.0 0.0 0.0 0.0 0.0 17774.325884765098 0.0 0.0 0.0 0.0 0.0 0.0 -1.8055815785745342 + -578.7502786751252 51.84001296374422 0.0 -2307.3471884513187 -0.0007803874025482052 0.0 0.0 0.0 0.0 0.0 -0.004271148879386504 -0.08339921369450594 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -177.95767479499997 0.0 -0.5851265010209279 -0.18993370762455367 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1714.0239838142154 0.0 0.0 -1.6104245767599097 -5.55556127384905 0.0 -1.7986896276434348 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 20287.43137738174 0.0 0.0 0.0 0.0 0.0 -5.375935948925016 + -0.0031252925851325206 -578.7498035202127 0.0 -0.006686108952601649 -2307.347266354563 0.0 0.0 0.0 0.0 0.0 -0.012716912517047265 0.0 0.0 0.0 0.0 -0.08339921369450566 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -529.8509244262688 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5851265010209237 -0.18993370762455367 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5103.33253881262 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.55556127384905 0.0 0.0 -1.7986896276434219 0.0 0.0 -1.6104245767598981 0.0 0.0 0.0 0.0 0.0 0.0 17454.791942969598 0.0 0.0 0.0 0.0 0.0 + -1687.7828108846543 -582.0469557381933 0.0 -0.007066302857434089 -0.0023733144649755477 0.0 0.0 0.0 0.0 0.0 -0.013349152881207407 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.087545530590702 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5976650092620841 0.0 -0.20073395609088826 0.0 0.0 -5132.406412300998 -1723.7888864017066 -5.522086986257802 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.854668352276606 0.0 0.0 0.0 0.0 -1.6546968870252792 0.0 0.0 0.0 0.0 21642.321306557118 0.0 0.0 0.0 -1.5744621991065635 + -578.7502793899085 51.840012084834115 0.0 -2307.3472085882136 -0.0007803874028728855 0.0 0.0 0.0 0.0 0.0 -0.004271148830091199 0.0 -0.08339921273195702 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -177.95767634808993 0.0 0.0 -0.1899337079617096 -0.5851265012643698 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1714.023985931111 0.0 0.0 -5.55556127382145 0.0 0.0 -1.6104245772431138 -1.7986896350982724 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 20287.431402111757 0.0 0.0 -5.37593585778023 + -0.0031252925924096903 -578.7498042349937 0.0 -0.0066861089644703236 -2307.3472864914547 0.0 0.0 0.0 0.0 0.0 -0.012716912370275493 0.0 0.0 0.0 0.0 0.0 -0.08339921273195675 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -529.8509290504365 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.1899337079617096 -0.5851265012643657 0.0 0.0 0.0 0.0 0.0 0.0 -5103.3325451154615 0.0 0.0 0.0 -5.55556127382145 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7986896350982595 0.0 0.0 -1.610424577243102 0.0 0.0 0.0 0.0 0.0 0.0 0.0 17454.7920157248 0.0 0.0 + -1671.3300756067806 -0.0005538197006212592 0.0 -0.006918057720732247 -2307.347158768608 0.0 0.0 0.0 0.0 0.0 -0.012716912327675588 0.0 0.0 -0.08339921245258086 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -529.8509176100155 0.0 0.0 0.0 0.0 -0.1965227252164447 -0.5655083664163928 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1714.0239557744799 0.0 0.0 0.0 -5.355416061345302 0.0 0.0 0.0 -1.6104245711525331 -1.8659111397218422 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 17774.325866463114 -1.8055814751567514 + -1.0967349353871034 -0.1967702778364937 0.0 -2.3250632131420756 -0.7809042772990892 0.0 0.0 0.0 0.0 0.0 -4.21598350955927 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0781176093372119 -0.07811760894278927 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.1866092364427366 -0.555610076064462 -0.5556100754683878 -0.1866092301694055 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.574462117548007 -1.8055815785745342 -5.375935948925016 0.0 -1.5744621991065635 -5.37593585778023 0.0 -1.8055814751567514 0.09612719785836016 + ] + + D, V, info = eigsolve( + A, Block([randn(71) for _ in 1:20]), 4, :SR, + BlockLanczos(; tol = 1.0e-8, verbosity = 2) + ) + eigvalA = eigvals(A) + @test length(D) == length(eigvalA) + @test D ≊ eigvalA + + U = hcat(V...) + @test A * U ≈ U * Diagonal(D) + + @test info.converged == length(D) + @test info.numiter == 1 + @test info.numops == length(D) + 1 + @test isapprox(info.normres, zeros(length(D)); atol = tolerance(Float64)) +end From f8a34d251e45a72f75243432e929db46c2bbbcfe Mon Sep 17 00:00:00 2001 From: yuiyuiui <2946723935@qq.com> Date: Thu, 26 Feb 2026 03:36:07 +0800 Subject: [PATCH 3/7] remove draft warn --- src/factorizations/blocklanczos.jl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index 8bb1457a..c138ebdb 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -173,8 +173,7 @@ function initialize( X₁ = Block(map(Base.Fix2(scale, one(α)), X₀.vec)) # Orthogonalization of the initial block - _, good_idx, is_drift = block_qr!(X₁, iter.qr_tol) - is_drift && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." + _, good_idx, _ = block_qr!(X₁, iter.qr_tol) X₁ = X₁[good_idx] V = OrthonormalBasis(X₁.vec) bs = length(X₁) # block size of the first block @@ -215,7 +214,6 @@ function expand!( _, good_idx, is_drift = block_qr!(R, iter.qr_tol) B = block_inner(R[good_idx], Rcopy) # Make sure R = XB end - is_drift && @warn "Block size may be more than operator's rank. Please decrease Krylovdim or increase qr_tol." bs_next = length(good_idx) push!(V, R[good_idx]) From 901b424a692257333f1925be98068f14e9cd2c5e Mon Sep 17 00:00:00 2001 From: yuiyuiui <2946723935@qq.com> Date: Thu, 5 Mar 2026 02:23:17 +0800 Subject: [PATCH 4/7] revise abstract qr --- src/factorizations/blocklanczos.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index c138ebdb..3e6a8660 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -336,7 +336,6 @@ function block_qr!(block::Block, tol::Real) continue else R[j, j] = β - block[j] = scale!!(block[j], 1 / β) # DGKS reorthogonalization if β < 100 * tol is_drift = true @@ -353,6 +352,8 @@ function block_qr!(block::Block, tol::Real) R[j, j] = β block[j] = scale!!(block[j], 1 / β) end + else + block[j] = scale!!(block[j], 1 / β) end end end From ecb5987e345006ba4351dbffc89cb86be11fa27c Mon Sep 17 00:00:00 2001 From: yuiyuiui <2946723935@qq.com> Date: Sun, 22 Mar 2026 21:23:51 +0800 Subject: [PATCH 5/7] revise docstring of block_qr! --- src/factorizations/blocklanczos.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index 3e6a8660..be0cfad7 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -305,7 +305,8 @@ The function returns a matrix of size `(r, p)`, a vector of indices goodidx and and `r` is the numerical rank of the input block. The matrix represents the upper-triangular factor of the QR decomposition, restricted to the `r` linearly independent components. The vector `goodidx` contains the indices of the non-zero (i.e., numerically independent) vectors in the orthonormalized block. -If a small value of β is detected, the function will carry out an additional reorthogonalization step to further ensure the input block vectors are orthonormalized. +If a small value of β (the norm of a vector after first orthogonalization) is detected, the function will carry out an additional +reorthogonalization step to further ensure the input block vectors are orthonormalized. In such cases, is_drift is set to true to indicate potential numerical instability. """ function block_qr!(block::Block, tol::Real) From 4e20317f3b74e242875689f15099d61dcc11deea Mon Sep 17 00:00:00 2001 From: Jutho Date: Thu, 7 May 2026 10:35:48 +0200 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: Jutho --- src/factorizations/blocklanczos.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index be0cfad7..7cf7415b 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -228,7 +228,7 @@ function expand!( Mnext, 1:bs_next, 1:bs_next ) - state.R.vec[1:bs_next] .= Rnext.vec + state.R.vec[1:bs_next] = Rnext.vec state.norm_R = norm(Rnext) state.k += bs_next state.R_size = bs_next @@ -301,7 +301,7 @@ This function performs a QR factorization of a block of abstract vectors using t It takes as input a block of abstract vectors and a tolerance parameter, which is used to determine whether a vector is considered numerically zero. The operation is performed in-place, transforming the input block into a block of orthonormal vectors. -The function returns a matrix of size `(r, p)`, a vector of indices goodidx and a boolean flag is_drift. Here, `p` denotes the number of input vectors, +The function returns a matrix of size `(r, p)`, a vector of indices `goodidx` and a boolean flag `is_drift`. Here, `p` denotes the number of input vectors, and `r` is the numerical rank of the input block. The matrix represents the upper-triangular factor of the QR decomposition, restricted to the `r` linearly independent components. The vector `goodidx` contains the indices of the non-zero (i.e., numerically independent) vectors in the orthonormalized block. From de4558467ccbb8dcf50023b20badbc59a02f2226 Mon Sep 17 00:00:00 2001 From: yuiyuiui <2946723935@qq.com> Date: Mon, 11 May 2026 17:04:50 +0800 Subject: [PATCH 7/7] apply https://github.com/Jutho/KrylovKit.jl/pull/146\#discussion_r3101726376 --- src/factorizations/blocklanczos.jl | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/factorizations/blocklanczos.jl b/src/factorizations/blocklanczos.jl index 7cf7415b..4b8a867f 100644 --- a/src/factorizations/blocklanczos.jl +++ b/src/factorizations/blocklanczos.jl @@ -331,31 +331,21 @@ function block_qr!(block::Block, tol::Real) end β = norm(block[j]) + if tol < β < 100 * tol # DGKS reorthogonalization + is_drift = true + for i in 1:(j - 1) + δ = inner(block[i], block[j]) + R[i, j] += δ + block[j] = add!!(block[j], block[i], -δ) + end + β = norm(block[j]) + end if β < tol block[j] = zerovector!!(block[j]) idx[j] = false - continue else R[j, j] = β - # DGKS reorthogonalization - if β < 100 * tol - is_drift = true - for i in 1:(j - 1) - δ = inner(block[i], block[j]) - R[i, j] += δ - block[j] = add!!(block[j], block[i], -δ) - end - β = norm(block[j]) - if β < tol - block[j] = zerovector!!(block[j]) - idx[j] = false - else - R[j, j] = β - block[j] = scale!!(block[j], 1 / β) - end - else - block[j] = scale!!(block[j], 1 / β) - end + block[j] = scale!!(block[j], 1 / β) end end good_idx = findall(idx)