Найти матрицу для ненулевых значений
logical :: not_diag
integer :: i, j
not_diag = .false.
outer: do i = 2, size(A,1)
do j = i, size(A, 2)
if (A(i,j) > PRECISION) then
not_diag = .true.
exit outer
end if
end
end outer
if (not_diag) then
! DO LDL' decomposition
end if
Чтобы использовать процедуры двойной точности LAPACK, замените first 's' на 'd'. Таким образом, spotrf становится dpotrf
http://www.netlib.org/lapack/double/