function test_level = abscissa_level_closed_nd ( level_max, dim_num, test_num, ... test_val ) %*****************************************************************************80 % %% ABSCISSA_LEVEL_CLOSED_ND: first level at which given abscissa is generated. % % Discussion: % % We assume an underlying product grid. In each dimension, this product % grid has order 2**LEVEL_MAX + 1. % % We will say a sparse grid has total level LEVEL if each point in the % grid has a total level of LEVEL or less. % % The "level" of a point is determined as the sum of the levels of the % point in each spatial dimension. % % The level of a point in a single spatial dimension I is determined as % the level, between 0 and LEVEL_MAX, at which the point's I'th index % would have been generated. % % % This description is terse and perhaps unenlightening. Keep in mind % that the product grid is the product of 1D grids, % that the 1D grids are built up by levels, having % orders (total number of points ) 1, 3, 5, 9, 17, 33 and so on, % and that these 1D grids are nested, so that each point in a 1D grid % has a first level at which it appears. % % Our procedure for generating the points of a sparse grid, then, is % to choose a value LEVEL_MAX, to generate the full product grid, % but then only to keep those points on the full product grid whose % LEVEL is less than or equal to LEVEL_MAX. % % % Note that this routine is really just testing out the idea of % determining the level. Our true desire is to be able to start % with a value LEVEL, and determine, in a straightforward manner, % all the points that are generated exactly at that level, or % all the points that are generated up to and including that level. % % This allows us to generate the new points to be added to one sparse % grid to get the next, or to generate a particular sparse grid at once. % % Licensing: % % This code is distributed under the GNU LGPL license. % % Modified: % % 11 November 2007 % % Author: % % John Burkardt % % Parameters: % % Input, integer LEVEL_MAX, controls the size of the final sparse grid. % % Input, integer DIM_NUM, the spatial dimension. % % Input, integer TEST_NUM, the number of points to be tested. % % Input, integer TEST_VAL(DIM_NUM,TEST_NUM), the indices of the points % to be tested. Normally, each index would be between 0 and 2**LEVEL_MAX. % % Output, integer TEST_LEVEL(TEST_NUM), the value of LEVEL at which the % point would first be generated, assuming that a standard sequence of % nested grids is used. % if ( level_max == 0 ) test_level(1:test_num) = 0; return end order = 2^level_max + 1; for j = 1 : test_num test_level(j) = index_to_level_closed ( dim_num, test_val(1:dim_num,j), ... order, level_max ); end return end