home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e003 / 9.ddi / EIGENT2.FOR < prev    next >
Encoding:
Text File  |  1987-06-23  |  88.1 KB  |  1,103 lines

  1.       SUBROUTINE SSPACE  (NEQ,MBAND,NBLOCK,NEQB,NF,NV,NWA,NWV,NWVV,NTB, 00256500
  2.      $IFPR,IFSS,NITEM,RTOL,ANORM,COFQ)                                  00256510
  3.       IMPLICIT REAL*8 (A-H,O-Z)                                         00256520
  4.       COMMON /MASS/ LMASS                                               00256530
  5.        COMMON /TAPES/NSTIF,NRED,NL,NR,NT,NMASS                          00256540
  6.        COMMON/DYN4/KDYN,NRESS,NCRD,NCWT,NRDYN4                          R0256550
  7.       COMMON /DYN5/FRSHFT,FRINIT,FREND,MODEFR,NOSS                      R0256560
  8.       COMMON /QTSARG/ AT(400),RRQTSA(600)                               R0256570
  9.       COMMON /EXTRA/ MODEX,NREXTR(25)                                   R0256580
  10.       COMMON /AAA2/ DL(200),RTOLV(200)                                  R0256581
  11.        COMMON A(1)                                                      00256590
  12.        N2=1+NWV                                                         00256600
  13.        N3=N2+NEQB                                                       00256610
  14.        IF(LMASS.EQ.1) N3=N2+NEQB*MBAND                                  00256620
  15.        MMA=1                                                            00256630
  16.        IF(LMASS.EQ.1) MMA=MBAND                                         00256640
  17.         CALL SECOND(TIM1)                                               00256650
  18.        CALL INVECT(A(1),A(N2),A(N3),NBLOCK,NEQB,NV,IFPR,MMA)            00256660
  19.       IF(MODEX.EQ.1) RETURN                                             00256670
  20.        CALL SECOND(TIM2)                                                00256680
  21.        MI = MBAND + NEQB - 1                                            00256690
  22.       N3=1+NWA                                                          00256700
  23.       N2=N3+MI                                                          00256710
  24.       IF(IABS(KDYN).EQ.11) GO TO 1110                                   00256720
  25.        CALL DECOMP (A(1),A(N2),A(N3),NEQB,MBAND,NBLOCK,NWA,NTB,NSCH,NEQ,00256730
  26.      $             MI)                                                  00256740
  27.  1110 CONTINUE                                                          00256750
  28.       IF(MODEFR.NE.1) GO TO 70                                          00256760
  29.       WRITE(6,50)NSCH,FRINIT                                            00256770
  30.    50 FORMAT(//10X,9HTHERE ARE,1X,I4,18H FREQUENCIES BELOW,1X,F10.3,    00256780
  31.      15H CPS./)                                                         00256790
  32.       RETURN                                                            00256800
  33.    70 CONTINUE                                                          00256810
  34.       IF(MODEX.EQ.1) RETURN                                             00256820
  35.        CALL SECOND (TIM3)                                               00256830
  36.        NN=NEQ - ((NBLOCK-1)*NEQB)                                       00256840
  37.       IF(MODEFR.GT.1) GO TO 100                                         00256850
  38.        IF (A(NN).GT.ANORM) GO TO 100                                    00256860
  39.        IF(IABS(KDYN).EQ.11) GO TO 100                                   00256870
  40.        WRITE (6,280)                                                    00256880
  41.       MODEX=1                                                           00256890
  42.       RETURN                                                            00256900
  43.   100  TIM1=TIM2-TIM1                                                   00256910
  44.        TIM2=TIM3-TIM2                                                   00256920
  45.        IF (IFPR.EQ.1)                                                   00256930
  46.      $ WRITE (6,180) TIM1                                               00256940
  47.        IF (IFPR.EQ.1)                                                   00256950
  48.      $ WRITE (6,170) TIM2                                               00256960
  49.        DO 110 I=1,NV                                                    00256970
  50.   110  A(I)=0.0E0                                                       00256980
  51.        NITE=0                                                           00256990
  52.   120  NITE=NITE+1                                                      00257000
  53.       WRITE (6,190) NITE                                                00257010
  54.        CALL SECOND (TIM1)                                               00257020
  55.        N1=1+2*NV                                                        00257030
  56.       N4=N1+NWA                                                         00257040
  57.       N2=N4+MI                                                          00257050
  58.        N3=N2+NWV                                                        00257060
  59.        CALL REDBAK (A(N1),A(N2),A(N3),A(N4),NEQB,NV,NWA,NWV,NWVV,NTB,   00257070
  60.      $              NBLOCK,MI,MBAND)                                    00257080
  61.        N2=1+NV                                                          00257090
  62.        N3=N2+NV                                                         00257100
  63.        N4=N3+NV*NV                                                      00257110
  64.        N5=N4+NV*NV                                                      00257120
  65.        N6=N5+NV*NV                                                      00257130
  66.        N7=N6+NWV                                                        00257140
  67.        N8=N7+NWV                                                        R0257150
  68.        N9=N8+NV                                                         00257160
  69.        CALL SECOND (TIM2)                                               00257170
  70.        CALL EIGSOL (           A(N3),A(N4),A(N5),A(N6),A(N7),A(N8),A(N9)00257180
  71.      $,NF,NV,NBLOCK,NEQB,NITE,IFPR,NITEM,RTOL,IFSS,COFQ,MMA)            00257190
  72.       IF(MODEX.EQ.1) RETURN                                             00257200
  73.        CALL SECOND (TIM3)                                               00257210
  74.        TIM1=TIM3-TIM1                                                   00257220
  75.        TIM2=TIM3-TIM2                                                   00257230
  76.        IF (IFPR.EQ.1)                                                   00257240
  77.      $ WRITE (6,200) TIM1                                               00257250
  78.        IF (IFPR.EQ.1)                                                   00257260
  79.      $ WRITE (6,210) TIM2                                               00257270
  80.        IF (NITE.LT.NITEM) GO TO 120                                     00257280
  81.        WRITE (6,220)                                                    00257290
  82.        WRITE (6,230) (A(I),I=1,NF)                                      00257300
  83.        PI2=8.D0* DATAN(1.0D0)                                           00257310
  84.        DO 130 I=1,NF                                                    00257320
  85.        AT(I+NF)=A(I+NV)                                                 00257330
  86.        IF(IABS(KDYN).EQ.11) GO TO 130                                   00257340
  87.        AT(I)=PI2/ DSQRT(A(I))                                           00257350
  88.   130  CONTINUE                                                         00257360
  89.        IF (IFSS.EQ.1) GO TO 160                                         00257370
  90.        CALL SECOND (TIM1)                                               00257380
  91.        N2=1+NV                                                          00257390
  92.        N3=N2+NV                                                         00257400
  93.        N4=N3+NWA                                                        00257410
  94.        N5=N4+NEQB                                                       00257420
  95.        IF(LMASS.EQ.1) N5=N4+NEQB*MBAND                                  00257430
  96.        N6=N5+NV                                                         00257440
  97.        N7=N6+NV                                                         00257450
  98.        N8=N7+NV                                                         00257460
  99.        NWMA=NEQB                                                        00257470
  100.        IF(LMASS.EQ.1) NWMA=NWA                                          00257480
  101.        CALL SCHECK (A(1),A(N2),A(N3),A(N4),A(N5),A(N6),A(N7),A(N8),NWA, 00257490
  102.      $NEQB,NBLOCK,NF,NV,SHIFT,NEI,IFPR,RTOL,NWMA)                       00257500
  103.       IF(MODEX.EQ.1) RETURN                                             00257510
  104.       WRITE (6,240) SHIFT                                               00257520
  105.       N3=1+NWA                                                          00257530
  106.       N2=N3+MI                                                          00257540
  107.        CALL DECOMP (A(1),A(N2),A(N3),NEQB,MBAND,NBLOCK,NWA,NTB,NSCH,NEQ,00257550
  108.      $             MI)                                                  00257560
  109.       IF(MODEX.EQ.1) RETURN                                             00257570
  110.        IF (NSCH.EQ.NEI) GO TO 140                                       00257580
  111.        NSCH=NSCH-NEI                                                    00257590
  112.       WRITE (6,250) NSCH                                                00257600
  113.        GO TO 150                                                        00257610
  114.   140 WRITE (6,260) NSCH                                                00257620
  115.   150  CALL SECOND (TIM2)                                               00257630
  116.        TIM2=TIM2-TIM1                                                   00257640
  117.       WRITE (6,270) TIM2                                                00257650
  118.   160  RETURN                                                           00257660
  119.   170  FORMAT (34H0TIME FOR STIFFNESS FACTORIZATION ,F6.2)              00257670
  120.   180  FORMAT (42H0TIME FOR GENERATION OF INITIAL TR-VECTORS  ,F6.2)    00257680
  121.   190 FORMAT(31H0ITERATION NUMBER (*SSPACEB*) =,I4)                     00257690
  122.   200  FORMAT (24H0TIME USED IN ITERN STEP  ,F6.2)                      00257700
  123.   210  FORMAT (25H0TIME FOR EIGENVALUE SOLN  ,F6.2)                     00257710
  124.   220  FORMAT (///  40H WE SOLVED FOR THE FOLLOWING EIGENVALUES    )    00257720
  125.   230  FORMAT (1H0,6E22.14)                                             00257730
  126.   240  FORMAT (1X ,22HCHECK APPLIED AT SHIFT  ,E22.14)                  00257740
  127.   250  FORMAT (10H0THERE ARE ,I4,21H EIGENVALUES MISSING  )             00257750
  128.   260  FORMAT (20H0WE FOUND THE LOWEST ,I4,12H EIGENVALUES  )           00257760
  129.   270  FORMAT (30H0TIME FOR STURM SEQUENCE CHECK  ,F6.2)                00257770
  130.   280 FORMAT (38H0***ERROR   SOLUTION STOP IN *SSPACEB*, / 12X,         00257780
  131.      $        25HRIGID BODY MODE(S) FOUND., / 1X)                       00257790
  132.       END                                                               00257800
  133.       SUBROUTINE INVECT (VA,XM,IEQ,NBLOCK,NEQB,NV,IFPR,MMA)             00120920
  134.       IMPLICIT REAL*8 (A-H,O-Z)                                         00120930
  135.       COMMON/DYN3/ NEIG,NAD,ANORM,NVV,NFO                               00120940
  136.       COMMON/DYN4/KDYN,NRESS,NCRD,NCWT,NRESS1                           R0120950
  137.       COMMON /EXTRA/ MODEX,NREXTR(25)                                   R0120960
  138.        COMMON /TAPES/NSTIF,NRED,NL,NR,NT,NMASS                          00120970
  139.        DIMENSION VA(NEQB,NV),XM(NEQB,MMA),IEQ(1)                        00120980
  140.       NV1=NV-1-NFO                                                      00120990
  141.       IF(NV1.LT.1) GO TO 190                                            00121000
  142.        KK=1                                                             00121010
  143.        IND=0                                                            00121020
  144.   100  NBV=KK*((NV1-1)/NBLOCK+1)                                        00121030
  145.        IF (NBV.GT.NEQB) NBV=NEQB                                        00121040
  146.        IF (NBV.EQ.NEQB) IND=1                                           00121050
  147.        NBVN=0                                                           00121060
  148.        ICOUNT=0                                                         00121070
  149.        LL=0                                                             00121080
  150.        REWIND NMASS                                                     00121090
  151.   110  READ (NMASS) XM,(VA(I,1),I=1,NEQB)                               00121100
  152.        ICOUNT=ICOUNT+1                                                  00121110
  153.        DO 120 I=1,NEQB                                                  00121120
  154.       IF(VA(I,1).EQ.0.0E0) GO TO 120                                    00121130
  155.       VA(I,1)=XM(I,1)/VA(I,1)                                           00121140
  156.       IF(IABS(KDYN).EQ.11) VA(I,1)=DABS(VA(I,1))                        00121150
  157.   120  CONTINUE                                                         00121160
  158.        NNV=NEQB/NBV                                                     00121170
  159.        DO 160 L=1,NBV                                                   00121180
  160.        RT=0.0E0                                                         00121190
  161.        NN=L*NNV                                                         00121200
  162.        DO 130 I=1,NN                                                    00121210
  163.       IF(VA(I,1).LT.RT) GO TO 130                                       00121220
  164.        RT=VA(I,1)                                                       00121230
  165.        IJ=I                                                             00121240
  166.   130  CONTINUE                                                         00121250
  167.        DO 140 I=NN,NEQB                                                 00121260
  168.       IF(VA(I,1).LE.RT) GO TO 140                                       00121270
  169.        RT=VA(I,1)                                                       00121280
  170.        IJ=I                                                             00121290
  171.   140  CONTINUE                                                         00121300
  172.       IF(VA(IJ,1).NE.0.0E0) GO TO 150                                   00121310
  173.        NBVN=NBVN+1                                                      00121320
  174.        GO TO 160                                                        00121330
  175.   150  LL=LL+1                                                          00121340
  176.        IEQ(LL)=(ICOUNT-1)*NEQB+IJ                                       00121350
  177.        IF (LL.GE.NV1) GO TO 190                                         00121360
  178.        VA(IJ,1)=0.0E0                                                   00121370
  179.   160  CONTINUE                                                         00121380
  180.        IF (IND.EQ.1) GO TO 170                                          00121390
  181.        IF ((NBVN.EQ.0).OR.(ICOUNT.EQ.NBLOCK)) GO TO 170                 00121400
  182.        NBV=KK*((NV1-LL-1)/(NBLOCK-ICOUNT)+1)                            00121410
  183.        IF (NBV.GT.NEQB) NBV=NEQB                                        00121420
  184.        NBVN=0                                                           00121430
  185.   170  IF (ICOUNT.LT.NBLOCK) GO TO 110                                  00121440
  186.        IF (IND.EQ.1) GO TO 180                                          00121450
  187.        KK=2*KK                                                          00121460
  188.        GO TO 100                                                        00121470
  189.   180 WRITE (6,260)                                                     00121480
  190.       MODEX=1                                                           00121490
  191.       RETURN                                                            00121500
  192.   190  REWIND NMASS                                                     00121510
  193.        REWIND NR                                                        00121520
  194.       REWIND NT                                                         00121530
  195.       NSH1=NFO+1                                                        00121540
  196.       NSH2=NFO+2                                                        00121550
  197.        DO 250 L=1,NBLOCK                                                00121560
  198.  9997 FORMAT(5X,16HBLOCK NUMBER, L=,I5)                                 00121570
  199.        READ (NMASS) XM                                                  00121580
  200.  9998 FORMAT(5X,26HMASS MATRIX EQUATION NO. =,I5,/,(5X,10E12.5))        00121590
  201.       IF(NV1.LT.1) GO TO 245                                            00121600
  202.       IF(NFO.LE.0) GO TO 200                                            00121610
  203.       READ(NT) VA                                                       00121620
  204.   200 DO 210 I=1,NEQB                                                   00121630
  205.       VA(I,NSH1)=XM(I,1)                                                00121640
  206.       DO 210 J=NSH2,NV                                                  00121650
  207.   210  VA(I,J)=0.0E0                                                    00121660
  208.       DO 240 K=1,NV1                                                    00121670
  209.       II=IEQ(K)                                                         00121680
  210.        NLE=(L-1)*NEQB                                                   00121690
  211.        NRI=L*NEQB                                                       00121700
  212.        IF (II-NLE) 240,240,220                                          00121710
  213.   220  IF (NRI-II) 240,230,230                                          00121720
  214.   230  II=II-NLE                                                        00121730
  215.       VA(II,K+NSH1)=1.E0                                                00121740
  216.   240  CONTINUE                                                         00121750
  217.       GO TO 247                                                         00121760
  218.   245 DO 246 I=1,NEQB                                                   00121770
  219.   246 VA(I,1)=XM(I,1)                                                   00121780
  220.   247 CONTINUE                                                          00121790
  221.        WRITE (NR) VA                                                    00121800
  222.  9999 FORMAT(5X,23HVA ARRAY EQUATION NO. =,I5,/,5X,(10E12.5))           00121810
  223.   250  CONTINUE                                                         00121820
  224.        IF(NV1.LT.1) RETURN                                              00121830
  225.        IF (IFPR.EQ.1)                                                   00121840
  226.      $ WRITE (6,270)                                                    00121850
  227.        IF (IFPR.EQ.1)                                                   00121860
  228.      $ WRITE (6,280) (IEQ(I),I=1,NV1)                                   00121870
  229.        RETURN                                                           00121880
  230.   260 FORMAT (37H0***ERROR   SOLUTION STOP IN *INVECT*, / 12X,          00121890
  231.      $        42HINSUFFICIENT NUMBER OF FINITE EIGENVALUES., / 1X)      00121900
  232.   270  FORMAT (20H0PRINT OF VECTOR IEQ  )                               00121910
  233.   280  FORMAT (1H0,20I6)                                                00121920
  234.       END                                                               00121930
  235.       SUBROUTINE DECOMP (A,B,MAXA,NEQB,MA,NBLOCK,NWA,NTB,NSCH,NEQ,MI)   00052930
  236.       IMPLICIT REAL*8 (A-H,O-Z)                                         00052940
  237.       REAL*8  MAXA                                                      00052950
  238.        COMMON /TAPES/NSTIF,NRED,NL,NR,NT,NMASS                          00052960
  239.       COMMON /EXTRA/ MODEX,NREXTR(25)                                   R0052970
  240.       COMMON /SQZ/ ISQZ,NRSQZ(5)                                        R0052980
  241.        DIMENSION A(NWA),B(NWA),MAXA(MI)                                 00052990
  242.       DIMENSION ICOO(10),IFORM(4)                                       R0053000
  243.       DATA ICOO /3H001,3H013,3H025,3H037,3H049,3H061,3H073,3H085,3H097, 00053010
  244.      $           3H109/                                                 00053020
  245.       DATA IFORM(1),IFORM(3),IFORM(4) /4H(1H+,4HX,F7,4H.2) /            R0053030
  246.        MA2=MA - 2                                                       00053040
  247.       IF(MA2.EQ.0) MA2=1                                                00053050
  248.        INC=NEQB - 1                                                     00053060
  249.        IF(INC.EQ.0)INC=1                                                00053070
  250.        N1=NL                                                            00053080
  251.       N2=NT                                                             00053090
  252.       IF(N1.EQ.62) N1=22                                                R0053100
  253.       IF(N2.EQ.62) N2=22                                                R0053110
  254.       NWANM=NWA+MI                                                      00053120
  255.       WRITE (6,2002) NSTIF,NRED,N1,N2,NWA
  256.  2002 FORMAT (5X,'*** NSTIF NRED N1 N2 NWA ***',5I5/)
  257.       CALL RDWRT(NSTIF,A,1,6,I)                                         00053130
  258.       CALL RDWRT(NRED ,A,1,6,I)                                         00053140
  259.       CALL RDWRT(N1   ,A,1,6,I)                                         00053150
  260.       CALL RDWRT(N2   ,A,1,6,I)                                         00053160
  261.        NSCH=0                                                           00053170
  262.       WRITE(6,90)                                                       00053180
  263.    90 FORMAT(1X ,10X,48HTHE LAST NUMBER PRINTED IS THE PERCENT OF THE FO00053190
  264.      $       ,40HRWARD REDUCTION THAT HAS BEEN COMPLETED.//)            00053200
  265.       ICO=1                                                             00053210
  266.        DO 420 NJ=1,NBLOCK                                               00053220
  267.        IF (NJ.NE.1) GO TO 100                                           00053230
  268. CC    CALL EXPAND(A,NWA,NSTIF)                                          00053240
  269.       READ (NSTIF) A
  270.        GO TO 110                                                        00053250
  271.   100  IF (NTB.EQ.1) GO TO 110                                          00053260
  272.       CALL RDWRT(N1   ,A,1,6,I)                                         00053270
  273.       CALL RDWRT(N2   ,A,1,6,I)                                         00053280
  274.       CALL EXPAND(A,NWA,N1)                                             00053290
  275. CC    READ (NSTIF) A
  276.   110  KU=1                                                             00053300
  277.        KM=MIN0(MA,NEQB)                                                 00053310
  278.        MAXA(1)=1                                                        00053320
  279.        DO 170 N=2,MI                                                    00053330
  280.        IF (N-MA) 120,120,130                                            00053340
  281.   120  KU=KU + NEQB                                                     00053350
  282.        KK=KU                                                            00053360
  283.       MM=MIN0(N,KM)                                                     00053370
  284.        GO TO 150                                                        00053380
  285.   130  KU=KU + 1                                                        00053390
  286.        KK=KU                                                            00053400
  287.        IF (N-NEQB) 150,150,140                                          00053410
  288.   140  MM=MM - 1                                                        00053420
  289.   150  DO 160 K=1,MM                                                    00053430
  290.        IF (A(KK)) 170,160,170                                           00053440
  291.   160  KK=KK - INC                                                      00053450
  292.   170  MAXA(N)=KK                                                       00053460
  293.        IF (A(1)) 190,180,200                                            00053470
  294.   180  KK=(NJ-1)*NEQB + 1                                               00053480
  295.        IF (KK.GT.NEQ) GO TO 390                                         00053490
  296.       WRITE (6,430) KK                                                  00053500
  297.       MODEX=1                                                           00053510
  298.       RETURN                                                            00053520
  299.   190  NSCH=NSCH + 1                                                    00053530
  300.   200  DO 280 N=2,NEQB                                                  00053540
  301.        NH=MAXA(N)                                                       00053550
  302.        IF (NH-N) 280,280,210                                            00053560
  303.   210  KL=N + INC                                                       00053570
  304.        KU=NH                                                            00053580
  305.        K=N                                                              00053590
  306.        D=0.E0                                                           00053600
  307.        DO 220 KK=KL,KU,INC                                              00053610
  308.        K=K - 1                                                          00053620
  309.        C=A(KK)/A(K)                                                     00053630
  310.        D=D + C*A(KK)                                                    00053640
  311.   220  A(KK)=C                                                          00053650
  312.        A(N)=A(N) - D                                                    00053660
  313.        IF (A(N)) 240,230,250                                            00053670
  314.   230  KK=(NJ-1)*NEQB + N                                               00053680
  315.        IF (KK.GT.NEQ) GO TO 390                                         00053690
  316.       WRITE (6,430) KK                                                  00053700
  317.         A(N)=-1.0E-10-(N*1.0E-13)                                       00053710
  318.   240  NSCH=NSCH + 1                                                    00053720
  319.   250  IC=NEQB                                                          00053730
  320.        DO 270 J=1,MA2                                                   00053740
  321.        MJ=MAXA(N+J) - IC                                                00053750
  322.        IF (MJ-N) 270,270,260                                            00053760
  323.   260  KU=MIN0(MJ,NH)                                                   00053770
  324.        KN=N + IC                                                        00053780
  325.        C=0.E0                                                           00053790
  326.       CONST=C                                                           00053800
  327.       CALL QVDOT(C,A(KL),A(KL+IC),       (KU-KL)/INC+1,INC,INC)         00053810
  328.       C=CONST-C                                                         00053820
  329.       A(KN)=A(KN)+C                                                     00053830
  330.   270  IC=IC + NEQB                                                     00053840
  331.   280  CONTINUE                                                         00053850
  332.       IF(NJ.EQ.NBLOCK) CALL SQEEZE(A,NWANM,NRED,ISQZ)                   00053860
  333.       IF(NJ.EQ.NBLOCK) GO TO 400                                        00053870
  334.   290  DO 380 NK=1,NTB                                                  00053880
  335.        IF ((NK+NJ).GT.NBLOCK) GO TO 380                                 00053890
  336.        NI=N1                                                            00053900
  337.        IF ((NJ.EQ.1).OR.(NK.EQ.NTB)) NI=NSTIF                           00053910
  338.       CALL EXPAND(B,NWA,NI)                                             00053920
  339.        ML=NK*NEQB + 1                                                   00053930
  340.        MR=MIN0((NK+1)*NEQB,MI)                                          00053940
  341.        MD=MI - ML                                                       00053950
  342.        KL=NEQB + (NK-1)*NEQB*NEQB                                       00053960
  343.        N=1                                                              00053970
  344.        DO 360 M=ML,MR                                                   00053980
  345.        NH=MAXA(M)                                                       00053990
  346.        KL=KL + NEQB                                                     00054000
  347.        IF (NH-KL) 350,300,300                                           00054010
  348.   300  KU=NH                                                            00054020
  349.        K=NEQB                                                           00054030
  350.        D=0.E0                                                           00054040
  351.        DO 310 KK=KL,KU,INC                                              00054050
  352.        C=A(KK)/A(K)                                                     00054060
  353.        D=D + C*A(KK)                                                    00054070
  354.        A(KK)=C                                                          00054080
  355.   310  K=K - 1                                                          00054090
  356.        B(N)=B(N) - D                                                    00054100
  357.        IF (MD) 360,360,320                                              00054110
  358.   320  IC=NEQB                                                          00054120
  359.        DO 340 J=1,MD                                                    00054130
  360.        MJ=MAXA(M+J) - IC                                                00054140
  361.        IF (MJ-KL) 340,330,330                                           00054150
  362.   330  KU=MIN0(MJ,NH)                                                   00054160
  363.        KN=N + IC                                                        00054170
  364.        C=0.E0                                                           00054180
  365.       CONST=C                                                           00054190
  366.       CALL QVDOT(C,A(KL),A(KL+IC),       (KU-KL)/INC+1,INC,INC)         00054200
  367.       C=CONST-C                                                         00054210
  368.       B(KN)=B(KN)+C                                                     00054220
  369.   340  IC=IC + NEQB                                                     00054230
  370.   350  MD=MD - 1                                                        00054240
  371.   360  N=N + 1                                                          00054250
  372.        IF (NTB.NE.1) GO TO 370                                          00054260
  373.       CALL SQEEZE(A,NWANM,NRED,ISQZ)                                    00054270
  374.       CALL MEMOVE(B(1),A(1),NWA)                                        00054280
  375.        GO TO 400                                                        00054290
  376.   370 CALL SQEEZE(B,NWA,N2,ISQZ)                                        00054300
  377.   380  CONTINUE                                                         00054310
  378.        M=N1                                                             00054320
  379.        N1=N2                                                            00054330
  380.        N2=M                                                             00054340
  381.   390 CALL SQEEZE(A,NWANM,NRED,ISQZ)                                    00054350
  382.   400  CONTINUE                                                         00054360
  383.       PER=NJ*100.0/NBLOCK                                               00054370
  384.       IFORM(2)=ICOO(ICO)                                                00054380
  385.       WRITE(6,2003) PER                                                 R0054390
  386.  2003 FORMAT (5X,F10.2/)                                                R0054391
  387.       ICO=ICO+1                                                         00054400
  388.       IF(ICO.LT.11) GO TO 420                                           00054410
  389. CC    WRITE(6,410)                                                      00054420
  390. CC410 FORMAT(1H )                                                       00054430
  391.       ICO=1                                                             00054440
  392.   420 CONTINUE                                                          00054450
  393.   430 FORMAT (37H0***ERROR   SOLUTION STOP IN *DECOMP*, / 12X,          00054460
  394.      $        37HZERO PIVOT FOUND DURING FACTORIZATION, / 12X,          00054470
  395.      $        17HEQUATION NUMBER =, I5 / 1X                             00054480
  396.      $  ,11X,47HTHE PIVOT WILL BE CHANGED TO A SMALL NEG. VALUE/        00054490
  397.      $   12X,33HTHE FREQUENCIES MAY BE IN ERROR |, / 1X)                00054500
  398.       WRITE(6,440)                                                      00054510
  399.   440 FORMAT(////20X,37(1H*)/20X,37HFORWARD REDUCTION HAS BEEN COMPLETED00054520
  400.      $./20X,37(1H*))                                                    00054530
  401.        RETURN                                                           00054540
  402.       END                                                               00054550
  403.       SUBROUTINE REDBAK (A,VA,VV,MAXA,NEQB,NV,NWA,NWV,NWVV,NTB,NBLOCK,  00201210
  404.      $MI,MA)                                                            00201220
  405.       IMPLICIT REAL*8 (A-H,O-Z)                                         00201230
  406.       REAL*8  MAXA                                                      00201240
  407.       COMMON /SQZ/ ISQZ,NRSQZ(5)                                        R0201250
  408.        COMMON /TAPES/NSTIF,NRED,NL,NR,NT,NMASS                          00201260
  409.        DIMENSION A(NWA),VA(NWV),VV(NWVV),MAXA(MI)                       00201270
  410.       NWANM=NWA+MI                                                      00201280
  411.        INC=NEQB - 1                                                     00201290
  412.       IF(INC.EQ.0) INC=1                                                00201300
  413.        NEB=NTB*NEQB                                                     00201310
  414.        NEBT=NEB+NEQB                                                    00201320
  415.       CALL RDWRT(NRED ,A,1,6,I)                                         00201330
  416.        REWIND NR                                                        00201340
  417.        REWIND NL                                                        00201350
  418.        REWIND NT                                                        00201360
  419.       CALL EXPAND(A,NWANM,NRED)                                         00201370
  420.        ISV=NTB+1                                                        00201380
  421.        IF (NBLOCK.EQ.1) ISV=1                                           00201390
  422.        LL=0                                                             00201400
  423.        DO 120 L=1,ISV                                                   00201410
  424.        READ (NR) VA                                                     00201420
  425.        K=0                                                              00201430
  426.        KK=LL                                                            00201440
  427.        DO 110 J=1,NV                                                    00201450
  428.        DO 100 I=1,NEQB                                                  00201460
  429.        K=K+1                                                            00201470
  430.        KK=KK+1                                                          00201480
  431.   100  VV(KK)=VA(K)                                                     00201490
  432.   110  KK=KK+NEB                                                        00201500
  433.   120  LL=LL+NEQB                                                       00201510
  434.        ISA=1                                                            00201520
  435.   130  DO 160 N=2,NEQB                                                  00201530
  436.        KL=N + INC                                                       00201540
  437.        KU=MAXA(N)                                                       00201550
  438.        IF (KU-KL) 160,140,140                                           00201560
  439.   140  K=N                                                              00201570
  440.        DO 150 L=1,NV                                                    00201580
  441.       CONST=VV(K)                                                       00201590
  442.       CALL QVDOT(VV(K  ),A(KL),VV(K-1),  (KU-KL)/INC+1,INC,-1)          00201600
  443.       VV(K  )=CONST-VV(K  )                                             00201610
  444.   150  K=K + NEBT                                                       00201620
  445.   160  CONTINUE                                                         00201630
  446.   170  KL=NEQB                                                          00201640
  447.        ML=NEQB + 1                                                      00201650
  448.        DO 200 N=ML,MI                                                   00201660
  449.        KL=KL + NEQB                                                     00201670
  450.        KU=MAXA(N)                                                       00201680
  451.        IF (KU-KL) 200,180,180                                           00201690
  452.   180  K=NEQB                                                           00201700
  453.        KN=N                                                             00201710
  454.        DO 190 L=1,NV                                                    00201720
  455.       CONST=VV(KN)                                                      00201730
  456.       CALL QVDOT(VV(KN ),A(KL),VV(K)    ,(KU-KL)/INC+1,INC,-1)          00201740
  457.       VV(KN )=CONST-VV(KN )                                             00201750
  458.        K=K + NEBT                                                       00201760
  459.   190  KN=KN + NEBT                                                     00201770
  460.   200  CONTINUE                                                         00201780
  461.        DO 230 I=1,NEQB                                                  00201790
  462.        C=A(I)                                                           00201800
  463.        IF (C) 210,230,210                                               00201810
  464.   210  KK=I                                                             00201820
  465.        DO 220 L=1,NV                                                    00201830
  466.        VV(KK)=VV(KK)/C                                                  00201840
  467.   220  KK=KK+NEBT                                                       00201850
  468.   230  CONTINUE                                                         00201860
  469.        IF (ISA.EQ.NBLOCK) GO TO 300                                     00201870
  470.       CALL EXPAND(A,NWANM,NRED)                                         00201880
  471.        ISA=ISA+1                                                        00201890
  472.        K=0                                                              00201900
  473.        KK=0                                                             00201910
  474.        DO 250 J=1,NV                                                    00201920
  475.        DO 240 I=1,NEQB                                                  00201930
  476.        K=K+1                                                            00201940
  477.        KK=KK+1                                                          00201950
  478.   240  VA(K)=VV(KK)                                                     00201960
  479.   250  KK=KK+NEB                                                        00201970
  480.        WRITE (NT) VA                                                    00201980
  481.        K=1                                                              00201990
  482.        DO 270 J=1,NV                                                    00202000
  483.        DO 260 I=1,NEB                                                   00202010
  484.        VV(K)=VV(K+NEQB)                                                 00202020
  485.   260  K=K+1                                                            00202030
  486.   270  K=K+NEQB                                                         00202040
  487.        IF (ISV.EQ.NBLOCK) GO TO 130                                     00202050
  488.        READ (NR) VA                                                     00202060
  489.        ISV=ISV+1                                                        00202070
  490.        KK=NEB                                                           00202080
  491.        K=0                                                              00202090
  492.        DO 290 J=1,NV                                                    00202100
  493.        DO 280 I=1,NEQB                                                  00202110
  494.        K=K+1                                                            00202120
  495.        KK=KK+1                                                          00202130
  496.   280  VV(KK)=VA(K)                                                     00202140
  497.   290  KK=KK+NEB                                                        00202150
  498.        GO TO 130                                                        00202160
  499.   300 CALL RDWRT(NRED ,A,1,2,I)                                         00202170
  500.        ISA=1                                                            00202180
  501.   310  ML=NEQB+1                                                        00202190
  502.        KL=NEQB                                                          00202200
  503.        DO 340 M=ML,MI                                                   00202210
  504.        KL=KL+NEQB                                                       00202220
  505.        KU=MAXA(M)                                                       00202230
  506.        IF (KU-KL) 340,320,320                                           00202240
  507.   320  K=NEQB                                                           00202250
  508.        KM=M                                                             00202260
  509.        DO 330 L=1,NV                                                    00202270
  510.       CALL QMR2(VV(K   ),VV(K   ),VV(KM),A(KL),(KU-KL)/INC+1,-1,-1,INC) 00202280
  511.        KM=KM + NEBT                                                     00202290
  512.   330  K=K + NEBT                                                       00202300
  513.   340  CONTINUE                                                         00202310
  514.        N=NEQB                                                           00202320
  515.        DO 370 LJ=2,NEQB                                                 00202330
  516.        KL=N + INC                                                       00202340
  517.        KU=MAXA(N)                                                       00202350
  518.        IF (KU-KL) 370,350,350                                           00202360
  519.   350  K=N                                                              00202370
  520.        DO 360 L=1,NV                                                    00202380
  521.       CALL QMR2(VV(K-1 ),VV(K-1 ),VV(K ),A(KL),(KU-KL)/INC+1,-1,-1,INC) 00202390
  522.   360  K=K + NEBT                                                       00202400
  523.   370  N=N - 1                                                          00202410
  524.   380  KK=0                                                             00202420
  525.        K=0                                                              00202430
  526.        DO 400 J=1,NV                                                    00202440
  527.        DO 390 I=1,NEQB                                                  00202450
  528.        K=K+1                                                            00202460
  529.        KK=KK+1                                                          00202470
  530.   390  VA(K)=VV(KK)                                                     00202480
  531.   400  KK=KK+NEB                                                        00202490
  532.        WRITE (NL) VA                                                    00202500
  533.        IF (ISA.EQ.NBLOCK) GO TO 450                                     00202510
  534.       CALL RDWRT(NRED ,A,1,2,I)                                         00202520
  535.       CALL EXPAND(A,NWANM,NRED)                                         00202530
  536.       CALL RDWRT(NRED ,A,1,2,I)                                         00202540
  537.        ISA=ISA+1                                                        00202550
  538.        BACKSPACE NT                                                     00202560
  539.        READ (NT) VA                                                     00202570
  540.        BACKSPACE NT                                                     00202580
  541.       LNTRC=NWV*4                                                       00202590
  542.        K=NEBT                                                           00202600
  543.        DO 420 J=1,NV                                                    00202610
  544.        DO 410 I=1,NEB                                                   00202620
  545.        VV(K)=VV(K-NEQB)                                                 00202630
  546.   410  K=K-1                                                            00202640
  547.   420  K=K+NEBT+NEB                                                     00202650
  548.        K=0                                                              00202660
  549.        KK=0                                                             00202670
  550.        DO 440 J=1,NV                                                    00202680
  551.        DO 430 I=1,NEQB                                                  00202690
  552.        K=K+1                                                            00202700
  553.        KK=KK+1                                                          00202710
  554.   430  VV(KK)=VA(K)                                                     00202720
  555.   440  KK=KK+NEB                                                        00202730
  556.        GO TO 310                                                        00202740
  557.   450  RETURN                                                           00202750
  558.       END                                                               00202760
  559.       SUBROUTINE EIGSOL (         AR,BR,VEC,VL,VR,D,XM,NF,NV,NBLOCK,    R0069250
  560.      $NEQB,NITE,IFPR,NITEM,RTOL,IFSS,COFQ,MMA)                          00069260
  561.       IMPLICIT REAL*8 (A-H,O-Z)                                         00069270
  562.       COMMON /EXTRA/ MODEX,NREXTR(25)                                   R0069280
  563.       COMMON/MASS/LMASS                                                 00069290
  564.       COMMON/DYN4/KDYN,NRESS,NCRD,NCWT,NRESS1                           R0069300
  565.       COMMON /DYN5/FRSHFT,FRINIT,FREND,MODEFR,NOSS                      R0069310
  566.        COMMON /TAPES/NSTIF,NRED,NL,NR,NT,NMASS                          00069320
  567.        COMMON /AAA2/ DL(200),RTOLV(200)                                 R0069321
  568.        DIMENSION AR(NV,NV),BR(NV,NV),VEC(NV,NV),VL(NEQB,NV),VR(NEQB,NV) 00069330
  569.        DIMENSION D(NV)                 ,XM(NEQB,MMA)                    R0069340
  570.       LNLRC=4*NEQB*NV                                                   00069350
  571.        TOLJ=1.0E-12                                                     00069360
  572.        REWIND NMASS                                                     00069370
  573.       N18=18                                                            00069380
  574.       FI=FRINIT-FRSHFT                                                  00069390
  575.       FE=COFQ-FRSHFT                                                    00069400
  576.        REWIND NT                                                        00069410
  577.        REWIND NR                                                        00069420
  578.        DO 100 I=1,NV                                                    00069430
  579.        DO 100 J=I,NV                                                    00069440
  580.        AR(I,J)=0.0E0                                                    00069450
  581.   100  BR(I,J)=0.0E0                                                    00069460
  582.       IF(LMASS.EQ.1) GO TO 1100                                         00069470
  583.        DO 160 N=1,NBLOCK                                                00069480
  584.        BACKSPACE NL                                                     00069490
  585.        READ (NL) VL                                                     00069500
  586.        BACKSPACE NL                                                     00069510
  587.        READ (NR) VR                                                     00069520
  588.        READ (NMASS) XM                                                  00069530
  589.        DO 120 I=1,NV                                                    00069540
  590.        DO 120 J=I,NV                                                    00069550
  591.       CALL QVDOT(ART,VL(1,I),VR(1,J),NEQB,1,1)                          00069560
  592.   120  AR(I,J)=AR(I,J)+ART                                              00069570
  593.        DO 130 I=1,NEQB                                                  00069580
  594.        XMM=XM(I,1)                                                      00069590
  595.        DO 130 J=1,NV                                                    00069600
  596.   130  VR(I,J)=VL(I,J)*XMM                                              00069610
  597.        WRITE (NT) VR                                                    00069620
  598.        DO 150 I=1,NV                                                    00069630
  599.        DO 150 J=I,NV                                                    00069640
  600.       CALL QVDOT(BRT,VL(1,I),VR(1,J),NEQB,1,1)                          00069650
  601.   150  BR(I,J)=BR(I,J)+BRT                                              00069660
  602.   160  CONTINUE                                                         00069670
  603.        GO TO 1170                                                       00069680
  604.  1100 CONTINUE                                                          00069690
  605.         CALL GDYNIN(VL,NV,NBLOCK,NEQB,N18,NL)                           R0069700
  606.        REWIND N18                                                       00069710
  607.        DO 1130 N=1,NBLOCK                                               00069720
  608.        READ (N18) VL                                                    R0069730
  609.        READ (NR) VR                                                     R0069740
  610.        DO 1120 I=1,NV                                                   00069750
  611.        DO 1120 J=I,NV                                                   00069760
  612.       CALL QVDOT(ART,VL(1,I),VR(1,J),NEQB,1,1)                          00069770
  613.  1120  AR(I,J)=AR(I,J)+ART                                              00069780
  614.  1130  CONTINUE                                                         00069790
  615.       CALL QMBAND(XM,VL,VR(1,1),VR(1,1),VR(1,1),NEQB,MMA,NV,NBLOCK,     R0069800
  616.      1NWMA,NEQ,NMASS,N18,23,41,NT)                                      00069810
  617.       REWIND N18                                                        00069820
  618.       REWIND NT                                                         00069830
  619.       DO  1160 N=1,NBLOCK                                               00069840
  620.       READ (NT) VR                                                      R0069850
  621.       READ (N18) VL                                                     R0069860
  622.        DO  1150 I=1,NV                                                  00069870
  623.        DO  1150 J=I,NV                                                  00069880
  624.       CALL QVDOT(BRT,VL(1,I),VR(1,J),NEQB,1,1)                          00069890
  625.  1150  BR(I,J)=BR(I,J)+BRT                                              00069900
  626.  1160  CONTINUE                                                         00069910
  627.  1170  CONTINUE                                                         00069920
  628.        DO 170 I=1,NV                                                    00069930
  629.        DO 170 J=1,I                                                     00069940
  630.        AR(I,J)=AR(J,I)                                                  00069950
  631.   170  BR(I,J)=BR(J,I)                                                  00069960
  632.        IF (IFPR.EQ.0) GO TO 200                                         00069970
  633.        WRITE (6,480)                                                    00069980
  634.        DO 180 I=1,NV                                                    00069990
  635.   180  WRITE (6,460) (AR(I,J),J=1,NV)                                   00070000
  636.        WRITE (6,490)                                                    00070010
  637.        DO 190 I=1,NV                                                    00070020
  638.   190  WRITE (6,460) (BR(I,J),J=1,NV)                                   00070030
  639.        CALL SECOND (T1)                                                 00070040
  640.   200 CALL JACOBI (AR,BR,VEC,D,VL,NV,TOLJ,IFPR)                         R0070050
  641.       IF(MODEX.EQ.1) RETURN                                             00070060
  642.        DO 240 J=1,NV                                                    00070070
  643.        IF (BR(J,J).GT.0.E0) GO TO 230                                   00070080
  644.        IF(IABS(KDYN).NE.11) GO TO 215                                   00070090
  645.        XMM=DABS(BR(J,J))                                                00070100
  646.        XMM=DSQRT(XMM)                                                   00070110
  647.        GO TO 235                                                        00070120
  648.   215  CONTINUE                                                         00070130
  649.        WRITE (6,540)                                                    00070140
  650.       WRITE (6,480)                                                     00070150
  651.       DO 210 L1=1,NV                                                    00070160
  652.   210 WRITE (6,460) (AR(L1,L2),L2=1,NV)                                 00070170
  653.       WRITE (6,490)                                                     00070180
  654.       DO 220 L1=1,NV                                                    00070190
  655.   220 WRITE (6,460) (BR(L1,L2),L2=1,NV)                                 00070200
  656.       MODEX=1                                                           00070210
  657.       RETURN                                                            00070220
  658.   230  XMM= DSQRT(BR(J,J))                                              00070230
  659.   235 CONTINUE                                                          00070240
  660.        DO 240 K=1,NV                                                    00070250
  661.   240  VEC(K,J)=VEC(K,J)/XMM                                            00070260
  662.        IF (IFPR.EQ.0) GO TO 270                                         00070270
  663.        CALL SECOND (T2)                                                 00070280
  664.        T3=T2 - T1                                                       00070290
  665.        WRITE (6,550) T3                                                 00070300
  666.        WRITE (6,500)                                                    00070310
  667.        WRITE (6,480)                                                    00070320
  668.        DO 250 I=1,NV                                                    00070330
  669.   250  WRITE (6,460) (AR(I,J),J=1,NV)                                   00070340
  670.        WRITE (6,490)                                                    00070350
  671.        DO 260 I=1,NV                                                    00070360
  672.   260  WRITE (6,460) (BR(I,J),J=1,NV)                                   00070370
  673.   270  NV1=NV-1                                                         00070380
  674.       IF(NV1.EQ.0) GO TO 1300                                           00070390
  675.   280  IS=0                                                             00070400
  676.        DO 300 I=1,NV1                                                   00070410
  677.       IF(DABS(D(I+1)).GE.DABS(D(I)))GO TO 300                           00070420
  678.        IS=IS+1                                                          00070430
  679.        BT=BR(I+1,I+1)                                                   00070440
  680.        DT=D(I+1)                                                        00070450
  681.        BR(I+1,I+1)=BR(I,I)                                              00070460
  682.        D(I+1)=D(I)                                                      00070470
  683.        BR(I,I)=BT                                                       00070480
  684.        D(I)=DT                                                          00070490
  685.        DO 290 K=1,NV                                                    00070500
  686.        TEMP=VEC(K,I+1)                                                  00070510
  687.        VEC(K,I+1)=VEC(K,I)                                              00070520
  688.   290  VEC(K,I)=TEMP                                                    00070530
  689.   300  CONTINUE                                                         00070540
  690.        IF (IS.GT.0) GO TO 280                                           00070550
  691.  1300 CONTINUE                                                          00070560
  692.       NFI=1                                                             00070570
  693.       NFF=NF                                                            00070580
  694.       IF(FRINIT.LE.0.0E0) GO TO 304                                     00070590
  695.       IS=0                                                              00070600
  696.       NFHOLD=0                                                          00070610
  697.       DO 301 I=1,NV                                                     00070620
  698.       IF(D(I).LT.FI) IS=IS+1                                            00070630
  699.       IF(D(I).LE.FE) NFHOLD=NFHOLD+1                                    00070640
  700.   301 CONTINUE                                                          00070650
  701.       IF(IS.EQ.0.OR.NFHOLD.EQ.0) GO TO 304                              00070660
  702.       NFI=IS+1                                                          00070670
  703.       NFF=NFHOLD                                                        00070680
  704.   304 CONTINUE                                                          00070690
  705.        DO 320 I=1,NV                                                    00070700
  706.        IF (D(I).GT.0.E0) GO TO 310                                      00070710
  707.       IF(MODEFR.GT.1) GO TO 310                                         00070720
  708.       IF(IABS(KDYN).EQ.11) GO TO 310                                    00070730
  709.        WRITE (6,560)                                                    00070740
  710.       MODEX=1                                                           00070750
  711.       RETURN                                                            00070760
  712.   310  DIF= DABS(DL(I)-D(I))                                            00070770
  713.   320 RTOLV(I)= DABS(DIF/D(I))                                          00070780
  714.       IF(IFPR.EQ.0) GO TO 330                                           00070790
  715.       WRITE (6,510)                                                     00070800
  716.       WRITE (6,460) (RTOLV(I),I=1,NV)                                   00070810
  717.   330 CONTINUE                                                          00070820
  718.       NFHOLD=NF                                                         00070830
  719.       NEND=0                                                            00070840
  720.       IF(MODEFR.GT.1) GO TO 350                                         00070850
  721.        DO 340 L=1,NF                                                    00070860
  722.        IF (D(L).LT.COFQ) GO TO 340                                      00070870
  723.        IF (RTOLV(L).GT.RTOL) GO TO 350                                  00070880
  724.       NFHOLD=L                                                          00070890
  725.        GO TO 350                                                        00070900
  726.   340  CONTINUE                                                         00070910
  727.   350 NF=NFHOLD                                                         00070920
  728.       DO 360 I=NFI,NFF                                                  00070930
  729.        IF (RTOLV(I).GT.RTOL) GO TO 370                                  00070940
  730.   360  CONTINUE                                                         00070950
  731.       IS=NFF-NFI+1                                                      00070960
  732.       IF(MODEFR.GT.1.AND.NITE.LT.NITEM.AND.IS.NE.NF) GO TO 370          00070970
  733.       WRITE (6,520) NF,RTOL                                             00070980
  734.        NITE=NITEM                                                       00070990
  735.        GO TO 380                                                        00071000
  736.   370 IF(NITE.EQ.NITEM-2) IFPR=1                                        00071010
  737.       IF(NITE.LT.NITEM  ) GO TO 400                                     00071020
  738.       WRITE (6,530)                                                     00071030
  739.        IFSS=1                                                           00071040
  740.   380  DO 390 I=1,NV                                                    00071050
  741.       D(I)=D(I)+FRSHFT                                                  00071060
  742.        DL(I)=D(I)                                                       00071070
  743.       IF(IABS(KDYN).EQ.11) GO TO 390                                    00071080
  744.         IF(D(I).LT.0.)WRITE(6,570)I,D(I)                                00071090
  745.         IF(D(I).LT.0.)D(I)=DABS(D(I))                                   00071100
  746.        D(I)= DSQRT(D(I))                                                00071110
  747.   390  CONTINUE                                                         00071120
  748.       IF(MODEFR.LE.1) GO TO 393                                         00071130
  749.       IF(NFF-NFI+1.NE.NF) WRITE(6,391)                                  00071140
  750.   391 FORMAT(//10X,47H--WARNING -- NO. OF EIGENVALUES MAY BE IN ERROR/) 00071150
  751.       NF=NFF-NFI+1                                                      00071160
  752.       IF(NFI.EQ.1) GO TO 393                                            00071170
  753.       NEND=1                                                            00071180
  754.       IS=NFI-1                                                          00071190
  755.       DO 392 I=1,NF                                                     00071200
  756.       M=IS+I                                                            00071210
  757.       DT=D(M)                                                           00071220
  758.       D(M)=D(I)                                                         00071230
  759.       BT=RTOLV(M)                                                       00071240
  760.       RTOLV(M)=RTOLV(I)                                                 00071250
  761.       RTOLV(I)=BT                                                       00071260
  762.       BT=DL(M)                                                          00071270
  763.       DL(M)=DL(I)                                                       00071280
  764.       DL(I)=BT                                                          00071290
  765.   392 D(I)=DT                                                           00071300
  766.   393 CONTINUE                                                          00071310
  767.        M=NT                                                             00071320
  768.        NT=NL                                                            00071330
  769.        NL=M                                                             00071340
  770.        M=NR                                                             00071350
  771.        NR=NL                                                            00071360
  772.        NL=M                                                             00071370
  773.        REWIND NR                                                        00071380
  774.        WRITE (NR) (D(I),I=1,NF)                                         00071390
  775.        GO TO 420                                                        00071400
  776.   400  DO 410 I=1,NV                                                    00071410
  777.   410  DL(I)=D(I)                                                       00071420
  778.        REWIND NR                                                        00071430
  779.   420  REWIND NT                                                        00071440
  780.        DO 450 N=1,NBLOCK                                                00071450
  781.        READ (NT) VR                                                     R0071460
  782.        DO 440 J=1,NV                                                    00071470
  783.        DO 440 I=1,NEQB                                                  00071480
  784.        TEMP=0.0E0                                                       00071490
  785.        DO 430 K=1,NV                                                    00071500
  786.   430  TEMP=TEMP+VR(I,K)*VEC(K,J)                                       00071510
  787.   440  VL(I,J)=TEMP                                                     00071520
  788.       IF(NEND.EQ.0) GO TO 450                                           00071530
  789.       DO 441 K=1,NF                                                     00071540
  790.       M=IS+K                                                            00071550
  791.       DO 441 I=1,NEQB                                                   00071560
  792.       TEMP=VL(I,M)                                                      00071570
  793.       VL(I,M)=VL(I,K)                                                   00071580
  794.   441 VL(I,K)=TEMP                                                      00071590
  795.   450  WRITE (NR) VL                                                    R0071600
  796.        RETURN                                                           00071610
  797.   460  FORMAT (1H ,12E11.4)                                             00071620
  798.   470  FORMAT (1H0,6E20.14)                                             00071630
  799.   480  FORMAT (10H0MATRIX AR )                                          00071640
  800.   490  FORMAT (10H0MATRIX BR )                                          00071650
  801.   500  FORMAT (40H0AR AND BR AFTER JACOBI DIAGONALIZATION  )            00071660
  802.   510 FORMAT (52H0RELATIVE TOLERANCE REACHED ON EIGENVALUES IS NOW    ) 00071670
  803.   520 FORMAT (33H0CONVERGENCE ACHIEVED IN *EIGSOL*, /                   00071680
  804.      $        27H   NUMBER OF EIGENVALUES = , I3 /                      00071690
  805.      $        27H   RELATIVE TOLERANCE    = , E12.4 // 1X)              00071700
  806.   530  FORMAT (52H0WE ACCEPT THE CURRENT EIGENVALUE APPROXIMATIONS     )00071710
  807.   540 FORMAT (37H0***ERROR   SOLUTION STOP IN *EIGSOL*, / 12X,          00071720
  808.      $        39HNEGATIVE DIAGONAL ELEMENT IN MATRIX BR., // 1X)        00071730
  809.   550 FORMAT (28H0TIME FOR JACOBI ITERATION =,F10.4)                    00071740
  810.   560 FORMAT (37H0***ERROR   SOLUTION STOP IN *EIGSOL*, / 12X,          00071750
  811.      $        44HINADMISSIBLE NEGATIVE EIGENVALUE CALCULATED., / 1X)    00071760
  812. 570     FORMAT(19H ***WARNING*** MODE,I5,15H HAS A NEGATIVE,            00071770
  813.      &  13H EIGENVALUE =,E15.5)                                         00071780
  814.       END                                                               00071790
  815.       SUBROUTINE JACOBI (A,B,X,EIGV,D,N,RTOL,IFPR)                      R0122650
  816.       IMPLICIT REAL*8 (A-H,O-Z)                                         00122660
  817.        DIMENSION A(N,N),B(N,N),X(N,N),EIGV(N),D(N)                      00122670
  818.       COMMON /EXTRA/ MODEX,NREXTR(25)                                   R0122680
  819.        NSMAX=15                                                         00122690
  820.       NSWEEP=0                                                          00122700
  821.       IEND=0                                                            00122710
  822.   130  NSWEEP=NSWEEP+1                                                  00122720
  823.           SUMA = 0.0D0                                                  00122730
  824.           SUMB = 0.0D0                                                  00122740
  825.           DO 20 I = 1, N                                                00122750
  826.           DIAGLA = A(I,I)                                               00122760
  827.           DIAGLB = B(I,I)                                               00122770
  828.           IF(DIAGLA .LT. 1.0D-20) GO TO 10                              00122780
  829.           DIAGLA = DLOG10(DIAGLA)                                       00122790
  830.           SUMA = SUMA + DIAGLA                                          00122800
  831.    10     IF(DIAGLB .LT. 1.0D-20) GO TO 20                              00122810
  832.           DIAGLB = DLOG10(DIAGLB)                                       00122820
  833.           SUMB = SUMB + DIAGLB                                          00122830
  834.    20     CONTINUE                                                      00122840
  835.           SUMA = SUMA / N                                               00122850
  836.           SUMB = SUMB / N                                               00122860
  837.           IPWRA = -IDINT(SUMA) - 1                                      00122870
  838.           IPWRB = -IDINT(SUMB) - 1                                      00122880
  839.           CONSTA = 10.0D0**IPWRA                                        00122890
  840.           CONSTB = 10.0D0**IPWRB                                        00122900
  841.           CONST  = CONSTA / CONSTB                                      00122910
  842.           IF(IFPR .NE. 0) WRITE(6, 430) CONSTA, CONSTB, CONST           00122920
  843.           DO 30 I = 1, N                                                00122930
  844.           DO 30 J = 1, N                                                00122940
  845.           A(I, J) = A(I, J)*CONSTA                                      00122950
  846.    30     B(I, J) = B(I, J)*CONSTB                                      00122960
  847.       IF(NSWEEP.GT.1) GO TO 125                                         00122970
  848.        DO 100 I=1,N                                                     00122980
  849.        D(I)=A(I,I)/B(I,I)                                               00122990
  850.   100  EIGV(I)=D(I)                                                     00123000
  851.        DO 120 I=1,N                                                     00123010
  852.        DO 110 J=1,N                                                     00123020
  853.   110  X(I,J)=0.D0                                                      00123030
  854.   120  X(I,I)=1.0D0                                                     00123040
  855.       IF(N.EQ.1) GO TO 382                                              00123050
  856.        NR=N-1                                                           00123060
  857.   125 CONTINUE                                                          00123070
  858.       IF(IFPR.EQ.1)                                                     00123080
  859.      $WRITE (6,390) NSWEEP                                              00123090
  860.        EPS=(0.01E0**NSWEEP)**2                                          00123100
  861.        DO 300 J=1,NR                                                    00123110
  862.        JJ=J+1                                                           00123120
  863.        DO 300 K=JJ,N                                                    00123130
  864.        TT=A(J,K)*A(J,K)                                                 00123140
  865.        TB=A(J,J)*A(K,K)                                                 00123150
  866.        EPTOLA= DABS(TT/TB)                                              00123160
  867.        TT=B(J,K)*B(J,K)                                                 00123170
  868.        TB=B(J,J)*B(K,K)                                                 00123180
  869.        EPTOLB=TT/TB                                                     00123190
  870.        IF ((EPTOLA.LT.EPS).AND.(EPTOLB.LT.EPS)) GO TO 300               00123200
  871.        AKK=A(K,K)*B(J,K)-B(K,K)*A(J,K)                                  00123210
  872.        AJJ=A(J,J)*B(J,K)-B(J,J)*A(J,K)                                  00123220
  873.        AB=A(J,J)*B(K,K)-A(K,K)*B(J,J)                                   00123230
  874.        CHECK=(AB*AB+4.0E0*AKK*AJJ)/4.0E0                                00123240
  875.       IF (CHECK) 140,140,150                                            00123250
  876.   140 WRITE (6,410) CHECK                                               00123260
  877.       MODEX=1                                                           00123270
  878.       RETURN                                                            00123280
  879.   150  SQCH= DSQRT(CHECK)                                               00123290
  880.        D1=AB/2.0E0+SQCH                                                 00123300
  881.        D2=AB/2.0E0-SQCH                                                 00123310
  882.        DEN=D1                                                           00123320
  883.        IF ( DABS(D2).GT. DABS(D1)) DEN=D2                               00123330
  884.        IF (DEN) 170,160,170                                             00123340
  885.   160  CA=0.E0                                                          00123350
  886.        CG=-A(J,K)/A(K,K)                                                00123360
  887.        GO TO 180                                                        00123370
  888.   170  CA=AKK/DEN                                                       00123380
  889.        CG=-AJJ/DEN                                                      00123390
  890.   180  IF (N-2) 190,280,190                                             00123400
  891.   190  JP1=J+1                                                          00123410
  892.        JM1=J-1                                                          00123420
  893.        KP1=K+1                                                          00123430
  894.        KM1=K-1                                                          00123440
  895.        IF (JM1-1) 220,200,200                                           00123450
  896.   200  DO 210 I=1,JM1                                                   00123460
  897.        AJ=A(I,J)                                                        00123470
  898.        BJ=B(I,J)                                                        00123480
  899.        AK=A(I,K)                                                        00123490
  900.        BK=B(I,K)                                                        00123500
  901.        A(I,J)=AJ+CG*AK                                                  00123510
  902.        B(I,J)=BJ+CG*BK                                                  00123520
  903.        A(I,K)=AK+CA*AJ                                                  00123530
  904.   210  B(I,K)=BK+CA*BJ                                                  00123540
  905.   220  IF (KP1-N) 230,230,250                                           00123550
  906.   230  DO 240 I=KP1,N                                                   00123560
  907.        AJ=A(J,I)                                                        00123570
  908.        BJ=B(J,I)                                                        00123580
  909.        AK=A(K,I)                                                        00123590
  910.        BK=B(K,I)                                                        00123600
  911.        A(J,I)=AJ+CG*AK                                                  00123610
  912.        B(J,I)=BJ+CG*BK                                                  00123620
  913.        A(K,I)=AK+CA*AJ                                                  00123630
  914.   240  B(K,I)=BK+CA*BJ                                                  00123640
  915.   250  IF (JP1-KM1) 260,260,280                                         00123650
  916.   260  DO 270 I=JP1,KM1                                                 00123660
  917.        AJ=A(J,I)                                                        00123670
  918.        BJ=B(J,I)                                                        00123680
  919.        AK=A(I,K)                                                        00123690
  920.        BK=B(I,K)                                                        00123700
  921.        A(J,I)=AJ+CG*AK                                                  00123710
  922.        B(J,I)=BJ+CG*BK                                                  00123720
  923.        A(I,K)=AK+CA*AJ                                                  00123730
  924.   270  B(I,K)=BK+CA*BJ                                                  00123740
  925.   280  AK=A(K,K)                                                        00123750
  926.        BK=B(K,K)                                                        00123760
  927.        A(K,K)=AK+2*CA*A(J,K)+CA*CA*A(J,J)                               00123770
  928.        B(K,K)=BK+2*CA*B(J,K)+CA*CA*B(J,J)                               00123780
  929.        A(J,J)=A(J,J)+2*CG*A(J,K)+CG*CG*AK                               00123790
  930.        B(J,J)=B(J,J)+2*CG*B(J,K)+CG*CG*BK                               00123800
  931.        A(J,K)=0.0E0                                                     00123810
  932.        B(J,K)=0.0E0                                                     00123820
  933.        DO 290 I=1,N                                                     00123830
  934.        XJ=X(I,J)                                                        00123840
  935.        XK=X(I,K)                                                        00123850
  936.        X(I,J)=XJ+CG*XK                                                  00123860
  937.   290  X(I,K)=XK+CA*XJ                                                  00123870
  938.   300  CONTINUE                                                         00123880
  939.        DO 310 I=1,N                                                     00123890
  940.   310  EIGV(I)=A(I,I)/B(I,I)                                            00123900
  941.       IF(IFPR.EQ.0) GO TO 320                                           00123910
  942.       WRITE (6,420)                                                     00123920
  943.       WRITE (6,400) (EIGV(I),I=1,N)                                     00123930
  944.   320 CONTINUE                                                          00123940
  945.        DO 330 I=1,N                                                     00123950
  946.        TOL=RTOL*D(I)                                                    00123960
  947.        DIF= DABS(EIGV(I)-D(I))                                          00123970
  948.        IF (DIF.GT.TOL) GO TO 360                                        00123980
  949.   330 CONTINUE                                                          00123990
  950.        EPS=RTOL**2                                                      00124000
  951.       IEND=0                                                            00124010
  952.        DO 340 J=1,NR                                                    00124020
  953.        JJ=J+1                                                           00124030
  954.        DO 340 K=JJ,N                                                    00124040
  955.        TT=A(J,K)*A(J,K)                                                 00124050
  956.        TB=A(J,J)*A(K,K)                                                 00124060
  957.        EPSA= DABS(TT/TB)                                                00124070
  958.        TT=B(J,K)*B(J,K)                                                 00124080
  959.        TB=B(J,J)*B(K,K)                                                 00124090
  960.        EPSB=TT/TB                                                       00124100
  961.        IF ((EPSA.LT.EPS).AND.(EPSB.LT.EPS)) GO TO 340                   00124110
  962.        GO TO 360                                                        00124120
  963.   340  CONTINUE                                                         00124130
  964.        DO 350 I=1,N                                                     00124140
  965.        DO 350 J=I,N                                                     00124150
  966.        B(J,I)=B(I,J)                                                    00124160
  967.   350  A(J,I)=A(I,J)                                                    00124170
  968.       IEND=1                                                            00124180
  969.           GO TO 382                                                     00124190
  970.   360  DO 370 I=1,N                                                     00124200
  971.   370  D(I)=EIGV(I)                                                     00124210
  972.        IF (NSWEEP.LT.NSMAX) GO TO 1340                                  00124220
  973.        DO 380 I=1,N                                                     00124230
  974.        DO 380 J=I,N                                                     00124240
  975.        B(J,I)=B(I,J)                                                    00124250
  976.   380  A(J,I)=A(I,J)                                                    00124260
  977.  1340 CONTINUE                                                          00124270
  978.   382     CONTINUE                                                      00124280
  979.           RCA = 1.0D0 / CONSTA                                          00124290
  980.           RCB = 1.0D0 / CONSTB                                          00124300
  981.           RC  = 1.0D0 / CONST                                           00124310
  982.           DO 386 J = 1, N                                               00124320
  983.           DO 384 I = 1, N                                               00124330
  984.           A(I,J) = A(I,J) * RCA                                         00124340
  985.           B(I,J) = B(I,J) * RCB                                         00124350
  986.   384     CONTINUE                                                      00124360
  987.           D(J) = D(J) * RC                                              00124370
  988.           EIGV(J) = EIGV(J) * RC                                        00124380
  989.   386     CONTINUE                                                      00124390
  990.           IF(IFPR .EQ. 1) WRITE(6,440) NSWEEP, (EIGV(I), I=1,N)         00124400
  991.       IF(IEND.EQ.1) RETURN                                              00124410
  992.       IF(N.EQ.1) RETURN                                                 00124420
  993.       IF(NSWEEP.LT.NSMAX) GO TO 130                                     00124430
  994.           RETURN                                                        00124440
  995.   390 FORMAT (27H0SWEEP NUMBER IN *JACOBI* =, I4)                       00124450
  996.   400  FORMAT (1H ,12E11.4)                                             00124460
  997.   410 FORMAT (37H0***ERROR   SOLUTION STOP IN *JACOBI*, / 12X,          00124470
  998.      $        8HCHECK = , E20.14 / 1X)                                  00124480
  999.   420 FORMAT (36H0CURRENT EIGENVALUES IN *JACOBI* ARE, / 1X)            00124490
  1000.   430   FORMAT (//5X,28HMATRICES SCALING FACTORS  A:, D12.4,            00124500
  1001.      *     5H   B:, D12.4, 9H   RATIO:, D12.4)                          00124510
  1002.   440     FORMAT(1X, 5HAFTER,I3, 34H SWEEP IN *JACOBI* THE EIGENVALUES, 00124520
  1003.      *     4H ARE,/ (1H ,10D13.4) )                                     00124530
  1004.       END                                                               00124540
  1005.       SUBROUTINE SCHECK (         A,XM,BUP,BLO,BUPC,NEIV,NWA,NEQB,      R0224420
  1006.      $NBLOCK,NF,NV,SHIFT,NEI,IFPR,RTOL,NWMA)                            00224430
  1007.       IMPLICIT REAL*8 (A-H,O-Z)                                         00224440
  1008.       COMMON /EXTRA/ MODEX,NREXTR(25)                                   R0224450
  1009.       COMMON /MASS/ LMASS                                               00224460
  1010.       COMMON /SQZ/ ISQZ,NRSQZ(5)                                        R0224470
  1011.        COMMON /TAPES/NSTIF,NRED,NL,NR,NT,NMASS                          00224480
  1012.       COMMON /AAA2/ DL(200),RTOLV(200)                                  R0224481
  1013.        DIMENSION A(NWA),XM(NWMA),BUP(NV),BLO(NV),BUPC(NV)               R0224490
  1014. CC   $RTOLV(NV)                                                         R0224500
  1015.        INTEGER NEIV(NV)                                                 00224510
  1016.        FTOL=1.0E-02                                                     00224520
  1017.       FTOL1=1.0E0+FTOL                                                  00224530
  1018.       FTOL2=1.0E0-FTOL                                                  00224540
  1019.        DO 100 I=1,NV                                                    00224550
  1020.       BUP(I)=DL(I)*FTOL1                                                00224560
  1021.   100 BLO(I)=DL(I)*FTOL2                                                00224570
  1022.        NROOT=0                                                          00224580
  1023.        DO 110 I=1,NF                                                    00224590
  1024.   110  IF (RTOLV(I).LT.RTOL) NROOT=NROOT+1                              00224600
  1025.        IF (NROOT.GE.1) GO TO 120                                        00224610
  1026.       WRITE (6,290)                                                     00224620
  1027.       MODEX=1                                                           00224630
  1028.       RETURN                                                            00224640
  1029.   120  DO 130 I=1,NROOT                                                 00224650
  1030.   130  NEIV(I)=1                                                        00224660
  1031.        IF (NROOT.NE.1) GO TO 140                                        00224670
  1032.        BUPC(1)=BUP(1)                                                   00224680
  1033.        LM=1                                                             00224690
  1034.        L=1                                                              00224700
  1035.        I=2                                                              00224710
  1036.        GO TO 180                                                        00224720
  1037.   140  L=1                                                              00224730
  1038.        I=2                                                              00224740
  1039.   150  IF (BUP(I-1).LE.BLO(I)) GO TO 160                                00224750
  1040.        NEIV(L)=NEIV(L)+1                                                00224760
  1041.        I=I+1                                                            00224770
  1042.        IF (I.LE.NROOT) GO TO 150                                        00224780
  1043.   160  BUPC(L)=BUP(I-1)                                                 00224790
  1044.        IF (I.GT.NROOT) GO TO 170                                        00224800
  1045.        L=L+1                                                            00224810
  1046.        I=I+1                                                            00224820
  1047.        IF (I.LE.NROOT) GO TO 150                                        00224830
  1048.        BUPC(L)=BUP(I-1)                                                 00224840
  1049.   170  LM=L                                                             00224850
  1050.   180  IF (BUP(I-1).LE.BLO(I)) GO TO 190                                00224860
  1051.        IF (RTOLV(I).GT.RTOL) GO TO 190                                  00224870
  1052.        BUPC(L)=BUP(I)                                                   00224880
  1053.        NEIV(L)=NEIV(L)+1                                                00224890
  1054.        NROOT=NROOT+1                                                    00224900
  1055.        IF (NROOT.EQ.NV) GO TO 190                                       00224910
  1056.        I=I+1                                                            00224920
  1057.        GO TO 180                                                        00224930
  1058.   190 WRITE (6,300)                                                     00224940
  1059.       WRITE (6,270) (BUPC(I),I=1,LM)                                    00224950
  1060.       WRITE (6,310)                                                     00224960
  1061.       WRITE (6,280) (NEIV(I),I=1,LM)                                    00224970
  1062.        LL=LM-1                                                          00224980
  1063.        IF (LM.EQ.1) GO TO 220                                           00224990
  1064.   200  DO 210 I=1,LL                                                    00225000
  1065.   210  NEIV(L)=NEIV(L)+NEIV(I)                                          00225010
  1066.        L=L-1                                                            00225020
  1067.        LL=LL-1                                                          00225030
  1068.        IF (L.NE.1) GO TO 200                                            00225040
  1069.       WRITE (6,320)                                                     00225050
  1070.       WRITE (6,280) (NEIV(I),I=1,LM)                                    00225060
  1071.   220  DO 230 I=1,LM                                                    00225070
  1072.        IF (NEIV(I).GE.NROOT) GO TO 240                                  00225080
  1073.   230  CONTINUE                                                         00225090
  1074.   240  SHIFT=BUPC(I)                                                    00225100
  1075.        NEI=NEIV(I)                                                      00225110
  1076.       CALL RDWRT(NRED ,A,1,6,I)                                         00225120
  1077.       CALL RDWRT(NSTIF,A,1,6,I)                                         00225130
  1078.        REWIND NMASS                                                     00225140
  1079.        DO 260 L=1,NBLOCK                                                00225150
  1080.       CALL EXPAND(A,NWA,NSTIF)                                          00225160
  1081.        READ (NMASS) XM                                                  00225170
  1082.       LBKS=4*NWMA                                                       00225180
  1083.       LRDS=4*(NWMA+NEQB)                                                00225190
  1084.        IF(LMASS.EQ.1) GO TO 250                                         00225200
  1085.       CALL QMR2(A,A,SHIFT,XM,NEQB,1,1,1)                                00225210
  1086.       GO TO 255                                                         00225220
  1087.   250 CALL QMR3(A,A,SHIFT,XM,NEQB,1,1,1,NWA)                            00225230
  1088.   255 CONTINUE                                                          00225240
  1089.       CALL SQEEZE(A,NWA,NRED,ISQZ )                                     00225250
  1090.   260  CONTINUE                                                         00225260
  1091.        I=NSTIF                                                          00225270
  1092.        NSTIF=NRED                                                       00225280
  1093.        NRED=I                                                           00225290
  1094.        RETURN                                                           00225300
  1095.   270  FORMAT (1H0,6E22.14)                                             00225310
  1096.   280  FORMAT (1H0,6I22)                                                00225320
  1097.   290 FORMAT (37H0***ERROR   SOLUTION STOP IN *SCHECK*, / 12X,          00225330
  1098.      $        21HNO EIGENVALUES FOUND., / 1X)                           00225340
  1099.   300  FORMAT (37H0UPPER BOUNDS ON EIGENVALUE CLUSTERS  )               00225350
  1100.   310  FORMAT (34H0NO OF EIGENVALUES IN EACH CLUSTER  )                 00225360
  1101.   320  FORMAT (42H0NO OF EIGENVALUES LESS THAN UPPER BOUNDS  )          00225370
  1102.       END                                                               00225380
  1103.