C This file: http://ftp.aset.psu.edu/pub/ger/fortran/hdk/ticks.f90 C SUBROUTINE TICKS2(XMIN,XMAX,NTICKS,XMINP,XMAXP,DIST,LABS,IDIML, * MBEG,MPOINT,MEND,ENOTA,ME,ISCALE,NSIG,NDEC,IER) IMPLICIT REAL*8 (A-H,O-Z) C==========GIVEN RAW DATA MINIMUM AND MAXIMUM VALUES AND THE NUMBER OF C DESIRED GRID INTERVALS, TICKS2 RETURNS "NICE" CHARACTER C TICK MARK LABELS AND ASSOCIATED SCALING INFORMATION FOR C LABELING LINEAR GRAPH AXES. TICK MARK LABELS WILL BE C ACCURATE UP TO MAXSIG=12 SIGNIFICANT DIGITS. GIVEN C NSIG, THE NUMBER OF SIGNIFICANT DIGITS ASSOCIATED WITH C THE RAW DATA, AND NDEC, THE NUMBER OF PLACES AFTER THE C DECIMAL POINT, CHARACTER LABELS WILL BE FORMATTED WITH C THE FORTRAN FORMAT F(NSIG+2).(NDEC) IF THEY FIT SUCH A C FORMAT WITHOUT LOOSING EITHER HIGH OR LOW-ORDER C SIGNIFICANCE; OTHERWISE THEY WILL BE FORMATTED WITH C 1PE(NSIG+6).(NSIG-1). AN OPTION (SEE ENOTA, ISCALE C BELOW) IS PROVIDED TO ALLOW POSSIBLE EXPONENT NOTATION C TO BE ELIMINATED FROM INDIVIDUAL LABELS; THAT IS, EACH C LABEL WILL BE OF CONSISTENT LENGTH AND SCALE SUCH THAT C ONE SCALE FACTOR (10**ISCALE) HOLDS FOR ALL. AN OPTION C IS ALSO PROVIDED (SEE MBEG,MEND) TO MINIMIZE THE LENGTH C OF THE CHARACTER LABELS BY ELIMINATING LEADING BLANKS C AND UNNECESSARY TRAILING ZEROS AND DECIMAL POINT. IF C NSIG WOULD CAUSE SIGNIFICANT DIGITS OF ANY LABEL TO BE C DROPPED BY THE 1PE FORMAT ABOVE, THEN SUCH LABELS ARE C INACCURATE; INACCURATE LABELS ARE RETURNED AS A STRING C OF ASTERISKS(*'S) AND AN ERROR INDICATOR (SEE IER) IS C SET. LIKEWISE AN ERROR INDICATOR IS SET IF XMIN, XMAX C ARE TOO CLOSE TO OVERFLOW OR UNDERFLOW LIMITS; OR IF C THE EXPRESSION XMAX-XMIN, NEEDED FOR SCALING THE DATA C FOR PLOTTING, IS SO LARGE THAT LESS THAN NSIG C SIGNIFICANT DIGITS OF EITHER OPERAND PARTICIPATE IN THE C SUBTRACTION; OR IF XMAX-XMIN IS SO SMALL THAT LESS THAN C NSIG DIGITS REMAIN AFTER CANCELLING. C C-----PARAMETERS: C XMIN,XMAX ARE GIVEN AS MINIMUM AND MAXIMUM DATA VALUES. C XMIN 1.0D0) & (1.D0-EPS < 1.D0). C C THIS COMPUTATION OF EPS IS THE WORK OF ALAN C. HINDMARSH, C LAWRENCE LIVERMORE NATIONAL LAB. C----------------------------------------------------------------------- DOUBLE PRECISION EPS, COMP EPS = 1.0D0 10 EPS = EPS*0.5D0 COMP = 1.0D0 + EPS IF (COMP .NE. 1.0D0) GO TO 10 D1MACH = EPS*2.0D0 RETURN END IMPLICIT REAL*8 (A-H,O-Z) C C===========SHORT TEST DRIVER FOR SUBROUTINE TICKS2. C LOGICAL*1 LABS(14,20),ENOTA(4),TITLE(80) IDIML=14 C--------INPUT A TEST CASE. 55 READ(5,10,END=99) TITLE 10 FORMAT(80A1) WRITE(6,11) TITLE 11 FORMAT(////80A1) READ(5,*) XMIN,XMAX,N,NSIG,NDEC WRITE(6,1) XMIN,XMAX,N,NSIG,NDEC 1 FORMAT('0XMIN =',G20.12,' XMAX =',G20.12,' N=',I3,' (NSIG,NDEC)=' * ,'(',I2,',',I2,')') C--------CHECK OUT TICKS2. CALL TICKS2(XMIN,XMAX,N,XMINP,XMAXP,DIST,LABS,14,MBEG,MPOINT, * MEND,ENOTA,ME,ISCALE,NSIG,NDEC,IER) IF(IER.NE.0 .AND. IER.NE.7) GO TO 7 C--------OUTPUT RESULTS. WRITE(6,2) XMINP,XMAXP,DIST 2 FORMAT('0XMINP=',G20.12,' XMAXP=',G20.12,' GRID INTERVAL=', * G20.12) WRITE(6,3) MBEG,MEND,MPOINT,ISCALE,(ENOTA(J),J=1,ME) 3 FORMAT('0MBEG,MEND,MPOINT=',3I4,' TIMES 10**',I3, * ' CHARACTER EXPONENT=',4A1) C--------OUTPUT FORMATTED LABELS FOLLOWED BY MINIMALLY FORMATED LABELS. WRITE(6,9) 9 FORMAT('0',10X,'CHARACTER LABELS'/' AS REQUESTED',9X, * 'OF MINIMAL LENGTH'/'+',40('_')) DO 5 I=1,N 5 WRITE(6,4) (LABS(J,I),J=1,IDIML),(LABS(J,I),J=MBEG,MEND) 4 FORMAT(' ->',14A1,5X,'->',14A1) C--------ERROR RETURN FROM TICKS2. IF(IER.EQ.0) GO TO 55 7 WRITE(6,8) IER 8 FORMAT('0ERROR RETURN CODE=',I2) C--------GO TRY ANOTHER TEST CASE. GO TO 55 C--------WRAP UP. 99 STOP END //DATA.INPUT DD * 1EXAMPLE 1, TYPICAL AXES PARAMETERS, NEGATIVE TO POSITIVE, SEE CACM. -3.1 11.1 6 3 1 EXAMPLE 1, VERY SMALL EXPONENTS. -3.1D-65 11.1D-65 6 3 1 1EXAMPLE 2, TYPICAL AXES PARAMETERS, ALL POSITIVE, EXAMPLE FROM CACM. 5.2 10.1 6 3 1 EXAMPLE 2, VERY LARGE EXPONENTS. 5.2D+65 10.1D+65 6 3 1 1EXAMPLE 3, LARGE WHOLE NUMBERS WITH DECREASING NSIG. -120000000000 -1000000000 10 12 0 EXAMPLE 3, LARGE WHOLE NUMBERS WITH DECREASING NSIG. -120000000000 -1000000000 10 11 1 EXAMPLE 3, LARGE WHOLE NUMBERS WITH DECREASING NSIG. -120000000000 -1000000000 10 8 1 EXAMPLE 3, LARGE WHOLE NUMBERS WITH DECREASING NSIG. -120000000000 -1000000000 10 2 0 1EXAMPLE 4, LOTS OF DECIMAL PLACES WITH DECREASING NSIG. .000000000012 .0000000001 10 12 12 EXAMPLE 4, LOTS OF DECIMAL PLACES WITH DECREASING NSIG. .000000000012 .0000000001 10 8 0 EXAMPLE 4, LOTS OF DECIMAL PLACES WITH DECREASING NSIG. .000000000012 .0000000001 10 2 0 1EXAMPLE 5, TYPICAL AXES PARAMETERS, F12.3 FORMAT. .37 1.92 5 12 3 1EXAMPLE 6, TYPICAL AXES PARAMETERS, F12.2, ELIMINATE DECIMAL POINT. -25.6 -5.1 7 12 2 1EXAMPLE 7, TEST ERROR CODE 7, WON'T FIT WITHOUT LOOSING SIGNIFICANCE. 1.0 2.0 11 1 1 EXAMPLE 7, JUST FITS IN 1PE FORMAT. 1.0 2.0 11 2 0 1EXAMPLE 8, TEST ERROR RETURN 6, XMAX-XMIN TOO LARGE. 1.000 1.000E+17 10 4 3 EXAMPLE 8, TEST ERROR RETURN 6, XMAX-XMIN TOO SMALL. 1.000 1.0001 10 12 3