SECTION 1.3 CONTOUR PLOTTING
A call to subroutine CNTR provides a contour plot of any function. This function must be supplied by the user in the standard form. He/she must also designate the two variables which will be varied and must assign fixed values for the remaining NP-2 variables. The two variables that are to be varied must be assigned lowest and highest values. The function will be evaluated repeatedly over a grid of variable values in the selected ranges and the resulting values will be assigned to one of ten levels of magnitude. The assignments are identified by the digits 0 (lowest) to 9 (highest) and the full array of these digits is printed in an X-Y plot, in which every digit rep- resents a function value corresponding to the pair of variable values given by the horizontal and vertical coordinates of the digit. The maximum and minimum values will be indicated by + and - respectively, if IOPT(1) is zero or if the calculated function value exactly matches ZMAX or ZMIN. The SUBROUTINE CNTR2 calls the default initializer DFLT which is part of the file OPT. Hence OPT.OBJ must be linked to use CNTR2, which will happen automatically if the user employs the GQOPT Library. (Alternatively, the user could just copy SUBROUTINE DFLT from OPT.FOR to the end of his/her MAIN program; in that case OPT. need not be linked. The test problem GQT13.FOR assumes that this has been done.) The call for contour plotting is
CALL CNTR(X,NP,I1,I2,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,IOPT,ZINT,*, 1 FUNC,XLABEL,YLABEL)
X = The vector of variables
NP = The number of variables
I1 = Index of the variable to be plotted on the X-axis
I2 = Index of the variable to be plotted on the Y-axis
XMIN = Smallest value plotted on the X-axis
XMAX = Largest value plotted on the X-axis
YMIN = Smallest value plotted on the Y-axis
YMAX = Largest value plotted on the Y-axis
ZMIN = Smallest function value plotted (see also IOPT(1))
ZMAX = Largest function value plotted (see also IOPT(1))
ZINT = Increment in the distance between pairs of consecutive contour values (see also IOPT(2))
IOPT = an integer array of length 3
IOPT(1) = 0 All function values encountered will result in a digit being plotted. ZMIN and ZMAX are irrelevant.
IOPT(1) = 1 You must specify a smallest and largest function value (ZMIN,ZMAX). Digits will be plotted only for function values in this range. For function values outside the range, blanks are plotted.
IOPT(2) = 0 The entire range of function values encountered will be divided into ten equal intervals: successive contours correspond to equal function differences. ZINT is irrelevant.
IOPT(2) = 1 ZINT must be specified and successively higher contours correspond to larger and larger (smaller and smaller) function differences if ZINT is positive (negative). ZINT is the value by which the difference in function values corresponding to successive contours increases (decreases). This works as follows: Let the lowest interval have the width ZD, the second ZD+ZINT, and the last ZD + 9*ZINT. Then
10*ZD + 45*ZINT = ZMAX - ZMIN
(where ZMAX and ZMIN are either determined by the program (IOPT(1)=0) or are specified by the user). If ZINT > 0, then it must be chosen so that
ZMAX - ZMIN - 45*ZINT = 10*ZD
is positive. If ZINT < 0, then ZD + 9*ZINT must be
positive. If these fail to be the case, IOPT(2) is overridden and
the program proceeds as if IOPT(2)=0 had been specified. The user
may need to run the plot first with IOPT(2)=0 to find out what
ZMIN and ZMAX are before he can select an appropriate value of
IOPT(3)=An integer from 10 to 100 which gives the resolution of the plot. Grid size is the square of IOPT(3). If IOPT(3) is not a multiple of 10, it will be truncated to the next lower multiple. Thus, if IOPT(3)=67, plot size will contain 60*60=3600 digits corresponding to 3600 function evaluations. Warning: the largest grid size is 100 by 100, and is likely to be expensive since it will require 10000 function evaluations.
XLABEL,YLABEL=Names of the variables (CHARACTER*8).
FUNC=Name of function subroutine in standard format (See Section 1.1)