Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[nperod,n,mperod,m,a,b,c,idimy,y,ierror,w]=genbun(nperod,n,mperod,m,a,b,c,idimy,y,ierror,w);
function [nperod,n,mperod,m,a,b,c,idimy,y,ierror,w]=genbun(nperod,n,mperod,m,a,b,c,idimy,y,ierror,w);
persistent a1 gt i ipstor irev iwb2 iwb3 iwba iwbb iwbc iwd iwp iwtcos iww1 iww2 iww3 j k mh mhm1 mhmi mhpi modd mp mp1 mskip nby2 np ; 

if isempty(a1), a1=0; end;
if isempty(i), i=0; end;
if isempty(ipstor), ipstor=0; end;
if isempty(irev), irev=0; end;
if isempty(iwb2), iwb2=0; end;
if isempty(iwb3), iwb3=0; end;
if isempty(iwba), iwba=0; end;
if isempty(iwbb), iwbb=0; end;
if isempty(iwbc), iwbc=0; end;
if isempty(iwd), iwd=0; end;
if isempty(iwp), iwp=0; end;
if isempty(iwtcos), iwtcos=0; end;
if isempty(iww1), iww1=0; end;
if isempty(iww2), iww2=0; end;
if isempty(iww3), iww3=0; end;
if isempty(j), j=0; end;
if isempty(k), k=0; end;
if isempty(mh), mh=0; end;
if isempty(gt), gt=zeros(1,6); end;
%***BEGIN PROLOGUE  GENBUN
%***PURPOSE  Solve by a cyclic reduction algorithm the linear system
%            of equations that results from a finite difference
%            approximation to certain 2-d elliptic PDE's on a centered
%            grid .
%***LIBRARY   SLATEC (FISHPACK)
%***CATEGORY  I2B4B
%***TYPE      SINGLE PRECISION (GENBUN-S, CMGNBN-C)
%***KEYWORDS  ELLIPTIC, FISHPACK, PDE, TRIDIAGONAL
%***AUTHOR  Adams, J., (NCAR)
%           Swarztrauber, P. N., (NCAR)
%           Sweet, R., (NCAR)
%***DESCRIPTION
%
%     subroutine GENBUN solves the linear system of equations
%
%          A(I)*X(I-1,J) + B(I)*X(I,J) + C(I)*X(I+1,J)
%
%          + X(I,J-1) - 2.*X(I,J) + X(I,J+1) = Y(I,J)
%
%               for I = 1,2,...,M  and  J = 1,2,...,N.
%
%     The indices I+1 and I-1 are evaluated modulo M, i.e.,
%     X(0,J) = X(M,J) and X(M+1,J) = X(1,J), and X(I,0) may be equal to
%     0, X(I,2), or X(I,N) and X(I,N+1) may be equal to 0, X(I,N-1), or
%     X(I,1) depending on an input parameter.
%
%
%     * * * * * * * *    Parameter Description     * * * * * * * * * *
%
%             * * * * * *   On Input    * * * * * *
%
%     NPEROD
%       Indicates the values that X(I,0) and X(I,N+1) are assumed to
%       have.
%
%       = 0  If X(I,0) = X(I,N) and X(I,N+1) = X(I,1).
%       = 1  If X(I,0) = X(I,N+1) = 0  .
%       = 2  If X(I,0) = 0 and X(I,N+1) = X(I,N-1).
%       = 3  If X(I,0) = X(I,2) and X(I,N+1) = X(I,N-1).
%       = 4  If X(I,0) = X(I,2) and X(I,N+1) = 0.
%
%     N
%       The number of unknowns in the J-direction.  N must be greater
%       than 2.
%
%     MPEROD
%       = 0 if A(1) and C(M) are not zero.
%       = 1 if A(1) = C(M) = 0.
%
%     M
%       The number of unknowns in the I-direction.  M must be greater
%       than 2.
%
%     A,B,C
%       One-dimensional arrays of length M that specify the
%       coefficients in the linear equations given above.  If MPEROD = 0
%       the array elements must not depend upon the index I, but must be
%       constant.  Specifically, the subroutine checks the following
%       condition
%
%             A(I) = C(1)
%             C(I) = C(1)
%             B(I) = B(1)
%
%       for I=1,2,...,M.
%
%     IDIMY
%       The row (or first) dimension of the two-dimensional array Y as
%       it appears in the program calling GENBUN.  This parameter is
%       used to specify the variable dimension of Y.  IDIMY must be at
%       least M.
%
%     Y
%       A two-dimensional array that specifies the values of the right
%       side of the linear system of equations given above.  Y must be
%       dimensioned at least M*N.
%
%     W
%       A one-dimensional array that must be provided by the user for
%       work space.  W may require up to 4*N + (10 + INT(log2(N)))*M
%       locations.  The actual number of locations used is computed by
%       GENBUN and is returned in location W(1).
%
%
%             * * * * * *   On Output     * * * * * *
%
%     Y
%       contains the solution X.
%
%     IERROR
%       An error flag that indicates invalid input parameters.  Except
%       for number zero, a solution is not attempted.
%
%       = 0  No error.
%       = 1  M .LE. 2
%       = 2  N .LE. 2
%       = 3  IDIMY .LT. M
%       = 4  NPEROD .LT. 0 or NPEROD .GT. 4
%       = 5  MPEROD .LT. 0 or MPEROD .GT. 1
%       = 6  A(I) .NE. C(1) or C(I) .NE. C(1) or B(I) .NE. B(1) for
%            some I=1,2,...,M.
%       = 7  A(1) .NE. 0 or C(M) .NE. 0 and MPEROD = 1
%
%     W
%       W(1) contains the required length of W.
%
% *Long Description:
%
%     * * * * * * *   program Specifications    * * * * * * * * * * * *
%
%     Dimension of   A(M),B(M),C(M),Y(IDIMY,N),W(see parameter list)
%     Arguments
%
%     Latest         June 1, 1976
%     Revision
%
%     Subprograms    GENBUN,POISD2,POISN2,POISP2,COSGEN,MERGE,TRIX,TRI3,
%     Required       PIMACH
%
%     Special        NONE
%     Conditions
%
%     Common         NONE
%     Blocks
%
%     I/O            NONE
%
%     Precision      Single
%
%     Specialist     Roland Sweet
%
%     Language       FORTRAN
%
%     History        Standardized April 1, 1973
%                    Revised August 20,1973
%                    Revised January 1, 1976
%
%     Algorithm      The linear system is solved by a cyclic reduction
%                    algorithm described in the reference.
%
%     Space          4944(decimal) = 11520(octal) locations on the NCAR
%     Required       Control Data 7600.
%
%     Timing and        The execution time T on the NCAR Control Data
%     Accuracy       7600 for subroutine GENBUN is roughly proportional
%                    to M*N*log2(N), but also depends on the input
%                    parameter NPEROD.  Some typical values are listed
%                    in the table below.  More comprehensive timing
%                    charts may be found in the reference.
%                       To measure the accuracy of the algorithm a
%                    uniform random number generator was used to create
%                    a solution array X for the system given in the
%                    'PURPOSE' with
%
%                       A(I) = C(I) = -0.5*B(I) = 1,       I=1,2,...,M
%
%                    and, when MPEROD = 1
%
%                       A(1) = C(M) = 0
%                       A(M) = C(1) = 2.
%
%                    The solution X was substituted into the given sys-
%                    tem and, using doubleprecision, a right side Y was
%                    computed.  Using this array Y subroutine GENBUN was
%                    called to produce an approximate solution Z.  Then
%                    the relative error, defined as
%
%                       E = MAX(ABS(Z(I,J)-X(I,J)))/MAX(ABS(X(I,J)))
%
%                    where the two maxima are taken over all I=1,2,...,M
%                    and J=1,2,...,N, was computed.  The value of E is
%                    given in the table below for some typical values of
%                    M and N.
%
%
%                       M (=N)    MPEROD    NPEROD    T(MSECS)    E
%                       ------    ------    ------    --------  ------
%
%                         31        0         0          36     6.0E-14
%                         31        1         1          21     4.0E-13
%                         31        1         3          41     3.0E-13
%                         32        0         0          29     9.0E-14
%                         32        1         1          32     3.0E-13
%                         32        1         3          48     1.0E-13
%                         33        0         0          36     9.0E-14
%                         33        1         1          30     4.0E-13
%                         33        1         3          34     1.0E-13
%                         63        0         0         150     1.0E-13
%                         63        1         1          91     1.0E-12
%                         63        1         3         173     2.0E-13
%                         64        0         0         122     1.0E-13
%                         64        1         1         128     1.0E-12
%                         64        1         3         199     6.0E-13
%                         65        0         0         143     2.0E-13
%                         65        1         1         120     1.0E-12
%                         65        1         3         138     4.0E-13
%
%     Portability    American National Standards Institute Fortran.
%                    The machine dependent constant PI is defined in
if isempty(mhm1), mhm1=0; end;
if isempty(mhmi), mhmi=0; end;
if isempty(mhpi), mhpi=0; end;
if isempty(modd), modd=0; end;
if isempty(mp), mp=0; end;
if isempty(mp1), mp1=0; end;
if isempty(mskip), mskip=0; end;
if isempty(nby2), nby2=0; end;
if isempty(np), np=0; end;
%                    function PIMACH.
%
%     Required       COS
%     Resident
%     Routines
%
%     Reference      Sweet, R., 'A Cyclic Reduction Algorithm For
%                    Solving Block Tridiagonal Systems Of Arbitrary
%                    Dimensions,' SIAM J. on Numer. Anal.,
%                    14(Sept., 1977), PP. 706-720.
%
%     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
%
%***REFERENCES  R. Sweet, A cyclic reduction algorithm for solving
%                 block tridiagonal systems of arbitrary dimensions,
%                 SIAM Journal on Numerical Analysis 14, (September
%                 1977), pp. 706-720.
%***ROUTINES CALLED  POISD2, POISN2, POISP2
%***REVISION HISTORY  (YYMMDD)
%   801001  DATE WRITTEN
%   861211  REVISION DATE from Version 3.2
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   920501  Reformatted the REFERENCES section.  (WRB)
%***end PROLOGUE  GENBUN
%
%
y_shape=size(y);y=reshape([y(:).',zeros(1,ceil(numel(y)./prod([idimy])).*prod([idimy])-numel(y))],idimy,[]);
w_shape=size(w);w=reshape(w,1,[]);
b_shape=size(b);b=reshape(b,1,[]);
a_shape=size(a);a=reshape(a,1,[]);
c_shape=size(c);c=reshape(c,1,[]);
%***FIRST EXECUTABLE STATEMENT  GENBUN
ierror = 0;
if( m<=2 )
ierror = 1;
end;
if( n<=2 )
ierror = 2;
end;
if( idimy<m )
ierror = 3;
end;
if( nperod<0 || nperod>4 )
ierror = 4;
end;
if( mperod<0 || mperod>1 )
ierror = 5;
end;
if( mperod==1 )
if( a(1)~=0. || c(m)~=0. )
ierror = 7;
end;
else;
for i = 2 : m;
if( a(i)~=c(1) )
ierror = 6;
break;
elseif( c(i)~=c(1) ) ;
ierror = 6;
break;
elseif( b(i)~=b(1) ) ;
ierror = 6;
break;
end;
end;
end;
if( ierror~=0 )
y_shape=zeros(y_shape);y_shape(:)=y(1:numel(y_shape));y=y_shape;
w_shape=zeros(w_shape);w_shape(:)=w(1:numel(w_shape));w=w_shape;
b_shape=zeros(b_shape);b_shape(:)=b(1:numel(b_shape));b=b_shape;
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
c_shape=zeros(c_shape);c_shape(:)=c(1:numel(c_shape));c=c_shape;
return;
end;
mp1 = fix(m + 1);
iwba = fix(mp1);
iwbb = fix(iwba + m);
iwbc = fix(iwbb + m);
iwb2 = fix(iwbc + m);
iwb3 = fix(iwb2 + m);
iww1 = fix(iwb3 + m);
iww2 = fix(iww1 + m);
iww3 = fix(iww2 + m);
iwd = fix(iww3 + m);
iwtcos = fix(iwd + m);
iwp = fix(iwtcos + 4.*n);
for i = 1 : m;
k = fix(iwba + i - 1);
w(k) = -a(i);
k = fix(iwbc + i - 1);
w(k) = -c(i);
k = fix(iwbb + i - 1);
w(k) = 2. - b(i);
for j = 1 : n;
y(i,j) = -y(i,j);
end; j = fix(n+1);
end; i = fix(m+1);
mp = fix(mperod + 1);
np = fix(nperod + 1);
gt(:)=0;
if( mp==1 )
gt(4)=1;
end;
while (1);
if(gt(6)==0)
if(gt(5)==0)
if(gt(4)==0)
if(gt(3)==0)
if(gt(2)==0)
if( np==2 )
[m,n,dumvar3,dumvar4,dumvar5,dumvar6,y,idimy,w,dumvar10,dumvar11,dumvar12,dumvar13]=poisd2(m,n,1,w(sub2ind(size(w),max(iwba,1)):end),w(sub2ind(size(w),max(iwbb,1)):end),w(sub2ind(size(w),max(iwbc,1)):end),y,idimy,w,w(sub2ind(size(w),max(iww1,1)):end),w(sub2ind(size(w),max(iwd,1)):end),w(sub2ind(size(w),max(iwtcos,1)):end),w(sub2ind(size(w),max(iwp,1)):end));   dumvar4i=find((w(sub2ind(size(w),max(iwba,1)):end))~=(dumvar4));dumvar5i=find((w(sub2ind(size(w),max(iwbb,1)):end))~=(dumvar5));dumvar6i=find((w(sub2ind(size(w),max(iwbc,1)):end))~=(dumvar6));dumvar10i=find((w(sub2ind(size(w),max(iww1,1)):end))~=(dumvar10));dumvar11i=find((w(sub2ind(size(w),max(iwd,1)):end))~=(dumvar11));dumvar12i=find((w(sub2ind(size(w),max(iwtcos,1)):end))~=(dumvar12));dumvar13i=find((w(sub2ind(size(w),max(iwp,1)):end))~=(dumvar13));   w(iwba-1+dumvar4i)=dumvar4(dumvar4i); w(iwbb-1+dumvar5i)=dumvar5(dumvar5i); w(iwbc-1+dumvar6i)=dumvar6(dumvar6i); w(iww1-1+dumvar10i)=dumvar10(dumvar10i); w(iwd-1+dumvar11i)=dumvar11(dumvar11i); w(iwtcos-1+dumvar12i)=dumvar12(dumvar12i); w(iwp-1+dumvar13i)=dumvar13(dumvar13i); 
elseif( np==3 ) ;
[m,n,dumvar3,dumvar4,dumvar5,dumvar6,dumvar7,y,idimy,w,dumvar11,dumvar12,dumvar13,dumvar14,dumvar15,dumvar16,dumvar17,dumvar18]=poisn2(m,n,1,2,w(sub2ind(size(w),max(iwba,1)):end),w(sub2ind(size(w),max(iwbb,1)):end),w(sub2ind(size(w),max(iwbc,1)):end),y,idimy,w,w(sub2ind(size(w),max(iwb2,1)):end),w(sub2ind(size(w),max(iwb3,1)):end),w(sub2ind(size(w),max(iww1,1)):end),w(sub2ind(size(w),max(iww2,1)):end),w(sub2ind(size(w),max(iww3,1)):end),w(sub2ind(size(w),max(iwd,1)):end),w(sub2ind(size(w),max(iwtcos,1)):end),w(sub2ind(size(w),max(iwp,1)):end));   dumvar5i=find((w(sub2ind(size(w),max(iwba,1)):end))~=(dumvar5));dumvar6i=find((w(sub2ind(size(w),max(iwbb,1)):end))~=(dumvar6));dumvar7i=find((w(sub2ind(size(w),max(iwbc,1)):end))~=(dumvar7));dumvar11i=find((w(sub2ind(size(w),max(iwb2,1)):end))~=(dumvar11));dumvar12i=find((w(sub2ind(size(w),max(iwb3,1)):end))~=(dumvar12));dumvar13i=find((w(sub2ind(size(w),max(iww1,1)):end))~=(dumvar13));dumvar14i=find((w(sub2ind(size(w),max(iww2,1)):end))~=(dumvar14));dumvar15i=find((w(sub2ind(size(w),max(iww3,1)):end))~=(dumvar15));dumvar16i=find((w(sub2ind(size(w),max(iwd,1)):end))~=(dumvar16));dumvar17i=find((w(sub2ind(size(w),max(iwtcos,1)):end))~=(dumvar17));dumvar18i=find((w(sub2ind(size(w),max(iwp,1)):end))~=(dumvar18));   w(iwba-1+dumvar5i)=dumvar5(dumvar5i); w(iwbb-1+dumvar6i)=dumvar6(dumvar6i); w(iwbc-1+dumvar7i)=dumvar7(dumvar7i); w(iwb2-1+dumvar11i)=dumvar11(dumvar11i); w(iwb3-1+dumvar12i)=dumvar12(dumvar12i); w(iww1-1+dumvar13i)=dumvar13(dumvar13i); w(iww2-1+dumvar14i)=dumvar14(dumvar14i); w(iww3-1+dumvar15i)=dumvar15(dumvar15i); w(iwd-1+dumvar16i)=dumvar16(dumvar16i); w(iwtcos-1+dumvar17i)=dumvar17(dumvar17i); w(iwp-1+dumvar18i)=dumvar18(dumvar18i); 
elseif( np==4 ) ;
[m,n,dumvar3,dumvar4,dumvar5,dumvar6,dumvar7,y,idimy,w,dumvar11,dumvar12,dumvar13,dumvar14,dumvar15,dumvar16,dumvar17,dumvar18]=poisn2(m,n,1,1,w(sub2ind(size(w),max(iwba,1)):end),w(sub2ind(size(w),max(iwbb,1)):end),w(sub2ind(size(w),max(iwbc,1)):end),y,idimy,w,w(sub2ind(size(w),max(iwb2,1)):end),w(sub2ind(size(w),max(iwb3,1)):end),w(sub2ind(size(w),max(iww1,1)):end),w(sub2ind(size(w),max(iww2,1)):end),w(sub2ind(size(w),max(iww3,1)):end),w(sub2ind(size(w),max(iwd,1)):end),w(sub2ind(size(w),max(iwtcos,1)):end),w(sub2ind(size(w),max(iwp,1)):end));   dumvar5i=find((w(sub2ind(size(w),max(iwba,1)):end))~=(dumvar5));dumvar6i=find((w(sub2ind(size(w),max(iwbb,1)):end))~=(dumvar6));dumvar7i=find((w(sub2ind(size(w),max(iwbc,1)):end))~=(dumvar7));dumvar11i=find((w(sub2ind(size(w),max(iwb2,1)):end))~=(dumvar11));dumvar12i=find((w(sub2ind(size(w),max(iwb3,1)):end))~=(dumvar12));dumvar13i=find((w(sub2ind(size(w),max(iww1,1)):end))~=(dumvar13));dumvar14i=find((w(sub2ind(size(w),max(iww2,1)):end))~=(dumvar14));dumvar15i=find((w(sub2ind(size(w),max(iww3,1)):end))~=(dumvar15));dumvar16i=find((w(sub2ind(size(w),max(iwd,1)):end))~=(dumvar16));dumvar17i=find((w(sub2ind(size(w),max(iwtcos,1)):end))~=(dumvar17));dumvar18i=find((w(sub2ind(size(w),max(iwp,1)):end))~=(dumvar18));   w(iwba-1+dumvar5i)=dumvar5(dumvar5i); w(iwbb-1+dumvar6i)=dumvar6(dumvar6i); w(iwbc-1+dumvar7i)=dumvar7(dumvar7i); w(iwb2-1+dumvar11i)=dumvar11(dumvar11i); w(iwb3-1+dumvar12i)=dumvar12(dumvar12i); w(iww1-1+dumvar13i)=dumvar13(dumvar13i); w(iww2-1+dumvar14i)=dumvar14(dumvar14i); w(iww3-1+dumvar15i)=dumvar15(dumvar15i); w(iwd-1+dumvar16i)=dumvar16(dumvar16i); w(iwtcos-1+dumvar17i)=dumvar17(dumvar17i); w(iwp-1+dumvar18i)=dumvar18(dumvar18i); 
elseif( np==5 ) ;
%
%     REVERSE COLUMNS WHEN NPEROD = 4.
%
irev = 1;
nby2 = fix(fix(n./2));
gt(5)=1;
continue;
else;
[m,n,dumvar3,dumvar4,dumvar5,y,idimy,w,dumvar9,dumvar10,dumvar11,dumvar12,dumvar13,dumvar14,dumvar15,dumvar16]=poisp2(m,n,w(sub2ind(size(w),max(iwba,1)):end),w(sub2ind(size(w),max(iwbb,1)):end),w(sub2ind(size(w),max(iwbc,1)):end),y,idimy,w,w(sub2ind(size(w),max(iwb2,1)):end),w(sub2ind(size(w),max(iwb3,1)):end),w(sub2ind(size(w),max(iww1,1)):end),w(sub2ind(size(w),max(iww2,1)):end),w(sub2ind(size(w),max(iww3,1)):end),w(sub2ind(size(w),max(iwd,1)):end),w(sub2ind(size(w),max(iwtcos,1)):end),w(sub2ind(size(w),max(iwp,1)):end));   dumvar3i=find((w(sub2ind(size(w),max(iwba,1)):end))~=(dumvar3));dumvar4i=find((w(sub2ind(size(w),max(iwbb,1)):end))~=(dumvar4));dumvar5i=find((w(sub2ind(size(w),max(iwbc,1)):end))~=(dumvar5));dumvar9i=find((w(sub2ind(size(w),max(iwb2,1)):end))~=(dumvar9));dumvar10i=find((w(sub2ind(size(w),max(iwb3,1)):end))~=(dumvar10));dumvar11i=find((w(sub2ind(size(w),max(iww1,1)):end))~=(dumvar11));dumvar12i=find((w(sub2ind(size(w),max(iww2,1)):end))~=(dumvar12));dumvar13i=find((w(sub2ind(size(w),max(iww3,1)):end))~=(dumvar13));dumvar14i=find((w(sub2ind(size(w),max(iwd,1)):end))~=(dumvar14));dumvar15i=find((w(sub2ind(size(w),max(iwtcos,1)):end))~=(dumvar15));dumvar16i=find((w(sub2ind(size(w),max(iwp,1)):end))~=(dumvar16));   w(iwba-1+dumvar3i)=dumvar3(dumvar3i); w(iwbb-1+dumvar4i)=dumvar4(dumvar4i); w(iwbc-1+dumvar5i)=dumvar5(dumvar5i); w(iwb2-1+dumvar9i)=dumvar9(dumvar9i); w(iwb3-1+dumvar10i)=dumvar10(dumvar10i); w(iww1-1+dumvar11i)=dumvar11(dumvar11i); w(iww2-1+dumvar12i)=dumvar12(dumvar12i); w(iww3-1+dumvar13i)=dumvar13(dumvar13i); w(iwd-1+dumvar14i)=dumvar14(dumvar14i); w(iwtcos-1+dumvar15i)=dumvar15(dumvar15i); w(iwp-1+dumvar16i)=dumvar16(dumvar16i); 
end;
end;
gt(2)=0;
ipstor = fix(w(iww1));
irev = 2;
if( nperod==4 )
gt(5)=1;
continue;
end;
end;
gt(3)=0;
if( mp==1 )
gt(6)=1;
continue;
end;
if( mp==2 )
break;
end;
%
%     REORDER UNKNOWNS WHEN MP =0
%
end;
gt(4)=0;
mh =fix(fix((m+1)./2));
mhm1 = fix(mh - 1);
modd = 1;
if( mh.*2==m )
modd = 2;
end;
for j = 1 : n;
for i = 1 : mhm1;
mhpi = fix(mh + i);
mhmi = fix(mh - i);
w(i) = y(mhmi,j) - y(mhpi,j);
w(mhpi) = y(mhmi,j) + y(mhpi,j);
end; i = fix(mhm1+1);
w(mh) = 2..*y(mh,j);
if( modd~=1 )
w(m) = 2..*y(m,j);
end;
for i = 1 : m;
y(i,j) = w(i);
end; i = fix(m+1);
end; j = fix(n+1);
k = fix(iwbc + mhm1 - 1);
i = fix(iwba + mhm1);
w(k) = 0.;
w(i) = 0.;
w(k+1) = 2..*w(k+1);
if( modd==2 )
w(iwbb-1) = w(k+1);
else;
k = fix(iwbb + mhm1 - 1);
w(k) = w(k) - w(i-1);
w(iwbc-1) = w(iwbc-1) + w(iwbb-1);
end;
continue;
end;
gt(5)=0;
for j = 1 : nby2;
mskip = fix(n + 1 - j);
for i = 1 : m;
a1 = y(i,j);
y(i,j) = y(i,mskip);
y(i,mskip) = a1;
end; i = fix(m+1);
end; j = fix(nby2+1);
if( irev==1 )
[m,n,dumvar3,dumvar4,dumvar5,dumvar6,dumvar7,y,idimy,w,dumvar11,dumvar12,dumvar13,dumvar14,dumvar15,dumvar16,dumvar17,dumvar18]=poisn2(m,n,1,2,w(sub2ind(size(w),max(iwba,1)):end),w(sub2ind(size(w),max(iwbb,1)):end),w(sub2ind(size(w),max(iwbc,1)):end),y,idimy,w,w(sub2ind(size(w),max(iwb2,1)):end),w(sub2ind(size(w),max(iwb3,1)):end),w(sub2ind(size(w),max(iww1,1)):end),w(sub2ind(size(w),max(iww2,1)):end),w(sub2ind(size(w),max(iww3,1)):end),w(sub2ind(size(w),max(iwd,1)):end),w(sub2ind(size(w),max(iwtcos,1)):end),w(sub2ind(size(w),max(iwp,1)):end));   dumvar5i=find((w(sub2ind(size(w),max(iwba,1)):end))~=(dumvar5));dumvar6i=find((w(sub2ind(size(w),max(iwbb,1)):end))~=(dumvar6));dumvar7i=find((w(sub2ind(size(w),max(iwbc,1)):end))~=(dumvar7));dumvar11i=find((w(sub2ind(size(w),max(iwb2,1)):end))~=(dumvar11));dumvar12i=find((w(sub2ind(size(w),max(iwb3,1)):end))~=(dumvar12));dumvar13i=find((w(sub2ind(size(w),max(iww1,1)):end))~=(dumvar13));dumvar14i=find((w(sub2ind(size(w),max(iww2,1)):end))~=(dumvar14));dumvar15i=find((w(sub2ind(size(w),max(iww3,1)):end))~=(dumvar15));dumvar16i=find((w(sub2ind(size(w),max(iwd,1)):end))~=(dumvar16));dumvar17i=find((w(sub2ind(size(w),max(iwtcos,1)):end))~=(dumvar17));dumvar18i=find((w(sub2ind(size(w),max(iwp,1)):end))~=(dumvar18));   w(iwba-1+dumvar5i)=dumvar5(dumvar5i); w(iwbb-1+dumvar6i)=dumvar6(dumvar6i); w(iwbc-1+dumvar7i)=dumvar7(dumvar7i); w(iwb2-1+dumvar11i)=dumvar11(dumvar11i); w(iwb3-1+dumvar12i)=dumvar12(dumvar12i); w(iww1-1+dumvar13i)=dumvar13(dumvar13i); w(iww2-1+dumvar14i)=dumvar14(dumvar14i); w(iww3-1+dumvar15i)=dumvar15(dumvar15i); w(iwd-1+dumvar16i)=dumvar16(dumvar16i); w(iwtcos-1+dumvar17i)=dumvar17(dumvar17i); w(iwp-1+dumvar18i)=dumvar18(dumvar18i); 
gt(2)=1;
continue;
elseif( irev==2 ) ;
gt(3)=1;
continue;
end;
end;
gt(6)=0;
for j = 1 : n;
for i = 1 : mhm1;
mhmi = fix(mh - i);
mhpi = fix(mh + i);
w(mhmi) = .5.*(y(mhpi,j)+y(i,j));
w(mhpi) = .5.*(y(mhpi,j)-y(i,j));
end; i = fix(mhm1+1);
w(mh) = .5.*y(mh,j);
if( modd~=1 )
w(m) = .5.*y(m,j);
end;
for i = 1 : m;
y(i,j) = w(i);
end; i = fix(m+1);
end; j = fix(n+1);
break;
end;
%
%     RETURN STORAGE REQUIREMENTS FOR W ARRAY.
%
w(1) = ipstor + iwp - 1;
y_shape=zeros(y_shape);y_shape(:)=y(1:numel(y_shape));y=y_shape;
w_shape=zeros(w_shape);w_shape(:)=w(1:numel(w_shape));w=w_shape;
b_shape=zeros(b_shape);b_shape(:)=b(1:numel(b_shape));b=b_shape;
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
c_shape=zeros(c_shape);c_shape(:)=c(1:numel(c_shape));c=c_shape;
end %subroutine genbun
%DECK GVEC

Contact us