File: combin.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 (168 lines) | stat: -rw-r--r-- 4,483 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
      SUBROUTINE COMBIN (PG,ILIST,NLIST)
C
      INTEGER         SYSBUF,PG,NAME(2),HCFLDS,HCFLD,HCCENS,HCCEN,OTPE,
     1                REMFLS,REMFL,MCB(7)
      DIMENSION       ARY(1),ILIST(1),ALPHA(360),LOADN(360),LOADNN(360),
     1                IARY(1),ALPHA1(360),LODC1(7),HEAD(2)
      CHARACTER       UFM*23
      COMMON /XMSSG / UFM
      COMMON /LOADX / LC,N(13),LODC,MASS
      COMMON /BLANK / NROWSP
      COMMON /SYSTEM/ SYSBUF,OTPE,DUM52(52),IPREC
      COMMON /ZZZZZZ/ CORE(1)
      COMMON /LOADS / NLOAD,IPTR
      COMMON /ZNTPKX/ A(4),LL,IEOL,IEOR
      COMMON /PACKX / ITA,ITB,II,JJ,INCUR
      EQUIVALENCE     (CORE(1),IARY(1),ARY(1))
C
C     ALSO COMBINE HCFLD AND REMFL IN MAGNETOSTATIC PROBLEMS
C
      DATA    HCFLDS, HCFLD /304,202/
      DATA    REMFLS, REMFL /305,203/
      DATA    HCCENS, HCCEN /307,204/
      DATA    NAME  / 4HCOMB,4HIN   /
C
C
      ITA = 1
      ITB = IPREC
      II  = 1
C
C     PERFORM CHECKS IN E AND M PROBLEM
C     IN E AND M PROBLEM, REMFLS AND HCFLDS MUST HAVE THE SAME NUMBER
C     OF COLUMNS AS PG
C
      MCB(1) = REMFLS
      CALL RDTRL (MCB)
      NPERMS = 0
      IF (MCB(1) .LE. 0) GO TO 1
      NPERMS = MCB(2)
    1 MCB(1) = HCFLDS
      CALL RDTRL (MCB)
      NHC = 0
      IF (MCB(1) .LE. 0) GO TO 2
      NHC = MCB(2)
    2 IF (NHC .NE. NPERMS) GO TO 300
      IF (NHC .EQ. 0) GO TO 5
      MCB(1) = PG
      CALL RDTRL (MCB)
      IF (NHC .NE. MCB(2)) GO TO 300
    5 CONTINUE
      MCB(1) = HCCENS
      CALL RDTRL (MCB)
      NS = 0
      IF (MCB(1) .LE. 0) GO TO 6
      NS = MCB(2)
    6 IF (NS .NE. NHC) GO TO 300
      JJ    = NROWSP
      INCUR = 1
      LCORE = LC
      IBUF1 = LCORE
      LCORE = LCORE - SYSBUF
      CALL OPEN (*200,LODC,CORE(LCORE+1),1)
      CALL FNAME (LODC,HEAD)
      CALL WRITE (LODC,HEAD,2,1)
      LCORE = LCORE - SYSBUF
      CALL OPEN (*190,PG,CORE(LCORE+1),0)
      CALL MAKMCB (LODC1,LODC,NROWSP,2,IPREC)
      NLJ = IPTR
      NL1 = 0
      DO 160 I = 1,NLOAD
      DO 10  J = 1,NROWSP
   10 CORE(J) = 0.0
      NLJ = NLJ + NL1*2 + 1
      NL1 = IARY(NLJ)
      DO 20 K = 1,NL1
      KK  = NLJ + (K-1)*2 + 1
      LOADN(K) = IARY(KK)
      IF (LOADN(K) .LT. 0) GO TO 150
   20 ALPHA(K) = ARY(KK+1)
      KK = 1
      KL = 0
      DO 60 K = 1,NLIST
      IF (ILIST(K)) 30,60,30
   30 KL = KL + 1
      DO 40 J = 1,NL1
      IF (LOADN(J)-ILIST(K)) 40,50,40
   40 CONTINUE
      GO TO 60
   50 LOADNN(KK) = KL
      ALPHA1(KK) = ALPHA(J)
      KK = KK + 1
   60 CONTINUE
      KK = 1
      DO 140 J = 1,NL1
      INULL = 0
      IF (J .NE. 1) GO TO 70
      CALL SKPREC (PG,1)
   70 CALL INTPK (*120,PG,0,1,0)
   80 IF (LOADNN(J)-KK) 90,100,90
   90 IF (INULL .EQ. 1) GO TO 91
      IF (IEOR  .EQ. 0) CALL SKPREC (PG,1)
   91 CONTINUE
      KK = KK + 1
      INULL = 0
      GO TO 70
  100 IF (INULL .EQ. 1) GO TO 130
      IF (IEOL) 130,110,130
  110 CALL ZNTPKI
      CORE(LL) = CORE(LL) + A(1)*ALPHA1(J)
      GO TO 100
  120 INULL = 1
      GO TO 80
  130 KK = KK + 1
  140 CONTINUE
  150 CALL PACK (CORE,LODC1(1),LODC1)
      CALL REWIND (PG)
  160 CONTINUE
      CALL WRTTRL (LODC1(1))
      CALL CLOSE  (LODC1(1),1)
      CALL CLOSE  (PG,1)
      IF (PG .EQ. HCFLDS) GO TO 170
      IF (PG .EQ. REMFLS) GO TO 180
      IF (PG .EQ. HCCENS) RETURN
C
C     DO MAGNETOSTATIC FIELDS FOR USE IN EMFLD
C
      LODC1(1) = HCFLDS
      CALL RDTRL (LODC1)
C
C     IF HCFLD IS PURGED, SO MUST REMFLS
C
      IF (LODC1(2) .LE. 0) RETURN
      PG   = HCFLDS
      LODC = HCFLD
      NROWSP = 3*NROWSP
      GO TO 5
C
C     DO REMFLS
C
  170 LODC1(1) = REMFLS
      CALL RDTRL (LODC1)
      IF (LODC1(2) .LE. 0) RETURN
      PG   = REMFLS
      LODC = REMFL
      NROWSP = LODC1(3)
      GO TO 5
C
C     HCCENS
C
  180 LODC1(1) = HCCENS
      CALL RDTRL (LODC1)
      IF (LODC1(2).LE.0) RETURN
      PG   = HCCENS
      LODC = HCCEN
      NROWSP = LODC1(3)
      GO TO 5
  190 IP1 = PG
  195 CALL MESAGE (-1,IP1,NAME)
  200 IF (LODC .EQ. HCFLD) RETURN
      IP1 = LODC
      GO TO 195
  300 WRITE  (OTPE,350) UFM
  350 FORMAT (A23,', IN AN E AND M PROBLEM, SCRATCH DATA BLOCKS HCFLDS',
     1       ' AND REMFLS HAVE DIFFERENT NUMBERS OF COLUMNS.', /10X,
     2       ' THIS MAY RESULT FROM SPCFLD AND REMFLU CARDS HAVING THE',
     3       ' SAME LOAD SET ID')
      CALL MESAGE (-61,0,0)
      RETURN
      END