!*********************************************************************************************************************************** ! ! S C A L E B A R ! ! Program: SCALEBAR ! ! Programmers: David G. Simpson ! NASA Goddard Space Flight Center ! Greenbelt, Maryland 20771 ! ! Date: November 14, 2006 ! ! Language: Fortran-90 ! ! Version: 1.00b (November 17, 2006) ! ! Description: This program creates data to produce a color "scale bar" for a 3-D plot. ! The data output to the output file is a set of (x,y,z) triplets that can be imported into a plotting ! program such as SigmaPlot to produce a color bar. Just import the data, plot it as a filled contour ! plot, and change the graph width or height to make a narrow vertical bar or horizontal. ! This program can produce both linear and logarithmic scale bars, with either a vertical or horizontal ! orientation. ! ! Files: Fortran source code: ! ! scalebar.f90 Main program ! !*********************************************************************************************************************************** PROGRAM SCALEBAR IMPLICIT NONE INTEGER, PARAMETER :: NPTS = 1000 INTEGER, PARAMETER :: OUTUNIT = 11 CHARACTER(LEN=*), PARAMETER :: OUTFILE = 'scalebar.dat' INTEGER :: I, J, IERR, PLOT_TYPE, PLOT_STYLE DOUBLE PRECISION :: X, Y, Z, ZLO, ZHI !----------------------------------------------------------------------------------------------------------------------------------- ! ! Get user input. ! WRITE (UNIT=*, FMT='(A)', ADVANCE='NO') ' Z (low) = ' READ (UNIT=*, FMT=*) ZLO WRITE (UNIT=*, FMT='(A)', ADVANCE='NO') ' Z (high) = ' READ (UNIT=*, FMT=*) ZHI WRITE (UNIT=*, FMT='(A)', ADVANCE='NO') ' Bar type (1=linear, 2=log): ' READ (UNIT=*, FMT=*) PLOT_TYPE WRITE (UNIT=*, FMT='(A)', ADVANCE='NO') ' Bar style (1=vertical, 2=horizontal): ' READ (UNIT=*, FMT=*) PLOT_STYLE ! ! Open output file. ! OPEN (UNIT=OUTUNIT, FILE=OUTFILE, STATUS='REPLACE', ACCESS='SEQUENTIAL', & FORM='FORMATTED', POSITION='REWIND', ACTION='WRITE', IOSTAT=IERR) IF (IERR .NE. 0) THEN WRITE (UNIT=*, FMT='(A)') ' Error opening file '//OUTFILE STOP END IF ! ! Create data file. ! IF (PLOT_TYPE .EQ. 1) THEN ! linear scale bars IF (PLOT_STYLE .EQ. 1) THEN ! linear vertical DO I = 1, 2 X = DBLE(I) DO J = 1, NPTS Y = ZLO + DBLE(J-1)*(ZHI-ZLO)/DBLE(NPTS-1) Z = Y WRITE (UNIT=OUTUNIT, FMT='(3ES21.12)') X, Y, Z END DO END DO ELSE ! linear horizontal DO I = 1, NPTS X = ZLO + DBLE(I-1)*(ZHI-ZLO)/DBLE(NPTS-1) DO J = 1, 2 Y = DBLE(J) Z = X WRITE (UNIT=OUTUNIT, FMT='(3ES21.12)') X, Y, Z END DO END DO END IF ELSE ! log scale bars IF (PLOT_STYLE .EQ. 1) THEN ! log vertical DO I = 1, 2 X = DBLE(I) DO J = 1, NPTS Y = 10.0D0**(LOG10(ZLO)+DBLE(J-1)*(LOG10(ZHI)-LOG10(ZLO))/DBLE(NPTS-1)) Z = Y WRITE (UNIT=OUTUNIT, FMT='(3ES21.12)') X, Y, Z END DO END DO ELSE ! log horizontal DO I = 1, NPTS X = 10.0D0**(LOG10(ZLO)+DBLE(I-1)*(LOG10(ZHI)-LOG10(ZLO))/DBLE(NPTS-1)) DO J = 1, 2 Y = DBLE(J) Z = X WRITE (UNIT=OUTUNIT, FMT='(3ES21.12)') X, Y, Z END DO END DO END IF END IF ! ! All done. ! CLOSE (UNIT=OUTUNIT, STATUS='KEEP') WRITE (UNIT=*, FMT='(A)') ' Done. Output file = '//OUTFILE STOP END PROGRAM SCALEBAR