File: sfetch.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 (115 lines) | stat: -rw-r--r-- 2,960 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
      SUBROUTINE SFETCH (NAME,ITEM,IRW,ITEST)
C
C     POSITIONS THE SOF TO READ OR WRITE DATA ASSOCIATED WITH ITEM OF
C     SUBSTRUCTURE NAME.
C
      EXTERNAL        ANDF
      LOGICAL         MDIUP
      INTEGER         ANDF,BUF,MDI,MDIPBN,MDILBN,MDIBL,BLKSIZ,DIRSIZ
      DIMENSION       NAME(2),NMSBR(2)
      CHARACTER       UFM*23,UWM*25,UIM*29,SFM*25
      COMMON /XMSSG / UFM,UWM,UIM,SFM
      COMMON /ZZZZZZ/ BUF(1)
      COMMON /SOF   / DITDUM(6),IO,IOPBN,IOLBN,IOMODE,IOPTR,IOSIND,
     1                IOITCD,IOBLK,MDI,MDIPBN,MDILBN,MDIBL,NXTDUM(15),
     2                DITUP,MDIUP
      COMMON /SYS   / BLKSIZ,DIRSIZ
      COMMON /SYSTEM/ NBUFF,NOUT
      DATA    IDLE  , IRD,IWRT /0,1,2/, NMSBR /4HSFET,4HCH  /
C
      CALL CHKOPN (NMSBR(1))
      CALL FDSUB  (NAME(1),IOSIND)
      IF (IOSIND .EQ. -1) GO TO 500
      IOITCD = ITCODE(ITEM)
      IF (IOITCD .EQ. -1) GO TO 510
C
C     CHECK IF ITEM IS A TABLE ITEM UNLESS SPECIAL CALL FROM MTRXO OR
C     MTRXI
C
      IF (IRW .LT. 0) GO TO 10
      ITM = ITTYPE(ITEM)
      IF (ITM .NE. 0) GO TO 530
   10 CALL FMDI (IOSIND,IMDI)
      IOLBN = 1
      IOPTR = IO + 1
      IBL   = ANDF(BUF(IMDI+IOITCD),65535)
      IRDWRT= IABS(IRW)
      GO TO (30,80,30), IRDWRT
C
C     READ OPERATION.
C
   30 IF (IBL .EQ.     0) GO TO 50
      IF (IBL .NE. 65535) GO TO 60
C
C     ITEM WAS PSEUDO-WRITTEN.
C
      ITEST = 2
      GO TO 520
C
C     ITEM HAS NOT BEEN WRITTEN.
C
   50 ITEST = 3
      GO TO 520
C
C     UPDATE THE COMMON BLOCK SOF, AND BRING INTO CORE THE DESIRED BLOCK
C
   60 ITEST = 1
      IF (IRDWRT .EQ. 3) GO TO 520
      IOPBN  = IBL
      IOMODE = IRD
      CALL SOFIO (IRD,IOPBN,BUF(IO-2))
      RETURN
C
C     WRITE OPERATION.
C
   80 IF (IBL.EQ.0 .OR. IBL.EQ.65535) GO TO 90
C
C     ITEM HAS ALREADY BEEN WRITTEN.
C
      ITEST = 1
      GO TO 520
   90 ITEST1 = ITEST - 1
      GO TO (100,110), ITEST1
C
C     ITEM IS TO BE PSEUDO-WRITTEN.
C
  100 BUF(IMDI+IOITCD) = 65535
      MDIUP = .TRUE.
      RETURN
C
C     ITEM IS TO BE WRITTEN.  GET A FREE BLOCK AND UPDATE THE COMMON
C     BLOCK SOF.
C
  110 CALL GETBLK (0,IOBLK)
      IF (IOBLK .EQ. -1) GO TO 1000
      IOPBN  = IOBLK
      IOMODE = IWRT
      RETURN
C
C     NAME DOES NOT EXIST.
C
  500 ITEST = 4
      GO TO 520
C
C     ITEM IS AN ILLEGAL ITEM NAME.
C
  510 ITEST  = 5
  520 IOMODE = IDLE
      RETURN
C
C     ATTEMPT TO OPERATE ON A MATRIX ITEM
C
  530 WRITE  (NOUT,540) SFM,ITEM,NAME
  540 FORMAT (A25,' 6227, AN ATTEMPT HAS BEEN MADE TO OPERATE ON THE ',
     1       'MATRIX ITEM ',A4,' OF SUBSTRUCTURE ',2A4,' USING SFETCH.')
      GO TO 1010
C
C     NO MORE BLOCKS ON SOF
C
 1000 WRITE  (NOUT,1001) UFM
 1001 FORMAT (A23,' 6223, SUBROUTINE SFETCH - THERE ARE NO MORE FREE ',
     1       'BLOCKS AVAILABLE ON THE SOF.')
 1010 CALL SOFCLS
      CALL MESAGE (-61,0,0)
      RETURN
      END