function neighbor = sandia_sgmgg_neighbor_naive ( dim_num, point_num, ... sparse_index ) %*****************************************************************************80 % %% SANDIA_SGMGG_NEIGHBOR_NAIVE returns the immediate forward neighbor vector. % % Discussion: % % A sparse grid index vector is a list of DIM_NUM nonnegative indices. % % An immediate forward L-neighbor of a sparse grid index vector I is a % sparse grid index vector J with the property that all entries of J % are equal to those of I except for the L-the entry, which is greater by 1. % % A forward neighbor of a sparse grid index vector I is a sparse % grid index vector K with the property that every entry of K is % equal to or greater by 1 than the corresponding entry of I. % % This function is given a collection of sparse grid index vectors, % and returns information defining, for every such vector, the entire % set of its immediate forward neighbors. This is done with a % "NEIGHBOR" array of dimension DIM_NUM. For sparse grid vector I, % entry L of NEIGHBOR is 1 if I has an immediate forward L-neighbor, % and 0 otherwise. % % This implementation of the procedure is inefficient, and is provided % solely for demonstration on small problems. % % Licensing: % % This code is distributed under the GNU LGPL license. % % Modified: % % 23 August 2011 % % Author: % % John Burkardt % % Reference: % % Fabio Nobile, Raul Tempone, Clayton Webster, % A Sparse Grid Stochastic Collocation Method for Partial Differential % Equations with Random Input Data, % SIAM Journal on Numerical Analysis, % Volume 46, Number 5, 2008, pages 2309-2345. % % Fabio Nobile, Raul Tempone, Clayton Webster, % An Anisotropic Sparse Grid Stochastic Collocation Method for Partial % Differential Equations with Random Input Data, % SIAM Journal on Numerical Analysis, % Volume 46, Number 5, 2008, pages 2411-2442. % % Parameters: % % Input, integer DIM_NUM, the dimension of the vector. % % Input, integer POINT_NUM, the number of points. % % Input, integer SPARSE_INDEX(DIM_NUM,POINT_NUM), % the indices that define the points. % % Output, integer NEIGHBOR(DIM_NUM,POINT_NUM), the % immediate forward neighbor array. % neighbor = zeros ( dim_num, point_num ); for j1 = 1 : point_num for j2 = 1 : point_num l = - 1; for i = 1 : dim_num % % If the entries are not equal... % if ( sparse_index(i,j2) ~= sparse_index(i,j1) ) % % ...and we haven't already found a difference... % if ( l ~= -1 ) l = - 1; break end % % ...and this difference is +1... % if ( sparse_index(i,j2) ~= sparse_index(i,j1) + 1 ) break end % % ...then remember this index. % l = i; end end % % If a single unit difference was found, record the direction. % if ( l ~= - 1 ) neighbor(l,j1) = 1; end end end return end