function [ na, diag, a ] = r8ss_dif2 ( n )

%*****************************************************************************80
%
%% R8SS_DIF2 sets up an R8SS second difference matrix.
%
%  Discussion:
%
%    The R8SS storage format is used for real symmetric skyline matrices.
%    This storage is appropriate when the nonzero entries of the
%    matrix are generally close to the diagonal, but the number
%    of nonzeroes above each diagonal varies in an irregular fashion.
%
%    In this case, the strategy is essentially to assign column J
%    its own bandwidth, and store the strips of nonzeros one after
%    another.   Note that what's important is the location of the
%    furthest nonzero from the diagonal.  A slot will be set up for
%    every entry between that and the diagonal, whether or not
%    those entries are zero.
%
%    A skyline matrix can be Gauss-eliminated without disrupting
%    the storage scheme, as long as no pivoting is required.
%
%    The user must set aside ( N * ( N + 1 ) ) / 2 entries for the array,
%    although the actual storage needed will generally be about half of
%    that.
%
%  Licensing:
%
%    This code is distributed under the MIT license. 
%
%  Modified:
%
%    30 June 2016
%
%  Author:
%
%    John Burkardt
%
%  Parameters:
%
%    Input, integer N, the order of the matrix.
%    N must be positive.
%
%    Output, integer NA, the dimension of the array A, which for
%    this special case will 2*N-1.
%
%    Output, integer DIAG(N), the indices in A of the N diagonal
%    elements.
%
%    Output, real A(2*N-1), the R8SS matrix.
%
  diag = zeros ( n, 1 );
  a = zeros ( 2 * n - 1 );

  na = 0;

  for j = 1 : n

    if ( 1 < j )
      na = na + 1;
      a(na) = -1.0;
    end

    na = na + 1;
    a(na) = 2.0;
    diag(j) = na;

  end

  return
end
