| [i,j,aij,indcat,prgopt,dattrv,iflag]=usrmat(i,j,aij,indcat,prgopt,dattrv,iflag); |
function [i,j,aij,indcat,prgopt,dattrv,iflag]=usrmat(i,j,aij,indcat,prgopt,dattrv,iflag);
persistent l ;
if isempty(l), l=0; end;
%***BEGIN PROLOGUE USRMAT
%***SUBSIDIARY
%***PURPOSE Subsidiary to SPLP
%***LIBRARY SLATEC
%***TYPE SINGLE PRECISION (USRMAT-S, DUSRMT-D)
%***AUTHOR (UNKNOWN)
%***DESCRIPTION
%
% The user may supply this code
%
%***SEE ALSO SPLP
%***ROUTINES CALLED (NONE)
%***REVISION HISTORY (YYMMDD)
% 811215 DATE WRITTEN
% 891214 Prologue converted to Version 4.0 format. (BAB)
% 900328 Added TYPE section. (WRB)
%***end PROLOGUE USRMAT
prgopt_shape=size(prgopt);prgopt=reshape(prgopt,1,[]);
dattrv_shape=size(dattrv);dattrv=reshape(dattrv,1,[]);
%
%***FIRST EXECUTABLE STATEMENT USRMAT
if( iflag(1)==1 )
%
% THIS IS THE INITIALIZATION STEP. THE VALUES OF IFLAG(K),K=2,3,4,
% ARE RESPECTIVELY THE COLUMN INDEX, THE ROW INDEX (OR THE NEXT COL.
% INDEX), AND THE POINTER TO THE MATRIX ENTRY'S VALUE WITHIN
% DATTRV(*). ALSO CHECK (DATTRV(1)=0.) SIGNIFYING NO DATA.
if( dattrv(1)==0. )
i = 0;
j = 0;
iflag(1) = 3;
else;
iflag(2) = fix(-dattrv(1));
iflag(3) = fix(dattrv(2));
iflag(4) = 3;
end;
%
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
return;
else;
j = fix(iflag(2));
i = fix(iflag(3));
l = fix(iflag(4));
if( i==0 )
%
% SIGNAL THAT ALL OF THE NONZERO ENTRIES HAVE BEEN DEFINED.
iflag(1) = 3;
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
return;
elseif( i<0 ) ;
%
% SIGNAL THAT A SWITCH IS MADE TO A NEW COLUMN.
j = fix(-i);
i = fix(dattrv(l));
l = fix(l + 1);
end;
%
aij = dattrv(l);
%
% UPDATE THE INDICES AND POINTERS FOR THE NEXT ENTRY.
iflag(2) = fix(j);
iflag(3) = fix(dattrv(l+1));
iflag(4) = fix(l + 2);
%
% INDCAT=0 DENOTES THAT ENTRIES OF THE MATRIX ARE ASSIGNED THE
% VALUES FROM DATTRV(*). NO ACCUMULATION IS PERFORMED.
indcat = 0;
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
return;
end;
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
end
%DECK UVEC
|
|