subroutine aptrans (xran, np, nran, nerr) ccbeg. cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c SUBROUTINE APTRANS c c call aptrans (xran, np, nran, nerr) c c Version: aptrans Updated 1990 July 23 13:20. c aptrans Originated 1990 July 23 13:20. c c Author: Arthur L. Edwards, LLNL, L-298, Telephone (925) 422-4123. c c c Purpose: To randomly sample, without duplication, nran values of xran c from the array xran(n), n = 1, np. All values of xran are c initially equally probable. c Flag nerr indicates any input errors. c c Input: xran, np, nran. c c Output: xran, nerr. c c Glossary: c c nerr Output Indicates an input error, if not 0. c 1 if np is less than 1. c 2 if nran is less than 1, or exceeds np. c c np Input Size of array xran. Must be at least 1. c c nran Input Number of xran values to be randomly sampled. c Must be from 1 to np. c c xran In/Out Array from which xran values are to be randomly sampled c without duplication. Size np. c The first nran values are the desired result. c Any remainder of the array (indices nran + 1 to np) c will be randomized. c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccend. c.... Dimensioned arguments. c---- Input (1 to np), output (1 to nran). dimension xran (1) c.... Local variables. c---- Index in array xran. common /laptrans/ n c---- Index in array xran. common /laptrans/ nn c---- Temporary value of xran. common /laptrans/ xtemp cbugc***DEBUG begins. cbug 9901 format (/ 'aptrans randomly sampling unique values.' / cbug & (i3,' ixin=',i5,' xran=',1pe22.14)) cbug write ( 3, 9901) (n, xran(n), xran(n), n = 1, np) cbugc***DEBUG ends. c.... initialize. nerr = 0 c.... Test for input errors. if (np .le. 0) then nerr = 1 go to 210 endif if ((nran .le. 0) .or. (nran .gt. np)) then nerr = 2 go to 210 endif c---- Loop over table swaps. do 110 n = 1, nran nn = n + ranf( ) * (np - n + 1) xtemp = xran(n) xran(n) = xran(nn) xran(nn) = xtemp c---- End of loop over table swaps. 110 continue cbugc***DEBUG begins. cbug 9902 format (/ 'aptrans results:' / cbug & (i3,' iran=',i5,' xran=',1pe22.14)) cbug write ( 3, 9902) (n, xran(n), xran(n), n = 1, nran) cbugc***DEBUG ends. 210 return c.... End of subroutine aptrans. (+1 line.) end UCRL-WEB-209832