| [a,irn,ip,n,iw,ia,reals]=la05es(a,irn,ip,n,iw,ia,reals); |
function [a,irn,ip,n,iw,ia,reals]=la05es(a,irn,ip,n,iw,ia,reals);
persistent ipi j k kl kn nz ;
if isempty(ipi), ipi=0; end;
if isempty(j), j=0; end;
if isempty(k), k=0; end;
if isempty(kl), kl=0; end;
if isempty(kn), kn=0; end;
global la05ds_7; if isempty(la05ds_7), la05ds_7=0; end;
global la05ds_3; if isempty(la05ds_3), la05ds_3=0; end;
global la05ds_4; if isempty(la05ds_4), la05ds_4=0; end;
global la05ds_2; if isempty(la05ds_2), la05ds_2=0; end;
global la05ds_6; if isempty(la05ds_6), la05ds_6=0; end;
global la05ds_5; if isempty(la05ds_5), la05ds_5=0; end;
if isempty(nz), nz=0; end;
global la05ds_1; if isempty(la05ds_1), la05ds_1=0; end;
%***BEGIN PROLOGUE LA05ES
%***SUBSIDIARY
%***PURPOSE Subsidiary to SPLP
%***LIBRARY SLATEC
%***TYPE SINGLE PRECISION (LA05ES-S, LA05ED-D)
%***AUTHOR (UNKNOWN)
%***DESCRIPTION
%
% THIS SUBPROGRAM IS A SLIGHT MODIFICATION OF A SUBPROGRAM
% FROM THE C. 1979 AERE HARWELL LIBRARY. THE NAME OF THE
% CORRESPONDING HARWELL CODE CAN BE OBTAINED BY DELETING
% THE FINAL LETTER =S= IN THE NAMES USED HERE.
% REVISED SEP. 13, 1979.
%
% ROYALTIES HAVE BEEN PAID TO AERE-UK FOR USE OF THEIR CODES
% IN THE PACKAGE GIVEN HERE. ANY PRIMARY USAGE OF THE HARWELL
% SUBROUTINES REQUIRES A ROYALTY AGREEMENT AND PAYMENT BETWEEN
% THE USER AND AERE-UK. ANY USAGE OF THE SANDIA WRITTEN CODES
% SPLP( ) (WHICH USES THE HARWELL SUBROUTINES) IS PERMITTED.
%
%***SEE ALSO SPLP
%***ROUTINES CALLED (NONE)
%***COMMON BLOCKS LA05DS
%***REVISION HISTORY (YYMMDD)
% 811215 DATE WRITTEN
% 890831 Modified array declarations. (WRB)
% 891214 Prologue converted to Version 4.0 format. (BAB)
% 900402 Added TYPE section. (WRB)
%***end PROLOGUE LA05ES
a_shape=size(a);a=reshape(a,1,[]);
irn_shape=size(irn);irn=reshape(irn,1,[]);
iw_shape=size(iw);iw=reshape(iw,1,[]);
ip_shape=size(ip);ip=reshape(ip,1,[]);
% common :: ;
%% common /la05ds/ small , lp , lenl , lenu , ncp , lrow , lcol;
%% common /la05ds/ la05ds_1 , la05ds_2 , la05ds_3 , la05ds_4 , la05ds_5 , la05ds_6 , la05ds_7;
%***FIRST EXECUTABLE STATEMENT LA05ES
la05ds_5 = fix(la05ds_5 + 1);
% COMPRESS FILE OF POSITIVE INTEGERS. ENTRY J STARTS AT IRN(IP(J))
% AND CONTAINS IW(J) INTEGERS,J=1,N. OTHER COMPONENTS OF IRN ARE ZERO.
% LENGTH OF COMPRESSED FILE PLACED IN LROW IF REALS IS true OR LCOL
% OTHERWISE.
% IF REALS IS true ARRAY A CONTAINS A REAL FILE ASSOCIATED WITH IRN
% AND THIS IS COMPRESSED TOO.
% A,IRN,IP,IW,IA ARE INPUT/OUTPUT VARIABLES.
% N,REALS ARE INPUT/UNCHANGED VARIABLES.
%
for j = 1 : n;
% STORE THE LAST ELEMENT OF ENTRY J IN IW(J) THEN OVERWRITE IT BY -J.
nz = fix(iw(j));
if( nz>0 )
k = fix(ip(j) + nz - 1);
iw(j) = fix(irn(k));
irn(k) = fix(-j);
end;
end; j = fix(n+1);
% KN IS THE POSITION OF NEXT ENTRY IN COMPRESSED FILE.
kn = 0;
ipi = 0;
kl = fix(la05ds_7);
if( reals )
kl = fix(la05ds_6);
end;
% LOOP THROUGH THE OLD FILE SKIPPING ZERO (DUMMY) ELEMENTS AND
% MOVING GENUINE ELEMENTS FORWARD. THE ENTRY NUMBER BECOMES
% KNOWN ONLY WHEN ITS END IS DETECTED BY THE PRESENCE OF A NEGATIVE
% INTEGER.
for k = 1 : kl;
if( irn(k)~=0 )
kn = fix(kn + 1);
if( reals )
a(kn) = a(k);
end;
if( irn(k)<0 )
% end OF ENTRY. RESTORE IRN(K), SET POINTER TO START OF ENTRY AND
% STORE CURRENT KN IN IPI READY FOR USE WHEN NEXT LAST ENTRY
% IS DETECTED.
j = fix(-irn(k));
irn(k) = fix(iw(j));
ip(j) = fix(ipi + 1);
iw(j) = fix(kn - ipi);
ipi = fix(kn);
end;
irn(kn) = fix(irn(k));
end;
end; k = fix(kl+1);
if( reals )
la05ds_6 = fix(kn);
end;
if( ~reals )
la05ds_7 = fix(kn);
end;
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
irn_shape=zeros(irn_shape);irn_shape(:)=irn(1:numel(irn_shape));irn=irn_shape;
iw_shape=zeros(iw_shape);iw_shape(:)=iw(1:numel(iw_shape));iw=iw_shape;
ip_shape=zeros(ip_shape);ip_shape(:)=ip(1:numel(ip_shape));ip=ip_shape;
end
%DECK LLSIA
|
|