aboutsummaryrefslogtreecommitdiff
path: root/orrs/src/plutil.f
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2009-05-11 00:27:49 +0000
committerDimitri Sokolyuk <demon@dim13.org>2009-05-11 00:27:49 +0000
commit0d4f43d355de79178b1142e9735902cf641670b6 (patch)
tree2ced2323f6351db2a51090b3fd13eb11f69ff53f /orrs/src/plutil.f
Xfoil 6.97
Diffstat (limited to 'orrs/src/plutil.f')
-rwxr-xr-xorrs/src/plutil.f153
1 files changed, 153 insertions, 0 deletions
diff --git a/orrs/src/plutil.f b/orrs/src/plutil.f
new file mode 100755
index 0000000..c365f8f
--- /dev/null
+++ b/orrs/src/plutil.f
@@ -0,0 +1,153 @@
+ SUBROUTINE XYPLOT(N,X,Y,XOFF,XSF,YOFF,YSF,ILIN,SH,ISYM)
+ DIMENSION X(N), Y(N)
+C
+ IF(ISYM.LE.0) CALL XYLINE(N,X,Y,XOFF,XSF,YOFF,YSF,ILIN)
+ IF(ISYM.NE.0) CALL XYSYMB(N,X,Y,XOFF,XSF,YOFF,YSF,SH,IABS(ISYM))
+C
+ RETURN
+ END
+
+
+ SUBROUTINE PLSUBS(XC,YC,CHX,STRING,ANGLE,NC,PLFONT)
+C----------------------------------------------------------------
+C Plots character string as a subscript with font routine PLFONT.
+C
+C XC,YC = user coordinates of character to be subscripted
+C CHX = character width (user coordinates)
+C STRING = subscript character string to plot with NC characters
+C ANGLE = angle of character (radians, positive is righthanded rotation)
+C NC = number of subscript characters to plot
+C if NC<0 the length of the string is determined automatically
+C----------------------------------------------------------------
+ CHARACTER*(*) STRING
+ EXTERNAL PLFONT
+ DATA PI /3.1415926535897932384/
+C
+C---- subscript character reduction factor, and x,y-shift/chx
+ DATA CHFAC, CHDX, CHDY / 0.7, 0.9, -0.4 /
+C
+ SINA = SIN(ANGLE*PI/180.0)
+ COSA = COS(ANGLE*PI/180.0)
+C
+ X = XC + CHX*(CHDX*COSA - CHDY*SINA)
+ Y = YC + CHX*(CHDX*SINA + CHDY*COSA)
+ CALL PLFONT(X,Y,CHX*CHFAC,STRING,ANGLE,NC)
+C
+ RETURN
+ END
+
+
+
+ SUBROUTINE PLSUPS(XC,YC,CHX,STRING,ANGLE,NC,PLFONT)
+C----------------------------------------------------------------
+C Plots character string as a superscript with font routine PLFONT.
+C
+C XC,YC = user coordinates of character to be superscripted
+C CHX = character width (user coordinates)
+C STRING = superscript character string to plot with NC characters
+C ANGLE = angle of character (radians, positive is righthanded rotation)
+C NC = number of superscript characters to plot
+C if NC<0 the length of the string is determined automatically
+C----------------------------------------------------------------
+ CHARACTER*(*) STRING
+ EXTERNAL PLFONT
+ DATA PI /3.1415926535897932384/
+C
+C---- superscript character reduction factor, and x,y-shift/chx
+ DATA CHFAC, CHDX, CHDY / 0.7, 0.95, 0.7 /
+C
+ SINA = SIN(ANGLE*PI/180.0)
+ COSA = COS(ANGLE*PI/180.0)
+C
+ X = XC + CHX*(CHDX*COSA - CHDY*SINA)
+ Y = YC + CHX*(CHDX*SINA + CHDY*COSA)
+ CALL PLFONT(X,Y,CHX*CHFAC,STRING,ANGLE,NC)
+C
+ RETURN
+ END
+
+
+
+ SUBROUTINE SCALIT(N,Y,YOFF,YSF,ANN,NANN)
+ DIMENSION Y(N)
+C.............................................................
+C
+C Determines scaling factor for the offset Y array so that
+C YSF*(Ymax-YOFF) will be O(1.0), but less than 1.0.
+C
+C ANN = 1.0/YSF is therefore a "nice" plot axis max annotation.
+C
+C Y(1:N) array whose scaling factor is to be determined
+C YOFF offset of Y array (Y-YOFF is actually scaled)
+C YSF Y scaling factor
+C ANN recommended max Y annotation value = 1.0/ANN
+C NANN recommended number of Y annotations
+C.............................................................
+C
+ AG2 = ALOG10(2.0)
+ AG5 = ALOG10(5.0)
+C
+ YMAX = ABS(Y(1) - YOFF)
+ DO 10 I=2, N
+ YMAX = AMAX1( YMAX , ABS(Y(I)-YOFF) )
+ 10 CONTINUE
+C
+ IF(YMAX.EQ.0.0) THEN
+ WRITE(*,*) 'SCALIT: Zero array passed in'
+ YSF = 1.0E8
+ RETURN
+ ENDIF
+C
+ YLOG = ALOG10(YMAX) - 0.001
+C
+C---- find log of nearest power of 10 above YMAX
+ YLOG1 = AINT(YLOG+100.0) - 99.0
+
+C---- find log of nearest 2x(power of 10) above YMAX
+ YLOG2 = YLOG1 + AG2
+ IF(YLOG2-1.0.GT.YLOG) YLOG2 = YLOG2 - 1.0
+C
+C---- find log of nearest 5x(power of 10) above YMAX
+ YLOG5 = YLOG1 + AG5
+ IF(YLOG5-1.0.GT.YLOG) YLOG5 = YLOG5 - 1.0
+C
+C---- find log of smallest upper bound
+ GMIN = MIN( YLOG1 , YLOG2 , YLOG5 )
+C
+ NANN = 5
+ IF (GMIN.EQ.YLOG2) NANN = 4
+C
+C---- set scaling factor and max annotation
+ YSF = 10.0**(-GMIN)
+ ANN = 1.0/YSF
+C
+ RETURN
+ END ! SCALIT
+
+
+
+ SUBROUTINE ARROW(X,Y,DX,DY)
+C........................................
+C
+C Plots arrow from X,Y to X+DX,Y+DY
+C........................................
+C
+C---- fraction of arrow covered by arrowhead, aspect ratio of arrowhead
+ DATA FRH, ARH / 0.25, 0.24 /
+C
+C---- plot arrow
+ CALL PLOT(X,Y,3)
+ CALL PLOT(X+DX,Y+DY,2)
+C
+C---- plot arrowhead
+ X1 = X + (1.0-FRH)*DX + 0.5*ARH*DY
+ Y1 = Y + (1.0-FRH)*DY - 0.5*ARH*DX
+ X2 = X + (1.0-FRH)*DX - 0.5*ARH*DY
+ Y2 = Y + (1.0-FRH)*DY + 0.5*ARH*DX
+ CALL PLOT(X1,Y1,2)
+ CALL PLOT(X2,Y2,2)
+ CALL PLOT(X+DX,Y+DY,2)
+C
+ RETURN
+ END ! ARROW
+