| [m,n,sx,ix,lmx,ipagef]=pinitm(m,n,sx,ix,lmx,ipagef); |
function [m,n,sx,ix,lmx,ipagef]=pinitm(m,n,sx,ix,lmx,ipagef);
persistent firstCall i iopt lp4 n20008 n20012 nerr one zero ; if isempty(firstCall),firstCall=1;end;
if isempty(i), i=0; end;
if isempty(iopt), iopt=0; end;
if isempty(lp4), lp4=0; end;
if isempty(n20008), n20008=0; end;
if isempty(n20012), n20012=0; end;
if isempty(nerr), nerr=0; end;
%***BEGIN PROLOGUE PINITM
%***SUBSIDIARY
%***PURPOSE Subsidiary to SPLP
%***LIBRARY SLATEC
%***TYPE SINGLE PRECISION (PINITM-S, DPINTM-D)
%***AUTHOR Hanson, R. J., (SNLA)
% Wisniewski, J. A., (SNLA)
%***DESCRIPTION
%
% PINITM LIMITS THE TYPE OF STORAGE TO A SEQUENTIAL SCHEME.
% THE MATRIX IS STORED BY COLUMNS.
% SPARSE MATRIX INITIALIZATION SUBROUTINE.
%
% M=NUMBER OF ROWS OF THE MATRIX.
% N=NUMBER OF COLUMNS OF THE MATRIX.
% SX(*),IX(*)=THE WORK ARRAYS WHICH ARE USED TO STORE THE SPARSE
% MATRIX. THESE ARRAYS ARE AUTOMATICALLY MAINTAINED BY
% THE PACKAGE FOR THE USER.
% LMX=LENGTH OF THE WORK ARRAY SX(*).
% LMX MUST BE AT LEAST N+7 WHERE
% FOR GREATEST EFFICIENCY LMX SHOULD BE AT LEAST N+NZ+6
% WHERE NZ IS THE MAXIMUM NUMBER OF NONZEROES TO BE
% STORED IN THE MATRIX. VALUES OF LMX BETWEEN N+7 AND
% N+NZ+6 WILL CAUSE DEMAND PAGING TO OCCUR.
% THIS IS IMPLEMENTED BY THE PACKAGE.
% IX(*) MUST BE DIMENSIONED AT LEAST LMX
% IPAGEF=UNIT NUMBER WHERE DEMAND PAGES WILL BE STORED.
%
% THIS SUBROUTINE IS A MODIFICATION OF THE SUBROUTINE LINITM,
% SANDIA LABS. REPT. SAND78-0785.
% MODIFICATIONS BY K.L. HIEBERT AND R.J. HANSON
% REVISED 811130-1000
% REVISED YYMMDD-HHMM
%
%***SEE ALSO SPLP
%***ROUTINES CALLED XERMSG
%***REVISION HISTORY (YYMMDD)
% 811215 DATE WRITTEN
% 890831 Modified array declarations. (WRB)
% 891214 Prologue converted to Version 4.0 format. (BAB)
% 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
% 900328 Added TYPE section. (WRB)
% 910403 Updated AUTHOR and DESCRIPTION sections. (WRB)
%***end PROLOGUE PINITM
if isempty(zero), zero=0; end;
if isempty(one), one=0; end;
ix_shape=size(ix);ix=reshape(ix,1,[]);
if firstCall, zero =[0.0e0]; end;
if firstCall, one=[1.0e0]; end;
firstCall=0;
%***FIRST EXECUTABLE STATEMENT PINITM
iopt = 1;
%
% CHECK FOR INPUT ERRORS.
%
if( m<=0 || n<=0 )
nerr = 55;
[dumvar1,dumvar2,dumvar3,nerr,iopt]=xermsg('SLATEC','PINITM','MATRIX DIMENSION M OR N .LE. 0.',nerr,iopt);
end;
%
% VERIFY IF VALUE OF LMX IS LARGE ENOUGH.
%
if( lmx<n+7 )
nerr = 55;
[dumvar1,dumvar2,dumvar3,nerr,iopt]=xermsg('SLATEC','PINITM','THE VALUE OF LMX IS TOO SMALL.',nerr,iopt);
end;
%
% INITIALIZE DATA STRUCTURE INDEPENDENT VALUES.
%
sx(1) = zero;
sx(2) = zero;
sx(3) = ipagef;
ix(1) = fix(lmx);
ix(2) = fix(m);
ix(3) = fix(n);
ix(4) = 0;
sx(lmx-1) = zero;
sx(lmx) = -one;
ix(lmx-1) = -1;
lp4 = fix(n + 4);
%
% INITIALIZE DATA STRUCTURE DEPENDENT VALUES.
%
i = 4;
n20008 = fix(lp4);
while((n20008-i)>=0 );
sx(i) = zero;
i = fix(i + 1);
end;
i = 5;
n20012 = fix(lp4);
while((n20012-i)>=0 );
ix(i) = fix(lp4);
i = fix(i + 1);
end;
sx(n+5) = zero;
ix(n+5) = 0;
ix(lmx) = 0;
%
% INITIALIZATION COMPLETE.
%
ix_shape=zeros(ix_shape);ix_shape(:)=ix(1:numel(ix_shape));ix=ix_shape;
end %subroutine pinitm
%DECK PJAC
|
|