Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0026/dmprc.ssp
There are 2 other files named dmprc.ssp in the archive. Click here to see a list.
C                                                                       DMPR  10
C     ..................................................................DMPR  20
C                                                                       DMPR  30
C        SUBROUTINE DMPRC                                               DMPR  40
C                                                                       DMPR  50
C        PURPOSE                                                        DMPR  60
C           TO PERMUTE THE ROWS OR COLUMNS OF A GIVEN MATRIX ACCORDING  DMPR  70
C           TO A GIVEN TRANSPOSITION VECTOR OR ITS INVERSE.  (SEE THE   DMPR  80
C           DISCUSSION ON PERMUTATIONS FOR DEFINITIONS AND NOTATION.)   DMPR  90
C                                                                       DMPR 100
C        USAGE                                                          DMPR 110
C           CALL DMPRC(A,M,N,ITRA,INV,IROCO,IER)                        DMPR 120
C                                                                       DMPR 130
C        DESCRIPTION OF PARAMETERS                                      DMPR 140
C           A     - GIVEN DOUBLE PRECISION M BY N MATRIX AND RESULTING  DMPR 150
C                   PERMUTED MATRIX                                     DMPR 160
C           M     - NUMBER OF ROWS OF A                                 DMPR 170
C           N     - NUMBER OF COLUMNS OF A                              DMPR 180
C           ITRA  - GIVEN TRANSPOSITION VECTOR (DIMENSION M IF ROWS ARE DMPR 190
C                   PERMUTED, N IF COLUMNS ARE PERMUTED)                DMPR 200
C           INV   - INPUT PARAMETER                                     DMPR 210
C                   INV NON-ZERO  -  PERMUTE ACCORDING TO ITRA          DMPR 220
C                   INV    =   0  -  PERMUTE ACCORDING TO ITRA INVERSE  DMPR 230
C           IROCO - INPUT PARAMETER                                     DMPR 240
C                   IROCO NON-ZERO  -  PERMUTE THE COLUMNS OF A         DMPR 250
C                   IROCO    =   0  -  PERMUTE THE ROWS OF A            DMPR 260
C           IER   - RESULTING ERROR PARAMETER                           DMPR 270
C                   IER = -1  -  M AND N ARE NOT BOTH POSITIVE          DMPR 280
C                   IER =  0  -  NO ERROR                               DMPR 290
C                   IER =  1  -  ITRA IS NOT A TRANSPOSITION VECTOR ON  DMPR 300
C                                1,...,M IF ROWS ARE PERMUTED, 1,...,N  DMPR 310
C                                IF COLUMNS ARE PERMUTED                DMPR 320
C                                                                       DMPR 330
C        REMARKS                                                        DMPR 340
C           (1)  IF IER=-1 THERE IS NO COMPUTATION.                     DMPR 350
C           (2)  IF IER= 1, THEN COMPUTATION HAS BEEN UNSUCCESSFUL DUE  DMPR 360
C                TO ERROR, BUT THE MATRIX A WILL REFLECT THE ROW OR     DMPR 370
C                COLUMN INTERCHANGES PERFORMED BEFORE THE ERROR WAS     DMPR 380
C                DETECTED.                                              DMPR 390
C           (3)  THE MATRIX A IS ASSUMED TO BE STORED COLUMNWISE.       DMPR 400
C                                                                       DMPR 410
C        SUBROUTINES AND SUBPROGRAMS REQUIRED                           DMPR 420
C           NONE                                                        DMPR 430
C                                                                       DMPR 440
C        METHOD                                                         DMPR 450
C           THE ROWS OR COLUMNS ARE PERMUTED ELEMENTWISE, INTERCHANGING DMPR 460
C           ROW OR COLUMN 1 AND ITRA(1),...,ROW OR COLUMN K AND ITRA(K) DMPR 470
C           IN THAT ORDER IF INV=0, AND OTHERWISE INTERCHANGING ROW OR  DMPR 480
C           COLUMN K AND ITRA(K),...,ROW OR COLUMN 1 AND ITRA(1), WHERE DMPR 490
C           K IS M OR N DEPENDING ON WHETHER WE PERMUTE ROWS OR COLUMNS.DMPR 500
C                                                                       DMPR 510
C     ..................................................................DMPR 520
C                                                                       DMPR 530
      SUBROUTINE DMPRC(A,M,N,ITRA,INV,IROCO,IER)                        DMPR 540
C                                                                       DMPR 550
C                                                                       DMPR 560
      DIMENSION A(1),ITRA(1)                                            DMPR 570
      DOUBLE PRECISION A,SAVE                                           DMPR 580
C                                                                       DMPR 590
C        TEST OF DIMENSIONS                                             DMPR 600
      IF(M)14,14,1                                                      DMPR 610
    1 IF(N)14,14,2                                                      DMPR 620
C                                                                       DMPR 630
C        DETERMINE WHICH ARE TO BE PERMUTED-THE ROWS OR THE COLUMNS     DMPR 640
    2 IF(IROCO)3,4,3                                                    DMPR 650
C                                                                       DMPR 660
C        INITIALIZE FOR COLUMN INTERCHANGES                             DMPR 670
    3 MM=M                                                              DMPR 680
      MMM=-1                                                            DMPR 690
      L=M                                                               DMPR 700
      LL=N                                                              DMPR 710
      GO TO 5                                                           DMPR 720
C                                                                       DMPR 730
C        INITIALIZE FOR ROW INTERCHANGES                                DMPR 740
    4 MM=1                                                              DMPR 750
      MMM=M                                                             DMPR 760
      L=N                                                               DMPR 770
      LL=M                                                              DMPR 780
C                                                                       DMPR 790
C        INITIALIZE LOOP OVER ALL ROWS OR COLUMNS                       DMPR 800
    5 IA=1                                                              DMPR 810
      ID=1                                                              DMPR 820
C                                                                       DMPR 830
C        TEST FOR INVERSE OPERATION                                     DMPR 840
      IF(INV)6,7,6                                                      DMPR 850
    6 IA=LL                                                             DMPR 860
      ID=-1                                                             DMPR 870
    7 DO 12 I=1,LL                                                      DMPR 880
      K=ITRA(IA)                                                        DMPR 890
      IF(K-IA)8,12,9                                                    DMPR 900
    8 IF(K)13,13,10                                                     DMPR 910
    9 IF(LL-K)13,10,10                                                  DMPR 920
C                                                                       DMPR 930
C        INITIALIZE ROW OR COLUMN INTERCHANGE                           DMPR 940
   10 IL=IA*MM                                                          DMPR 950
      K=K*MM                                                            DMPR 960
C                                                                       DMPR 970
C        PERFORM ROW OR COLUMN INTERCHANGE                              DMPR 980
      DO 11 J=1,L                                                       DMPR 990
      SAVE=A(IL)                                                        DMPR1000
      A(IL)=A(K)                                                        DMPR1010
      A(K)=SAVE                                                         DMPR1020
      K=K+MMM                                                           DMPR1030
   11 IL=IL+MMM                                                         DMPR1040
C                                                                       DMPR1050
C        ADDRESS NEXT INTERCHANGE STEP                                  DMPR1060
   12 IA=IA+ID                                                          DMPR1070
C                                                                       DMPR1080
C        NORMAL EXIT                                                    DMPR1090
      IER=0                                                             DMPR1100
      RETURN                                                            DMPR1110
C                                                                       DMPR1120
C        ERROR RETURN IN CASE ITRA IS NOT A TRANSPOSITION VECTOR        DMPR1130
   13 IER=1                                                             DMPR1140
      RETURN                                                            DMPR1150
C                                                                       DMPR1160
C        ERROR RETURN IN CASE OF ILLEGAL DIMENSIONS                     DMPR1170
   14 IER=-1                                                            DMPR1180
      RETURN                                                            DMPR1190
      END                                                               DMPR1200