File: cmcomb.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 (190 lines) | stat: -rw-r--r-- 5,206 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
      SUBROUTINE CMCOMB (NPS,NENT,NDOF,IC)
C
C     THIS SUBROUTINE COMBINES CONNECTION ENTRIES THAT HAVE BEEN SPECIFI
C     ON SEVERAL CONCT OR CONCT1 CARDS.
C
      EXTERNAL        ORF
      LOGICAL         MATCH
      INTEGER         CE(9),CEID,SCCONN,SCMCON,BUF1,BUF2,SAVCE,ORF,Z,
     1                SCR2,BUF3,SCORE,COMSET,IO(10),SACONN,AAA(2)
      DIMENSION       IC(NENT,NPS,NDOF),LIST(32),KROW(6),IERTAB(2000)
      COMMON /CMB001/ SCR1,SCR2,JUNK(2),SCCONN,SCMCON
      COMMON /CMB002/ BUF1,BUF2,BUF3,JUNK1(2),SCORE,LCORE
      COMMON /ZZZZZZ/ Z(1)
      COMMON /BLANK / ISTEP,IDRY
      DATA    AAA   / 4HCMCO,4HMB   /
C
C     CE IS THE CONNECTION ENTRY
C     KROW(I) IS THE NO. OF ROWS IN THE ITH DOF MATRIX
C
      IERSUB = 0
      ITOMNY = 0
      IFILE  = SCCONN
      CALL OPEN (*400,SCCONN,Z(BUF1),0)
      IFILE = SCMCON
      CALL OPEN (*400,SCMCON,Z(BUF2),0)
      NREC  = -1
      NPSS  = NPS - 1
      NWORD = NPS + 1
      IENT  = 0
      DO 10 I = 1,6
   10 KROW(I) = 0
      SAVCE = 0
   20 CALL READ (*410,*190,SCMCON,CEID,1,0,NNN)
      NREC  = CEID - SAVCE - 1
      SAVCE = CEID
C
C     GO FIND ENTRY NO. CEID
C
      IFILE = SCCONN
      IF (NREC .EQ. 0) GO TO 40
      DO 30 I = 1,NREC
      CALL FWDREC (*420,SCCONN)
   30 CONTINUE
C
C     READ IN CONNECTION ENTRY
C
   40 CALL READ (*410,*50,SCCONN,CE,10,1,NNN)
C
C     FIND WHICH DOF ARE PRESENT IN CONNECTION ENTRY
C
   50 CALL DECODE (CE(1),LIST,NCOMP)
      DO 180 I = 1,NCOMP
      ICOMP = LIST(I) + 1
      IF (KROW(ICOMP) .EQ. 0) GO TO 170
C
C     FIND FIRST NON-ZERO ENTRY IN CURRENT CE
C
      DO 60 J = 1,NPSS
      IF (CE(J+2) .EQ. 0) GO TO 60
      ISUB = J
      GO TO 70
   60 CONTINUE
C
C     NOW HAVE FOUND FIRST NON-ZERO, SEARCH FOR POSSIBLE
C     MATCHING ENTRIES IN MATRIX
C
   70 NLOOP = KROW(ICOMP)
      DO 140 J = 1,NLOOP
      MATCH  = .FALSE.
      NERSUB = 0
      DO 110 JJ = ISUB,NPSS
      IF (IC(J,JJ,ICOMP).EQ.0 .OR. CE(JJ+2).EQ.0) GO TO 110
      IF (IC(J,JJ,ICOMP)-CE(JJ+2)) 80,100,80
   80 IF (IERSUB+NERSUB .GT. 2000) ITOMNY = 1
      IF (IERSUB+NERSUB .GT. 2000) GO TO 90
      IERTAB(IERSUB+NERSUB+1) = ICOMP
      IERTAB(IERSUB+NERSUB+2) = JJ
      IERTAB(IERSUB+NERSUB+3) = IC(J,JJ,ICOMP)
      IERTAB(IERSUB+NERSUB+4) = CE(JJ+2)
      NERSUB = NERSUB + 4
   90 CONTINUE
      GO TO 110
  100 MATCH = .TRUE.
  110 CONTINUE
      IF (MATCH) IERSUB = IERSUB + NERSUB
      IF (.NOT.MATCH) GO TO 140
      DO 130 JJ = ISUB,NPSS
      IF (CE(JJ+2).NE.0 .AND. IC(J,JJ,ICOMP).NE.0) GO TO 130
      IC(J,JJ,ICOMP) = IC(J,JJ,ICOMP) + CE(JJ+2)
  130 CONTINUE
      IC(J,NPSS+1,ICOMP) = ORF(IC(J,NPSS+1,ICOMP),CE(2))
      GO TO 180
  140 CONTINUE
  150 DO 160 JJ = 1,NPSS
      IC(NLOOP+1,JJ,ICOMP) = CE(JJ+2)
  160 CONTINUE
      IC(NLOOP+1,NPSS+1,ICOMP) = CE(2)
      KROW(ICOMP) = KROW(ICOMP) + 1
      GO TO 180
  170 NLOOP = 0
      GO TO 150
  180 CONTINUE
      GO TO 20
  190 CONTINUE
      IF (IERSUB .EQ. 0) GO TO 200
C
C     GENERATE ERROR TABLE AND TERMINATE
C
      CALL CLOSE (SCCONN,1)
      CALL CLOSE (SCMCON,1)
      CALL CMTRCE (IERTAB,IERSUB,ITOMNY)
      IDRY = -2
      RETURN
C
  200 CONTINUE
      CALL CLOSE (SCCONN,1)
      IFILE = SCR2
      CALL OPEN (*400,SCR2,Z(BUF3),1)
      DO 240 K = 1,NDOF
      IROW = KROW(K)
      IF (IROW) 240,240,210
  210 DO 230 I = 1,IROW
      IO(1) = K
      IO(2) = IC(I,NPS,K)
      DO 220 J = 1,NPSS
      IO(J+2) = IC(I,J,K)
  220 CONTINUE
      CALL WRITE (SCR2,IO(1),NPS+1,0)
  230 CONTINUE
  240 CONTINUE
      CALL WRITE (SCR2,IO(1),0,1)
      CALL CLOSE (SCR2,1)
      CALL OPEN (*400,SCR2,Z(BUF3),0)
      CALL READ (*410,*250,SCR2,Z(SCORE),LCORE,1,NWD)
      GO TO 430
  250 CALL SORT (0,0,NPS+1,2,Z(SCORE),NWD)
      CALL CLOSE (SCR2,1)
      CALL OPEN (*400,SCR2,Z(BUF3),1)
      IFIN = SCORE + NWD - 1
      IINC = NPS + 1
      DO 310 I = SCORE,IFIN,IINC
      IF (Z(I)) 260,310,260
  260 COMSET = Z(I)
      IBEG = I + IINC
      DO 280 J = IBEG,IFIN,IINC
      IF (Z(J) .EQ. 0) GO TO 280
      IF (Z(J+1) .GT. Z(I+1)) GO TO 290
      DO 270 K = 1,NPSS
      IF (Z(I+K+1) .NE. Z(J+K+1)) GO TO 280
  270 CONTINUE
      COMSET = 10*COMSET+Z(J)
      Z(J) = 0
  280 CONTINUE
  290 CALL ENCODE (COMSET)
      IO(1) = COMSET
      DO 300 KK = 1,NPS
      IO(1+KK) = Z(I+KK)
  300 CONTINUE
      CALL WRITE (SCR2,IO,NPS+1,1)
  310 CONTINUE
      CALL REWIND (SCMCON)
      IFILE = SCMCON
      CALL READ (*410,*320,SCMCON,Z(SCORE),LCORE,1,NMCON)
  320 NCE = 0
      SACONN = SCCONN
      CALL OPEN (*400,SCCONN,Z(BUF1),0)
  330 CALL READ (*360,*340,SCCONN,CE,10,1,NNN)
  340 NCE = NCE + 1
      DO 350 I = 1,NMCON
      IF (NCE .EQ. Z(SCORE+I-1)) GO TO 330
  350 CONTINUE
      CALL WRITE (SCR2,CE,NPS+1,1)
      GO TO 330
  360 CALL CLOSE (SCMCON,1)
      CALL CLOSE (SCCONN,1)
      CALL CLOSE (SCR2,1)
      SCCONN = SCR2
      SCR2   = SACONN
      RETURN
C
  400 IMSG = -1
      GO TO 440
  410 IMSG = -2
      GO TO 440
  420 IMSG = -3
      GO TO 440
  430 IMSG = -8
  440 CALL MESAGE (IMSG,IFILE,AAA)
      RETURN
      END