File: read4.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (153 lines) | stat: -rw-r--r-- 4,420 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
153
      SUBROUTINE READ4 (LAMA,PHI,SCR1,EPS,MASS)
C
C     READ4 WILL TEST FOR CLOSE AND EQUAL ROOTS AND MAKE SURE THE
C     CORRESPONDING VECTORS ARE ORTHOGONAL
C
      INTEGER          NAME(2)   ,PHI(7)   ,RSP      ,PHI1(7)
      INTEGER          RDREW     ,WRTREW
CWKBI ALPHA-OSF 9/94      
      INTEGER          SCR1
      DOUBLE PRECISION DZ(1)
      CHARACTER        UFM*23    ,UWM*25
      COMMON /XMSSG /  UFM       ,UWM
      COMMON /ZZZZZZ/  Z(1)
      COMMON /SYSTEM/  KSYSTM(65)
      COMMON /NAMES /  RD        ,RDREW    ,WRT      ,WRTREW   ,
     1                 REW       ,NOREW    ,EOFNRW   ,RSP
      COMMON /UNPAKX/  ITYPE     ,IUNPAK   ,JUNPAK   ,INCR
      COMMON /PACKX /  ITYPA     ,ITYPB    ,IPAK     ,JPAK     ,
     1                 INCRX
      EQUIVALENCE      (KSYSTM(1),ISYS)    ,(KSYSTM(2),IOUT)   ,
     1                 (DZ(1),Z(1))
      DATA    NAME  /  4HREAD,4H4   /
C
      NCOL  = PHI(2)
      NROW  = PHI(3)
      NZ    = KORSZ(Z)
      IBUF  = NZ - ISYS
      IBUF1 = IBUF - ISYS
      IBUF2 = IBUF1 - ISYS
      ICLOS = 0
      IDID  = 0
      IPR   = PHI(5)
      RMULT = .01
      ITYPE = RSP
      IUNPAK= 1
      JUNPAK= NROW
      INCR  = 1
      ITYPA = RSP
      ITYPB = RSP
      IPAK  = 1
      JPAK  = NROW
      INCRX = 1
      EPSI  = EPS
      IF (EPS .LE. 0.) EPSI = .0001
      NZ = NZ - ISYS - ISYS - 1 - ISYS
      CALL MAKMCB (PHI1,SCR1,NROW,2,RSP)
      IFILE = LAMA
      CALL GOPEN (LAMA,Z(IBUF),0)
      CALL READ (*170,*10,LAMA,Z(1),NZ,1,N)
      GO TO 180
   10 CALL CLOSE (LAMA,REW)
C
C     REJECT ALL BUT VALUES FOR WHICH VECTORS EXIST
C
      N  = PHI(2)
      NZ = NZ -N
      IF (NZ .LT. NROW) GO TO 180
      IFILE = PHI(1)
      CALL GOPEN (PHI,Z(IBUF),0)
      IPOS = 1
      I    = 1
      EPS1 = RMULT
   20 CONTINUE
      IF (ABS(Z(I))+ABS(Z(I+1)) .LT. EPS1) GO TO 1111
      IF (Z(I+1) .EQ. 0.0) GO TO 110
      IF (ABS(1.0-Z(I)/Z(I+1)) .GT. EPS1) GO TO 100
 1111 IF (ICLOS .NE. 0) GO TO 110
      ICLOS = I
      GO TO 110
   30 NUM  = I - ICLOS + 1
      EPS1 = RMULT
C
C     NUM   = NUMBER OF CLOSE ROOTS IN THIS GROUP
C     ICLOS = THE INDEX OF THE FIRST CLOSE ROOT
C
      IF (IDID .EQ. 1) GO TO 40
      IDID  = 1
      IFILE = SCR1
      CALL GOPEN (SCR1,Z(IBUF1),WRTREW)
   40 II = N + 1
   50 IF (IPOS .EQ. ICLOS) GO TO 70
      IFILE = PHI(1)
      CALL UNPACK (*190,PHI,Z(II))
      CALL PACK (Z(II),SCR1,PHI1)
      IPOS = IPOS + 1
      GO TO 50
   70 CONTINUE
C
C     CHECK FOR CORE OVERFLOW
C     EIGENVALUES + EIGENVECTORS + GEN. MASS + ACCUM.
C
      KORE = II + NUM*NROW + NUM*NUM + N + N + 3
      IF (KORE .GT. NZ) GO TO 160
      DO 80 J = 1,NUM
      CALL UNPACK (*190,PHI,Z(II))
      IPOS = IPOS + 1
      II   = II + NROW
      IF (II+NROW .GE. NZ) GO TO 180
   80 CONTINUE
      IJ = II + N + N + 3
      II = II/2 + 1
      CALL ORTCK (Z(N+1),MASS,Z(IBUF2),NUM,NROW,Z(IJ),DZ(II),EPSI)
      II = N + 1
      DO 90 J = 1,NUM
      CALL PACK (Z(II),SCR1,PHI1)
   90 II = II + NROW
      ICLOS = 0
  100 IF (ICLOS .NE. 0) GO TO 30
  110 I = I + 1
      IF (I     .LT.   N) GO TO 20
      IF (ICLOS .NE.   0) GO TO 30
      IF (IDID  .EQ.   0) GO TO 150
      IF (IPOS .GT. NCOL) GO TO 121
      DO 120 I = IPOS,NCOL
      CALL UNPACK (*190,PHI,Z)
      CALL PACK (Z(1),SCR1,PHI1)
  120 CONTINUE
  121 CALL WRTTRL (PHI1)
C
C     COPY VECTORS FROM SCR1 TO PHI
C
      CALL CLOSE (PHI,REW)
      CALL CLOSE (SCR1,REW)
      CALL GOPEN (PHI,Z(IBUF),1)
      CALL GOPEN (SCR1,Z(IBUF1),RDREW )
      CALL MAKMCB (PHI,PHI,NROW,2,IPR)
      ITYPB = IPR
      DO 140 I = 1,N
      CALL UNPACK (*190,SCR1,Z)
      CALL PACK (Z,PHI,PHI)
  140 CONTINUE
      CALL WRTTRL (PHI)
      CALL CLOSE (SCR1,REW)
  150 CALL CLOSE (PHI,REW)
      RETURN
C
  160 EPS2 = EPS1/10.
      WRITE  (IOUT,165) UWM,NUM,I,EPS1,EPS2
  165 FORMAT (A25,' 3142, INSUFFICIENT CORE STORAGE FOR EIGENVECTORS ',
     1       'ASSOCIATED WITH',I4,' MULTIPLE EIGENVALUES STARTING WITH',
     2       /28X,'MODE NUMBER',I4,' USING CURRENT MULTIPLE ROOT ',
     3       'CRITERIA. CRITERIA REDUCED FROM ',1P,E12.5,' TO ',E12.5)
      EPS1 = EPS2
      I = ICLOS
      GO TO 20
  170 NO = -2
      GO TO 200
  180 NO = -8
      GO TO 200
  190 NO = -7
  200 CALL MESAGE (NO,IFILE,NAME)
      RETURN
      END