pure function deye_matrix(n) result(A) integer, intent(in) :: n real(8) :: A(n, n) integer :: i A = 0d0 do i = 1, n A(i,i) = 1d0 end do end function deye_matrix