| [nc,maxa,a,inum,jptr,jnum,jdisp]=mc20as(nc,maxa,a,inum,jptr,jnum,jdisp); |
function [nc,maxa,a,inum,jptr,jnum,jdisp]=mc20as(nc,maxa,a,inum,jptr,jnum,jdisp);
persistent ace acep i ice icep j ja jb jce jcep k kr locmlv nullmlv ;
if isempty(ace), ace=0; end;
if isempty(acep), acep=0; end;
if isempty(i), i=0; end;
if isempty(ice), ice=0; end;
if isempty(icep), icep=0; end;
if isempty(j), j=0; end;
if isempty(ja), ja=0; end;
if isempty(jb), jb=0; end;
if isempty(jce), jce=0; end;
if isempty(jcep), jcep=0; end;
if isempty(k), k=0; end;
if isempty(kr), kr=0; end;
if isempty(locmlv), locmlv=0; end;
if isempty(nullmlv), nullmlv=0; end;
%***BEGIN PROLOGUE MC20AS
%***SUBSIDIARY
%***PURPOSE Subsidiary to SPLP
%***LIBRARY SLATEC
%***TYPE SINGLE PRECISION (MC20AS-S, MC20AD-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)
%***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 MC20AS
inum_shape=size(inum);inum=reshape(inum,1,[]);
jnum_shape=size(jnum);jnum=reshape(jnum,1,[]);
a_shape=size(a);a=reshape(a,1,[]);
%***FIRST EXECUTABLE STATEMENT MC20AS
nullmlv = -jdisp;
%** CLEAR JPTR
for j = 1 : nc;
jptr(j) = 0;
end; j = fix(nc+1);
%** COUNT THE NUMBER OF ELEMENTS IN EACH COLUMN.
for k = 1 : maxa;
j = fix(jnum(k) + jdisp);
jptr(j) = fix(jptr(j) + 1);
end; k = fix(maxa+1);
%** SET THE JPTR ARRAY
k = 1;
for j = 1 : nc;
kr = fix(k + jptr(j));
jptr(j) = fix(k);
k = fix(kr);
end; j = fix(nc+1);
%
%** REORDER THE ELEMENTS INTO COLUMN ORDER. THE ALGORITHM IS AN
% IN-PLACE SORT AND IS OF ORDER MAXA.
for i = 1 : maxa;
% ESTABLISH THE CURRENT ENTRY.
jce = fix(jnum(i) + jdisp);
if( jce~=0 )
ace = a(i);
ice = fix(inum(i));
% CLEAR THE LOCATION VACATED.
jnum(i) = fix(nullmlv);
% CHAIN FROM CURRENT ENTRY TO STORE ITEMS.
for j = 1 : maxa;
% CURRENT ENTRY NOT IN CORRECT POSITION. DETERMINE CORRECT
% POSITION TO STORE ENTRY.
locmlv = jptr(jce);
jptr(jce) = fix(jptr(jce) + 1);
% SAVE CONTENTS OF THAT LOCATION.
acep = a(locmlv);
icep = fix(inum(locmlv));
jcep = fix(jnum(locmlv));
% STORE CURRENT ENTRY.
a(locmlv) = ace;
inum(locmlv) = fix(ice);
jnum(locmlv) = fix(nullmlv);
% CHECK IF NEXT CURRENT ENTRY NEEDS TO BE PROCESSED.
if( jcep==nullmlv )
break;
end;
% IT DOES. COPY INTO CURRENT ENTRY.
ace = acep;
ice = fix(icep);
jce = fix(jcep + jdisp);
end;
end;
%
end;
%
%** RESET JPTR VECTOR.
ja = 1;
for j = 1 : nc;
jb = fix(jptr(j));
jptr(j) = fix(ja);
ja = fix(jb);
end; j = fix(nc+1);
inum_shape=zeros(inum_shape);inum_shape(:)=inum(1:numel(inum_shape));inum=inum_shape;
jnum_shape=zeros(jnum_shape);jnum_shape(:)=jnum(1:numel(jnum_shape));jnum=jnum_shape;
a_shape=zeros(a_shape);a_shape(:)=a(1:numel(a_shape));a=a_shape;
end
%DECK MGSBV
|
|