@@ -126,15 +126,15 @@ function A_mul_X!(b::Blocks, A)
126
126
return
127
127
end
128
128
function A_mul_X! (b:: Blocks , A, n)
129
- mul! (view ( b. A_block, :, 1 : n) , A, view ( b. block, :, 1 : n) )
129
+ @views mul! (b. A_block[ :, 1 : n] , A, b. block[ :, 1 : n] )
130
130
return
131
131
end
132
132
function B_mul_X! (b:: Blocks{true} , B)
133
133
mul! (b. B_block, B, b. block)
134
134
return
135
135
end
136
136
function B_mul_X! (b:: Blocks{true} , B, n)
137
- mul! (view ( b. B_block, :, 1 : n) , B, view ( b. block, :, 1 : n) )
137
+ @views mul! (b. B_block[ :, 1 : n] , B, b. block[ :, 1 : n] )
138
138
return
139
139
end
140
140
function B_mul_X! (b:: Blocks{false} , B, n = 0 )
@@ -210,12 +210,12 @@ function (constr!::Constraint{Nothing})(X, X_temp)
210
210
end
211
211
212
212
function (constr!:: Constraint )(X, X_temp)
213
- if size (constr!. Y, 2 ) > 0
213
+ @views if size (constr!. Y, 2 ) > 0
214
214
sizeX = size (X, 2 )
215
215
sizeY = size (constr!. Y, 2 )
216
- gramYBV_view = view ( constr!. gramYBV, 1 : sizeY, 1 : sizeX)
216
+ gramYBV_view = constr!. gramYBV[ 1 : sizeY, 1 : sizeX]
217
217
mul! (gramYBV_view, adjoint (constr!. BY), X)
218
- tmp_view = view ( constr!. tmp, 1 : sizeY, 1 : sizeX)
218
+ tmp_view = constr!. tmp[ 1 : sizeY, 1 : sizeX]
219
219
ldiv! (tmp_view, constr!. gram_chol, gramYBV_view)
220
220
mul! (X_temp, constr!. Y, tmp_view)
221
221
@inbounds X .= X .- X_temp
@@ -235,9 +235,9 @@ function (precond!::RPreconditioner{Nothing})(X)
235
235
end
236
236
function (precond!:: RPreconditioner )(X)
237
237
bs = size (X, 2 )
238
- ldiv! (view ( precond!. buffer, :, 1 : bs) , precond!. M, X)
238
+ @views ldiv! (precond!. buffer[ :, 1 : bs] , precond!. M, X)
239
239
# Just returning buffer would be cheaper but struct at call site must be mutable
240
- @inbounds X .= @view precond!. buffer[:, 1 : bs]
240
+ @inbounds @views X .= precond!. buffer[:, 1 : bs]
241
241
nothing
242
242
end
243
243
@@ -260,17 +260,17 @@ function BlockGram(XBlocks::Blocks{Generalized, T}) where {Generalized, T}
260
260
return BlockGram {Generalized, Matrix{T}} (XAX, XAR, XAP, RAR, RAP, PAP)
261
261
end
262
262
XAX! (BlockGram, XBlocks) = mul! (BlockGram. XAX, adjoint (XBlocks. block), XBlocks. A_block)
263
- XAP! (BlockGram, XBlocks, PBlocks, n) = mul! (view ( BlockGram. XAP, :, 1 : n) , adjoint (XBlocks. block), view ( PBlocks. A_block, :, 1 : n) )
264
- XAR! (BlockGram, XBlocks, RBlocks, n) = mul! (view ( BlockGram. XAR, :, 1 : n) , adjoint (XBlocks. block), view ( RBlocks. A_block, :, 1 : n) )
265
- RAR! (BlockGram, RBlocks, n) = mul! (view ( BlockGram. RAR, 1 : n, 1 : n) , adjoint (view ( RBlocks. block, :, 1 : n)), view ( RBlocks. A_block, :, 1 : n) )
266
- RAP! (BlockGram, RBlocks, PBlocks, n) = mul! (view ( BlockGram. RAP, 1 : n, 1 : n) , adjoint (view ( RBlocks. A_block, :, 1 : n)), view ( PBlocks. block, :, 1 : n) )
267
- PAP! (BlockGram, PBlocks, n) = mul! (view ( BlockGram. PAP, 1 : n, 1 : n) , adjoint (view ( PBlocks. block, :, 1 : n)), view ( PBlocks. A_block, :, 1 : n) )
268
- XBP! (BlockGram, XBlocks, PBlocks, n) = mul! (view ( BlockGram. XAP, :, 1 : n) , adjoint (XBlocks. block), view ( PBlocks. B_block, :, 1 : n) )
269
- XBR! (BlockGram, XBlocks, RBlocks, n) = mul! (view ( BlockGram. XAR, :, 1 : n) , adjoint (XBlocks. block), view ( RBlocks. B_block, :, 1 : n) )
270
- RBP! (BlockGram, RBlocks, PBlocks, n) = mul! (view ( BlockGram. RAP, 1 : n, 1 : n) , adjoint (view ( RBlocks. B_block, :, 1 : n)), view ( PBlocks. block, :, 1 : n) )
263
+ XAP! (BlockGram, XBlocks, PBlocks, n) = @views mul! (BlockGram. XAP[ :, 1 : n] , adjoint (XBlocks. block), PBlocks. A_block[ :, 1 : n] )
264
+ XAR! (BlockGram, XBlocks, RBlocks, n) = @views mul! (BlockGram. XAR[ :, 1 : n] , adjoint (XBlocks. block), RBlocks. A_block[ :, 1 : n] )
265
+ RAR! (BlockGram, RBlocks, n) = @views mul! (BlockGram. RAR[ 1 : n, 1 : n] , adjoint (RBlocks. block[ :, 1 : n]), RBlocks. A_block[ :, 1 : n] )
266
+ RAP! (BlockGram, RBlocks, PBlocks, n) = @views mul! (BlockGram. RAP[ 1 : n, 1 : n] , adjoint (RBlocks. A_block[ :, 1 : n]), PBlocks. block[ :, 1 : n] )
267
+ PAP! (BlockGram, PBlocks, n) = @views mul! (BlockGram. PAP[ 1 : n, 1 : n] , adjoint (PBlocks. block[ :, 1 : n]), PBlocks. A_block[ :, 1 : n] )
268
+ XBP! (BlockGram, XBlocks, PBlocks, n) = @views mul! (BlockGram. XAP[ :, 1 : n] , adjoint (XBlocks. block), PBlocks. B_block[ :, 1 : n] )
269
+ XBR! (BlockGram, XBlocks, RBlocks, n) = @views mul! (BlockGram. XAR[ :, 1 : n] , adjoint (XBlocks. block), RBlocks. B_block[ :, 1 : n] )
270
+ RBP! (BlockGram, RBlocks, PBlocks, n) = @views mul! (BlockGram. RAP[ 1 : n, 1 : n] , adjoint (RBlocks. B_block[ :, 1 : n]), PBlocks. block[ :, 1 : n] )
271
271
# XBX!(BlockGram, XBlocks) = mul!(BlockGram.XAX, adjoint(XBlocks.block), XBlocks.B_block)
272
- # RBR!(BlockGram, RBlocks, n) = mul!(view( BlockGram.RAR, 1:n, 1:n) , adjoint(view( RBlocks.block, :, 1:n)), view( RBlocks.B_block, :, 1:n) )
273
- # PBP!(BlockGram, PBlocks, n) = mul!(view( BlockGram.PAP, 1:n, 1:n) , adjoint(view( PBlocks.block, :, 1:n)), view( PBlocks.B_block, :, 1:n) )
272
+ # RBR!(BlockGram, RBlocks, n) = @views mul!(BlockGram.RAR[ 1:n, 1:n] , adjoint(RBlocks.block[ :, 1:n]), RBlocks.B_block[ :, 1:n] )
273
+ # PBP!(BlockGram, PBlocks, n) = @views mul!(BlockGram.PAP[ 1:n, 1:n] , adjoint(PBlocks.block[ :, 1:n]), PBlocks.B_block[ :, 1:n] )
274
274
275
275
function I! (G, xr)
276
276
@inbounds for j in xr, i in xr
@@ -283,22 +283,22 @@ function (g::BlockGram)(gram, lambda, n1::Int, n2::Int, n3::Int)
283
283
xr = 1 : n1
284
284
rr = n1+ 1 : n1+ n2
285
285
pr = n1+ n2+ 1 : n1+ n2+ n3
286
- @inbounds begin
286
+ @inbounds @views begin
287
287
if n1 > 0
288
- # gram[xr, xr] .= view( g.XAX, 1:n1, 1:n1)
289
- gram[xr, xr] .= Diagonal (view ( lambda, 1 : n1) )
288
+ # gram[xr, xr] .= g.XAX[ 1:n1, 1:n1]
289
+ gram[xr, xr] .= Diagonal (lambda[ 1 : n1] )
290
290
end
291
291
if n2 > 0
292
- gram[rr, rr] .= view ( g. RAR, 1 : n2, 1 : n2)
293
- gram[xr, rr] .= view ( g. XAR, 1 : n1, 1 : n2)
294
- conj! (transpose! (view ( gram, rr, xr), view ( g. XAR, 1 : n1, 1 : n2) ))
292
+ gram[rr, rr] .= g. RAR[ 1 : n2, 1 : n2]
293
+ gram[xr, rr] .= g. XAR[ 1 : n1, 1 : n2]
294
+ conj! (transpose! (gram[ rr, xr], g. XAR[ 1 : n1, 1 : n2] ))
295
295
end
296
296
if n3 > 0
297
- gram[pr, pr] .= view ( g. PAP, 1 : n3, 1 : n3)
298
- gram[rr, pr] .= view ( g. RAP, 1 : n2, 1 : n3)
299
- gram[xr, pr] .= view ( g. XAP, 1 : n1, 1 : n3)
300
- conj! (transpose! (view ( gram, pr, rr), view ( g. RAP, 1 : n2, 1 : n3) ))
301
- conj! (transpose! (view ( gram, pr, xr), view ( g. XAP, 1 : n1, 1 : n3) ))
297
+ gram[pr, pr] .= g. PAP[ 1 : n3, 1 : n3]
298
+ gram[rr, pr] .= g. RAP[ 1 : n2, 1 : n3]
299
+ gram[xr, pr] .= g. XAP[ 1 : n1, 1 : n3]
300
+ conj! (transpose! (gram[ pr, rr], g. RAP[ 1 : n2, 1 : n3] ))
301
+ conj! (transpose! (gram[ pr, xr], g. XAP[ 1 : n1, 1 : n3] ))
302
302
end
303
303
end
304
304
return
@@ -307,32 +307,32 @@ function (g::BlockGram)(gram, n1::Int, n2::Int, n3::Int, normalized::Bool=true)
307
307
xr = 1 : n1
308
308
rr = n1+ 1 : n1+ n2
309
309
pr = n1+ n2+ 1 : n1+ n2+ n3
310
- if n1 > 0
310
+ @views if n1 > 0
311
311
if normalized
312
312
I! (gram, xr)
313
313
# else
314
- # @inbounds gram[xr, xr] .= view( g.XAX, 1:n1, 1:n1)
314
+ # @inbounds gram[xr, xr] .= g.XAX[ 1:n1, 1:n1]
315
315
end
316
316
end
317
- if n2 > 0
317
+ @views if n2 > 0
318
318
if normalized
319
319
I! (gram, rr)
320
320
# else
321
- # @inbounds gram[rr, rr] .= view( g.RAR, 1:n2, 1:n2)
321
+ # @inbounds gram[rr, rr] .= g.RAR[ 1:n2, 1:n2]
322
322
end
323
- @inbounds gram[xr, rr] .= view ( g. XAR, 1 : n1, 1 : n2)
324
- @inbounds conj! (transpose! (view ( gram, rr, xr), view ( g. XAR, 1 : n1, 1 : n2) ))
323
+ @inbounds gram[xr, rr] .= g. XAR[ 1 : n1, 1 : n2]
324
+ @inbounds conj! (transpose! (gram[ rr, xr], g. XAR[ 1 : n1, 1 : n2] ))
325
325
end
326
- if n3 > 0
326
+ @views if n3 > 0
327
327
if normalized
328
328
I! (gram, pr)
329
329
# else
330
- # @inbounds gram[pr, pr] .= view( g.PAP, 1:n3, 1:n3)
330
+ # @inbounds gram[pr, pr] .= g.PAP[ 1:n3, 1:n3]
331
331
end
332
- @inbounds gram[rr, pr] .= view ( g. RAP, 1 : n2, 1 : n3)
333
- @inbounds gram[xr, pr] .= view ( g. XAP, 1 : n1, 1 : n3)
334
- @inbounds conj! (transpose! (view ( gram, pr, rr), view ( g. RAP, 1 : n2, 1 : n3) ))
335
- @inbounds conj! (transpose! (view ( gram, pr, xr), view ( g. XAP, 1 : n1, 1 : n3) ))
332
+ @inbounds gram[rr, pr] .= g. RAP[ 1 : n2, 1 : n3]
333
+ @inbounds gram[xr, pr] .= g. XAP[ 1 : n1, 1 : n3]
334
+ @inbounds conj! (transpose! (gram[ pr, rr], g. RAP[ 1 : n2, 1 : n3] ))
335
+ @inbounds conj! (transpose! (gram[ pr, xr], g. XAP[ 1 : n1, 1 : n3] ))
336
336
end
337
337
return
338
338
end
@@ -344,12 +344,12 @@ end
344
344
345
345
function rdiv! (A, B:: UpperTriangular )
346
346
s = size (A, 2 )
347
- @inbounds A[:,1 ] .= view (A, :, 1 ) ./ B[1 ,1 ]
348
- @inbounds for i in 2 : s
347
+ @inbounds @views A[:,1 ] .= A[ :, 1 ] ./ B[1 ,1 ]
348
+ @inbounds @views for i in 2 : s
349
349
for j in 1 : i- 1
350
- A[:,i] .= view (A, :, i) .- view (A, :, j) .* B[j,i]
350
+ A[:,i] .= A[:,i] .- A[:,j] .* B[j,i]
351
351
end
352
- A[:,i] .= view (A, :, i) ./ B[i,i]
352
+ A[:,i] .= A[:,i] ./ B[i,i]
353
353
end
354
354
return A
355
355
end
@@ -370,19 +370,19 @@ function (ortho!::CholQR)(XBlocks::Blocks{Generalized}, sizeX = -1; update_AX=fa
370
370
X = XBlocks. block
371
371
BX = XBlocks. B_block # Assumes it is premultiplied
372
372
AX = XBlocks. A_block
373
- gram_view = view ( ortho!. gramVBV, 1 : sizeX, 1 : sizeX)
374
- if useview
375
- mul! (gram_view, adjoint (view (X, :, 1 : sizeX)), view (BX, :, 1 : sizeX) )
373
+ @views gram_view = ortho!. gramVBV[ 1 : sizeX, 1 : sizeX]
374
+ @views if useview
375
+ mul! (gram_view, adjoint (X[ :, 1 : sizeX]), BX[ :, 1 : sizeX] )
376
376
else
377
377
mul! (gram_view, adjoint (X), BX)
378
378
end
379
379
realdiag! (gram_view)
380
380
cholf = cholesky! (Hermitian (gram_view))
381
381
R = cholf. factors
382
- if useview
383
- rdiv! (view (X, :, 1 : sizeX) , UpperTriangular (R))
384
- update_AX && rdiv! (view (AX, :, 1 : sizeX) , UpperTriangular (R))
385
- Generalized && update_BX && rdiv! (view (BX, :, 1 : sizeX) , UpperTriangular (R))
382
+ @views if useview
383
+ rdiv! (X[ :, 1 : sizeX] , UpperTriangular (R))
384
+ update_AX && rdiv! (AX[ :, 1 : sizeX] , UpperTriangular (R))
385
+ Generalized && update_BX && rdiv! (BX[ :, 1 : sizeX] , UpperTriangular (R))
386
386
else
387
387
rdiv! (X, UpperTriangular (R))
388
388
update_AX && rdiv! (AX, UpperTriangular (R))
@@ -532,7 +532,7 @@ function ortho_AB_mul_X!(blocks::Blocks, ortho!, A, B, bs=-1)
532
532
end
533
533
function residuals! (iterator)
534
534
sizeX = size (iterator. XBlocks. block, 2 )
535
- mul! (iterator. RBlocks. block, iterator. XBlocks. B_block, Diagonal (view ( iterator. ritz_values, 1 : sizeX) ))
535
+ @views mul! (iterator. RBlocks. block, iterator. XBlocks. B_block, Diagonal (iterator. ritz_values[ 1 : sizeX] ))
536
536
@inbounds iterator. RBlocks. block .= iterator. XBlocks. A_block .- iterator. RBlocks. block
537
537
# Finds residual norms
538
538
@inbounds for j in 1 : size (iterator. RBlocks. block, 2 )
@@ -549,22 +549,22 @@ end
549
549
function update_mask! (iterator, residualTolerance)
550
550
sizeX = size (iterator. XBlocks. block, 2 )
551
551
# Update active vectors mask
552
- @inbounds iterator. activeMask .= view ( iterator. residuals, 1 : sizeX) .> residualTolerance
552
+ @inbounds @views iterator. activeMask .= iterator. residuals[ 1 : sizeX] .> residualTolerance
553
553
iterator. currentBlockSize[] = sum (iterator. activeMask)
554
554
return
555
555
end
556
556
557
557
function update_active! (mask, bs:: Int , blockPairs... )
558
- @inbounds for (activeblock, block) in blockPairs
559
- activeblock[:, 1 : bs] .= view ( block, :, mask)
558
+ @inbounds @views for (activeblock, block) in blockPairs
559
+ activeblock[:, 1 : bs] .= block[ :, mask]
560
560
end
561
561
return
562
562
end
563
563
564
564
function precond_constr! (block, temp_block, bs, precond!, constr!)
565
- precond! (view ( block, :, 1 : bs) )
565
+ @views precond! (block[ :, 1 : bs] )
566
566
# Constrain the active residual vectors to be B-orthogonal to Y
567
- constr! (view ( block, :, 1 : bs), view ( temp_block, :, 1 : bs) )
567
+ @views constr! (block[ :, 1 : bs], temp_block[ :, 1 : bs] )
568
568
return
569
569
end
570
570
function block_grams_1x1! (iterator)
@@ -578,7 +578,7 @@ function block_grams_2x2!(iterator, bs)
578
578
XAR! (iterator. gramABlock, iterator. XBlocks, iterator. activeRBlocks, bs)
579
579
RAR! (iterator. gramABlock, iterator. activeRBlocks, bs)
580
580
XBR! (iterator. gramBBlock, iterator. XBlocks, iterator. activeRBlocks, bs)
581
- iterator. gramABlock (iterator. gramA, view ( iterator. ritz_values, 1 : sizeX) , sizeX, bs, 0 )
581
+ @views iterator. gramABlock (iterator. gramA, iterator. ritz_values[ 1 : sizeX] , sizeX, bs, 0 )
582
582
iterator. gramBBlock (iterator. gramB, sizeX, bs, 0 , true )
583
583
584
584
return
@@ -597,7 +597,7 @@ function block_grams_3x3!(iterator, bs)
597
597
XBP! (iterator. gramBBlock, iterator. XBlocks, iterator. activePBlocks, bs)
598
598
RBP! (iterator. gramBBlock, iterator. activeRBlocks, iterator. activePBlocks, bs)
599
599
# Update the gram matrix [X R P]' A [X R P]
600
- iterator. gramABlock (iterator. gramA, view ( iterator. ritz_values, 1 : sizeX) , sizeX, bs, bs)
600
+ @views iterator. gramABlock (iterator. gramA, iterator. ritz_values[ 1 : sizeX] , sizeX, bs, bs)
601
601
# Update the gram matrix [X R P]' B [X R P]
602
602
iterator. gramBBlock (iterator. gramB, sizeX, bs, bs, true )
603
603
@@ -606,38 +606,40 @@ end
606
606
607
607
function sub_problem! (iterator, sizeX, bs1, bs2)
608
608
subdim = sizeX+ bs1+ bs2
609
- if bs1 == 0
610
- gramAview = view ( iterator. gramABlock. XAX, 1 : subdim, 1 : subdim)
609
+ @views if bs1 == 0
610
+ gramAview = iterator. gramABlock. XAX[ 1 : subdim, 1 : subdim]
611
611
# Source of type instability
612
612
realdiag! (gramAview)
613
613
eigf = eigen! (Hermitian (gramAview))
614
614
else
615
- gramAview = view ( iterator. gramA, 1 : subdim, 1 : subdim)
616
- gramBview = view ( iterator. gramB, 1 : subdim, 1 : subdim)
615
+ gramAview = iterator. gramA[ 1 : subdim, 1 : subdim]
616
+ gramBview = iterator. gramB[ 1 : subdim, 1 : subdim]
617
617
# Source of type instability
618
618
realdiag! (gramAview)
619
619
realdiag! (gramBview)
620
620
eigf = eigen! (Hermitian (gramAview), Hermitian (gramBview))
621
621
end
622
622
# Selects extremal eigenvalues and corresponding vectors
623
- partialsortperm! (view ( iterator. λperm, 1 : subdim) , eigf. values, 1 : subdim; rev= iterator. largest)
624
- @inbounds iterator. ritz_values[1 : sizeX] .= view ( eigf. values, view ( iterator. λperm, 1 : sizeX))
625
- @inbounds iterator. V[1 : subdim, 1 : sizeX] .= view ( eigf. vectors, :, view ( iterator. λperm, 1 : sizeX))
623
+ @views partialsortperm! (iterator. λperm[ 1 : subdim] , eigf. values, 1 : subdim; rev= iterator. largest)
624
+ @inbounds @views iterator. ritz_values[1 : sizeX] .= eigf. values[ iterator. λperm[ 1 : sizeX]]
625
+ @inbounds @views iterator. V[1 : subdim, 1 : sizeX] .= eigf. vectors[ :, iterator. λperm[ 1 : sizeX]]
626
626
return
627
627
end
628
628
629
629
function update_X_P! (iterator:: LOBPCGIterator{Generalized} , bs1, bs2) where Generalized
630
630
sizeX = size (iterator. XBlocks. block, 2 )
631
- x_eigview = view (iterator. V, 1 : sizeX, 1 : sizeX)
632
- r_eigview = view (iterator. V, sizeX+ 1 : sizeX+ bs1, 1 : sizeX)
633
- p_eigview = view (iterator. V, sizeX+ bs1+ 1 : sizeX+ bs1+ bs2, 1 : sizeX)
634
- r_blockview = view (iterator. activeRBlocks. block, :, 1 : bs1)
635
- ra_blockview = view (iterator. activeRBlocks. A_block, :, 1 : bs1)
636
- p_blockview = view (iterator. activePBlocks. block, :, 1 : bs2)
637
- pa_blockview = view (iterator. activePBlocks. A_block, :, 1 : bs2)
638
- if Generalized
639
- rb_blockview = view (iterator. activeRBlocks. B_block, :, 1 : bs1)
640
- pb_blockview = view (iterator. activePBlocks. B_block, :, 1 : bs2)
631
+ @views begin
632
+ x_eigview = iterator. V[1 : sizeX, 1 : sizeX]
633
+ r_eigview = iterator. V[sizeX+ 1 : sizeX+ bs1, 1 : sizeX]
634
+ p_eigview = iterator. V[sizeX+ bs1+ 1 : sizeX+ bs1+ bs2, 1 : sizeX]
635
+ r_blockview = iterator. activeRBlocks. block[:, 1 : bs1]
636
+ ra_blockview = iterator. activeRBlocks. A_block[:, 1 : bs1]
637
+ p_blockview = iterator. activePBlocks. block[:, 1 : bs2]
638
+ pa_blockview = iterator. activePBlocks. A_block[:, 1 : bs2]
639
+ if Generalized
640
+ rb_blockview = iterator. activeRBlocks. B_block[:, 1 : bs1]
641
+ pb_blockview = iterator. activePBlocks. B_block[:, 1 : bs2]
642
+ end
641
643
end
642
644
if bs1 > 0
643
645
mul! (iterator. PBlocks. block, r_blockview, r_eigview)
@@ -864,8 +866,8 @@ function lobpcg!(iterator::LOBPCGIterator; log=false, maxiter=200, not_zeros=fal
864
866
X = iterator. XBlocks. block
865
867
iterator. constr! (iterator. XBlocks. block, iterator. tempXBlocks. block)
866
868
if ! not_zeros
867
- for j in 1 : size (X,2 )
868
- if all (x -> x== 0 , view (X, :, j) )
869
+ @views for j in 1 : size (X,2 )
870
+ if all (x -> x== 0 , X[ :, j] )
869
871
@inbounds X[:,j] .= rand .()
870
872
end
871
873
end
@@ -882,9 +884,9 @@ function lobpcg!(iterator::LOBPCGIterator; log=false, maxiter=200, not_zeros=fal
882
884
iterator. currentBlockSize[] == 0 && break
883
885
iterator. iteration[] += 1
884
886
end
885
- @inbounds iterator. λ .= view ( iterator. ritz_values, 1 : sizeX)
887
+ @inbounds @views iterator. λ .= iterator. ritz_values[ 1 : sizeX]
886
888
887
- results = LOBPCGResults (iterator. λ, X, tol, iterator. residuals, iterator. iteration[], maxiter, all ((x)-> (norm (x)<= tol), view ( iterator. residuals, 1 : sizeX) ), iterator. trace)
889
+ @views results = LOBPCGResults (iterator. λ, X, tol, iterator. residuals, iterator. iteration[], maxiter, all ((x)-> (norm (x)<= tol), iterator. residuals[ 1 : sizeX] ), iterator. trace)
888
890
889
891
return results
890
892
end
@@ -938,11 +940,11 @@ function lobpcg(A, B, largest::Bool, X0, nev::Int;
938
940
append! (r, rnext, 0 )
939
941
converged_x = sizeX
940
942
while converged_x < nev
941
- if nev- converged_x < sizeX
943
+ @views if nev- converged_x < sizeX
942
944
cutoff = sizeX- (nev- converged_x)
943
- update! (iterator. constr!, view ( iterator. XBlocks. block, :, 1 : cutoff), view ( iterator. XBlocks. B_block, :, 1 : cutoff) )
944
- X[:, 1 : sizeX- cutoff] .= @view X[:, cutoff+ 1 : sizeX]
945
- rand! (view (X, :, cutoff+ 1 : sizeX) )
945
+ update! (iterator. constr!, iterator. XBlocks. block[ :, 1 : cutoff], iterator. XBlocks. B_block[ :, 1 : cutoff] )
946
+ X[:, 1 : sizeX- cutoff] .= X[:, cutoff+ 1 : sizeX]
947
+ rand! (X[ :, cutoff+ 1 : sizeX] )
946
948
rnext = lobpcg! (iterator, log= log, tol= tol, maxiter= maxiter, not_zeros= true )
947
949
append! (r, rnext, converged_x, sizeX- cutoff)
948
950
converged_x += sizeX- cutoff
0 commit comments