function r8mat_l_print ( m, n, a, title )

%*****************************************************************************80
%
%% R8MAT_L_PRINT prints a lower triangular matrix.
%
%  Example:
%
%    M = 5, N = 5
%    A = [ 11, 21, 31, 41, 51, 22, 32, 42, 52, 33, 43, 53, 44, 54, 55 ]
%
%    11
%    21 22
%    31 32 33
%    41 42 43 44
%    51 52 53 54 55
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    28 October 2005
%
%  Author:
%
%    John Burkardt
%
%  Input:
%
%    integer M, the number of rows in A.
%
%    integer N, the number of columns in A.
%
%    real A(*), the M by N matrix.  Only the lower
%    triangular elements are stored, in column major order.
%
%    string TITLE, a title.
%
  if ( 0 < length ( title ) )
    fprintf ( 1, '\n' );
    fprintf ( 1, '%s\n', title );
  end

  jmax = min ( n, m );

  if ( m <= n )
    size = floor ( ( m * ( m + 1 ) ) / 2 );
  elseif ( n < m )
    size = floor ( ( n * ( n + 1 ) ) / 2 + ( m - n ) * n );
  end

  if ( all ( a(1:size) == round ( a(1:size) ) ) )

    nn = 10;

    for jlo = 1 : nn : jmax
      jhi = min ( jlo + nn - 1, min ( m, jmax ) );
      fprintf ( 1, '\n' );
      fprintf ( 1, '  Col ' );
      for j = jlo : jhi
        fprintf ( 1, '%6d', j );
      end
      fprintf ( 1, '\n' );
      fprintf ( 1, '  Row ' );
      for i = jlo : m
        jhi = min ( jlo + nn - 1, min ( i, jmax ) );
        for j = jlo : jhi
          indx(j+1-jlo) = ( j - 1 ) * m + i - floor ( ( j * ( j - 1 ) ) / 2 );
        end
        fprintf ( 1, '  %6d', i );
        for j = 1 : jhi+1-jlo
          fprintf ( 1, '%6d', a(j) );
        end
        fprintf ( 1, '\n' );
      end
    end

  elseif ( max ( abs ( a(1:size) ) ) < 1000000.0 )

    nn = 5;

    for jlo = 1 : nn : jmax
      jhi = min ( jlo + nn - 1, m - 1, jmax );
      fprintf ( 1, '\n' );
      fprintf ( 1, '      ' );
      for j = jlo : jhi
        fprintf ( 1, '%7d       ', j );
      end
      fprintf ( 1, '\n' );
      for i = jlo : m
        jhi = min ( jlo + nn - 1, i, jmax );
        for j = jlo : jhi
          indx(j+1-jlo) = ( j - 1 ) * m + i - floor ( ( j * ( j - 1 ) ) / 2 );
        end
        fprintf ( 1, '  %6d', i );
        for j = 1 : jhi+1-jlo
          fprintf ( 1, '%14g', a(j) );
        end
        fprintf ( 1, '\n' );
      end
    end

  else

    nn = 5;

    for jlo = 1 : nn : jmax
      jhi = min ( jlo + nn - 1, m - 1, jmax );
      fprintf ( 1, '\n' );
      fprintf ( 1, '      ' );
      for j = jlo : jhi
        fprintf ( 1, '%7d       ', j );
      end
      fprintf ( 1, '\n' );
      for i = jlo : m
        jhi = min ( jlo + nn - 1, i, jmax );
        for j = jlo : jhi
          indx(j+1-jlo) = ( j - 1 ) * m + i - floor ( ( j * ( j - 1 ) ) / 2 );
        end
        fprintf ( 1, '  %6d', i );
        for j = 1 : jhi+1-jlo
          fprintf ( 1, '%14g', a(j) );
        end
        fprintf ( 1, '\n' );
      end
    end

  end

  return
end
