function ua = diagonal_pointer_cr ( n, nz_num, ia, ja )
%*****************************************************************************80
%
%% DIAGONAL_POINTER_CR finds diagonal entries in a sparse compressed row matrix.
%
% Discussion:
%
% The matrix A is assumed to be stored in compressed row format. Only
% the nonzero entries of A are stored. The vector JA stores the
% column index of the nonzero value. The nonzero values are sorted
% by row, and the compressed row vector IA then has the property that
% the entries in A and JA that correspond to row I occur in indices
% IA[I] through IA[I+1]-1.
%
% The array UA can be used to locate the diagonal elements of the matrix.
%
% It is assumed that every row of the matrix includes a diagonal element,
% and that the elements of each row have been ascending sorted.
%
% Licensing:
%
% This code is distributed under the GNU LGPL license.
%
% Modified:
%
% 25 March 2008
%
% Author:
%
% Original C version by Lili Ju
% MATLAB version by John Burkardt
%
% Parameters:
%
% Input, integer N, the order of the system.
%
% Input, integer NZ_NUM, the number of nonzeros.
%
% Input, integer IA(N+1), JA(NZ_NUM), the row and column indices
% of the matrix values. The row vector has been compressed. On output,
% the order of the entries of JA may have changed because of the sorting.
%
% Output, integer UA(N), the index of the diagonal element of each row.
%
ua(1:n) = -1;
for i = 1 : n
for j = ia(i) : ia(i+1) - 1
if ( ja(j) == i )
ua(i) = j;
end
end
end
return
end