home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE CSRT
- C
- C PURPOSE
- C SORT COLUMNS OF A MATRIX
- C
- C USAGE
- C CALL CSRT(A,B,R,N,M,MS)
- C
- C DESCRIPTION OF PARAMETERS
- C A - NAME OF INPUT MATRIX TO BE SORTED
- C B - NAME OF INPUT VECTOR WHICH CONTAINS SORTING KEY
- C R - NAME OF SORTED OUTPUT MATRIX
- C N - NUMBER OF ROWS IN A AND R
- C M - NUMBER OF COLUMNS IN A AND R AND LENGTH OF B
- C MS - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A
- C 0 - GENERAL
- C 1 - SYMMETRIC
- C 2 - DIAGONAL
- C
- C REMARKS
- C MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRIX A
- C MATRIX R IS ALWAYS A GENERAL MATRIX
- C M MUST BE GREATER THAN ONE.
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C LOC
- C CCPY
- C
- C METHOD
- C COLUMNS OF INPUT MATRIX A ARE SORTED TO FORM OUTPUT MATRIX
- C R. THE SORTED COLUMN SEQUENCE IS DETERMINED BY THE VALUES OF
- C ELEMENTS IN ROW VECTOR B. THE LOWEST VALUED ELEMENT IN
- C B WILL CAUSE THE CORRESPONDING COLUMN OF A TO BE PLACED IN
- C THE FIRST COLUMN OF R. THE HIGHEST VALUED ELEMENT OF B WILL
- C CAUSE THE CORRESPONDING ROW OF A TO BE PLACED IN THE LAST
- C COLUMN OF R. IF DUPLICATE VALUES EXIST IN B, THE
- C CORRESPONDING COLUMNS OF A ARE MOVED TO R IN THE SAME ORDER
- C AS IN A.
- C
- C ..................................................................
- C
- SUBROUTINE CSRT(A,B,R,N,M,MS)
- DIMENSION A(1),B(1),R(1)
- C
- C MOVE SORTING KEY VECTOR TO FIRST ROW OF OUTPUT MATRIX
- C AND BUILD ORIGINAL SEQUENCE LIST IN SECOND ROW
- C
- IK=1
- DO 10 J=1,M
- R(IK)=B(J)
- R(IK+1)=J
- 10 IK=IK+N
- C
- C SORT ELEMENTS IN SORTING KEY VECTOR (ORIGINAL SEQUENCE LIST
- C IS RESEQUENCED ACCORDINGLY)
- C
- L=M+1
- 20 ISORT=0
- L=L-1
- IP=1
- IQ=N+1
- DO 50 J=2,L
- IF(R(IQ)-R(IP)) 30,40,40
- 30 ISORT=1
- RSAVE=R(IQ)
- R(IQ)=R(IP)
- R(IP)=RSAVE
- SAVER=R(IQ+1)
- R(IQ+1)=R(IP+1)
- R(IP+1)=SAVER
- 40 IP=IP+N
- IQ=IQ+N
- 50 CONTINUE
- IF(ISORT) 20,60,20
- C
- C MOVE COLUMNS FROM MATRIX A TO MATRIX R (NUMBER IN SECOND ROW
- C OF R REPRESENTS COLUMN NUMBER OF MATRIX A TO BE MOVED)
- C
- 60 IQ=-N
- DO 70 J=1,M
- IQ=IQ+N
- C
- C GET COLUMN NUMBER IN MATRIX A
- C
- I2=IQ+2
- IN=R(I2)
- C
- C MOVE COLUMN
- C
- IR=IQ+1
- CALL CCPY(A,IN,R(IR),N,M,MS)
- 70 CONTINUE
- RETURN
- END