File: tabprt.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 (302 lines) | stat: -rw-r--r-- 9,353 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
302
      SUBROUTINE TABPRT (INAME1)
C
C     WILL PRINT TABLE - USING 1P,E13.6, I13, OR (9X,A4) FORMAT
C
C     ALL REAL NUMBERS ARE ASSUMED TO BE SINGLE PRECISION.
C
C     REVISED  3/91 BY G.CHAN/UNISYS
C     THREE PARAMETERS ARE ADDED - OP CODE (OP), RECORDD NO. (IRC), AND
C     WORD NO. (IWD)
C     THE DEFAULTS OF THESE PARAMETERS ARE - BLANK, 3, AND 3
C     OP CODE OPTIONS ARE 'PUREBCD', 'PUREFPN', AND 'PUREINT'
C
C     LAST REVISED, 12/92, BY G.CHAN/UNISYS, TO INCLUDE 3 SPECIAL TABLES
C     - KELM, MELM, BELM  - WHICH CONTAIN D.P. DATA WORDS IN 32- AND 36-
C     BIT WORD MACHINES.
C
C     IF OP CODE IS 'PUREBCD', RECORDS IRC AND THEREAFTER, AND BEGINNING
C     FROM WORD IWD OF EACH RECORD TO THE END OF THAT RECORD, ARE ALL
C     BCD  WORDS.
C     SIMILARILY FOR 'PUREINT' FOR INTEGER WORDS, AND 'PUREFPN' FOR
C     FLOATING POINT NUMBERS
C
C     THESE PARAMETER OPTIONS ARE NECESSARY BECAUSE IF THE PRINTED DATA
C     IS NOT OF STRING TYPE, SUBROUTINE NUMTYP IS CALLED TO FIND OUT
C     WHAT TYPE OF DATA IN EACH DATA WORD.  HOWEVER NUMTYP IS NOT 100
C     PERCENT FOOL-PROOF. ONCE IN A FEW THOUSANDS NUMTYP CAN NOT
C     DISTINGUISH A REAL NUMBER FROM A BCD WORD
C
C  $MIXED_FORMATS
C
      LOGICAL          DEC
      INTEGER          BLOCK(20),TYPES(4),FORMAT,FORMS(2),JPOINT,ROW,
     1                 TYPE,FLAG,RECF,STRNBR,SYSBUF,OTPE,PURE,BCD,FPN,
     2                 OP,NAME(2),ICORE(133)
      REAL             XNS(1),SP(3)
      DOUBLE PRECISION XND(1),DCORE(1)
      CHARACTER        UFM*23,UWM*25
CWKBI
      CHARACTER*1      CORE1(2000)
      COMMON /XMSSG /  UFM,UWM
      COMMON /BLANK /  OP(2),IRC,IWD
      COMMON /MACHIN/  MACH
      COMMON /SYSTEM/  SYSBUF,OTPE,INX(6),NLPP,INX1(2),LINE,DUM(42),IPRC
      COMMON /OUTPUT/  HEAD1(96),HEAD2(96)
      COMMON /ZZZZZZ/  CORE(1)
      EQUIVALENCE      (XND(1),CORE(1))
      EQUIVALENCE      (XNS(1),XND(1)),  (ICORE(1),CORE(1),DCORE(1)),
     1                 (BLOCK(2), TYPE   ), (BLOCK(3), FORMAT),
     2                 (BLOCK(4), ROW    ), (BLOCK(5), JPOINT),
     3                 (BLOCK(6), NTERMS ), (BLOCK(8), FLAG  )
CWKBI
      EQUIVALENCE      (CORE, CORE1)
      DATA    OPAREN,  CPAREN,EC,EC1,EC2,INTGC,ALPHC,ALPHC1,CONT,UNED /
     1        4H(1X ,  4H)   ,4H,1P,,4HE13.,2H6 ,4H,I13,4H,9X,,4HA4   ,
     2        4HCONT,  4HINUE   /  D/2HD  /, NAME  / 4HTABP,4HRT      /
      DATA    BLANK ,  TABL,EBB /  1H  ,4HTABL, 1HE     /
      DATA    TYPES /  3HRSP,3HRDP,3HCSP ,3HCDP/, FORMS / 3HYES ,2HNO /
      DATA    PURE  ,  BCD,FPN,INT /   4HPURE, 4HBCD , 4HFPN , 4HINT  /
      DATA    NSP   ,  SP / 3, 4HKELM, 4HMELM, 4HBELM   /
C
      NZ  = KORSZ(CORE) - SYSBUF
      IF (NZ .LE. 0) CALL MESAGE (-8,-NZ,NAME)
      DEC = MACH.EQ.5 .OR. MACH.EQ.6 .OR. MACH.EQ.10 .OR. MACH.EQ.21
      INAME = INAME1
      CALL OPEN (*190,INAME,CORE(NZ+1),0)
      DO 10 I = 1,96
   10 HEAD2(I) = BLANK
      HEAD2(1) = TABL
      HEAD2(2) = EBB
      CALL FNAME (INAME,HEAD2(3))
      CALL PAGE
      HEAD2(6) = CONT
      HEAD2(7) = UNED
      HEAD2(8) = D
      IF (IPRC.EQ.1 .OR. INAME.NE.101) GO TO 15
      CALL PAGE2 (-2)
      WRITE  (OTPE,13) UWM
   13 FORMAT (A25,', TABPRT MODULE ASSUMES ALL REAL DATA ARE IN S.P.,',
     1       ' D.P. DATA THEREFORE MAY BE PRINTED ERRONEOUSLY')
   15 INUM     = NZ/2 - 1
      INUM     = MAX0(INUM,133)
      NS       = INUM + 1
      LLEN     = 0
      CORE(1)  = OPAREN
      IREC     = 0
      IRCD     = 999999999
      IXXX     = 999999999
      IF (OP(1).NE.PURE .OR. OP(2).EQ.BLANK) GO TO 20
      IF (OP(2) .EQ. INT) JJ = 2
      IF (OP(2) .EQ. FPN) JJ = 3
      IF (OP(2) .EQ. BCD) JJ = 4
      IF (IRC .GT. 0) IRCD = IRC
      IF (IWD .GT. 0) IXXX = IWD + INUM
      IF (IRC .LE. 0) IRCD = 3
      IF (IWD .LE. 0) IXXX = 3 + INUM
   20 CALL PAGE2 (-2)
      IF (DEC .AND. IREC.EQ.0) WRITE (OTPE,25)
   25 FORMAT (4X,'(ALL INTEGERS EXCEEDING 16000 ARE PRINTED AS REAL ',
     1        'NUMBERS. ALL REAL NUMBERS OUTSIDE E-27 OR E+27 RANGE ',
     2        'ARE PRINTED AS INTEGERS)')
      WRITE  (OTPE,30) IREC
   30 FORMAT (/,' RECORD NO.',I6)
      IREC = IREC + 1
      DO 35 I  = 1,NSP
      IF (HEAD2(3) .NE. SP(I)) GO TO 35
      ICORE(1) = INAME
      CALL RDTRL (ICORE)
      IF (ICORE(2) .EQ. 2) GO TO 60
   35 CONTINUE
      IX   = INUM
      NRED = 0
      NP   = INUM - 1
      BLOCK(1) = INAME1
      CALL RECTYP (BLOCK,RECF)
      IF (RECF .NE. 0) GO TO 200
      JV   = 4
   40 IX   = IX + 1
      IOUT = 4
      NRED = NRED + 1
      NP   = NP + 1
      CALL READ (*170,*160,INAME,CORE(IX),1,0,IFLAG)
C
      IF (IREC.GT.IRCD .OR. IX.GT.IXXX) GO TO 50
      JJ = NUMTYP(ICORE(IX)) + 1
      IF (JJ.EQ.1 .AND. JV.NE.4) JJ = JV
      JV = JJ
   50 GO TO (140,140,100,120), JJ
C
C     TABLES KELM, MELM, AND BELM - D.P. DATA ONLY
C
   60 CALL READ (*170,*170,INAME,CORE(1),2,1,IFLAG)
      WRITE  (OTPE,65) ICORE(1),ICORE(2)
   65 FORMAT (10X,2A4)
   70 WRITE  (OTPE,30) IREC
      CALL READ (*170,*80,INAME,CORE(1),NZ,1,IFLAG)
      CALL MESAGE (-8,0,NAME)
   80 NP   = IFLAG/2
      JJ   = (NP+9)/10
      CALL PAGE2 (-JJ)
      IREC = IREC + 1
      WRITE  (OTPE,90,ERR=70) (DCORE(I),I=1,NP)
   90 FORMAT (1X,1P,10D13.6)
      GO TO 70
C
C     REAL NUMBER  (1)
C
  100 IOUT = 1
      IF (LLEN+13 .GT. 132) GO TO 160
  110 CORE(NRED+1) = EC
      CORE(NRED+2) = EC1
      CORE(NRED+3) = EC2
      NRED = NRED + 2
  115 LLEN = LLEN + 13
      GO TO 40
C
C     ALPHA  (2)
C
  120 IOUT = 2
      IF (LLEN+6 .GT. 132) GO TO 160
  130 CORE(NRED+1) = ALPHC
      CORE(NRED+2) = ALPHC1
      NRED = NRED + 1
      GO TO 115
C
C     INTEGER  (3)
C
  140 IOUT = 3
      IF (LLEN+13 .GT. 132) GO TO 160
  150 ICORE(NRED+1) = INTGC
      GO TO 115
C
C     BUFFER FULL- END RECORD AND PRINT THE LINE
C
C     PREVIOUSLY, THE FORMAT IS IN CORE, WHICH IS DIMENSIONED TO 1.
C     THIS MAY NOT WORK IN SOME MACHINES. THE FORMAT IS NOW SPECIFIED IN
C     ICORE, WHICH IS DIMENSIONED TO 133.
C     (CORE AND ICORE ARE EQUIVALENT)
C
  160 CORE(NRED+1) = CPAREN
      IF (NRED .GE. 133) CALL MESAGE (-37,0,NAME)
      CALL PAGE2 (-1)
      IF (NRED .EQ. 1) GO TO 165
      IF (MACH .NE. 2 .AND. MACH .NE. 5 ) GO TO 162
      WRITE (OTPE,ICORE,ERR=164) (CORE(I),I=NS,NP)
      GO TO 164
  162 CALL WRTFMT (ICORE(NS),NP-NS+1,CORE1)
  164 CONTINUE
      LLEN = 0
      NRED = 1
      NP   = INUM
C
C     FINISH SEMI-PROCESSED WORD.
C
      CORE(INUM+1) = CORE(IX)
      IX = INUM + 1
      GO TO (110,130,150,20), IOUT
C
  165 WRITE  (OTPE,166)
  166 FORMAT (' THIS RECORD IS NULL.')
C
C     GO TO 161 IS LOGICALLY UNSOUND. CHANG TO 164. (G.CHAN/UNISYS 1/93)
C     GO TO 161
CWKBR GO TO 164
      GO TO 162
C
  170 CALL CLOSE (INAME,1)
      CALL PAGE2 (-2)
      WRITE  (OTPE,180)
  180 FORMAT (//,' END OF FILE')
C
C     PRINT TRAILER FOR FILE
C
  190 ICORE(1) = INAME
      CALL RDTRL (ICORE)
      CALL PAGE2 (-2)
      WRITE  (OTPE,195) (ICORE(I),I=2,7)
  195 FORMAT ('0TRAILER WORD1 =',I8,' WORD2 =',I8,' WORD3 =',I8,
     1                ' WORD4 =',I8,' WORD5 =',I8,' WORD6 =',I8)
      RETURN
C
C
C     HERE IF STRING FORMATTED RECORD
C
  200 FLAG   =-1
      STRNBR = 1
      CALL GETSTR (*250,BLOCK)
      IFORM = FORMAT + 1
  205 CALL PAGE2 (-2)
      WRITE  (OTPE,206) STRNBR,ROW,TYPES(TYPE),FORMS(IFORM),NTERMS
  206 FORMAT ('0STRING NO.',I5,'   ROW POSITION=',I5,'   STRING TYPE=',
     1        A3,'   STRING TRAILERS=',A3,'   NUMBER OF TERMS=',I5)
      STRNBR = STRNBR + 1
      GO TO (210,220,230,240), TYPE
C
C     PRINT REAL SINGLE PRECISION STRING
C
  210 NPOINT = JPOINT + NTERMS - 1
      J = JPOINT
  211 N = MIN0(J+7,NPOINT)
      CALL PAGE2 (-1)
      WRITE  (OTPE,212) (XNS(I),I=J,N)
  212 FORMAT (1X,8(1P,E15.7))
      IF (N .EQ. NPOINT) GO TO 214
      J = N + 1
      GO TO 211
  214 CALL ENDGET (BLOCK)
      CALL GETSTR (*20,BLOCK)
      GO TO 205
C
C     PRINT STRING IN REAL DOUBLE PRECISION
C
  220 NPOINT = JPOINT + NTERMS - 1
      J = JPOINT
  221 N = MIN0(J+7,NPOINT)
      CALL PAGE2 (-1)
      WRITE  (OTPE,222) (XND(I),I=J,N)
  222 FORMAT (1X,8(1P,D15.7))
      IF (N .EQ. NPOINT) GO TO 224
      J = N + 1
      GO TO 221
  224 CALL ENDGET (BLOCK)
      CALL GETSTR (*20,BLOCK)
      GO TO 205
C
C     PRINT STRING IN COMPLEX SINGLE PRECISION
C
  230 NPOINT = JPOINT + 2*NTERMS - 1
      J = JPOINT
  231 N = MIN0(J+7,NPOINT)
      CALL PAGE2 (-1)
      WRITE  (OTPE,232) (XNS(I),I=J,N)
  232 FORMAT (1X,4(1P,E14.7,1P,E15.7,2H//))
      IF (N .EQ. NPOINT) GO TO 234
      J = N + 1
      GO TO 231
  234 CALL ENDGET (BLOCK)
      CALL GETSTR (*20,BLOCK)
      GO TO 205
C
C     PRINT STRING IN COMPLEX DOUBLE PRECISION
C
  240 NPOINT = JPOINT + 2*NTERMS - 1
      J = JPOINT
  241 N = MIN0(J+7,NPOINT)
      CALL PAGE2 (-1)
      WRITE  (OTPE,242) (XND(I),I=J,N)
  242 FORMAT (1X,4(1P,D14.7,1P,D15.7,2H//))
      IF (N .EQ. NPOINT) GO TO 244
      J = N + 1
      GO TO 241
  244 CALL ENDGET (BLOCK)
      CALL GETSTR (*20,BLOCK)
      GO TO 205
C
C     PRINT NULL COLUMN
C
  250 CALL PAGE2 (-1)
      WRITE  (OTPE,252)
  252 FORMAT (5X,'NULL COLUMN')
      GO TO 20
C
      END