File: alg16.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 (100 lines) | stat: -rw-r--r-- 2,989 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
      SUBROUTINE ALG16 (IX,LOG1,X1,Y1,X2,Y2)
C
      REAL LINE
C
      DIMENSION X1(1), Y1(1), X2(1), Y2(1), LINE(121), XNUM(13)
C
      DATA SYMBOL/1H*/,DASH/1H-/,CROSS/1H+/,BLANK/1H /,XI/1HI/
C
      YMIN=Y1(1)
      XMIN=X1(1)
      YMAX=YMIN
      XMAX=XMIN
      DO 10 I=1,IX
      IF (Y2(I).LT.YMIN) YMIN=Y2(I)
      IF (Y2(I).GT.YMAX) YMAX=Y2(I)
      IF (X2(I).LT.XMIN) XMIN=X2(I)
      IF (X2(I).GT.XMAX) XMAX=X2(I)
      IF (Y1(I).GT.YMAX) YMAX=Y1(I)
      IF (X1(I).GT.XMAX) XMAX=X1(I)
10    CONTINUE
      IF (XMAX.EQ.XMIN.OR.YMIN.EQ.YMAX) GO TO 170
      YH=YMAX+(YMAX-YMIN)/25.0
      YL=YMIN-(YMAX-YMIN)/25.0
      XH=XMAX+(XMAX-XMIN)/38.3333
      XL=XMIN-(XMAX-XMIN)/38.3333
      IF ((YH-YL)/(XH-XL).GT.0.75) XH=1.3333*(YH-YL)+XL
      IF ((YH-YL)/(XH-XL).LT.0.75) YH=0.75*(XH-XL)+YL
      XMAX=(XMIN+XMAX-XH+XL)/2.0
      XH=XH-XL+XMAX
      XL=XMAX
      XMAX=(YMIN+YMAX-YH+YL)/2.0
      YH=YH-YL+XMAX
      YL=XMAX
      XMAX=ABS(XH)
      XMIN=ABS(XL)
      YMIN=ABS(YL)
      YMAX=ABS(YH)
      IF (XMIN.GT.XMAX) XMAX=XMIN
      IF (YMIN.GT.YMAX) YMAX=YMIN
      XMAX=ALOG10(XMAX)
      YMAX=ALOG10(YMAX)
      IF (XMAX.LT.0.0) XMAX=XMAX-1.0
      IF (YMAX.LT.0.0) YMAX=YMAX-1.0
      MX=-XMAX
      MY=-YMAX
      WRITE (LOG1,20) MX,MY
20    FORMAT (20X,46HSCALES -  X  IS SHOWN TIMES 10 TO THE POWER OF,I3,4
     10H    Y  IS SHOWN TIMES 10 TO THE POWER OF,I3,/)
      YINC=(YH-YL)/54.0
      YINC2=YINC/2.0
      XRANGE=XH-XL
      DO 140 KLINE=1,55
      IF (KLINE.EQ.1.OR.KLINE.EQ.55) GO TO 50
      DO 30 L=2,120
30    LINE(L)=BLANK
      IF (KLINE.EQ.7.OR.KLINE.EQ.13.OR.KLINE.EQ.19.OR.KLINE.EQ.25.OR.KLI
     1NE.EQ.31.OR.KLINE.EQ.37.OR.KLINE.EQ.43.OR.KLINE.EQ.49) GO TO 40
      LINE(1)=XI
      LINE(121)=XI
      GO TO 80
40    LINE(1)=DASH
      LINE(121)=DASH
      GO TO 80
50    DO 60 L=2,120
60    LINE(L)=DASH
      LINE(1)=CROSS
      LINE(121)=CROSS
      DO 70 L=11,111,10
70    LINE(L)=XI
      GO TO 120
80    DO 100 I=1,IX
      IF (Y2(I).GT.YH+YINC2.OR.Y2(I).LE.YH-YINC2) GO TO 90
      L=(X2(I)-XL)/XRANGE*120.0+1.5
      LINE(L)=SYMBOL
90    IF (Y1(I).GT.YH+YINC2.OR.Y1(I).LE.YH-YINC2) GO TO 100
      L=(X1(I)-XL)/XRANGE*120.0+1.5
      LINE(L)=SYMBOL
100   CONTINUE
      IF (KLINE.EQ.1.OR.KLINE.EQ.7.OR.KLINE.EQ.13.OR.KLINE.EQ.19.OR.KLIN
     1E.EQ.25.OR.KLINE.EQ.31.OR.KLINE.EQ.37.OR.KLINE.EQ.43.OR.KLINE.EQ.4
     29.OR.KLINE.EQ.55) GO TO 120
      WRITE (LOG1,110) LINE
110   FORMAT (8X,121A1)
      GO TO 140
120   YNUM=YH*10.0**MY
      WRITE (LOG1,130) YNUM,LINE
130   FORMAT (1X,F6.3,1X,121A1)
140   YH=YH-YINC
      XNUM(1)=XL*10.0**MX
      XINC=((XH-XL)/12.0)*10.0**MX
      DO 150 I=2,13
150   XNUM(I)=XNUM(I-1)+XINC
      WRITE (LOG1,160) XNUM
160   FORMAT (6X,12(F6.3,4X),F6.3)
      RETURN
170   WRITE (LOG1,180)
180   FORMAT (//,35X,54HNO PLOT HAS BEEN MADE BECAUSE  X  OR  Y  RANGE I
     1S ZERO)
      RETURN
      END