subroutine geslbp(ab,n,ml,mu,row,b) real, intent(in), dimension(:,:) :: ab integer, intent(in) :: n,ml,mu integer, intent(in), dimension(:) :: row real, intent(inout), dimension(:) :: b real :: t; integer :: m,k,lm,l,la,lb m=ml+mu+1 if (ml /= 0) then do k=1,n-1 lm=min(ml,n-k) l=row(k) t=b(l) if (l /= k) then b(l)=b(k) b(k)=t end if b(k+1:k+lm)=b(k+1:k+lm)-t*ab(m+1:m+lm,k) end do end if do k=n,1,-1 b(k)=b(k)/ab(m,k) lm=min(k,m)-1 la=m-lm lb=k-lm b(lb:k-1)=b(lb:k-1)-b(k)*ab(la:m-1,k) end do return end subroutine geslbp