File: vec.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 (301 lines) | stat: -rw-r--r-- 9,475 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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
      SUBROUTINE VEC
C
C     THE CALL TO THIS MODULE IS
C                   VEC USET  / V / C,N,X / C,N,X0 / C,N,X1 $
C          OR       VEC USETD / V / C,N,X / C,N,X0 / C,N,X1 $
C
C     ALTERNATE FORM OF THE CALL TO THIS MODULE IS
C                   VEC USET  / V / C,N,X / C,N,X0 / C,N,COMP $
C          OR       VEC USETD / V / C,N,X / C,N,X0 / C,N,COMP $
C
C     ALTERNATE FORM OF THE CALL TO THIS MODULE IS
C                   VEC USET  / V / C,N,X / C,N,COMP / C,N,X1 $
C          OR       VEC USETD / V / C,N,X / C,N,COMP / C,N,X1 $
C
C     ALTERNATE FORM OF THE CALL TO THIS MODULE IS
C                   VEC USET  / V / C,N,BITID / C,N,* / C,N,* / C,N,I $
C          OR       VEC USET  / V / C,N,BITID / C,N,X1 $
C          OR       VEC USETD / V / C,N,BITID / C,N,* / C,N,* / C,N,I $
C          OR       VEC USETD / V / C,N,BITID / C,N,X1 $
C
C     ALTERNATE FORM OF THE CALL TO THIS MODULE IS
C                   VEC USET  / V / C,N,COLUMNS / C,N,LEFT  / C,N,* /
C                                                             C,N,I $
C          OR       VEC USETD / V / C,N,COLUMNS / C,N,LEFT  / C,N,* /
C                                                             C,N,I $
C                   ( V WILL HAVE -I- COLUMNS GENERATED FROM BIT
C                     POSITIONS 1,2,3,...,I OF USET (OR USETD) WHERE
C                     THE 32 RIGHT-MOST BITS ARE CONSIDERED, COUNTING
C                     FROM LEFT TO RIGHT. )
C
C     ALTERNATE FORM OF THE CALL TO THIS MODULE IS
C                   VEC USET  / V / C,N,COLUMNS / C,N,RIGHT / C,N,* /
C                                                             C,N,I $
C          OR       VEC USETD / V / C,N,COLUMNS / C,N,RIGHT / C,N,* /
C                                                             C,N,I $
C                   ( V WILL HAVE -I- COLUMNS GENERATED FROM BIT
C                     POSITIONS 32,31,...,33-I OF USET (OR USETD) WHERE
C                     THE 32 RIGHT-MOST BITS ARE CONSIDERED, COUNTING
C                     FROM LEFT TO RIGHT. )
C
C
C     CORE REQUIREMENTS.. ONE BUFFER PLUS USET (OR USETD).
C     FOR COLUMNS OPTION, ONE GINO BUFFER PLUS 2*USET (OR USETD) REQD.
C
C
      EXTERNAL        ANDF
      LOGICAL         LZ,L0,L1,COLS,FLAG1,FLAG2
      INTEGER         ANDF,MODNAM(2),FI,FO,F,NAM(2),T(7),TWO,
     1                P(2),P1,P2,P3,P4,BN,BLANK,TYIN,TYOU,B(2),C(2),
     2                OFFSET,D(2),LR(2,2)
      CHARACTER       UFM*23,UWM*25
      COMMON /XMSSG / UFM,UWM
      COMMON /BLANK / P1(2),P2(2),P3(2),P4
     1       /ZZZZZZ/ X(1)
     2       /SYSTEM/ LB,NOUT,NERR
     3       /BITPOS/ BN(32,2)
     4       /PACKX / TYIN,TYOU,II,NN,INCR
     5       /TWO   / TWO(32)
      EQUIVALENCE     (NR,T(3))
      DATA    NERMAX, BLANK / 10,1H /
      DATA    B,C,D / 4HBITI,4HD    ,4HCOMP,4H     ,4HCOLU,4HMNS  /
      DATA    LR    / 4HRIGH,4HT    ,4HLEFT,4H     /
      DATA    MODNAM/ 4HVEC ,4H     /
      DATA    FI,FO , NBN   / 101,201, 32          /
C
C
      FLAG1  = .FALSE.
      FLAG2  = .FALSE.
      OFFSET = 0
      NERR   = 0
      LZ     = .FALSE.
      L0     = .FALSE.
      L1     = .FALSE.
      LC     = KORSZ(X) - LB
      IF (LC .LE. 0) CALL MESAGE (-8,LC,MODNAM)
      IB = LC + 1
C
C     CHECK PARAMETER VALUES AND COMPUTE MASKS.
C
      IF (P1(1).NE.D(1) .OR. P1(2).NE.D(2)) GO TO 5
      COLS = .TRUE.
      DO 3 J = 1,2
      IF (P2(1).EQ.LR(1,J) .AND. P2(2).EQ.LR(2,J)) GO TO 4
    3 CONTINUE
      J = 2
    4 J = 2*J - 3
      GO TO 13
    5 CONTINUE
      COLS = .FALSE.
      IF (P1(1).EQ.B(1) .AND. P1(2).EQ.B(2)) GO TO 13
      IF (P1(2) .NE. BLANK) GO TO 11
      DO 10 I = 1,NBN
      IF (P1(1) .EQ. BN(I,2)) GO TO 19
   10 CONTINUE
   11 P(1) = P1(1)
      P(2) = P1(2)
      GO TO 9904
   13 LZ   = .TRUE.
      L0   = .TRUE.
      IF (P4.LT.0 .OR. P4.GT.32) GO TO 9908
      IF (COLS) GO TO 50
      IF (P4 .GT. 0) GO TO 18
      IF (P2(2) .NE. BLANK) GO TO 21
      DO 15 I = 1,NBN
      IF (P2(1) .EQ. BN(I,2)) GO TO 35
   15 CONTINUE
      GO TO 21
   18 MASKX1 = TWO(P4)
      GO TO 50
   19 I = BN(I,1)
      MASKX  = TWO(I)
C
      IF (P2(1).EQ.C(1) .AND. P2(2).EQ.C(2)) GO TO 23
      IF (P2(2) .NE. BLANK) GO TO 21
      DO 20 I = 1,NBN
      IF (P2(1) .EQ. BN(I,2)) GO TO 25
   20 CONTINUE
   21 P(1) = P2(1)
      P(2) = P2(2)
      GO TO 9904
   23 L0   = .TRUE.
      GO TO 26
   25 I    = BN(I,1)
      MASKX0 = TWO(I)
C
   26 CONTINUE
      IF (P3(1).EQ.C(1) .AND. P3(2).EQ.C(2)) GO TO 33
      IF (P3(2) .NE. BLANK) GO TO 31
      DO 30 I = 1,NBN
      IF (P3(1) .EQ. BN(I,2)) GO TO 35
   30 CONTINUE
   31 P(1) = P3(1)
      P(2) = P3(2)
      GO TO 9904
   33 L1   = .TRUE.
      IF (L0) GO TO 9907
      GO TO 50
   35 I    = BN(I,1)
      MASKX1 = TWO(I)
C
C     BLAST READ USET (OR USETD) INTO CORE.
C
   50 CONTINUE
      F = FI
      CALL FNAME (F,NAM)
      CALL GOPEN (F,X(IB),0)
      CALL READ (*9902,*100,F,X,LC,0,NW)
C
C     INSUFFICIENT CORE - IF DESIRED, THIS ROUTINE CAN BE WRITTEN TO
C     RUN IN SMALLER CORE.
C
      LCEX = 0
   70 CALL READ (*9902,*80,F,X,LC,0,NW)
      LCEX = LCEX + LC
      GO TO 70
   80 LCEX = LCEX + NW
      IF (COLS) LCEX = 2*LCEX
      GO TO 9903
  100 CONTINUE
      CALL CLOSE (F,1)
      IF (.NOT.COLS) GO TO 150
      IF (P4 .LE. 0) GO TO 9908
      OFFSET = NW
      K = 1
      L = 1
      IF (J .LT. 0) K = 32
      MASKX1 = TWO(K)
      IF (2*NW .LE. LC) GO TO 150
      LCEX = 2*NW - LC
      GO TO 9903
  150 CONTINUE
C
C     PREPARE OUTPUT FILE.
C
      F = FO
      CALL GOPEN  (F,X(IB),1)
      CALL MAKMCB (T,F,0,2,1)
      TYIN = 1
      TYOU = 1
      II   = 1
      INCR = 1
C
C     CREATE VECTOR IN CORE OCCUPIED BY USET (OR USETD).
C
  170 NR = 0
      NZ = 0
C
      DO 500 I = 1,NW
      IF (LZ) GO TO 220
      IF (ANDF(X(I),MASKX) .EQ. 0) GO TO 400
  220 CONTINUE
      IF (.NOT.L0) GO TO 230
      IF (ANDF(X(I),MASKX1) .EQ. 0) GO TO 370
      GO TO 300
  230 IF (.NOT.L1) GO TO 240
      IF (ANDF(X(I),MASKX0) .EQ. 0) GO TO 300
      GO TO 370
  240 CONTINUE
      IF (ANDF(X(I),MASKX1) .EQ. 0) GO TO 350
      IF (ANDF(X(I),MASKX0) .EQ. 0) GO TO 300
      NERR = NERR + 1
      IF (NERR .GT. NERMAX) GO TO 500
      WRITE  (NOUT,250) UFM,I
  250 FORMAT (A23,' 2120, MODULE VEC - BOTH SUBSET BITS ARE NON-ZERO.',
     1       3X,'I =',I10)
      GO TO 500
  300 NR = NR + 1
      NZ = NZ + 1
      X(NR+OFFSET) = 1.0
      GO TO 500
  350 CONTINUE
      IF (ANDF(X(I),MASKX0) .NE. 0) GO TO 370
      NERR = NERR + 1
      IF (NERR .GT. NERMAX) GO TO 500
      WRITE  (NOUT,360) UFM,I
  360 FORMAT (A23,' 2121, MODULE VEC - BOTH SUBSET BITS ARE ZERO.',3X,
     1       'I =',I10)
      GO TO 500
  370 NR = NR + 1
      X(NR+OFFSET) = 0.0
      GO TO 500
  400 IF (L0) GO TO 450
      IF (ANDF(X(I),MASKX0) .EQ. 0) GO TO 450
      NERR = NERR + 1
      IF (NERR .GT. NERMAX) GO TO 450
      WRITE  (NOUT,410) UFM,I
  410 FORMAT (A23,' 2122, MODULE VEC - SET X BIT IS ZERO BUT SUBSET X0',
     1       ' BIT IS NOT.  I =',I10)
  450 IF (L1) GO TO 500
      IF (ANDF(X(I),MASKX1) .EQ. 0) GO TO 500
      NERR = NERR + 1
      IF (NERR .GT. NERMAX) GO TO 500
      WRITE  (NOUT,460) UFM,I
  460 FORMAT (A23,' 2123, MODULE VEC - SET X BIT IS ZERO BUT SUBSET X1',
     1       ' BIT IS NOT.  I =',I10)
  500 CONTINUE
C
      IF (NERR .LE. 0) GO TO 540
      IF (NERR-NERMAX) 9995,9995,9906
  540 CONTINUE
C
      IF (FLAG1) GO TO 600
      FLAG1 = .TRUE.
      IF (NR .GT. 0) GO TO 600
      WRITE  (NOUT,550) UWM
  550 FORMAT (A25,' 2124, MODULE VEC - NR=0, OUTPUT WILL BE PURGED.')
      GO TO 900
  600 IF (NZ .GT. 0) GO TO 700
      IF (FLAG2) GO TO 700
      FLAG2 = .TRUE.
      WRITE  (NOUT,650) UWM
  650 FORMAT (A25,' 2125, MODULE VEC - NZ=0, ONE OR MORE COLUMNS OF ',
     1       'OUTPUT MATRIX WILL BE NULL.')
      GO TO 750
  700 CONTINUE
C
C     PACK OUT COLUMN OF OUTPUT VECTOR.
C
  750 NN = NR
      CALL PACK (X(OFFSET+1),F,T)
      IF (.NOT.COLS .OR. L.GE.P4) GO TO 800
      L = L + 1
      K = K + J
      MASKX1 = TWO(K)
      GO TO 170
  800 CALL WRTTRL (T)
  900 CALL CLOSE  (F,1)
C
      RETURN
C
C     ERROR PROCESSING.
C
 9902 WRITE  (NOUT,9952) UFM,F,NAM
 9952 FORMAT (A23,' 2141, MODULE VEC - EOF ENCOUNTERED WHILE READING ',
     1       'GINO FILE ',I3,', DATA BLOCK ',2A4)
      GO TO 9995
 9903 WRITE  (NOUT,9953) UFM,LC,LCEX
 9953 FORMAT (A23,' 2142, INSUFFICIENT CORE FOR MODULE VEC.  AVAILABLE',
     1       ' CORE =',I11,' WORDS.', /5X,
     2       'ADDITIONAL CORE NEEDED =',I11,' WORDS.')
      GO TO 9995
 9904 WRITE  (NOUT,9954) UFM,P
 9954 FORMAT (A23,' 2143, MODULE VEC UNABLE TO IDENTIFY SET OR SUBSET ',
     1       'DESCRIPTOR ',2A4)
      GO TO 9995
 9906 WRITE  (NOUT,9956) UFM,NERR,NERMAX
 9956 FORMAT (A23,' 2145,',I8,' FATAL MESSAGES HAVE BEEN GENERATED IN',
     1       ' SUBROUTINE VEC.', /5X,
     2       'ONLY THE FIRST',I4,' HAVE BEEN PRINTED.')
      GO TO 9995
 9907 WRITE  (NOUT,9957) UFM
 9957 FORMAT (A23,' 2146, BOTH OF THE SECOND AND THIRD VEC PARAMETERS ',
     1       'REQUEST COMPLEMENT.')
      GO TO 9995
 9908 WRITE  (NOUT,9958) UFM,P4
 9958 FORMAT (A23,' 2150, ILLEGAL VALUE FOR FOURTH PARAMETER =',I11)
      GO TO 9995
 9995 CALL MESAGE (-61,0,0)
      RETURN
C
      END