File: extern.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 (343 lines) | stat: -rw-r--r-- 8,264 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
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
      SUBROUTINE EXTERN (NEX,NGRAV,GVECT,ILIST,PG,N1,IHARM)
C
C     GENERATES EXTERNAL LOADS
C
      IMPLICIT INTEGER (A-Z)
      INTEGER         PG(1),ILIST(1),NAME(2),IZ(1)
      REAL            CORE,GVECT(1)
      COMMON /TRANX / IDUM(14)
      COMMON /BLANK / NROWSP
      COMMON /ZZZZZZ/ CORE(1)
      COMMON /LOADX / LCARE,SLT,BGPDT,OLD,CSTM,SIL,ISIL,EST,MPT,NN(7),
     1                NOBLD,IDIT,ICM,ILID
      COMMON /SYSTEM/ SYSBUF
      COMMON /PACKX / ITYA,ITYB,II,JJ,INCUR
      COMMON /HMATDD/ IIHMAT,NNHMAT,MPTFIL,IDITFL
      COMMON /PINDEX/ IEST(45)
      COMMON /GPTA1 / JDUM
      EQUIVALENCE     (CORE(1),IZ(1))
      DATA    CASECC, PERMBD,HCFLDS,REMFLS,SCR6,HCCENS, NAME         /
     1        110   , 112   ,304   ,305   ,306 ,307   , 4HEXTE,4HRN  /
C
      IEST(1) =-1
      IDUM(1) = 0
      JOPEN = 0
      IPRE  = 0
      INCUR = 1
      II    = 1
      JJ    = NROWSP
      NGRAV = 0
      OLD   = 0
      ICM   = 1
      ITYA  = 1
      ITYB  = 1
      IBUF1 = LCARE - SYSBUF + 1
      IBUF2 = IBUF1 - SYSBUF
      IBUF3 = IBUF2 - SYSBUF
      IBUF4 = IBUF3 - SYSBUF
      IBUF5 = IBUF4 - SYSBUF
      LCORE = IBUF5 - SYSBUF
      CALL GOPEN (SLT,CORE(IBUF1),0)
      CALL GOPEN (BGPDT,CORE(IBUF2),0)
      FILE = CSTM
      CALL OPEN (*20,CSTM,CORE(IBUF3),0)
      ICM  = 0
      CALL SKPREC (CSTM,1)
   20 CALL GOPEN (SIL,CORE(IBUF4),0)
      FILE = SLT
      ISIL = 0
      IF (LCORE .LT. NROWSP) GO TO 1580
C
      III  = 1
      DO 1400 NLOOP = 1,N1
C
      ILID = ILIST(III)
      IF (ILID .NE. 0) GO TO 30
      CALL SKPREC (SLT,1)
      GO TO 1310
   30 DO 40 I = 1,NROWSP
   40 CORE(I) = 0.0
      NOGRAV  = 0
      NGROLD  = NGRAV
   50 CALL READ (*1520,*1300,SLT,NOBLD,1,0,FLAG)
      CALL FREAD (SLT,IDO,1,0)
      IF (NOGRAV .EQ.  1) GO TO 1570
      IF (NOBLD .EQ. -20) GO TO 800
      GO TO (100,100,120,120,140,140,160,200,220,300,
     1       320,340,600,620,630,640,360,700,730,800,
     2       800,800,800,800,400), NOBLD
  100 DO 110 J = 1,IDO
  110 CALL DIRECT
      GO TO 50
  120 DO 130 J = 1,IDO
  130 CALL TPONT
      GO TO 50
  140 DO 150 J = 1,IDO
  150 CALL FPONT
      GO TO 50
  160 DO 170 J = 1,IDO
  170 CALL SLOAD
      GO TO 50
  200 IF (NOGRAV .EQ. 2) GO TO 1570
      DO 210 J = 1,IDO
      CALL GRAV (NGRAV,GVECT(1),NEX,ILIST(1),NLOOP)
  210 CONTINUE
      NOGRAV = 1
      GO TO 50
  220 DO 230 J = 1,IDO
  230 CALL PLOAD
      GO TO 50
C
C     RFORCE CARDS
C
  300 DO 310 J = 1,IDO
  310 CALL RFORCE (LCORE)
      GO TO 50
C
C     PRESAX CARDS
C
  320 DO 330 J = 1,IDO
  330 CALL PRESAX (IHARM)
      GO TO 50
C
C     QHBDY CARDS
C
  340 DO 350 J = 1,IDO
      CALL QHBDY
  350 CONTINUE
      GO TO 50
C
C     PLOAD3 CARDS
C
  360 DO 370 J = 1,IDO
  370 CALL PLOAD3
      GO TO 50
C
C     PLOAD4 CARDS
C
  400 CALL PLOAD4 (IBUF5,IDO,JOPEN)
      GO TO 50
C
C     QVOL CARDS (MODIFIED USER ENTRYS)
C
  600 DO 610 J = 1,IDO
      CALL QVOL
  610 CONTINUE
      GO TO 50
C
C     QBDY1 CARDS (MODIFIED USER ENTRYS)
C
  620 KKKK = 1
      GO TO 650
C
C     QBDY2 CARDS (MODIFIED USER ENTRYS)
C
  630 KKKK = 2
      GO TO 650
C
C     QVECT CARDS (MODIFIED USER ENTRYS)
C
  640 KKKK = 3
  650 DO 660 J = 1,IDO
      CALL QLOADL (KKKK)
  660 CONTINUE
      GO TO 50
C
C     PLOAD1 CARDS
C
  700 IF (IPRE .EQ. 1) GO TO 710
      IPRE  = 1
      LCORE = LCORE - SYSBUF - 1
      MCORE = LCORE - NROWSP - 1
      IF (LCORE .LT. NROWSP) GO TO 1580
      CALL PREMAT (CORE(NROWSP+1),CORE(NROWSP+1),CORE(LCORE),MCORE,
     1             NCORE,MPT,IDIT)
  710 DO 720 J = 1,IDO
      CALL PLBAR1 (IDO,LCORE)
  720 CONTINUE
      GO TO 50
C
C     PLOADX CARDS
C
  730 DO 740 J = 1,IDO
      CALL PLOADX
  740 CONTINUE
      GO TO 50
C
C     CEMLOOP, SPCFLD, GEMLOOP, MDIPOLE, AND REMFLUX CARDS
C
C     BRING HEAT MATERIALS INTO CORE
C
  800 IF (IPRE .EQ. 1) GO TO 1230
      IPRE = 1
C
C     1ST AND LAST AVAILABLE LOCATIONS IN OPEN CORE
C
      IIHMAT = NROWSP
      NNHMAT = LCORE
      MPTFIL = MPT
      IDITFL = IDIT
      CALL PREHMA (CORE)
C
C     NOW NNHMAT CONTAINS LAST LOCATION OF MATERIAL INFO
C
      NEXTZ = NNHMAT + 1
C
C     OPEN HCFLDS TO CONTAIN APPLIED MAGNETIC FIELD LOAD
C
      LCORE = LCORE - SYSBUF
      IF (LCORE .LE. NEXTZ) GO TO 1580
C
C     STORE SILS  ON PERMBDY, IF ANY, INTO OPEN CORE
C
      NBDYS = 0
      FILE  = PERMBD
      CALL OPEN (*820,PERMBD,CORE(LCORE+1),0)
      CALL FWDREC (*1520,PERMBD)
      CALL READ (*1520,*810,PERMBD,CORE(NEXTZ),LCORE-NEXTZ+1,0,NBDYS)
      GO TO 1580
  810 CALL CLOSE (PERMBD,1)
  820 CONTINUE
      NEXTZ = NEXTZ + NBDYS
C
C     NOW CHECK FOR FORCE REQUESTS ON CASECC(MAGNETIC FIELD REQUESTS)
C     MAKE A UNIQUE LIST OF ELEMENT ID-S CORRESPONDING TO ALL SUBCASES.
C     IF A SUBCASE REQUESTS ALL, NO LIST IS NECESSARY.
C
      ALL    = 0
      NELOUT = 0
      IJ     = 0
C
C     1ST GET MAXIMUM LENGTH OF CASE CONTROL IN ORDER TO STORE ELEMENT
C     ID-S
C
      NCC = 0
      CALL GOPEN (CASECC,CORE(LCORE+1),0)
  830 CALL READ (*850,*840,CASECC,CORE(NEXTZ),LCORE-NEXTZ+1,0,KCC)
      GO TO 1580
  840 NCC = MAX0(NCC,KCC)
      GO TO 830
  850 CALL REWIND (CASECC)
      CALL FWDREC (*1520,CASECC)
      KSET = NEXTZ + NCC
C
  860 CALL READ (*1200,*870,CASECC,CORE(NEXTZ),LCORE-NEXTZ+1,0,NCC)
      GO TO 1580
  870 SETNO = IZ(NEXTZ+25)
      IF (SETNO .EQ. 0) GO TO 860
      IF (SETNO .GT. 0) GO TO 1010
C
C     ALL
C
 1000 ALL    = 1
      NELOUT = 0
      GO TO 1200
C
C     CREATE UNIQUE LIST OF ELEMENT ID-S
C
 1010 ILSYM  = IZ(NEXTZ+165)
      ISETNO = ILSYM  + IZ(ILSYM+NEXTZ-1) + NEXTZ
 1020 ISET   = ISETNO + 2
      NSET   = IZ(ISETNO+1) + ISET - 1
      IF (IZ(ISETNO) .EQ. SETNO) GO TO 1030
      ISETNO = NSET + 1
C
C     IF SET CANNOT BE FOUND, SET TO ALL. BUT SHOULD NOT HAPPEN
C
      IF (ISETNO .LT. NCC+NEXTZ-1) GO TO 1020
      GO TO 1000
C
C     PICK UP ELEMENT ID-S. STORE IN UNIQUE LIST
C
 1030 I = ISET
 1040 IF (I    .EQ. NSET) GO TO 1060
      IF (IZ(I+1) .GT. 0) GO TO 1060
      IB = IZ(I  )
      N  =-IZ(I+1)
      I  = I + 1
      ASSIGN 1050 TO RET
      GO TO 1100
 1050 IB = IB + 1
      IF (IB .LE. N) GO TO 1100
      GO TO 1070
 1060 IB = IZ(I)
      ASSIGN 1070 TO RET
      GO TO 1100
 1070 I = I + 1
      IF (I .LE. NSET) GO TO 1040
C
C     DONE WITH THIS SET. GO BACK FOR ANOTHER
C
      GO TO 860
C
C     SEARCH LIST OF ELEMENT ID-S. ADD ID TO LIST IF NOT A DUPLICATE
C
 1100 IF (IJ .NE. 0) GO TO 1110
      MSET = KSET
      IZ(MSET) = IB
      NELOUT = 1
      IJ = MSET
      GO TO RET, (1050,1070)
 1110 DO 1120 J = MSET,IJ
      IF (IZ(J) .EQ. IB) GO TO RET, (1050,1070)
 1120 CONTINUE
      IJ = IJ + 1
      IF (IJ .LT. LCORE) GO TO 1130
      GO TO 1000
 1130 IZ(IJ) = IB
      NELOUT = NELOUT + 1
      GO TO RET, (1050,1070)
C
C     DONE WITH ALL CASES. IF ALL.NE.1, MOVE THE ID-S UP IN CORE
C
 1200 CALL CLOSE (CASECC,1)
      IF (ALL .EQ. 1) GO TO 1220
C
      DO 1210 J = 1,NELOUT
 1210 IZ(NEXTZ+J-1) = IZ(MSET+J-1)
      NEXTZ = NEXTZ + NELOUT
 1220 CONTINUE
C
      CALL GOPEN (HCFLDS,CORE(LCORE+1),1)
      I = LCORE - SYSBUF
      J = I     - SYSBUF
      LCORE = J - SYSBUF
      IF (LCORE .LE. NEXTZ) GO TO 1580
      CALL GOPEN (REMFLS,CORE(I+1),1)
      CALL GOPEN (HCCENS,CORE(J+1),1)
      CALL GOPEN (SCR6,CORE(LCORE+1),1)
C
C     NO DO LOOP ON IDO. IN EANDM WE WILL READ ALL CARDS
C
 1230 CALL EANDM (NOBLD,IDO,NEXTZ,LCORE,NBDYS,ALL,NELOUT)
      GO TO 50
C
C
 1300 IF (NGROLD .NE. NGRAV) GO TO 1400
      CALL PACK (CORE,PG,PG(1))
 1310 III = III + 1
C
 1400 CONTINUE
C
      CALL CLOSE (BGPDT,1)
      IF (ICM .EQ. 0) CALL CLOSE (CSTM,1)
      CALL CLOSE (SLT,1)
      CALL CLOSE (SIL,1)
      IF (IPRE .NE. 1) GO TO 1410
      CALL CLOSE (HCFLDS,1)
      CALL CLOSE (REMFLS,1)
      CALL CLOSE (HCCENS,1)
      CALL CLOSE (SCR6,1)
 1410 CONTINUE
      RETURN
C
C     FILE ERRORS
C
 1520 IP1 = -2
      GO TO 1600
 1570 IP1 = -7
      GO TO 1600
 1580 IP1 = -8
 1600 CALL MESAGE (IP1,FILE,NAME(1))
      RETURN
      END