function r8cbb_print_some ( n1, n2, ml, mu, a, ilo, jlo, ihi, jhi, title )
%*****************************************************************************80
%
%% R8CBB_PRINT_SOME prints some of a R8CBB matrix.
%
% Discussion:
%
% The R8CBB storage format is for a compressed border banded matrix.
% Such a matrix has the logical form:
%
% A1 | A2
% ---+---
% A3 | A4
%
% with A1 a (usually large) N1 by N1 banded matrix, while A2, A3 and A4
% are dense rectangular matrices of orders N1 by N2, N2 by N1, and N2 by N2,
% respectively.
%
% The R8CBB format is the same as the DBB format, except that the banded
% matrix A1 is stored in compressed band form rather than standard
% banded form. In other words, we do not include the extra room
% set aside for fill in during pivoting.
%
% A should be defined as a vector. The user must then store
% the entries of the four blocks of the matrix into the vector A.
% Each block is stored by columns.
%
% A1, the banded portion of the matrix, is stored in
% the first (ML+MU+1)*N1 entries of A, using the obvious variant
% of the LINPACK general band format.
%
% The following formulas should be used to determine how to store
% the entry corresponding to row I and column J in the original matrix:
%
% Entries of A1:
%
% 1 <= I <= N1, 1 <= J <= N1, (J-I) <= MU and (I-J) <= ML.
%
% Store the I, J entry into location
% (I-J+MU+1)+(J-1)*(ML+MU+1).
%
% Entries of A2:
%
% 1 <= I <= N1, N1+1 <= J <= N1+N2.
%
% Store the I, J entry into location
% (ML+MU+1)*N1+(J-N1-1)*N1+I.
%
% Entries of A3:
%
% N1+1 <= I <= N1+N2, 1 <= J <= N1.
%
% Store the I, J entry into location
% (ML+MU+1)*N1+N1*N2+(J-1)*N2+(I-N1).
%
% Entries of A4:
%
% N1+1 <= I <= N1+N2, N1+1 <= J <= N1+N2
%
% Store the I, J entry into location
% (ML+MU+1)*N1+N1*N2+(J-1)*N2+(I-N1).
% (same formula used for A3).
%
% Licensing:
%
% This code is distributed under the MIT license.
%
% Modified:
%
% 07 April 2006
%
% Author:
%
% John Burkardt
%
% Parameters:
%
% Input, integer N1, N2, the order of the banded and dense blocks.
% N1 and N2 must be nonnegative, and at least one must be positive.
%
% Input, integer ML, MU, the lower and upper bandwidths.
% ML and MU must be nonnegative, and no greater than N1-1.
%
% Input, real A((ML+MU+1)*N1+2*N1*N2+N2*N2), the R8CBB matrix.
%
% Input, integer ILO, JLO, IHI, JHI, the first row and
% column, and the last row and column to be printed.
%
% Input, string TITLE, a title.
%
if ( 0 < length ( title ) )
fprintf ( 1, '\n' );
fprintf ( 1, '%s\n', title );
end
incx = 5;
%
% Print the columns of the matrix, in strips of 5.
%
for j2lo = jlo : incx : jhi
j2hi = j2lo + incx - 1;
j2hi = min ( j2hi, n1+n2 );
j2hi = min ( j2hi, jhi );
inc = j2hi + 1 - j2lo;
fprintf ( 1, '\n' );
fprintf ( 1, ' Col: ' );
for j = j2lo : j2hi
fprintf ( 1, '%7d ', j );
end
fprintf ( 1, '\n' );
fprintf ( 1, ' Row\n' );
fprintf ( 1, ' ---\n' );
%
% Determine the range of the rows in this strip.
%
i2lo = max ( ilo, 1 );
i2hi = min ( ihi, n1+n2 );
for i = i2lo : i2hi
fprintf ( 1, '%4d ', i );
%
% Print out (up to) 5 entries in row I, that lie in the current strip.
%
for j2 = 1 : inc
j = j2lo - 1 + j2;
aij = 0.0E+00;
if ( i <= n1 && j <= n1 )
if ( j - i <= mu && i - j <= ml )
ij = (i-j+mu+1)+(j-1)*(ml+mu+1);
aij = a(ij);
end
elseif ( i <= n1 && n1 < j )
ij = (ml+mu+1)*n1+(j-n1-1)*n1+i;
aij = a(ij);
elseif ( n1 < i )
ij = (ml+mu+1)*n1+n2*n1+(j-1)*n2+(i-n1);
aij = a(ij);
end
fprintf ( 1, '%12g ', aij );
end
fprintf ( 1, '\n' );
end
end
return
end