File: procom.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 (119 lines) | stat: -rw-r--r-- 3,248 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
      SUBROUTINE PROCOM (PROCOS,PROCOF,CASECC,NCOEFS,NGRIDS)
C
C     PROCOM COMBINES PROCOF CASES FOR SUBCOM-S AND REPCASES
C
      INTEGER         PROCOF,CASECC,BUF1,BUF2,BUF3,FILE,PROCOS,INFO(7),
     1                IZ(1),NAM(2)
      COMMON /SYSTEM/ IBUF
      COMMON /ZZZZZZ/ Z(1)
      EQUIVALENCE     (Z(1),IZ(1))
      DATA    I166  , I16  ,NAM   / 166, 16, 4HPROC,4HOM  /
C
      LCORE = KORSZ(Z)
      BUF1  = LCORE - IBUF + 1
      BUF2  = BUF1  - IBUF
      BUF3  = BUF2  - IBUF
      LCORE = BUF3  - 1
      IF (LCORE.LT.NCOEFS .OR. LCORE.LT.NGRIDS) GO TO 108
      CALL GOPEN (PROCOS,Z(BUF1),0)
      CALL GOPEN (PROCOF,Z(BUF2),1)
C
C     CHECK EACH SUBCASE FOR REPCASE OR SUBCOM-IF NONE(JUST COPY SET OF
C     5 RECORDS FROM PROCOS TO PROCOF
C
      FILE = CASECC
      CALL GOPEN (CASECC,Z(BUF3),0)
   10 FILE = CASECC
      CALL READ (*90,*20,CASECC,Z(1),LCORE,0,IWORDS)
      GO TO 108
   20 IF (IZ(I16) .NE. 0) GO TO 30
C
C     NOT A SUBCOM - MIGHT BE REPCASE
C
   25 FILE = PROCOS
      CALL FREAD (PROCOS,Z,103,1)
      CALL WRITE (PROCOF,Z,103,1)
      CALL FREAD (PROCOS,Z,NCOEFS,1)
      CALL WRITE (PROCOF,Z,NCOEFS,1)
      CALL FREAD (PROCOS,Z,NCOEFS,1)
      CALL WRITE (PROCOF,Z,NCOEFS,1)
      CALL FREAD (PROCOS,Z,NGRIDS,1)
      CALL WRITE (PROCOF,Z,NGRIDS,1)
      CALL FREAD (PROCOS,Z,NGRIDS,1)
      CALL WRITE (PROCOF,Z,NGRIDS,1)
C
C     GO BACK FOR ANOTHER CASE CONTROL RECORD
C
      GO TO 10
C
C     REPCASE OR SUBCOM
C
   30 IF (IZ(I16) .GT. 0) GO TO 45
C
C     REPCASE
C
      DO 40 I = 1,5
      CALL BCKREC (PROCOS)
   40 CONTINUE
      GO TO 25
C
C     SUBCOM
C
   45 LCC  = IZ(I166)
      LSYM = IZ(LCC)
      DO 50 I = 1,LSYM
      DO 50 J = 1,5
      CALL BCKREC (PROCOS)
   50 CONTINUE
      NTOT = 2*(NCOEFS+NGRIDS)
      IF (IWORDS+2*NTOT .GT. LCORE) GO TO 108
      INEW = IWORDS + NTOT
      DO 60 I = 1,NTOT
   60 Z(INEW+I) = 0.
      DO 80 I = 1,LSYM
      COEF = Z(LCC+I)
      IF (COEF .EQ. 0.) GO TO 75
      CALL FREAD (PROCOS,INFO,103,1)
      CALL FREAD (PROCOS,Z(IWORDS+1),NCOEFS,1)
      CALL FREAD (PROCOS,Z(IWORDS+NCOEFS+1),NCOEFS,1)
      CALL FREAD (PROCOS,Z(IWORDS+2*NCOEFS+1),NGRIDS,1)
      CALL FREAD (PROCOS,Z(IWORDS+2*NCOEFS+NGRIDS+1),NGRIDS,1)
      DO 70 J = 1,NTOT
      Z(INEW+J) = Z(INEW+J) + COEF*Z(IWORDS+J)
   70 CONTINUE
      GO TO 80
   75 DO 76 K = 1,5
      CALL FWDREC (*102,PROCOS)
   76 CONTINUE
C
   80 CONTINUE
C
C     WRITE TO PROCOF- 1ST BE SURE THAT ISYM IS 0 TO ACCOUNT FOR
C     POSSIBLE SYMMETRY-ANTISYMMETRY COMBINATION
C
      INFO(6) = 0
      CALL WRITE (PROCOF,INFO,103,1)
      CALL WRITE (PROCOF,Z(INEW+1),NCOEFS,1)
      CALL WRITE (PROCOF,Z(INEW+NCOEFS+1),NCOEFS,1)
      CALL WRITE (PROCOF,Z(INEW+2*NCOEFS+1),NGRIDS,1)
      CALL WRITE (PROCOF,Z(INEW+2*NCOEFS+NGRIDS+1),NGRIDS,1)
C
C     GO BACK FOR ANOTHER SUBCASE
C
      GO TO 10
C
C     DONE
C
   90 CALL CLOSE (CASECC,1)
      CALL CLOSE (PROCOS,1)
      CALL CLOSE (PROCOF,1)
      INFO(1) = PROCOS
      CALL RDTRL (INFO)
      INFO(1) = PROCOF
      CALL WRTTRL (INFO)
      RETURN
C
  102 CALL MESAGE (-2,0,NAM)
  108 CALL MESAGE (-8,0,NAM)
      RETURN
      END