File: case.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 (192 lines) | stat: -rw-r--r-- 5,274 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
      SUBROUTINE CASE
C
C     CASE READS THE CASE CONTROL DATA BLOCK AND WRITES A NEW
C     DATA BLOCK WHICH CONTAINS ONLY THOSE RECORDS WHICH DESCRIBE THE
C     CURRENT CASE IN THE LOOP. ADDITIONALLY, THE LOOP CONTROL PARAMETER
C     IS SET.
C
C
      INTEGER         APP    ,COUNT  ,SYSBUF,CASECC,CASEXX,FILE  ,Z    ,
     1                BUF1   ,BUF2   ,RFMTS ,BRANCH,BUF   ,ERROR(2)
      INTEGER         BUF3   ,PSDL
      DIMENSION       NAM(2) ,BUF(20),MCB(7),RFMTS(40)
      COMMON /BLANK / APP(2) ,COUNT  ,LOOP
      COMMON /SYSTEM/ SYSBUF
      COMMON /NAMES / RD     ,RDREW  ,WRT   ,WRTREW,CLSREW
      COMMON /ZZZZZZ/ Z(1)
C
C     DATA DESCRIBING DATA BLOCK FILE NAMES AND POSITION
C     OF PARAMETERS IN THE CASE CONTROL RECORD.
C
      DATA   CASECC / 101/ ,CASEXX /201/ ,IK2PP  /139/ ,IM2PP /141/ ,
     1       IB2PP  / 143/ ,ITFL   / 15/ ,PSDL   /102/ ,IRAND /163/
      DATA   ERROR  / 4HPSDL,4HCASE/
      DATA   IFREQ  / 14/  ,IMETH  /  5/
C
C     DATA DEFINING RIGID FORMATS.
C
      DATA   NRIGDS / 10   /, RFMTS  /
     1                4HSTAT,4HICS , 4HREIG,4HEN  , 4HDS0 ,4H    ,
     2                4HDS1 ,4H    , 4HFREQ,4H    , 4HTRAN,4HSNT ,
     3                4HBKL0,4H    , 4HBKL1,4H    , 4HCEIG,4HEN  ,
     4                4HPLA ,4H    , 20*0  /
C
C     MISC DATA
C
      DATA   NAM    / 4HCASE,4H    /, MCB    / 7*0  /
C
C     PERFORM BUFFER ALLOCATION.
C
      BUF1  = KORSZ(Z) - SYSBUF + 1
      BUF3  = BUF1 - SYSBUF
      BUF2  = BUF3 - SYSBUF
      IRY   = 0
      M8    = -8
      IF (COUNT .LE. 0) COUNT = 1
      LOOP  = 1
      IOCNT = COUNT
C
C     SET PARAMETER FOR APPROACH.
C
      N = 2*NRIGDS - 1
      DO 20 I = 1,N,2
      IF (RFMTS(I) .EQ. APP(1)) GO TO 30
   20 CONTINUE
      CALL MESAGE (30,75,APP)
      I = 19
   30 BRANCH = (I+1)/2
C
C     OPEN CASECC. SKIP RECORDS ALREADY PROCESSED. OPEN CASEXX.
C     WRITE HEADER RECORD. THEN BRANCH ON APPROACH.
C
      FILE = CASECC
      CALL OPEN (*130,CASECC,Z(BUF1),RDREW)
      DO 40 I = 1,COUNT
   40 CALL FWDREC (*140,CASECC)
      FILE = CASEXX
      CALL OPEN  (*130,CASEXX,Z(BUF2),WRTREW)
      CALL FNAME (CASEXX,BUF)
      CALL WRITE (CASEXX,BUF,2,1)
      GO TO (120,50,120,120,50,100,120,120,50,120), BRANCH
C
C     COMPLEX EIGENVALUES OR FREQUENCY RESPONSE.
C
   50 CALL READ (*140,*60,CASECC,Z,BUF2,1,NCC)
      CALL MESAGE (M8,0,NAM)
   60 BUF(1) = Z(IK2PP  )
      BUF(2) = Z(IK2PP+1)
      BUF(3) = Z(IM2PP  )
      BUF(4) = Z(IM2PP+1)
      BUF(5) = Z(IB2PP  )
      BUF(6) = Z(IB2PP+1)
      BUF(7) = Z(ITFL)
      IRSET  = Z(IRAND)
      IFRQST = Z(IFREQ)
      IMRQST = Z(IMETH)
      IF (BRANCH.EQ.5 .AND. IRSET.NE.0) IRY = 1
      IF (IRY .EQ. 0) GO TO 70
C
C     BUILD LIST OF UNIQUE LOAD ID-S
C
      FILE = PSDL
      CALL OPEN (*68,PSDL,Z(BUF3),RDREW)
      CALL FWDREC (*90,PSDL)
      ILS  = BUF2
      ILF  = BUF2 - 1
   61 CALL READ (*90,*66,PSDL,Z(NCC+1),6,0,J)
      IF (Z(NCC+1) .NE. IRSET) GO TO 61
      J = 1
      ILOAD = Z(NCC+2)
      IF (ILS .EQ. ILF+1) GO TO 63
   65 DO 62 I = ILS,ILF
      IF (Z(I) .EQ. ILOAD) GO TO 64
   62 CONTINUE
C
C     NEW LOAD ID
C
   63 ILS = ILS - 1
      Z(ILS) = ILOAD
   64 IF (J .EQ. 0) GO TO 61
      J = 0
      ILOAD = Z(NCC+3)
      GO TO 65
C
C     END OF PSDL RECORD
C
   66 CALL CLOSE (PSDL,CLSREW)
      IF (ILS .EQ. ILF+1) CALL MESAGE (-31,IRSET,ERROR(1))
      BUF2 = ILS - 1
      GO TO 70
C
C     NO PSDL IS EQUIVALENT TO NO RANDOM
C
   68 IRY = 0
   70 CALL WRITE (CASEXX,Z,NCC,1)
      COUNT = COUNT + 1
      IF (IRY .EQ. 0) GO TO 71
C
C     CHECK  SUBCASE ID-S
C
      DO 72 I = ILS,ILF
      IF (Z(1) .EQ. Z(I)) GO TO 74
   72 CONTINUE
      GO TO 71
C
C     MARK USED
C
   74 Z(I) = -Z(I)
   71 CONTINUE
      CALL READ (*90,*80,CASECC,Z,BUF2,1,NCC)
      CALL MESAGE (M8,0,NAM)
   80 IF (Z(IK2PP).NE.BUF(1) .OR. Z(IK2PP+1).NE.BUF(2) .OR.
     1    Z(IM2PP).NE.BUF(3) .OR. Z(IM2PP+1).NE.BUF(4) .OR.
     2    Z(IB2PP).NE.BUF(5) .OR. Z(IB2PP+1).NE.BUF(6)) GO TO 120
      IF (Z(ITFL) .NE. BUF(7)) GO TO 120
      IF (Z(IMETH).NE.0 .AND. Z(IMETH).NE.IMRQST) GO TO 120
C
C     TEST FOR CHANGED FREQUENCY SET
C
      IF (Z(IFREQ).NE.IFRQST .AND. BRANCH.EQ.5) GO TO 120
      GO TO 70
   90 COUNT = -1
      GO TO 120
C
C     TRANSIENT RESPONSE.
C
  100 CALL READ (*140,*110,CASECC,Z,BUF2,1,NCC)
      CALL MESAGE (M8,0,NAM)
  110 CALL WRITE (CASEXX,Z,NCC,1)
      COUNT = COUNT + 1
      CALL READ (*90,*120,CASECC,Z,BUF2,1,NCC)
      GO TO 120
C
C     CLOSE FILES. WRITE TRAILER. RETURN.
C
  120 CALL CLOSE (CASECC,CLSREW)
      CALL CLOSE (CASEXX,CLSREW)
      MCB(1) = CASEXX
      MCB(2) = COUNT
      CALL WRTTRL (MCB)
      IF (COUNT.LE.1 .AND. IOCNT.EQ.1) LOOP = -1
C
C     CHECK ALL PSDL ACCOUNTED FOR
C
      IF (IRY .EQ. 0) GO TO 125
      NOGO = 0
      DO 121  I = ILS,ILF
      IF (Z(I) .LT. 0) GO TO 121
      NOGO = -1
      CALL MESAGE (33,Z(I),NAM)
  121 CONTINUE
      IF (NOGO .LT. 0) CALL MESAGE (-7,0,NAM)
  125 RETURN
C
C     FATAL FILE ERRORS.
C
  130 N = -1
      GO TO 150
  140 N = -2
      FILE = CASECC
  150 CALL MESAGE (N,FILE,NAM)
      GO TO 150
      END