| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(LanczosCalcType), | intent(inout) | :: | this |
subroutine perform_orthogonality_test(this) type(LanczosCalcType), intent(inout) :: this integer :: i, j real(dp) :: overlap, largest_overlap character(*), parameter :: t_r = "perform_orthogonality_test" largest_overlap = 0.0_dp if (this%n_states > 1) then do i = 2, this%n_states do j = 1, i - 1 overlap = inner_product(this%ritz_vectors(:, i), this%ritz_vectors(:, j)) if (abs(overlap) > largest_overlap) then largest_overlap = abs(overlap) end if if (abs(overlap) > this%orthog_tolerance) then write(stdout, '(" Largest Ritz vector overlap: ", 5ES16.7)') largest_overlap call stop_all(t_r, "Ritz vector overlap is unacceptably large") end if end do end do write(stdout, '(" Largest Ritz vector overlap: ", 5ES16.7)') largest_overlap write(stdout, '(" Ritz vectors are mutually orthogonal to a tolerance of ", 5ES16.7)') this%orthog_tolerance end if end subroutine perform_orthogonality_test