Skip to content

Commit b94e358

Browse files
author
mohamed82008
committed
Fix bugs
1 parent d024eb4 commit b94e358

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/lobpcg.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ end
384384
function update_mask!(iterator, residualTolerance)
385385
sizeX = size(iterator.XBlocks.block, 2)
386386
# Update active vectors mask
387-
iterator.activeMask .*= view(iterator.residuals, 1:sizeX) .> residualTolerance
387+
iterator.activeMask .= view(iterator.residuals, 1:sizeX) .> residualTolerance
388388
iterator.currentBlockSize[] = sum(iterator.activeMask)
389389
return
390390
end
@@ -585,7 +585,8 @@ end
585585
function dense_solver(A, B, X, largest)
586586
warn("The problem size is small compared to the block size. Using dense eigensolver instead of LOBPCG.")
587587
# Define the closed range of indices of eigenvalues to return.
588-
n, sizeX = size(X)
588+
n = size(X, 1)
589+
sizeX = size(X, 2)
589590
eigvals = largest ? (n - sizeX + 1, n) : (1, sizeX)
590591
A_dense = A*eye(n)
591592
if B isa Void
@@ -650,7 +651,8 @@ function lobpcg(A, B, largest, X0;
650651
T = eltype(X)
651652
M = P
652653
Y = C
653-
n, sizeX = size(X)
654+
n = size(X, 1)
655+
sizeX = size(X, 2)
654656
if Y isa Void
655657
n < 5 * sizeX && return dense_solver(A, B, X, largest)
656658
else
@@ -709,7 +711,8 @@ function lobpcg!(λ::AbstractVector, X, A, B, largest=true; log=false,
709711
T = eltype(X)
710712
M = P
711713
Y = C
712-
n, sizeX = size(X)
714+
n = size(X, 1)
715+
sizeX = size(X, 2)
713716
if Y isa Void
714717
if n < 5 * sizeX
715718
lambda, vectors = dense_solver(A, B, X, largest)
@@ -777,12 +780,12 @@ function lobpcg!(iterator::LOBPCGIterator; log=false, tol=nothing, maxiter=200)
777780
end
778781
n = size(iterator.XBlocks.block, 1)
779782
sizeX = size(iterator.XBlocks.block, 2)
780-
residualTolerance = (tol isa Void) ? sqrt(eps(T)) : tol
781-
maxiter = min(n, maxiter)
782-
for iteration in 1:maxiter
783-
iterator.iteration[] = iteration
783+
residualTolerance = (tol isa Void) ? sqrt(eps(real(T))) : tol
784+
iterator.iteration[] = 1
785+
while iterator.iteration[] <= maxiter
784786
iterator(residualTolerance, log)
785787
iterator.currentBlockSize[] == 0 && break
788+
iterator.iteration[] += 1
786789
end
787790
iterator.λ .= view(iterator.int_λ, 1:sizeX)
788791
if log

0 commit comments

Comments
 (0)