subroutine aptmnlg (x, ibeg, iend, int, ndec, imin, imax, & xmin, xmax, nerr) ccbeg. cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c SUBROUTINE APTMNLG c c call aptmnlg (x, ibeg, iend, int, ndec, imin, imax, xmin, xmax, c & nerr) c c Version: aptmnlg Updated 1993 May 18 13:10. c aptmnlg Originated 1993 May 18 13:10. c c Author: Arthur L. Edwards, LLNL, L-298, Telephone (925) 422-4123. c c c Purpose: To find the log-scale minimum and maximum values xmin and xmax c in array x, starting at x(ibeg) and testing every int'th value c of x up to x(iend), and the indices imin and imax at which they c occur. The maximum xmax is restricted to positive values. c The minimum xmin is restricted to positive values no less than c 0.1**ndec * xmax. c Note that ibeg, iend, imin and imax are based on the input c argument x being at x(1). For example, if the dimension of c x is (-10:40), call aptmnlg with x(1), ibeg = -10, iend = 40, c int = 1, to search the entire array, and to get the correct c absolute indices for imin and imax. c Flag nerr indicates any input errors. c c Input: x, ibeg, iend, int, ndec. c c Output: imin, imax, xmin, xmax, nerr. c c Glossary: c c nerr Output Indicates an input error, if not 0. c 1 if int is zero, or does not have the same sign c as iend - ibeg. c 2 if ndec is not positive. c c ibeg Input The index of the first value of x to be tested. c c iend Input The index of the last value of x to be tested. c Must be within the range of indices of x. c c imax Output The index in x at which xmax occurs. c xmax = x(imax) c c imin Output The index in x at which xmin occurs. c xmin = x(imin) c c int Input The interval between the indices of x to be tested. c I.e., the indices ibeg, ibeg + int, ibeg + 2*int, c etc, up to ibeg + n*int =< iend will be tested. c c ndec Input The number of decimal decades allowed between xmax and c xmin. c c x Input Word x(1), in the array to be tested, from x(ibeg) to c x(iend), at intervals int, to find minimum xmin, c greater than 0.1**ndec, and maximum xmax, and the c indices imin and imax of xmin and xmax. c c xmax Output Maximum positive value of x found. Returned as 1.e-99, c if all tested x values are negative, or less than c 1.e-99. c c xmin Output Minimum positive value of x found, that is no less than c 0.1**ndec * xmax. c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccend. c.... Dimensioned arguments. c---- Array to be tested to find minimum and maximum. dimension x (1) c.... Local variables. c---- A small number common /laptmnlg/ small c---- Limiting xmin, 0.1**ndec * xmax. common /laptmnlg/ xminlim c---- Index in array x. common /laptmnlg/ n c---- Index in array x. common /laptmnlg/ nn c---- Temporary value of x. common /laptmnlg/ xtemp cbugc***DEBUG begins. cbug 9901 format (/ 'aptmnlg finding log-scale minimum and maximum.' / cbug & 'ibeg=',i8,' iend=',i8,' int=',i8,' ndec=',i4) cbug write ( 3, 9901) ibeg, iend, int, ndec cbugc***DEBUG ends. c.... initialize. small = 1.e-99 xmin = small xmax = small nerr = 0 c.... Test for input errors. if (iend .ge. ibeg) then if (int .le. 0) then nerr = 1 go to 210 endif else if (int .ge. 0) then nerr = 1 go to 210 endif endif cbugc***DEBUG begins. cbug 9902 format (i8,' x=',1pe22.14) cbug write ( 3, 9902) (n, x(n), n = ibeg, iend, int) cbugc***DEBUG ends. if (ndec .le. 0) then nerr = 2 go to 210 endif c.... Find the minimum value of x. c---- Loop over array x. do 110 n = ibeg, iend, int if (x(n) .gt. xmax) then imax = n xmax = x(n) endif c---- End of loop over array x. 110 continue if (xmax .eq. small) go to 210 xminlim = 0.1**ndec * xmax xmin = xmax c---- Loop over array x. do 120 n = ibeg, iend, int if (x(n) .lt. xminlim) go to 120 if (x(n) .lt. xmin) then imin = n xmin = x(n) endif c---- End of loop over array x. 120 continue 210 continue cbugc***DEBUG begins. cbug 9903 format (/ 'aptmnlg results: nerr=',i3 / cbug & 'imin=',i8,' xmin=',1pe22.14 / cbug & 'imax=',i8,' xmax=',1pe22.14) cbug write ( 3, 9903) nerr, imin, xmin, imax, xmax cbugc***DEBUG ends. return c.... End of subroutine aptmnlg. (+1 line.) end UCRL-WEB-209832