File: pload4.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 (182 lines) | stat: -rw-r--r-- 5,420 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
      SUBROUTINE PLOAD4 (IBUF5,IDO,JOPEN)
C
C     TO GENERATE PLOAD4 PRESSURE LOAD FOR QUAD4 AND TRIA3 ELEMENTS.
C
C     BOTH ELEMENT TYPES MAY BE PRESENT, OR ONLY ONE OF THE TWO IS
C     PRESENT.
C
C     THIS ROUTINE IS CALLED ONLY BY EXTERN IN SSG1 MODULE, LINK5
C
C     THIS ROUTINE  CALLS PLOD4D OR PLOD4S TO COMPUTE LOAD FOR QUAD4
C     ELEMENTS, AND CALLS T3PL4D OR T3PL4S TO COMPUTE LOAD FOR TRIA3
C
C     IN OVERLAY TREE, THIS ROUTINE SHOULD BE IN PARALLELED WITH FPONT
C     ROUTINE, AND FOLLOWED BY PLOD4D/S AND T3PL4D/S. I.E.
C
C                   ( FPONT
C            EXTERN (        ( PLOD4D  (/ZZSSA1/
C                   ( PLOAD4 ( PLOD4S
C                            ( T3PL4D
C                            ( T3PL4S
C
      LOGICAL         ALLIN,DEBUG
      INTEGER         IZ(1),NAME(2),FILE,SLT,EST,QUAD4,TRIA3,T3,Q4
      CHARACTER       UFM*23
      COMMON /XMSSG / UFM
      COMMON /ZZZZZZ/ CORE(1)
      COMMON /LOADX / LCARE,SLT,IDUM(5),EST
      COMMON /SYSTEM/ IBUF,NOUT,JDUM(52),IPREC
      COMMON /PINDEX/ IEST(45),ISLT(11)
      COMMON /GPTA1 / NELEM,LAST,INCR,IELEM(1)
      EQUIVALENCE     (CORE(1),IZ(1))
      DATA    QUAD4 , TRIA3 , NAME          /
     1        64    , 83    , 4HPLOA,4HD4   /
      DATA    DEBUG / .FALSE. /
C
C
C     T3 AND Q4 KEEP TRACK OF THE PRESENCE OF THE CTRIA3 AND CQUAD4
C     ELEMENTS
C
      T3    = 0
      Q4    = 0
      LCORE = IBUF5 - IBUF
      IDO11 = IDO*11
      ALLIN = .FALSE.
      IF (IDO11 .GT. LCORE) GO TO 400
      IF (DEBUG) WRITE (NOUT,300)
  300 FORMAT (/,' * PLOAD4 IS CALLED FOR ONE LOAD CASE')
C
C     OPEN CORE IS BIG ENOUGH TO HOLD ALL PLOAD4 DATA.
C     READ THEM ALL INTO CORE
C     (BAD NEWS - OPEN CORE AT THIS TIME IS NOT AVAILABLE)
C
      IF (.NOT.ALLIN) GO TO 400
C
      ALLIN = .TRUE.
      FILE  = SLT
      IMHERE= 350
      CALL READ (*620,*630,SLT,CORE,IDO11,0,FLAG)
C
C     OPEN CORE NOT LARGE ENOUGH TO HOLD ALL PLOAD4 DATA
C
  400 IF (JOPEN .EQ. 1) GO TO 415
      JOPEN = 1
      FILE  = EST
      CALL OPEN  (*610,EST,CORE(IBUF5),0)
      CALL FWDREC (*620,EST)
      FILE = EST
  410 CALL READ (*430,*560,EST,IELTYP,1,0,FLAG)
  415 IF (IELTYP .EQ. QUAD4) GO TO 440
      IF (IELTYP .EQ. TRIA3) GO TO 445
  420 CALL FWDREC (*430,EST)
      GO TO 410
  430 IF (T3+Q4 .NE. 0) GO TO 560
      WRITE  (NOUT,435) UFM
  435 FORMAT (A23,', PLOAD4 PRESSURE LOAD IS USED WITHOUT THE PRESENCE',
     1       ' OF QUAD4 OR TRIA3 ELEMENT')
      IMHERE = 435
      GO TO 620
C
  440 IF (Q4 .GE. 1) GO TO 420
      Q4 = 1
      IF (DEBUG) WRITE (NOUT,441) T3
  441 FORMAT (/,'   QUAD4 ELEM FOUND. SETTING Q4 TO 1.  T3 =',I3)
      GO TO 450
  445 IF (T3 .EQ. 1) GO TO 420
      T3 = 1
      IF (DEBUG) WRITE (NOUT,446) Q4
  446 FORMAT (/,'   TRIA3 ELEM FOUND. SETTING T3 TO 1.  Q4 =',I3)
  450 J  = INCR*(IELTYP-1)
      NWORDS = IELEM(J+12)
      IEST(1)= 0
C
      FILE = SLT
      IB   = 0
      IMHERE = 550
      DO 550 J = 1,IDO
      IF (ALLIN) GO TO 460
      JSAVE = J
      IF (J.EQ.1 .AND. T3+Q4.GE.2) GO TO 470
      CALL READ (*620,*630,SLT,ISLT,11,0,FLAG)
      GO TO 470
  460 DO 465 I = 1,11
  465 ISLT(I) = IZ(I+IB)
      IB = IB + 11
  470 IF (ISLT(1)-IEST(1)) 550,490,480
  480 CALL READ (*560,*560,EST,IEST,NWORDS,0,FLAG)
      GO TO 470
C
  490 IF (IELTYP .EQ. TRIA3) GO TO 520
C
C     PLOAD4 FOR QUAD4 ELEMENT
C
      IF (DEBUG) WRITE (NOUT,500) IEST(1)
  500 FORMAT (' ==> PROCESS PLOAD4 FOR QUAD ELEM',I8)
      GO TO (505,510), IPREC
  505 CALL PLOD4S
      GO TO 550
  510 CALL PLOD4D
      GO TO 550
C
C     PLOAD4 FOR TRIA3 ELEMENT
C     SET ISLT(1) TO NEGATIVE FOR PLOAD4/TRIA3 COMPUTATION
C
  520 IF (DEBUG) WRITE (NOUT,525) IEST(1)
  525 FORMAT (' ==> PROCESS PLOAD4 FOR TRIA3 ELEM',I8)
      ISLT(1) = -IABS(ISLT(1))
      GO TO (530,540), IPREC
  530 CALL T3PL4S
      GO TO 550
  540 CALL T3PL4D
C
  550 CONTINUE
C
  560 IF (T3+Q4 .GE. 2) GO TO 580
C
C     JUST FINISHED EITHER QUAD4 OR TRIA3 ELEMENT. BACKSPACE EST FILE,
C     AND BACKSPACE SLT FILE IF SLT DATA ARE NOT ALREADY IN CORE.
C     REPEAT PLOAD4 (LOAD TYPE 25) COMPUTAION FOR THE OTHER ELEMENT
C     (TRIA3 OR QUAD4) WHICH WE HAVE NOT YET PROCESSED IN THE FIRST
C     PASS. MUST STEP OVER OTHER LOADS THAT MIGHT BE PRESENT
C
      CALL BCKREC (EST)
      Q4    = Q4 + 1
      JSAVE = 0
      IF (ALLIN) GO TO 410
C
      CALL BCKREC (SLT)
      IMHERE = 570
  570 CALL READ (*620,*630,SLT,I,1,0,FLAG)
      IF (I .NE. 25) GO TO 570
      IMHERE = 573
      CALL READ (*620,*630,SLT,I,1,0,FLAG)
      IF (I .NE. IDO) GO TO 570
      IMHERE = 575
      CALL READ (*620,*630,SLT,ISLT,6,0,FLAG)
      IF (ISLT(6) .NE. -1) GO TO 570
      IMHERE = 577
      CALL READ (*620,*630,SLT,ISLT(7),5,0,FLAG)
      IF (ISLT(7) .NE. 0) GO TO 570
      JSAVE = 1
      GO TO 410
C
  580 IF (JOPEN .EQ. 1) CALL CLOSE (EST,1)
      JOPEN = 0
      IF (ALLIN .OR. JSAVE.GE.IDO) GO TO 600
      IMHERE = 590
      J = (IDO-JSAVE)*11
      CALL READ (*640,*640,SLT,0,-J,0,FLAG)
  600 RETURN
C
  610 J = -1
      GO TO 650
  620 J = -2
      GO TO 650
  630 J = -3
      GO TO 650
  640 J = 1
  650 WRITE  (NOUT,660) IMHERE,T3,Q4,IDO,JSAVE
  660 FORMAT ('   IMHERE =',I5,'   T3,Q4 =',2I3,'   IDO,JSAVE =',2I5)
      CALL MESAGE (J,FILE,NAME(1))
      GO TO 600
      END