1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
SUBROUTINE WAVEY (IG,ILD,NEW,NC,IC,KACT,MAXB,MAXW,AVERW,SUMW,
1 RMS,BRMS,JG)
C
C THIS ROUTINE IS USED ONLY IN BANDIT MODULE
C
C COMPUTE WAVEFRONT AND ACTIVE COLUMN DATA -
C MAXIMUM WAVEFRONT, AVERAGE WAVEFRONT, SUM OF ROW WAVEFRONTS,
C SUM OF SQUARES OF ROW WAVEFRONTS, RMS WAVEFRONT, AND BANDWIDTH,
C RMS BANDWIDTH, AND MINIMUM NODAL DEGREE.
C DIAGONAL TERMS ARE INCLUDED.
C
C IG = CONNECTION TABLE
C ILD(I) = NEW LABEL FOR NODE WITH ORIGINAL INTERNAL LABEL I
C NEW(I) = INTERNAL LABEL CORRESPONDING TO NEW LABEL I
C NEW AND ILD ARE INVERSES OF EACH OTHER
C NC = COMPONENT ID
C IF NC.LE.0, USE ALL COMPONENTS.
C IC(I) = COMPONENT INDEX FOR ORIGINAL NODE I.
C KACT(I)= LIST OF ACTIVE COLUMN FLAGS (UPDATED FOR EACH ROW)
C = 1 IF COL I IS ACTIVE AT GIVEN ROW
C MAXB = BANDWIDTH
C MAXW = MAXIMUM WAVEFRONT
C AVERW = AVERAGE WAVEFRONT
C SUMW = SUM OF ROW WAVEFRONTS
C SUMSQ = SUM OF SQUARES OF ROW WAVEFRONTS
C BSUMSQ = SUM OF SQUARES OF ROW BANDWIDTHS
C RMS = RMS WAVEFRONT
C BRMS = RMS BANDWIDTH
C JG = SCRATCH SPACE FOR BUNPAK
C NN = NUMBER OF NODES
C MM = MAX NODAL DEGREE
C MINDEG = MINIMUM NODAL DEGREE
C
C INPUT - IG,ILD,NN,MM,NC,IC.
C OUTPUT - NEW,KACT,MAXW,AVERW,SUMW,RMS,MAXB,BRMS,MINDEG
C
INTEGER SUMW
DOUBLE PRECISION SUMSQ, BSUMSQ
DIMENSION IC(1), ILD(1), NEW(1), KACT(1), IG(1),
1 JG(1)
COMMON /BANDS / NN, MM, DUM6S(6), MINDEG
C
C INITIALIZE WAVEFRONT DATA.
C
MAXB = 0
MAXW = 0
SUMW = 0
SUMSQ = 0.D0
BSUMSQ= 0.D0
AVERW = 0.
RMS = 0.
MINDEG= MIN0(MINDEG,MM)
IF (NN*MM .LE. 0) RETURN
C
C INITIALIZE NEW, THE INVERSE OF ILD
C
IF (NC .GT. 0) GO TO 8
DO 5 I = 1,NN
K = ILD(I)
IF (K .LE. 0) GO TO 5
NEW(K) = I
5 CONTINUE
C
C INITIALIZE ACTIVE COLUMN FLAGS (1 FOR ACTIVE)
C
8 DO 10 I = 1,NN
10 KACT(I) = 0
C
C COMPUTE WAVEFRONT DATA.
C
IWAVE = 1
KT = 0
DO 40 I = 1,NN
C
C COMPUTE NUMBER OF ACTIVE COLUMNS FOR ROW I
C
K = NEW(I)
IF (NC) 18,18,15
15 IF (K .LE. 0) GO TO 40
IF (NC-IC(K)) 40,18,40
18 KT = KT + 1
CALL BUNPAK(IG,K,MM,JG)
IB = 0
DO 20 J = 1,MM
L = JG(J)
IF (L .EQ. 0) GO TO 30
M = ILD(L)
IB = MAX0(IB,I-M)
IF (M .LE. I) GO TO 20
IF (KACT(M) .EQ. 1) GO TO 20
IWAVE = IWAVE + 1
KACT(M) = 1
20 CONTINUE
GO TO 35
30 CONTINUE
MINDEG = MIN0(MINDEG,J-1)
35 CONTINUE
C
C IB1 = ROW BANDWIDTH FOR ROW I (DIAGONAL INCLUDED)
C
IB1 = IB + 1
MAXB = MAX0(MAXB,IB1)
IF (KACT(I) .EQ. 1) IWAVE = IWAVE - 1
C
C IWAVE = CURRENT NUMBER OF ACTIVE COLUMNS FOR ROW I
C (DIAGONAL INCLUDED)
C
MAXW = MAX0(MAXW,IWAVE)
SUMW = SUMW + IWAVE
WAVE = FLOAT(IWAVE)
SUMSQ = SUMSQ + WAVE*WAVE
WAVE = FLOAT(IB1)
BSUMSQ= BSUMSQ + WAVE*WAVE
C
40 CONTINUE
C
ANN = FLOAT(KT)
AVERW = FLOAT(SUMW)/ANN
RMS = SQRT(SNGL( SUMSQ)/ANN)
BRMS = SQRT(SNGL(BSUMSQ)/ANN)
RETURN
END
|