function r8bb_print_some ( n1, n2, ml, mu, a, ilo, jlo, ihi, jhi, title ) %*****************************************************************************80 % %% R8BB_PRINT_SOME prints some of a R8BB matrix. % % Discussion: % % The R8BB storage format is for a 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. % % 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 (2*ML+MU+1)*N1 entries of A, using standard LINPACK % general band format. The reason for the factor of 2 in front of % ML is to allocate space that may be required if pivoting occurs. % % 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+ML+MU+1)+(J-1)*(2*ML+MU+1). % % Entries of A2: % % 1 <= I <= N1, N1+1 <= J <= N1+N2. % % Store the I, J entry into location % (2*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 % (2*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 % (2*ML+MU+1)*N1+N1*N2+(J-1)*N2+(I-N1). % (same formula used for A3). % % Licensing: % % This code is distributed under the GNU LGPL 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((2*ML+MU+1)*N1+2*N1*N2+N2*N2), the R8BB 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. % fprintf ( 1, '\n' ); fprintf ( 1, '%s\n', title ); 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+ml & (i-j) <= ml ) ij = (i-j+ml+mu+1)+(j-1)*(2*ml+mu+1); aij = a(ij); end elseif ( i <= n1 & n1 < j ) ij = (2*ml+mu+1)*n1+(j-n1-1)*n1+i; aij = a(ij); elseif ( n1 < i ) ij = (2*ml+mu+1)*n1+n2*n1+(j-1)*n2+(i-n1); aij = a(ij); end fprintf ( 1, '%12f ', aij ); end fprintf ( 1, '\n' ); end end fprintf ( 1, '\n' ); return end