Print a packed lower triangular matrix of int64 values
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int64), | intent(in) | :: | packed(:) | |||
integer(kind=default_int), | intent(in) | :: | n_elements | |||
character(len=*), | intent(in), | optional | :: | format_type |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=1), | private | :: | close_bracket | ||||
integer(kind=default_int), | private | :: | i | ||||
integer(kind=default_int), | private | :: | idx | ||||
integer(kind=default_int), | private | :: | j | ||||
integer(kind=default_int), | private | :: | n | ||||
real(kind=int64), | private | :: | n_real | ||||
character(len=1), | private | :: | open_bracket | ||||
character(len=20), | private | :: | print_format |
subroutine print_packed_matrix_int64(packed, n_elements, format_type) !! Print a packed lower triangular matrix of int64 values integer(int64), intent(in) :: packed(:) integer(default_int), intent(in) :: n_elements character(len=*), intent(in), optional :: format_type character(len=20) :: print_format character(len=1) :: open_bracket, close_bracket integer(default_int) :: i, j, idx, n real(int64) :: n_real ! Determine format if (present(format_type)) then print_format = trim(adjustl(format_type)) else print_format = "NUMPY" end if call set_brackets(print_format, open_bracket, close_bracket) ! Compute n from packed size n_real = (-1.0_int64 + sqrt(1.0_int64 + 8.0_int64*real(n_elements, int64)))/2.0_int64 n = int(n_real + 0.5_int64) if (n*(n + 1)/2 /= n_elements) then print *, "Error: n_elements does not form a valid packed triangle" return end if ! Print lower triangle directly from packed array print *, open_bracket idx = 0 do i = 1, n write (*, '(A)', advance="no") open_bracket do j = 1, i idx = idx + 1 if (j == i) then write (*, '(A)', advance="no") to_string(packed(idx)) else write (*, '(A)', advance="no") trim(to_string(packed(idx))//", ") end if end do if (i == n) then print *, close_bracket else print *, close_bracket, "," end if end do print *, close_bracket end subroutine print_packed_matrix_int64