Commit eafb6aca authored by Andreas Marek's avatar Andreas Marek

Relax bandwidth criterium for ELPA 2stage

parent 76f631b1
......@@ -288,15 +288,35 @@
if (obj%is_set("bandwidth") == 1) then
call obj%get("bandwidth",nbw)
if ((nbw == 0) .or. (mod(nbw, nblk) .ne. 0)) then
if (nbw == 0) then
if (wantDebug) then
write(error_unit,*) "Specified bandwidth has to be a multiple of blocksize: ",nbw
endif
print *, "Specified bandwidth has to be a multiple of blocksize"
write(error_unit,*) "Specified bandwidth = 0; ELPA refuses to solve the eigenvalue problem ", &
"for a diagonal matrix! This is too simple"
endif
print *, "Specified bandwidth = 0; ELPA refuses to solve the eigenvalue problem ", &
"for a diagonal matrix! This is too simple"
success = .false.
return
endif
if (mod(nbw, nblk) .ne. 0) then
! treat matrix with an effective bandwidth slightly bigger than specified bandwidth
! such that effective bandwidth is a multiply of nblk. which is a prerequiste for ELPA
nbw = nblk * ceiling(real(nbw,kind=c_double)/real(nblk,kind=c_double))
! just check that effective bandwidth is NOT larger than matrix size
if (nbw .gt. na) then
if (wantDebug) then
write(error_unit,*) "Specified bandwidth ",nbw," leads internaly to a computed bandwidth ", &
"which is larger than the matrix size ",na," ! ELPA will abort! Try to", &
"solve your problem by not specifing a bandwidth"
endif
print *, "Specified bandwidth ",nbw," leads internaly to a computed bandwidth ", &
"which is larger than the matrix size ",na," ! ELPA will abort! Try to", &
"solve your problem by not specifing a bandwidth"
success = .false.
return
endif
endif
do_bandred = .false. ! we already have a banded matrix
do_solve_tridi = .true. ! we also have to solve something :-)
do_trans_to_band = .true. ! and still we have to backsub to banded
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment