FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real, | intent(in), | dimension (:) | :: | wgt | ||
real, | intent(in) | :: | eps |
subroutine check_laguerre_weights (wgt, eps)
use file_utils, only: error_unit
use mp, only: mp_abort
implicit none
real, intent (in) :: eps
real, dimension (:), intent (in) :: wgt
logical :: error=.false.
integer :: imax, n
real :: s
n = size(wgt)
! check if weights are all positive
if (any(wgt <= 0.0)) then
write (error_unit(),*) 'ERROR in laguerre: weights are not positive at n =', n
error = .true.
end if
! check if there is a single maximum
imax = sum(maxloc(wgt))
if (any(wgt(1:imax-1) > wgt(2:imax))) then
write (error_unit(),*) 'ERROR in laguerre: weights decreasing before maximum'
error = .true.
end if
if (any(wgt(imax:n-1) < wgt(imax+1:n))) then
write (error_unit(),*) 'ERROR in laguerre: weights increasing after maximum'
error = .true.
end if
! check if their sum is close enough to normalized value
if (debug) then
s = sum(dble(wgt))
if (abs(s-1.0) > eps) then
write (error_unit(),*) 'WARNING in laguerre: weights summation incorrect:', &
size(wgt), s
! Do not stop as it is mostly a minor issue
end if
end if
if (error) call mp_abort ('STOP error in check_laguerre_weights')
end subroutine check_laguerre_weights