File: wavey.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, sid
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (122 lines) | stat: -rw-r--r-- 3,427 bytes parent folder | download | duplicates (2)
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