File: apd3.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 (366 lines) | stat: -rw-r--r-- 9,984 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
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
      SUBROUTINE APD3
C
      EXTERNAL        ORF
      LOGICAL         CNTRL1,CNTRL2,CRANK1,CRANK2
      INTEGER         NAM(2),IZ(1),BACK,PSPA,RET,IC(16),EID,PID,CIDBX,
     1                SILB,SCR1,ECTA,BGPA,GPLA,USETA,SILA,ACPT,BUF10,
     2                CA3S,CA3E,PA3S,PA3E,AUSET(6,2),SILC,ORF,USA,UK,
     3                EIDB,SILDX(2),ACSIX(4),CID(5),NECTA(2)
      REAL            VX1(3),VX2(3),ACPL(3,3),RB1(3)
      DIMENSION       IHEAD(10),BND(24)
      CHARACTER       UFM*23
      COMMON /XMSSG / UFM
      COMMON /BLANK / NK,NJ,LUSETA
      COMMON /APD1C / EID,PID,CP,NSPAN,NCHORD,LSPAN,LCHORD,IGID,
     1                X1,Y1,Z1,X12,X4,Y4,Z4,X43,XOP,X1P,ALZO,MCSTM,
     2                NCST1,NCST2,CIDBX,ACSID,IACS,SILB,NCRD,SCR1,
     3                SCR2,SCR3,SCR4,SCR5,ECTA,BGPA,GPLA,USETA,SILA,
     4                CSTMA,ACPT,BUF10,BUF11,BUF12,NEXT,LEFT,ISILN,
     5                NCAM,NAEF1,NAEF2,
     6                NCA1,NCA2,CA2S,CA2E,CA3S,CA3E,CA4S,CA4E,
     7                NPA1,NPA2,PA2S,PA2E,PA3S,PA3E,PA4S,PA4E
      COMMON /APD1D / ICPL(14),YP4,S1,C1,XP2,XP3,XP4,RA1(3)
      COMMON /ZZZZZZ/ Z(1)
      COMMON /BITPOS/ IBIT(64)
      COMMON /TWO   / ITWO(32)
      COMMON /SYSTEM/ SYSBUF,NOT
      EQUIVALENCE     (ICPL(3),RB1(1)),(ICPL(6),ACPL(1,1)),
     1                (NECTA(1),EIDB),(NECTA(2),CID(1)),
     2                (ACSIX(2),VX2(1)),(SILDX(1),ICID),
     3                (Z(1),IZ(1)),(EID,IC(1)),
     4                (CRANK1,IHEAD(3)),(CRANK2,IHEAD(4)),
     5                (CNTRL1,IHEAD(5)),(CNTRL2,IHEAD(6))
      DATA     NAM  / 4HAPD3,4H    /
C
      NOGO = 0
      LCA  = 16
      NC3  = ((CA3E-CA3S)+1)/LCA
      NCAM = NCAM+NC3
C
C     INITIAL SETUP
C
      I17 = IBIT(17)
      I18 = IBIT(18)
      I19 = IBIT(19)
      I20 = IBIT(20)
      PSPA= ORF(ITWO(I17),ITWO(I20))
      USA = ORF(PSPA,ITWO(I18))
      UK  = ORF(ITWO(I19),ITWO(I20))
      DO 5 J = 1,2
      DO 5 I = 1,6
    5 AUSET(I,J) = USA
      AUSET(3,2) = UK
      IHEAD(1) = 3
      SILC = SILB
C
C     LOOP ON NC3 MOVING CAERO3 CARD TO COMMON
C
      DO 400 I = 1,NC3
      N = (I-1)*LCA - 1
      DO 10 J = 1,LCA
      IC(J) = IZ(CA3S+N+J)
   10 CONTINUE
      MCSTM = MCSTM + 1
      IZ(CA3S+N+2) = MCSTM
      IZ(CA3S+N+8) = 3
      ACSIX(1) = MCSTM
C
C     GET POINTS IN PROPER COORD SYSTEM
C
      CALL APDCS
C
C     FIND PAERO3 CARD
C
      J = PA3S
   20 IF (J .GE. PA3E) GO TO 999
      IF (IZ(J) .EQ. PID) GO TO 30
      J = J + 4 + IZ(J+3)
      GO TO 20
   30 IPID = J
      IHEAD(7) = IZ(IPID+1)
      CRANK1 = .FALSE.
      CRANK2 = .FALSE.
      IF (Z(IPID+5) .GT. 0.0) CRANK1 = .TRUE.
      IF (Z(IPID+7) .GT. 0.0) CRANK2 = .TRUE.
      CNTRL1 = .FALSE.
      CNTRL2 = .FALSE.
      IF (IZ(IPID+2) .GT. 0 ) CNTRL1 = .TRUE.
      IF (IZ(IPID+2) .EQ. 2 ) CNTRL2 = .TRUE.
C
C     GENERATE AERO POINTS FOR CAERO3  PUT POINTS 1-4 IN BGPDT
C
      DO 40 J = 13,24
   40 BND(J) = 0.0
      VX1(3) = 0.0
      KK = 1
      ASSIGN 50 TO BACK
      IBS = NCRD + 1
      VX1(1) = 0.0
      VX1(2) = 0.0
      BND(1) = 0.0
      BND(2) = 0.0
      GO TO 300
   50 ASSIGN 60 TO BACK
      VX1(1) = X12
      VX1(2) = 0.0
      BND(7) = X12
      BND(8) = 0.0
      GO TO 300
   60 VX1(1) = XP4
      VX1(2) = YP4
      BND(5) = XP4
      BND(6) = YP4
      ASSIGN 70 TO BACK
      GO TO 300
   70 ASSIGN 80 TO BACK
      VX1(1) = XP4 + X43
      VX1(2) = YP4
      BND(11) = VX1(1)
      BND(12) = VX1(2)
      GO TO 300
C
C     ADD POINTS 5 AND 6 IF THEY EXIST
C
   80 BND(3) = BND(5)
      BND(4) = BND(6)
      IF (.NOT.CRANK1) GO TO 90
      VX1(1) = Z(IPID+4)
      VX1(2) = Z(IPID+5)
      BND(3) = VX1(1)
      BND(4) = VX1(2)
      ASSIGN 90 TO BACK
      GO TO 300
   90 BND(9) = BND(11)
      BND(10) = BND(12)
      IF (.NOT.CRANK2) GO TO 100
      VX1(1) = Z(IPID+6)
      VX1(2) = Z(IPID+7)
      BND(9) = VX1(1)
      BND(10)= VX1(2)
      ASSIGN 100 TO BACK
      GO TO 300
C
C      ADD CONTROLS
C
  100 IF (.NOT.CNTRL1) GO TO 120
      ASSIGN 101 TO BACK
      VX1(1)  = Z(IPID+8)
      VX1(2)  = Z(IPID+9)
      BND(15) = VX1(1)
      BND(16) = VX1(2)
      GO TO 300
  101 ASSIGN 102 TO BACK
      VX1(1)  = Z(IPID+10)
      VX1(2)  = Z(IPID+11)
      BND(13) = VX1(1)
      BND(14) = VX1(2)
      GO TO 300
  102 ASSIGN 103 TO BACK
      VX1(1)  = Z(IPID+12)
      VX1(2)  = Z(IPID+13)
      BND(17) = VX1(1)
      BND(18) = VX1(2)
      GO TO 300
  103 ASSIGN 104 TO BACK
      VX1(1)  = Z(IPID+14)
      VX1(2)  = Z(IPID+15)
      BND(21) = VX1(1)
      BND(22) = VX1(2)
      GO TO 300
  104 IF (.NOT.CNTRL2) GO TO 120
      ASSIGN 105 TO BACK
      VX1(1)  = Z(IPID+16)
      VX1(2)  = Z(IPID+17)
      BND(19) = VX1(1)
      BND(20) = VX1(2)
      GO TO 300
  105 ASSIGN 120 TO BACK
      VX1(1)  = Z(IPID+18)
      VX1(2)  = Z(IPID+19)
      BND(23) = VX1(1)
      BND(24) = VX1(2)
      GO TO 300
C
C     CONNECT POINT TO BOXES FOR ECTA
C
  120 EIDB   = EID
      CID(1) = IBS
      CID(2) = IBS + 1
      CID(5) = IBS
      IF (CRANK1) GO TO 121
      IF (CRANK2) GO TO 122
      CID(3) = IBS + 3
      CID(4) = IBS + 2
      GO TO 124
  121 IF (CRANK2) GO TO 123
      CID(3) = IBS + 3
      CID(4) = IBS + 4
      GO TO 124
  122 CID(3) = IBS + 4
      CID(4) = IBS + 2
      GO TO 124
  123 CID(3) = IBS + 5
      CID(4) = IBS + 4
  124 CONTINUE
      CALL WRITE (ECTA,NECTA,6,0)
      EIDB   = EIDB + 1
      CID(1) = IBS + 2
      CID(2) = IBS + 3
      CID(5) = IBS + 2
      IBS    = IBS + 4
      IF (.NOT.CRANK1 .AND. .NOT.CRANK2) GO TO 130
      IF (CRANK1 .AND. CRANK2) GO TO 125
      CID(3) = IBS
      CID(4) = CID(5)
      IBS = IBS + 1
      GO TO 129
  125 CID(3) = IBS + 1
      CID(4) = IBS
      IBS    = IBS + 2
  129 CALL WRITE (ECTA,NECTA,6,0)
      EIDB   = EIDB + 1
  130 IF (.NOT.CNTRL1) GO TO 135
      CID(1) = IBS + 2
      CID(2) = IBS + 3
      CID(3) = IBS + 1
      CID(4) = IBS
      CID(5) = IBS + 2
      CALL WRITE (ECTA,NECTA,6,0)
      EIDB   = EIDB + 1
      IF (.NOT.CNTRL2) GO TO 135
      CID(3) = IBS+5
      CID(4) = IBS+4
      CALL WRITE (ECTA,NECTA,6,0)
C
C     FIND CONTROL POINTS FOR ELEMENT
C
  135 CALL APDOE (NSPAN,IZ,NAEF1,NAEF2,ILW,NWW)
      IF (ILW .EQ. 0) GO TO 998
      IF (NWW .LT. 6) GO TO 998
      IF (MOD(NWW,2) .NE. 0) GO TO 998
      ILC1 = 0
      ILC2 = 0
      NWC1 = 0
      NWC2 = 0
      IF (.NOT.CNTRL1) GO TO 140
      CALL APDOE (NCHORD,IZ,N AEF1,NAEF2,ILC1,NWC1)
      IF (ILC1 .EQ. 0) GO TO 997
      IF (NWC1 .LT. 6) GO TO 997
      IF (MOD(NWC1,2) .NE. 0) GO TO 997
      IF (.NOT.CNTRL2) GO TO 140
      CALL APDOE (LSPAN,IZ,NAEF1,NAEF2,ILC2,NWC2)
      IF (ILC2 .EQ. 0) GO TO 996
      IF (NWC2 .LT. 6) GO TO 996
      IF (MOD(NWC2,2) .NE. 0) GO TO 996
  140 IHEAD( 8) = NWW/2
      IHEAD( 9) = NWC1/2
      IHEAD(10) = NWC2/2
      IHEAD( 2) = IHEAD(8)+IHEAD(9)+IHEAD(10)
      NK = NK + IHEAD(2)
      NJ = NJ + IHEAD(2)
      IZ(CA3S+N+4) = IHEAD(2)
      IZ(CA3S+N+5) = 1
C
C     START THE ACPT AND ADD THE CONTROL POINTS IN A LOOP
C
      CALL WRITE (ACPT,IHEAD,10,0)
      CALL WRITE (ACPT,BND,24,0)
      EIDB = EID - 1
      KK  = 2
      NN  = NWW
      KKK = ILW - 1
      ASSIGN 150 TO RET
      GO TO 190
  150 IF (IHEAD(9) .EQ. 0) GO TO 180
      ASSIGN 160 TO RET
      NN  = NWC1
      KKK = ILC1 - 1
      GO TO 190
  160 IF (IHEAD(10) .EQ. 0) GO TO 180
      ASSIGN 180 TO RET
      NN  = NWC2
      KKK = ILC2 - 1
      GO TO 190
  180 CALL WRITE (ACPT,0,0,1)
C
C     GEOMETRY CHECKS
C
      NM = 0
      IF (BND(1) .GT.  BND(3)) NM = 1
      IF (BND(3) .GT.  BND(5)) NM = 1
      IF (BND(15).GT. BND(17)) NM = 1
      IF (CNTRL2 .AND. BND(17).GT.BND(19)) NM = 1
      IF (BND(16) .LT. BND(14)) NM = 1
      IF (BND(18) .LT. BND(22)) NM = 1
      IF (BND(20) .LT. BND(24)) NM = 1
      IF (NM .EQ. 1) NOGO = 1
      IF (NM .EQ. 1) WRITE (NOT,1851) UFM,EID
 1851 FORMAT (A23,' 2278, PLANFORM GEOMETRY FOR CAERO3 ID',I9,
     1       ' IS IN ERROR', /5X,'CHECK SWEEP  ANGLE FOR LEADING EDGE ',
     2       'OR CONTROL SURFACE HINGE LINE.')
      GO TO 400
C
C     PUT CONTROL POINTS IN TABLE
C
  190 J = 2
  195 CONTINUE
      VX1(1) = Z(KKK+J  )
      VX1(2) = Z(KKK+J+1)
      CALL WRITE (ACPT,VX1,2,0)
      ASSIGN 200 TO BACK
      GO TO 300
  200 CONTINUE
      J = J + 2
      IF (J .LE. NN) GO TO 195
      GO TO RET, (150,160,180)
C
C     BGPA  GPL  USET
C
  300 CALL GMMATS (ACPL,3,3,0,VX1,3,1,0,VX2)
      DO 310 K = 1,3
  310 VX2(K) = VX2(K) + RB1(K)
      CALL WRITE (BGPA,ACSIX,4,0)
      IF (KK .EQ. 2) GO TO 320
      CIDBX = CIDBX + 1
      ICID  = CIDBX
      GO TO 330
  320 EIDB  = EIDB + 1
      ICID  = EIDB
  330 CALL WRITE (GPLA,ICID,1,0)
      CALL WRITE (USETA,AUSET(1,KK),6,0)
C
C     SIL AND EQEXIN
C
      NCRD  = NCRD + 1
      SILC  = SILC + 6
      ISILN = ISILN + 6
      LUSETA= SILC
      SILDX(2) = 10*SILC + 1
      CALL WRITE (SILA,SILC,1,0)
      CALL WRITE (SCR2,ISILN,1,0)
      CALL WRITE (SCR2,SILC,1,0)
      CALL WRITE (SCR1,ICID,2,0)
      GO TO BACK, (50,60,70,80,90,100,101,102,103,104,105,120,200)
  400 CONTINUE
      SILB = SILC
      IF (NOGO .EQ. 1) GO TO 1001
 1000 RETURN
C
C     ERROR MESSAGES
C
  996 I = LSPAN
      GO TO 9941
  997 I = NCHORD
      GO TO 9941
  998 I = NSPAN
 9941 WRITE  (NOT,9942) UFM,I,EID
 9942 FORMAT (A23,' 2429, WRONG NUMBER OF WORDS OR CARD NOT FOUND FOR ',
     1       'CARD ID',I9, /29X,'ASSOCIATED WITH CAERO3 ID',I9)
      GO TO 1001
  999 CALL EMSG (0,2323,1,2,0)
      WRITE  (NOT,891) PID,EID
  891 FORMAT (10X,16HPAERO3 CARD NO. ,I8,31H REFERENCED BY CAERO3 CARD N
     *O. ,I8,15H DOES NOT EXIST)
 1001 CALL MESAGE (-61,0,NAM)
      GO TO 1000
      END