| [key,ipage,lpg,sx,ix]=prwvir(key,ipage,lpg,sx,ix); |
function [key,ipage,lpg,sx,ix]=prwvir(key,ipage,lpg,sx,ix);
persistent first firstCall iaddr ipagef istart one zero ; if isempty(firstCall),firstCall=1;end;
if isempty(iaddr), iaddr=0; end;
if isempty(ipagef), ipagef=0; end;
if isempty(istart), istart=0; end;
%***BEGIN PROLOGUE PRWVIR
%***SUBSIDIARY
%***PURPOSE Subsidiary to SPLP
%***LIBRARY SLATEC
%***TYPE SINGLE PRECISION (PRWVIR-S, DPRWVR-D)
%***AUTHOR Hanson, R. J., (SNLA)
% Wisniewski, J. A., (SNLA)
%***DESCRIPTION
%
% PRWVIR LIMITS THE TYPE OF STORAGE TO A SEQUENTIAL SPARSE MATRIX
% STORAGE SCHEME. THE PAGE STORAGE IS ON RANDOM ACCESS DISK.
% PRWVIR IS PART OF THE SPARSE LP PACKAGE, SPLP.
%
% KEY IS A FLAG WHICH INDICATES WHETHER A READ OR WRITE
% OPERATION IS TO BE PERFORMED. A VALUE OF KEY=1 INDICATES
% A READ. A VALUE OF KEY=2 INDICATES A WRITE.
% IPAGE IS THE PAGE OF MATRIX MN WE ARE ACCESSING.
% LPG IS THE LENGTH OF THE PAGE.
% SX(*),IX(*) IS THE MATRIX DATA.
%
% THIS SUBROUTINE IS A MODIFICATION OF THE SUBROUTINE LRWVIR,
% SANDIA LABS. REPT. SAND78-0785.
% MODIFICATIONS BY K.L. HIEBERT AND R.J. HANSON
%
%***SEE ALSO SPLP
%***ROUTINES CALLED SOPENM, SREADP, SWRITP
%***REVISION HISTORY (YYMMDD)
% 811215 DATE WRITTEN
% 891009 Removed unreferenced variables. (WRB)
% 891214 Prologue converted to Version 4.0 format. (BAB)
% 900328 Added TYPE section. (WRB)
% 910403 Updated AUTHOR and DESCRIPTION sections. (WRB)
%***end PROLOGUE PRWVIR
ix_shape=size(ix);ix=reshape(ix,1,[]);
sx_shape=size(sx);sx=reshape(sx,1,[]);
if isempty(zero), zero=0; end;
if isempty(one), one=0; end;
if isempty(first), first=false; end;
if firstCall, zero =[0.0e0]; end;
if firstCall, one=[1.0e0]; end;
firstCall=0;
%***FIRST EXECUTABLE STATEMENT PRWVIR
%
% COMPUTE STARTING ADDRESS OF PAGE.
%
ipagef = fix(sx(3));
istart = fix(ix(3) + 5);
%
% OPEN RANDOM ACCESS FILE NUMBER IPAGEF, IF FIRST PAGE WRITE.
%
first = sx(4)==zero;
if( first )
[ipagef,lpg]=sopenm(ipagef,lpg);
sx(4) = one;
end;
%
% PERFORM EITHER A READ OR A WRITE.
%
iaddr = fix(2.*ipage - 1);
if( key==1 )
[ipagef,ix(sub2ind(size(ix),max(istart,1)):end),sx(sub2ind(size(sx),max(istart,1)):end),lpg,iaddr]=sreadp(ipagef,ix(sub2ind(size(ix),max(istart,1)):end),sx(sub2ind(size(sx),max(istart,1)):end),lpg,iaddr);
elseif( key==2 ) ;
[ipagef,ix(sub2ind(size(ix),max(istart,1)):end),sx(sub2ind(size(sx),max(istart,1)):end),lpg,iaddr]=swritp(ipagef,ix(sub2ind(size(ix),max(istart,1)):end),sx(sub2ind(size(sx),max(istart,1)):end),lpg,iaddr);
end;
ix_shape=zeros(ix_shape);ix_shape(:)=ix(1:numel(ix_shape));ix=ix_shape;
sx_shape=zeros(sx_shape);sx_shape(:)=sx(1:numel(sx_shape));sx=sx_shape;
end
%DECK PSGF
|
|