File: modac1.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 (222 lines) | stat: -rw-r--r-- 5,200 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
      SUBROUTINE MODAC1(CASECC,TOL,TOL1,CASEZZ,CASEYY)
C
C     MODAC1 REDUCES THE NUMBER OF ENTRIES ON TOL TO THE TIMES
C         SPECIFIED BY THE OFREQ SET IN CASECC
C
C     CORE IS        OUT AS FOLLOWS ON RETURN
C
C         CONTENTS            LENGTH  TYPE   POINTER
C         --------            ------  ----   -------
C         NEW TIMES           NFN      R     IFN
C         KEEP REMOVE         NFO      I     IKR
C
C
C
C
C
C
C
C
C
C
C
C
C
      INTEGER SYSBUF,CASECC,TOL,NAME(2),TOL1,FILE,IHD(2),MCB(7),IBUF(6)
      INTEGER CASEZZ,CASEYY,FLAG
      REAL  Z(1)
      COMMON /SYSTEM/ SYSBUF
      COMMON /MODAC3/ NFO,NFN,NZ, ID
      COMMON /ZZZZZZ/ IZ(1)
      EQUIVALENCE   ( Z(1), IZ(1) )
      DATA NAME /4HMODA,4HC1  /
C
C     BRING  IN  CASECC
C
      LW = 6
      IF(ID .EQ. 4) LW = 7
      IBUF1 = NZ -SYSBUF+1
      IBUF2 = IBUF1-SYSBUF
      IBUF3 = IBUF2 -SYSBUF
      CALL GOPEN(CASECC,IZ(IBUF1),0)
      FILE = CASECC
      CALL READ(*900,*10,CASECC,IZ,IBUF2-1,0,IVEC)
      CALL MESAGE(-8,0,NAME)
   10 CONTINUE
      ICC = 0
      CALL CLOSE(CASECC, 1)
      IFROUT =145
      ILSYM = 200
      IVEC  = IVEC+1
      ILIST = IVEC
      IF(ID .EQ. 5) GO TO 600
C
C     BRING IN OLD TIME/FREQ  LIST
C
      FILE = TOL
      CALL OPEN(*900,TOL,IZ(IBUF1),0)
      I = ILIST
      M = 3
      IX= 2
      NFO = NFO + I
      IF(ID .EQ. 2 .OR. ID .EQ. 4) GO TO 25
   20 CALL READ(*910,*30,TOL,IBUF,M,0,FLAG)
      IZ(I) =IBUF(M)
      IZ(I+1)= 0
      I =  I + IX
      M =1
      GO TO 20
   25 CALL FWDREC(*910,TOL)
      CALL FWDREC(*910,TOL)
   26 CALL READ(*910,*30,TOL,IBUF,LW,0,FLAG)
      IZ(I) = IBUF(4)
C     REIG SHOULD BE ON CYCLES
      IF(ID .EQ. 4) IZ(I) = IBUF(5)
      IZ(I+1) = 0
      I = I+2
      IF(I.EQ.NFO) GO TO 30
      GO TO 26
   30 CALL CLOSE(TOL,1)
      NLIST = I -IX
C
C     MATCH LIST OF  SELECTED VALUES WITH TIME LIST IN CORE
C
   35 CONTINUE
      IX = ICC + IFROUT
      IFSET = IZ(IX)
      IF ( IFSET  .LE. 0)  GO TO  70
      IX = ICC +ILSYM
      ISETNF = IX + IZ(IX)+1
   40 ISETF  = ISETNF +2
      NSETF  =IZ(ISETNF+1) + ISETF-1
      IF( IZ(ISETNF).EQ. IFSET) GO TO 80
      ISETNF = NSETF +1
      IF ( ISETNF .LT. IVEC) GO TO 40
      IFSET = -1
   70 DO  75 J = ILIST,NLIST,2
   75 IZ(J+1) = 1
      GO TO 200
   80 DO 100 I = ISETF,NSETF
      K = 0
      DIFF = 1.E25
      REAL = Z(I)
      DO 90  J = ILIST,NLIST,2
      IF (IZ(J+1) .NE. 0) GO TO 90
      DIFF1 =  ABS(Z(J) - REAL)
      IF( DIFF1 .GE. DIFF) GO TO 90
      DIFF = DIFF1
      K = J
   90 CONTINUE
      IF ( K .NE. 0)  IZ(K+1) = 1
  100 CONTINUE
C
C     SELECTED FREQUENCIES MARKED FOR OUTPUT
C
  200 NFO =(NLIST - ILIST +2)/2
C
C     MOVE NEW FREQ  TO UPPER
C
      K=1
      DO 300 I= ILIST,NLIST,2
      IF( IZ(I+1).EQ. 0) GO TO 300
      Z(K) = Z(I)
      K = K +1
  300 CONTINUE
      NFN = K-1
      DO 400  I = ILIST,NLIST,2
      IZ(K) = IZ(I+1)
      K = K+1
  400 CONTINUE
      IF(ID .EQ. 5) RETURN
      FILE =TOL1
      CALL OPEN(*800,TOL1,IZ(IBUF1),1)
      CALL FNAME(TOL1,IHD)
      CALL WRITE(TOL1,IHD,2,0)
      IF(ID .EQ. 2 .OR. ID .EQ. 4) GO TO 402
      CALL WRITE(TOL1,Z,NFN,1)
  401 CONTINUE
      CALL CLOSE(TOL1,1)
      MCB(1)= TOL1
      MCB(2)= NFN
      CALL WRTTRL(MCB )
      IF(ID .EQ. 2) GO TO 500
  800 RETURN
C
C     COPY OVER CLAMA STUFF
C
  402 CALL WRITE(TOL1,0,0,1)
      K = NFN + NFO + 1
      NZX  = IBUF3 -K
      FILE = TOL
      CALL GOPEN(TOL,IZ(IBUF2),0)
      CALL READ(*910,*920,TOL,IZ(K),146,1,FLAG)
      CALL WRITE(TOL1,IZ(K),146,1)
      M = NFN+1
      N = M+NFO -1
      DO 410 I = M,N
      CALL READ(*910,*920,TOL,IZ(K),LW,0,FLAG)
      IF(IZ(I) .EQ. 0) GO TO 410
      CALL WRITE(TOL1,IZ(K),LW,0)
  410 CONTINUE
      CALL CLOSE(TOL,1)
      CALL WRITE(TOL1,0,0,1)
      GO TO 401
C
C      COPY OVER CASECC
C
  500 CALL GOPEN(CASECC,IZ(IBUF1),0)
      CALL GOPEN(CASEZZ,IZ(IBUF2),1)
      M = NFN +1
      N = M+NFO-1
      DO 510 I = M,N
      CALL READ(*511,*520,CASECC,IZ(K),NZX,0,FLAG)
  520 IF(IZ(I) .EQ. 0) GO TO 510
      CALL WRITE(CASEZZ,IZ(K),FLAG,1)
  510 CONTINUE
  511 CALL CLOSE(CASECC,1)
      CALL CLOSE(CASEZZ,1)
      MCB(1) = CASECC
      CALL RDTRL(MCB)
      MCB(1) = CASEZZ
      CALL WRTTRL(MCB)
      RETURN
C
C     STATIC ANALYSIS
C
  600 CONTINUE
      R = 1.0
      NFO = NFO+ILIST
      NLIST = NFO-2
      DO 610 I = ILIST,NFO,2
      Z(I) = R
      IZ(I+1) = 0
      R = R+1.
  610 CONTINUE
C
C     COPY EDT
C
      CALL OPEN(*670,TOL,IZ(IBUF1),0)
      CALL OPEN(*670,TOL1,IZ(IBUF2),1)
      FILE = TOL
      CALL FNAME(TOL1,IHD)
      CALL WRITE(TOL1,IHD,2,0)
  620 CALL READ(*630,*920,TOL,IZ(NFO+2),NZ,0,FLAG)
      CALL WRITE(TOL1,IZ(NFO+2),FLAG,1)
      GO TO 620
  630 CALL CLOSE(TOL,1)
      CALL CLOSE(TOL1,1)
      MCB(1) = TOL
      CALL RDTRL(MCB)
      MCB(1) = TOL1
      CALL WRTTRL(MCB)
  670 GO TO 35
C
C     ERROR MESSAGES
C
  900 IP1=-1
  901 CALL MESAGE(IP1,FILE,NAME)
  910 IP1=-2
      GO TO 901
  920 IP1=-3
      GO TO 901
      END