File: read3.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 (152 lines) | stat: -rw-r--r-- 4,304 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
      SUBROUTINE READ3 (NOVECT,NCOL,SR1FIL,SR2FIL,FILC,KDBLM)
C
C     READ3 PACKS THE EIGENVECTORS AND EIGENVALUES AND PUTS THEM OUT IN
C     ASCENDING ORDER
C
C     LAST REVISED  1/92, BY G.CHAN/UNISYS
C     ZERO OUT RIGID BODY FREQUENCIES IF METHOD IS 'FEER' (NOT 'FEER-X'
C     NOR 'FEER-Q')
C
      INTEGER            SYSBUF    ,IZ(1)    ,RSP      ,RDP      ,
     1                   FILELM    ,FILEVC   ,SR1FIL   ,SR2FIL   ,
     2                   FILC      ,OPTION   ,OPTN2    ,FEER     ,
     3                   DASHZ     ,STURM
      INTEGER            RDREW
      DOUBLE PRECISION   DXX(2)
      DIMENSION          NAM(2)    ,FILEVC(7),FILELM(7)
      COMMON   /ZZZZZZ/  Z(1)
      COMMON   /STURMX/  STURM     ,SHFTPT
      COMMON   /REIGKR/  OPTION    ,OPTN2
      COMMON   /SYSTEM/  SYSBUF    ,NOUT     ,SYSTM(52),IPREC
      COMMON   /NAMES /  RD        ,RDREW    ,WRT      ,WRTREW   ,
     1                   REW       ,NOREW    ,EOFNRW   ,RSP      ,
     2                   RDP
      COMMON   /PACKX /  ITYPA     ,ITYPB    ,IPAK     ,JPAK     ,
     1                   INCR
      COMMON   /UNPAKX/  ITYPU     ,IUNP     ,JUNP     ,INCRU
      EQUIVALENCE        (IZ(1),Z(1))
      DATA      FEER  ,  DASHZ /4HFEER,   4H-X   /
      DATA      NAM   /  4HREAD,4H3   /,  I2 / 2 /
C
C     FILELM (=KDBLM=LAMA=201) WILL HOLD THE EIGENVALUES  UPON RETURN
C     FILEVC (=FILC =PHIA=202) WILL HOLD THE EIGENVECTORS UPON RETURN
C
      FILELM(1) = KDBLM
      FILEVC(1) = FILC
      ITYPA = RSP
      ITYPB = RSP
      INCR  = 1
      IPAK  = 1
      JPAK  = NCOL
      NCOL2 = IPREC*NCOL
      ITYPU = RSP
      INCRU = 1
      NOCL  = 2*NCOL + 2
      NZ    = KORSZ(Z)
      IBUF1 = NZ    - SYSBUF
      IBUF2 = IBUF1 - SYSBUF
C
C     READ IN ALL EIGENVALUES
C
      IFILE = SR1FIL
      CALL GOPEN (SR1FIL,Z(IBUF1),RDREW)
      I = 1
   10 CALL FREAD (SR1FIL,DXX,IPREC,1)
      Z(I+1) = DXX(1)
      I = I + 1
      IF (I .LE. NOVECT) GO TO 10
      CALL CLOSE (SR1FIL,REW)
C
C     SET UP AN INDEX VECTOR AND SORT THE EIGENVALUES
C
      J = NCOL + 2
      K = J + NCOL - 1
      II = 1
      DO 20 I = J,K
      IZ(I) = II
   20 II = II + 1
      Z(1) = Z(I2)
      J = 2
      K = J + NOVECT - 1
      DO 25 I = J,K
      IF (Z(I) .LT. Z(1)) Z(1) = Z(I)
   25 CONTINUE
      DO 40 I = 1,NOVECT
      K = I
   30 IF (Z(K+1) .GE. Z(K)) GO TO 40
      ZZ     = Z(K  )
      Z(K  ) = Z(K+1)
      Z(K+1) = ZZ
      J  = K + NCOL
      II = IZ(J)
      IZ(J  ) = IZ(J+1)
      IZ(J+1) = II
      K = K - 1
      GO TO 30
   40 CONTINUE
C
C     ZERO OUT RIGID BODY EIGENVALUES IF THEY ARE PRESENT AND METHOD IS
C     'FEER-Z'
C     I.E. ZERO FREQUENCIES BELOW PTSHFT AND KEEP, AS CHECKED BY STURM
C     SEQUENCE
C
      IF (STURM .LT. 0) GO TO 45
      DO 43 I = 2,NOVECT
      IK = I + STURM
      IF (Z(IK).GE.SHFTPT .OR. IK.GT.NOVECT) GO TO 45
      IF (Z(I).LT.0. .AND. OPTION.EQ.FEER .AND. OPTN2.EQ.DASHZ) Z(I)= 0.
   43 CONTINUE
C
C     READ THE EIGENVECTORS AND PACK THEM IN ASCENDING ORDER
C
   45 CALL GOPEN (FILEVC,Z(IBUF1),1)
      IFILE = SR2FIL
      CALL GOPEN (SR2FIL,Z(IBUF2),RDREW)
      IPOS = 1
      CALL MAKMCB (FILEVC(1),FILC,NCOL,2,RSP)
C
      DO 110 I = 1,NOVECT
      K  = I + NCOL + 1
      NO = IZ(K)
      IF (NO-IPOS) 50,80,70
   50 CALL REWIND (SR2FIL)
      IPOS = NO
      IF (NO .LE. 0) GO TO 120
   60 CALL SKPREC (SR2FIL,NO)
      GO TO 80
   70 NO   = NO - IPOS
      IPOS = IPOS + NO
      GO TO 60
   80 IUNP = 0
      CALL UNPACK (*90,SR2FIL,Z(NOCL))
      IPOS = IPOS + 1
      IPAK = IUNP
      JPAK = JUNP
      GO TO 100
   90 IPAK = 1
      JPAK = 1
      Z(NOCL) = 0.0
  100 CALL PACK (Z(NOCL),FILEVC,FILEVC)
  110 CONTINUE
C
      CALL CLOSE  (FILEVC(1),REW)
      CALL CLOSE  (SR2FIL,REW)
      CALL WRTTRL (FILEVC)
C
C     OUTPUT THE EIGENVALUES, 1ST DATA RECORD
C
      CALL GOPEN (FILELM,Z(IBUF1),1)
      CALL WRITE (FILELM,Z(I2),NOVECT,1)
C
C     SAVE ORDER FOUND IN 2ND DATA RECORD
C
      CALL WRITE (FILELM,IZ(NCOL+2),NOVECT,1)
      CALL CLOSE (FILELM(1),REW)
      FILELM(2) = NOVECT
      CALL WRTTRL (FILELM)
      RETURN
C
  120 CALL MESAGE (-7,FILE,NAM)
      RETURN
C
      END