File: cmdisc.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 (155 lines) | stat: -rw-r--r-- 4,121 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
      SUBROUTINE CMDISC
C
C     THIS SUBROUTINE DETERMINES THE DISCONNECTED DEGREES OF FREEDOM
C     AND GENERATES  DISCONNECTION ENTRIES  WHICH ARE MERGED WITH THE
C     CONNECTION ENTRIES
C
      EXTERNAL        ORF
      INTEGER         SCSFIL,Z,SCORE,COMBO,IPTR(7),SCCONN,BUF3,CE(9),
     1                ORF,SCDISC,DE(9),AAA(2),SCR1,SCR2,BUF2,OUTT
      COMMON /CMB001/ SCR1,SCR2,SCBDAT,SCSFIL,SCCONN,SCMCON,SCTOC,
     1                GEOM4,CASECC
      COMMON /CMB002/ BUF1,BUF2,BUF3,BUF4,BUF5,SCORE,LCORE,INPT,OUTT
      COMMON /CMB003/ COMBO(7,5),CONSET,IAUTO,TOLER,NPSUB
      COMMON /CMB004/ TDAT(6),NIPNEW
      COMMON /ZZZZZZ/ Z(1)
      DATA    AAA   / 4HCMDI,4HSC   /
C
C
      NWD = NPSUB+2
      ISVCOR = SCORE
      ITOT = 0
      ILEN = LCORE
      NN = 0
      KK = SCORE
      CALL OPEN (*200,SCSFIL,Z(BUF3),0)
C
C     LOOP ON THE NUMBER OF PSEUDO STRUCTURES READING THE SIL,C TABLE
C     INTO CORE FOR EACH.  THE ARRAY IPTR(I) POINTS TO THE START OF
C     THE I-TH TABLE IN CORE
C
      DO 40 I = 1,NPSUB
      NCSUB = COMBO(I,5)
C
C     FIND SIL, C TABLE
C
      DO 10 J = 1,NCSUB
      CALL FWDREC (*210,SCSFIL)
   10 CONTINUE
      KK = KK + NN
      IPTR(I) = KK
      CALL READ (*210,*20,SCSFIL,Z(KK),LCORE,1,NN)
      GO TO 220
C
C     ZERO OUT SIL VALUES, LOCATION WILL STORE CNEW
C
   20 DO 30 J = 1,NN,2
      Z(KK+J-1) = 0
   30 CONTINUE
      LCORE = LCORE - NN
      ITOT  = ITOT + NN
      CALL SKPFIL (SCSFIL,1)
   40 CONTINUE
      CALL CLOSE (SCSFIL,1)
C
C     ALL EQSS HAVE BEEN PROCESSED, NOW SCAN THE CONNECTION ENTRIES
C     AND GET CNEW VALUES.
C
      CALL OPEN (*200,SCCONN,Z(BUF3),0)
C
C     READ AND PROCESS CONNECTION ENTRIES ONE AT A TIME
C
   50 CALL READ (*80,*60,SCCONN,CE,10,1,NN)
   60 DO 70 I = 1,NPSUB
      IF (CE(2+I) .EQ. 0) GO TO 70
C
C     TRANSLATE CODED IP TO ACTUAL IP, COMPUTE LOCATION IN OPEN CORE
C     AND UPDATE CNEW
C
      IP = CE(2+I) - 1000000*(CE(2+I)/1000000)
      LOC = IPTR(I) + 2*IP - 2
      Z(LOC) = ORF(Z(LOC),CE(1))
   70 CONTINUE
      GO TO 50
C
C     ALL CONNECTIONS HAVE BEEN ACCOUNTED FOR,NOW DETERMINE DISCONN.
C
   80 CONTINUE
      SCDISC = SCR1
      IF (SCR1 .EQ. SCCONN) SCDISC = SCR2
      CALL OPEN (*200,SCDISC,Z(BUF2),1)
      DO 130 I = 1,NPSUB
      IF (I .LT. NPSUB) LEN = IPTR(I+1) - IPTR(I)
      IF (I .EQ. NPSUB) LEN = ITOT - IPTR(I)
      ISTRT = IPTR(I)
      DO 120 J = 1,LEN,2
      DO 90 KDH = 1,9
      DE(KDH) = 0
   90 CONTINUE
      IP  = J/2 + 1
      LOC = ISTRT + J - 1
C
C     POINT IS TOTALLY DISCONNECTED
C
      IF (Z(LOC) .EQ. Z(LOC+1)) GO TO 120
      IF (Z(LOC) .NE. 0) GO TO 100
C
C     POINT IS TOTALLY CONNECTED
C
      DE(1) = Z(LOC+1)
      DE(2) = 2**I
      DE(2+I) = IP
      GO TO 110
C
C     POINT IS PARTIALLY DISCONNECTED
C
  100 DE(1) = Z(LOC+1) - Z(LOC)
      DE(2) = 2**I
      DE(2+I) = IP
  110 CALL WRITE (SCDISC,DE,NWD,1)
  120 CONTINUE
  130 CONTINUE
      CALL EOF (SCDISC)
      CALL CLOSE (SCDISC,1)
      KK = SCORE
      LCORE = ILEN
      CALL OPEN (*200,SCDISC,Z(BUF2),0)
      CALL REWIND (SCCONN)
      ID = 1
  140 CALL READ (*150,*160,SCDISC,Z(KK),LCORE,1,NNN)
      GO TO 220
  150 ID = 2
      CALL READ (*170,*160,SCCONN,Z(KK),LCORE,1,NNN)
      GO TO 220
  160 KK = KK + NWD
      LCORE = LCORE - NWD
      IF (LCORE .LT. NWD) GO TO 220
      IF (ID .EQ. 1) GO TO 140
      GO TO 150
  170 CALL CLOSE (SCCONN,1)
      CALL CLOSE (SCDISC,1)
      CALL OPEN (*200,SCCONN,Z(BUF3),1)
      LEN = KK - SCORE
      NIPNEW = LEN/NWD
      DO 180 I = 1,LEN,NWD
      Z(SCORE+I) = IABS(Z(SCORE+I))
  180 CONTINUE
      CALL SORT (0,0,NWD,2,Z(SCORE),LEN)
      DO 190 I = 1,LEN,NWD
      CALL WRITE (SCCONN,Z(SCORE+I-1),NWD,1)
  190 CONTINUE
      CALL EOF (SCCONN)
      CALL CLOSE (SCCONN,1)
      CALL CLOSE (SCDISC,1)
      SCORE = ISVCOR
      LCORE = ILEN
      RETURN
C
  200 IMSG = -1
      GO TO 230
  210 IMSG = -2
      GO TO 230
  220 IMSG = -8
  230 CALL MESAGE (IMSG,IFILE,AAA)
      RETURN
      END