Code covered by the BSD License  

Highlights from
LISQ - A toolbox for the lifting scheme on 2D quincunx grids

image thumbnail
from LISQ - A toolbox for the lifting scheme on 2D quincunx grids by Paul De Zeeuw
A toolbox for the lifting scheme on 2D quincunx grids and for the computation of moment invariants

whatcoef2QL(level, colorF, o, L)
function [first, last] = whatcoef2QL(level, colorF, o, L)
%------------------------------------------------------------------------------
%
% This function determines where to find a 2D gridfunction in the
% 1D storage vector (heap).
% The output is the first and last index within the heap.
% They are supposed to be uniquely determined by the integer level L and
% character o describing the type of the 2D gridfunction.
%
% This function is a two-dimensional lifting scheme utility.
%
% first = integer
%
% last  = integer
%
% level = integer designated as the level of the 2D gridfunction
%
% o = character, should be either 'a' or 'd',
%     describing the type of the 2D gridfunction:
%     'a' relates to approximation (coefficients) and
%     'd' relates to detail (coefficients)
%
% L = 2D integer array of bookkeeping, see function storeR.
%
% See also: storeR, retrieveQ etc.
%
% Design and implementation by:
% Dr. Paul M. de Zeeuw <Paul.de.Zeeuw@cwi.nl>  http://homepages.cwi.nl/~pauldz/
% Last Revision: May 22, 2002.
% (c) 1999-2002 Stichting CWI, Amsterdam
%------------------------------------------------------------------------------
if isempty(L)
  first = 1;
  last  = 0;
else
  [nL, mL] = size(L);
  if mL ~= 6
    disp([' whatcoef2QL - ERROR at type ' o ' level ' num2str(level)]);
    error(' whatcoef2QL - books do not fit ')
  else   
%   Choose here according to level
    lo1 = lower(o(1));
    if mod(level, 2) == 0
%     At even level the grids are rectangular
      jL = -1;
      j = 1;
      foundit = 0;
      while j <= nL && ~foundit
         if L(j, 1) == level
           switch lo1
             case 'a' , if L(j, 3) == 0 && L(j, 2) == 0
                          jL = j;
                          foundit = 1;
                        end
             case 'd' , if L(j, 3) == 1 && L(j, 2) == 0 
                          jL = j;
                          foundit = 1;
                        end
             otherwise
               disp([' whatcoef2QL - ERROR at type ' o ...
                     ' level ' num2str(level)]);
               error(' whatcoef2QL - unknown type of coefficients ')
           end         
         end
         j = j + 1;
      end
      if jL == -1
        disp([' whatcoef2QL - ERROR at type ' lo1 ' level ' num2str(level)]);
        error(' whatcoef2QL - no such coefficients in heap')
      else
        nF = L(jL, 4);
        if nF < 1
          disp([' whatcoef2QL - ERROR at type ' lo1 ' level ' num2str(level)]);
          error(' whatcoef2QL - unvalid 1st dimension of target')
        end
        mF = L(jL, 5);
        if mF < 1
          disp([' whatcoef2QL - ERROR at type ' lo1 ' level ' num2str(level)]);
          error(' whatcoef2QL - unvalid 2nd dimension of target')
        end 
        heaptr = L(jL, 6);
        if heaptr < 2
          disp([' whatcoef2QL - ERROR at type ' lo1 ' level ' num2str(level)]);
          error(' whatcoef2QL - bookkeeping error ')
        else
          first = heaptr-nF*mF;
          if first < 1
            disp([' whatcoef2QL - ERROR at type ' lo1 ' level ' num2str(level)]);
            error(' whatcoef2QL - heap not that large, dimensions?')
          else
            last  = heaptr-1;
          end
        end
      end       
    else
%     At odd level the grids are quincunx-shaped.
      switch colorF 
        case '00' , icolorF = 1;
        case '11' , icolorF = 2;
        case '01' , icolorF = 3;
        case '10' , icolorF = 4;
        otherwise
          disp([' whatcoef2QL - ERROR at type ' lo1 ' color ' colorF ...
                ' with level ' num2str(level)]);
          error(' whatcoef2QL - unknown type of coefficients ')          
      end
      fix2even = 999;
      FL = [];
      for j=1:nL
        if L(j, 2) == icolorF
           FL = [FL; [ (L(j,1)+fix2even) 0 L(j,3:6)]];
        end
      end
      if isempty(FL)
        first = 1;
        last  = 0;
      else
        [first, last] = whatcoef2QL((level+fix2even), colorF, lo1, FL);
%       Here colorF does not matter as (level+fix2even) is even.
      end           
    end            
  end
end
%------------------------------------------------------------------------------

Contact us at files@mathworks.com