File: loadsu.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 (204 lines) | stat: -rw-r--r-- 5,494 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
      SUBROUTINE LOADSU
C
C     LOADSU SETS UP LOAD INFOTMATION FOR PROLAT FROM NSLT.
C     Z(IST)IS THE STARTING POINT FOR OPEN CORE,Z(MCORE) IS THE LAST
C     AVAILABLE WORD, NTOT IS THE NUMBER OF WORDS PUT INTO OPEN CORE
C     BY THIS ROUTINE. LOAD IS THE LOAD ID.
C
      LOGICAL         REMFL
      INTEGER         SUBCAS,BUF2,SCR1,FILE,HEST,BGPDT
      DIMENSION       NWORDS(19),MCB(7),IZ(1),L(2),ZL(2),NAM(2)
      CHARACTER       UFM*23,UWM*25
      COMMON /XMSSG / UFM,UWM
      COMMON /ZZZZZZ/ Z(1)
      COMMON /SYSTEM/ SYSBUF,IOUT
      COMMON /BIOT  / NG1,NG2,IST,SUBCAS,X1,Y1,Z1,X2,Y2,Z2,BUF2,REMFL,
     1                MCORE,LOAD,NSLT,SCR1,HEST,NTOT
      EQUIVALENCE     (Z(1),IZ(1)),(L(1),ZL(1))
      DATA    NAM   / 4HLOAD,4HSU  /
      DATA    NWORDS/ 6,6,4,4,6,6,2,5,5,6,6,7,12,10,10,19,38,7,5/
C
      BGPDT  = 103
      MCB(1) = BGPDT
      CALL RDTRL (MCB)
      NROWSP = MCB(2)
      MCB(1) = HEST
      CALL RDTRL (MCB)
      NEL    = MCB(2)
      NSIMP  = 0
      FILE   = NSLT
      CALL OPEN (*1001,NSLT,Z(BUF2),0)
      CALL READ (*1002,*10,NSLT,Z(IST+1),MCORE,0,IWORDS)
      GO TO 1008
   10 NLOADS = IWORDS-2
C
C     CHECK LOAD SELECTION AGAINST SIMPLE LOAD ID-S
C
      IF (NLOADS .EQ. 0) GO TO 35
      DO 20 I = 1,NLOADS
      IF (IZ(IST+2+I) .EQ. LOAD) GO TO 80
   20 CONTINUE
C
C     NOT A SIMPLE LOAD-MUST BEA LOAD COMBINATION. SKIP NLOADS RECORDS
C     AND SEARCH FOR PROPER LOAD ID
C
      DO 30 I = 1,NLOADS
      CALL FWDREC (*1002,NSLT)
   30 CONTINUE
C
C     READ 2 WORDS AT A TIME -1,-1 SIGNIFIES END OF LOAD CARD
C
   35 ILOAD = IST + IWORDS
   40 CALL READ (*1002,*500,NSLT,L,2,0,IFLAG)
      IF (L(1) .EQ. LOAD) GO TO 60
C
C     NO MATCH-SKIP TO -1-S
C
   50 CALL FREAD (NSLT,L,2,0)
      IF (L(1).EQ.-1 .AND. L(2).EQ.-1) GO TO 40
      GO TO 50
C
C     MATCH
C
   60 ALLS  = ZL(2)
   70 CALL FREAD (NSLT,L,2,0)
      IF (L(1).EQ.-1 .AND. L(2).EQ.-1) GO TO 90
      NSIMP = NSIMP + 1
      IF (ILOAD+2*NSIMP .GT. MCORE) GO TO 1008
      ISUB  = 2*NSIMP - 1
      Z(ILOAD+ISUB) = ZL(1)
      IZ(ILOAD+ISUB+1) = L(2)
      GO TO 70
C
C     WE HAVE NSIMP SIMPLE LOADS. FOR ONE LOAD,SET PROPER PARAMETERS
C
   80 NSIMP = 1
      ALLS  = 1.
      ILOAD = IST + IWORDS
      Z(ILOAD+1) = 1.
      IZ(ILOAD+2) = LOAD
C
C     FOR EACH SIMPLE LOAD, FIND PROPER LOAD ID AND THEN POSITION TO
C     PROPER LOAD RECORD IN NSLT
C
   90 NTOT  = 0
      ISIMP = ILOAD + 2*NSIMP
      DO 270 NS = 1,NSIMP
C
      ISUB   = ILOAD + 2*NS - 1
      FACTOR = Z(ISUB)
      ID     = IZ(ISUB+1)
      NCARDS = 0
      CALL REWIND (NSLT)
      I = 1
      IF (NLOADS .EQ. 0) GO TO 110
      DO 100 I = 1,NLOADS
      IF (ID .EQ. IZ(IST+2+I)) GO TO 110
  100 CONTINUE
      GO TO 499
C
  110 DO 120 J = 1,I
      CALL FWDREC (*1002,NSLT)
  120 CONTINUE
C
  125 CALL READ  (*1002,*260,NSLT,NOBLD,1,0,IFLAG)
      CALL FREAD (NSLT,IDO,1,0)
      IF (ISIMP+2 .GT. MCORE) GO TO 1008
      IZ(ISIMP+1) = NOBLD
      IZ(ISIMP+2) = IDO
      ISIMP = ISIMP + 2
      NTOT  = NTOT + 2
C
C     SKIP NOBLD=-20. IF NOBLD=24(REMFLUX), STORE ONLY NOBLD AND IDO,
C     BUT SKIP REMFLUX INFO ON NSLT
C
      IF (NOBLD .EQ. -20) GO TO 250
      IF (NOBLD .LE.  19) GO TO 245
      KTYPE = NOBLD - 19
      GO TO (126,127,128,129,130), KTYPE
  126 MWORDS = 3*NROWSP
      GO TO 140
  127 MWORDS = 12
      GO TO 140
  128 MWORDS = 48
      GO TO 140
  129 MWORDS = 9
      GO TO 140
  130 MWORDS = 3*NEL
      MWORDS = -MWORDS
      GO TO 141
C
  140 IF(ISIMP+MWORDS*IDO .GT. MCORE) GO TO 1008
      NTOT = NTOT + MWORDS*IDO
  141 DO 240 J = 1,IDO
C
C     NCARDS TELLS HOW MANY SIMPLE LOAD CARDS HAVE THE PRESENT FACTOR
C     APPLIED TO IT
C
      NCARDS = NCARDS + 1
      CALL FREAD (NSLT,Z(ISIMP+1),MWORDS,0)
      IF (NOBLD .NE. 24) ISIMP = ISIMP + MWORDS
  240 CONTINUE
C
C     DONE WITH CARDS OF PRESENT TYPE-GET ANOTHER TYPE
C
      GO TO 125
C
C     TYPE=-20    SKIP IT
C
  250 CALL FREAD (NSLT,Z,-(3*NROWSP),0)
      GO TO 125
C
C     NOT A MAGNETICS TYPE OF LOAD. - SKIP IT
C
  245 WRITE  (IOUT,246) UWM,LOAD
  246 FORMAT (A25,', IN FUNCTIONAL MODULE PROLATE, LOAD SET',I8, /5X,
     1       'CONTAINS A NONMAGNETIC LOAD TYPE. IT WILL BE IGNORED.')
      DO 247 I = 1,IDO
      CALL FREAD (NSLT,Z,-NWORDS(NOBLD),0)
  247 CONTINUE
C
C     EOR ON NSLT-DONE WITH THIS SIMPLE LOAD-GET ANOTHER SIMPLE LOAD
C
C     SUBSTITUTE IN OPEN CORE NCARDS FOR THE SIMPLE LOAD ID. WE NO
C     LONGER NEED THE ID, BUT WE MUST SAVE NCARDS
C
  260 CONTINUE
      IZ(ISUB+1) = NCARDS
C
  270 CONTINUE
C
C     DONE
C
C     STORE ALL THIS INFO BACK AT Z(IST) AS FOLLOWS
C
C     ALLS,NSIMP,(LOAD FACTOR,NCARDS) FOR EACH SIMPLE LOAD ID,
C     ALL LOAD INFO FOR EACH SIMPLE LOAD STARTING WITH NOBLD AND IDO
C
      Z(IST+1)  = ALLS
      IZ(IST+2) = NSIMP
      NS2   = 2*NSIMP
      DO 280 I = 1,NS2
  280 Z(IST+2+I) = Z(ILOAD+I)
      ISUB1 = IST + NS2 + 2
      ISUB2 = ILOAD + 2*NSIMP
      DO 290 I = 1,NTOT
  290 Z(ISUB1+I) = Z(ISUB2+I)
      NTOT = NTOT + 2*NSIMP + 2
      CALL CLOSE (NSLT,1)
      RETURN
C
  499 LOAD = ID
  500 WRITE  (IOUT,501) UFM,LOAD
  501 FORMAT (A23,', CANNOT FIND LOAD',I8,' ON NSLT IN BIOTSV')
      CALL MESAGE (-61,0,0)
C
 1001 N =-1
      GO TO 1010
 1002 N =-2
      GO TO 1010
 1008 N =-8
      FILE = 0
 1010 CALL MESAGE (N,FILE,NAM)
      RETURN
      END