print_packed_matrix_int32 Subroutine

private subroutine print_packed_matrix_int32(packed, n_elements, format_type)

Print a packed lower triangular matrix of int32 values

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: packed(:)
integer(kind=default_int), intent(in) :: n_elements
character(len=*), intent(in), optional :: format_type

Calls

proc~~print_packed_matrix_int32~~CallsGraph proc~print_packed_matrix_int32 print_packed_matrix_int32 interface~to_string to_string proc~print_packed_matrix_int32->interface~to_string proc~set_brackets set_brackets proc~print_packed_matrix_int32->proc~set_brackets proc~to_string_char to_string_char interface~to_string->proc~to_string_char proc~to_string_dp to_string_dp interface~to_string->proc~to_string_dp proc~to_string_int32 to_string_int32 interface~to_string->proc~to_string_int32 proc~to_string_int64 to_string_int64 interface~to_string->proc~to_string_int64 proc~to_string_logical to_string_logical interface~to_string->proc~to_string_logical proc~to_string_sp to_string_sp interface~to_string->proc~to_string_sp to_upper to_upper proc~set_brackets->to_upper

Called by

proc~~print_packed_matrix_int32~~CalledByGraph proc~print_packed_matrix_int32 print_packed_matrix_int32 interface~print_array_v2 print_array_v2 interface~print_array_v2->proc~print_packed_matrix_int32 proc~print_3d_tensor_dp print_3d_tensor_dp interface~print_array_v2->proc~print_3d_tensor_dp proc~print_3d_tensor_sp print_3d_tensor_sp interface~print_array_v2->proc~print_3d_tensor_sp proc~print_3d_tensor_dp->interface~print_array_v2 proc~print_3d_tensor_sp->interface~print_array_v2

Variables

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=int32), private :: n_real
character(len=1), private :: open_bracket
character(len=20), private :: print_format

Source Code

   subroutine print_packed_matrix_int32(packed, n_elements, format_type)
    !! Print a packed lower triangular matrix of int32 values
      integer(int32), 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(int32) :: 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_int32 + sqrt(1.0_int32 + 8.0_int32*real(n_elements, int32)))/2.0_int32
      n = int(n_real + 0.5_int32)
      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_int32