function order = level_to_order_open ( dim_num, level )
%*****************************************************************************80
%
%% LEVEL_TO_ORDER converts a level to an order for open rules.
%
% Discussion:
%
% Sparse grids can naturally be nested. A natural scheme is to use
% a series of one-dimensional rules arranged in a series of "levels"
% whose order roughly doubles with each step.
%
% The arrangement described here works naturally for the Fejer Type 1,
% Fejer Type 2, Newton Cotes Open, Newton Cotes Half Open,
% and Gauss-Patterson rules. It also can be used, partially, to describe
% the growth of Gauss-Legendre rules.
%
% The idea is that we start with LEVEL = 0, ORDER = 1 indicating the single
% point at the center, and for all values afterwards, we use the relationship
%
% ORDER = 2**(LEVEL+1) - 1.
%
% The following table shows how the growth will occur:
%
% Level Order
%
% 0 1
% 1 3 = 4 - 1
% 2 7 = 8 - 1
% 3 15 = 16 - 1
% 4 31 = 32 - 1
% 5 63 = 64 - 1
%
% For the Fejer Type 1, Fejer Type 2, Newton Cotes Open,
% Newton Cotes Open Half, and Gauss-Patterson rules, the point growth is
% nested. If we have ORDER points on a particular LEVEL, the next level
% includes all these old points, plus ORDER+1 new points, formed in the
% gaps between successive pairs of old points plus an extra point at each
% end.
%
% Level Order = New + Old
%
% 0 1 = 1 + 0
% 1 3 = 2 + 1
% 2 7 = 4 + 3
% 3 15 = 8 + 7
% 4 31 = 16 + 15
% 5 63 = 32 + 31
%
% If we use a series of Gauss-Legendre rules, then there is almost no
% nesting, except that the central point is shared. If we insist on
% producing a comparable series of such points, then the "nesting" behavior
% is as follows:
%
% Level Order = New + Old
%
% 0 1 = 1 + 0
% 1 3 = 2 + 1
% 2 7 = 6 + 1
% 3 15 = 14 + 1
% 4 31 = 30 + 1
% 5 63 = 62 + 1
%
% Moreover, if we consider ALL the points used in such a set of "nested"
% Gauss-Legendre rules, then we must sum the "NEW" column, and we see that
% we get roughly twice as many points as for the truly nested rules.
%
% In this routine, we assume that a vector of levels is given,
% and the corresponding orders are desired.
%
% Licensing:
%
% This code is distributed under the MIT license.
%
% Modified:
%
% 18 April 2007
%
% 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.
%
% Parameters:
%
% Input, integer DIM_NUM, the spatial dimension.
%
% Input, integer LEVEL(DIM_NUM), the nesting level.
%
% Output, integer ORDER(DIM_NUM), the order (number of points) of the rule.
%
for dim = 1 : dim_num
if ( level(dim) < 0 )
order(dim) = -1;
elseif ( level(dim) == 0 )
order(dim) = 1;
else
order(dim) = 2^( level(dim) + 1 ) - 1;
end
end
return
end