The same index can select matching row and column positions on a matrix diagonal.

Program

Play the program to choose how many diagonal cells are included in the total.

matrix_diagonal_sum.f90
program matrix_diagonal_sum_demo
    implicit none
    integer :: matrix(3, 3)
    integer :: diagonal_count
    integer :: i
    integer :: total

    matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])
    diagonal_count = 
    total = 0
    do i = 1, diagonal_count
        total = total + matrix(i, i)
    end do
    print '(I0, 1X, I0)', diagonal_count, total
end program matrix_diagonal_sum_demo
program matrix_diagonal_sum_demo
    implicit none
    integer :: matrix(3, 3)
    integer :: diagonal_count
    integer :: i
    integer :: total

    matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])
    diagonal_count = 
    total = 0
    do i = 1, diagonal_count
        total = total + matrix(i, i)
    end do
    print '(I0, 1X, I0)', diagonal_count, total
end program matrix_diagonal_sum_demo
program matrix_diagonal_sum_demo
    implicit none
    integer :: matrix(3, 3)
    integer :: diagonal_count
    integer :: i
    integer :: total

    matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])
    diagonal_count = 
    total = 0
    do i = 1, diagonal_count
        total = total + matrix(i, i)
    end do
    print '(I0, 1X, I0)', diagonal_count, total
end program matrix_diagonal_sum_demo
two indexes `matrix(i, i)` reads one row and one column with the same index.
diagonal The main diagonal contains positions `(1,1)`, `(2,2)`, and `(3,3)`.
loop bound Changing the loop bound changes how much of the diagonal is included.