File: pidck.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 (248 lines) | stat: -rw-r--r-- 7,896 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
      SUBROUTINE PIDCK (PFILE,GEOM2,NOPID,Z)
C
C     THIS ROUTINE CHECKS THE UNIQUNESS OF PROPERTY IDS FOR ALL ELEMENTS
C     THAT HAVE PID FIELDS
C
C     IT SHOULD BE CALLED ONLY ONCE BY IFP
C     IT DOES NOT OPEN NOR CLOSE ANY GINO FILE.
C
C     DESIGN REQUIREMENT -
C
C     IF PID IS REFERENCED BY AN ELEMENT, THE PID MUST RESIDE ON THE
C     THIRD FIELD OF THE ELEMENT INPUT CARD.
C     INPUT FILES - GEOM2 AND PROPERTY FILE (EPT).
C
C     THIS VERSION INCLUDES SPECIAL HANDLING OF THE CQUAD4 AND CTRIA3
C     ELEMENTS WHICH USE AND SHARE MORE THAN ONE STANDARD PROPERTY CARD.
C     THE PROPERTY TYPE IDS OF THE PSHELL, PCOMP, PCOMP1 AND PCOMP2
C     MUST NOT BE INTERRUPTED BY ANOTHER PROPERTY TYPE. (I.E. NO OTHER
C     PROPERTY TYPE SHOULD HAVE AN ID PLACED IN BETWEEN 5502 THRU 5802).
C     NOTICE THAT THE PSHELL CARD HAS FIXED LENGTH WHILE THE 3 PCOMPI
C     CARDS HAVE VARIABLE LENGTH.
C
C     WRITTEN BY G.CHAN/UNISYS, SEPT. 1983
C
      LOGICAL         ABORT
      INTEGER         PFILE,    GEOM2,    Z(1),     NAME(2),
     1                FLAG,     X(3),     QUAD4,    PSHELL,
     2                PCOMP(3)
      CHARACTER       UFM*23,   UWM*25,   UIM*29
      COMMON /XMSSG / UFM,      UWM,      UIM
      COMMON /SYSTEM/ IBUF,     NOUT,     ABORT,    SKIP(42),
     1                KDUM(9)
      COMMON /GPTA1 / NELEM,    LAST,     INCR,     NE(1)
      DATA    QUAD4 , PSHELL,   PCOMP                      /
     1         5408 , 5802,     5502,     5602,     5702   /
      DATA    NAME  / 4HPIDC,   4HK       /
C
C     UPDATE /GPTA1/ IF DUMMY ELEMENTS ARE PRESENT
C
      DO 90 I = 1,9
      IF (KDUM(I) .EQ. 0) GO TO 90
      K  = KDUM(I)
      NG = K/10000000
      NC = (K-NG*10000000)/10000
      NP = (K-NG*10000000 - NC*10000)/10
      K  = (51+I)*INCR
      NE(K+ 6) = 2 + NG + NC
      NE(K+ 9) = 2 + NP
      NE(K+10) = NG
 90   CONTINUE
C
C     CREATE A PROPERTY ID TABLE IN Z FROM /GPTA1/ DATA BLOCK FOR THOSE
C     ELEMENTS THAT HAVE PROPERTY CARDS
C     4 WORDS PER ENTRY
C       WORD 1, PROPERTY TYPE CODE  (EPT-ID)
C       WORD 2, LENGTH OF PROPERTY CARD  (EPTWDS)
C       WORD 3, ELEMENT TYPE CODE   (ECT-ID)
C       WORD 4, LENGTH OF ELEMENT CARD (ECTWDS), PLUS POINTER TO GPTA1
C
      II = 0
      DO 100 I = 1,LAST,INCR
      IF (NE(I+6) .EQ. 0) GO TO 100
      Z(II+1) = NE(I+6)
      Z(II+2) =-NE(I+8)
      Z(II+3) = NE(I+3)
      Z(II+4) = NE(I+5)*10000 + I
      II = II + 4
 100  CONTINUE
C
C     ADD 3 MORE PROPERTY CARDS (PCOMP, PCOMP1, PCOMP2) FOR CQUAD4 (64)
C     AND CTRIA3
C     NOTE - THESE THREE ARE OPEN-ENDED, AND WE SET WORD 2 TO -8888
C          - WE GIVE THEM LOCALLY NEW QUAD4 IDS IN THE 3RD WORD, SO THAT
C            ELEMENT CQUAD4 AND ELEMENT CTRIA3 WILL PICK THEM UP VIA
C            THE PSEHLL DATA LATER.
C
      I = (64-1)*INCR + 1
      IF (NE(I+3) .NE. QUAD4) CALL MESAGE (-37,0,NAME)
      DO 105 J = 1,3
      Z(II+1) = PCOMP(J)
      Z(II+2) = -8888
      Z(II+3) = QUAD4 - J
      Z(II+4) = NE(I+5)*10000 + I
      II = II + 4
 105  CONTINUE
C
C     SORT THIS 4-ENTRY Z-TABLE BY THE FIRST WORD.
C     SET WORD 2 TO -9999 IF ELEMENT USES THE SAME PROPERTY CARD AS THE
C     PREVIOUS ELEMENT.
C
      I4 = II/4
      CALL SORT (0,0,4,1,Z,II)
      DO 110 I = 5,II,4
      IF (Z(I) .EQ. Z(I-4)) Z(I+1) = -9999
 110  CONTINUE
C
C     READ FROM PFILE ALL PID INTO REMAINING CORE. REPLACE WORD 2 IN THE
C     Z-TABLE BY PID BEGIN-ENDING POINTERS
C
      JJ = II + 1
      IF (NOPID .EQ. 1) GO TO 210
      CALL REWIND (PFILE)
 120  CALL FWDREC (*360,PFILE)
 130  CALL READ (*190,*190,PFILE,X,3,0,FLAG)
C     2147483647  = 2**31-1
      IF (X(1) .EQ. 2147483647) GO TO 190
      CALL BISLOC (*120,X(1),Z,4,I4,K)
 140  KP1 = K + 1
      IF (Z(KP1) .NE. -9999) GO TO 150
      K = K - 4
      GO TO 140
 150  NWDS = -Z(KP1)
      IF (NWDS .LE. 0) GO TO 120
      KOMP = 0
      IF (NWDS .NE. 8888) GO TO 155
      KOMP = 1
      NWDS = 8
 155  Z(KP1) = (JJ*10000) + (JJ-1)
      JB = JJ
 160  CALL READ (*360,*130,PFILE,Z(JJ),NWDS,0,FLAG)
      IF (KOMP .EQ. 0) GO TO 167
 165  CALL READ (*360,*130,PFILE,J,1,0,FLAG)
      IF (J .NE. -1) GO TO 165
 167  JE = MOD(Z(KP1),10000)
      IF (JE .LT. JB) GO TO 180
      DO 170 J = JB,JE
      IF (Z(JJ) .EQ. Z(J)) GO TO 160
 170  CONTINUE
 180  Z(KP1) = Z(KP1) + 1
      JJ = JJ + 1
      GO TO 160
 190  CALL REWIND (PFILE)
      JJ = JJ - 1
      IF (JJ .LE. II) NOPID = -1
C
C     RESET THE PSHELL POINTERS TO INCLUDE THE PCOMP GROUP IDS.
C     MAKE SURE THIS GROUP ARE ALL TOGETHER, NOT SEPERATED BY OTHER
C     PROPERTY CARD
C     THERE ARE 2 PSHELL CARDS, ONE FROM CQUAD4 AND ONE FROM CTRIA3,
C     MAKE SURE THE FIRST PSHELL POINTER IS USED
C
      CALL BISLOC (*210,PSHELL,Z,4,I4,KP1)
      IF (Z(KP1+1) .EQ. -9999) KP1 = KP1 - 4
      IF (Z(KP1- 4).NE.PCOMP(3) .OR. Z(KP1-8).NE.PCOMP(2) .OR.
     1    Z(KP1-12).NE.PCOMP(1)) GO TO 380
      J = Z(KP1+1)
      IF (J .LE. 0) J = 0
      JB = J/10000
      JE = MOD(J,10000)
      IF (JB .EQ. 0) JB = 9999999
      DO 200 I = 1,3
      CALL BISLOC (*370,PCOMP(I),Z,4,I4,K)
      IF (Z(K+1) .LE. 0) GO TO 200
      J = Z(K+1)/10000
      K = MOD(Z(K+1),10000)
      IF (J .LT. JB) JB = J
      IF (K .GT. JE) JE = K
 200  CONTINUE
      IF (JB .NE. 9999999) Z(KP1+1) = (JB*10000) + JE
C
C     RESET POINTERS FOR THOSE PROPERTY ID COMMON TO MORE THAN ONE TYPE
C     OF ELEMENTS, AND
C     MOVE THE THIRD ENTRY IN THE Z-TABLE TO FIRST, FOR ELEMENT SORT
C
 210  DO 220 I = 1,II,4
      Z(I) = Z(I+2)
      J = I + 1
      IF (Z(J) .GT. 0) GO TO 220
      IF (Z(J) .EQ. -9999) Z(J) = Z(J-4)
 220  CONTINUE
      CALL SORT (0,0,4,1,Z,II)
C
C     READ IN CONNECTING ELEMENTS, ONE BY ONE, FROM GEOM2 FILE, AND
C     CHECK THE EXISTENCE OF THE PROPERTY ID IF IT IS SPECIFIED.
C
      KK = JJ + 1
      CALL REWIND (GEOM2)
 230  CALL FWDREC (*360,GEOM2)
 240  CALL READ (*300,*300,GEOM2,X,3,0,FLAG)
      CALL BISLOC (*230,X(1),Z,4,I4,K)
      NWDS = Z(K+3)/10000
      IF (NWDS .LE. 0) GO TO 230
      J = Z(K+1)
      IF (J .LE. 0) GO TO 270
      JB = J/10000
      JE = MOD(J,10000)
 250  CALL READ (*360,*240,GEOM2,Z(KK),NWDS,0,FLAG)
      JJ1 = Z(KK+1)
      DO 260 J = JB,JE
      IZ = IABS(Z(J))
      IF (JJ1 .NE. IZ) GO TO 260
      Z(J) = -IZ
      GO TO 250
 260  CONTINUE
      CALL MESAGE (30,10,Z(KK))
      ABORT = .TRUE.
      GO TO 250
 270  J = MOD(Z(K+3),10000)
      CALL MESAGE (30,11,NE(J))
      ABORT = .TRUE.
      GO TO 230
 300  CALL REWIND (GEOM2)
      IF (ABORT .OR. NOPID.NE.0) GO TO 350
C
C     PREPARE AN ACTIVE PROPERTY ID LIST FOR SUBROUTINE MATCK
C
      J  = II + 1
      II = 1
      DO 320 I = J,JJ
      IF (Z(I) .GE. 0) GO TO 310
      II = II + 1
      Z(II) = -Z(I)
      GO TO 320
 310  Z(KK) = Z(I)
      KK = KK + 1
 320  CONTINUE
      Z(1) = II
C
C     Z(2,...II) CONTAINS A LIST OF ACTIVE PROPERTY IDS, UN-SORTED,
C     REFERENCED BY ELEMENTS IN GEOM2 FILE.  Z(1) = LENGTH OF THIS LIST
C
      JJ1 = JJ + 1
      KK  = KK - 1
      IF (KK .LT. JJ1) RETURN
      WRITE  (NOUT,330) UIM
 330  FORMAT (A29,', THE FOLLOWING PROPERTY IDS ARE PRESENT BUT NOT ',
     1        'USED -')
      WRITE  (NOUT,340) (Z(J),J=JJ1,KK)
 340  FORMAT (/5X,12I9)
      RETURN
C
C     SET Z(1) TO ZERO IF NO ACTIVE PROPERTY LIST EXISTS.
C
 350  Z(1) = 0
      RETURN
C
 360  J = -2
      GO TO 400
 370  WRITE  (NOUT,375)
 375  FORMAT ('0*** CAN NOT LOCATE PSHELL OR PCOMP DATA IN /GPTA1/')
      GO TO 390
 380  WRITE  (NOUT,385) Z(KP1),PSHELL,Z(KP1-4),PCOMP(3),
     1                  Z(KP1-8),PCOMP(2),Z(KP1-12),PCOMP(1)
 385  FORMAT ('0*** ERROR IN /GPTA1/ PCOMP ARRANGEMENT',(/3X,2I7))
 390  J = -37
 400  CALL MESAGE (J,0,NAME)
      RETURN
      END