subroutine aptrksl (au, abu, cu, du, dintmn, dintmx, np, tol, & nint, dint, nerr) ccbeg. cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c SUBROUTINE APTRKSL c c call aptrksl (au, abu, cu, du, dintmn, dintmx, np, tol, c & nint, cu, dint, nerr) c c Version: aptrksl Updated 1990 December 3 14:20. c aptrksl Originated 1990 January 11 15:10. c c Author: Arthur L. Edwards, LLNL, L-298, Telephone (925) 422-4123. c c c Purpose: To find, for each of the np sets of input data, any intersection c of the linear track through point a = (au) in the direction of c the unit vector ab = (abu, abv, abw), with the vw plane through c the point c = (cu), with the normal vector d = (du), for which c (1) the distance dint from point "a" to the intersection is c between the limits dintmn and dintmx, and (2) the direction c vector abu has the same sign as du. This is equivalent to a c zone exit in 1-D slab geometry, if du has the sign of the c direction out of the zone at point cu. c Flag nint indicates the type of intersection found. c Flag nerr indicates any input error. c c To find a zone exit in 1-D slab geometry. c c Input: au, abu, cu, du, dintmn, dintmx, np, tol. c c Output: nint, dint, nerr. c c Calls: aptvdil c c Glossary: c c abu Input The u component of the unit direction vector "ab" along c the track in uvw space. Size np. c An acceptable intersection can only occur if abu has c the same sign as du. c c au Input The u coordinate of point "a". The v and w coordinates c are zero. Directions u, v and w are orthogonal. c Size np. c c cu Input The u coordinate of point "c". Size np. c c dint Output The distance of the point of intersection of the track c from point "a" to the uv plane through point "c". c Positive if in the same direction as vector "ab". c Size np. c c dintmn Input Minimum allowed value of distance to intersection dint. c Size np. c c dintmx Input Maximum allowed value of distance to intersection dint. c Size np. c c du Input The u component of the outward normal vector of the vw c plane at point "c". Size np. c An acceptable intersection can only occur if abu has c the same sign as du. c c nerr Output Indicates an input error, if not 0. c 1 if np is not positive. c c nint Output Number of acceptable intersections found. Size np. c 0 if none. c 1 if an acceptable intersection was found. c c np Input Size of arrays. c c tol Input Numerical tolerance limit. c On Cray computers, recommend 1.e-5 to 1.e-11. c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccend. c.... Dimensioned arguments. c---- Coordinate u of point "a". dimension au (1) c---- Component u of vector "ab". dimension abu (1) c---- Coordinate u of point "c". dimension cu (1) c---- Distance to intersection. dimension dint (1) c---- Minimum distance to intersection. dimension dintmn (1) c---- Maximum distance to intersection. dimension dintmx (1) c---- Component u of outward normal at "c". dimension du (1) c---- Number of acceptable intersections. dimension nint (1) c.... Local variables. c---- Distance from au to cu. common /laptrksl/ acu (64) c---- A very small number. common /laptrksl/ fuz c---- Index in arrays. common /laptrksl/ n c---- First index of subset of data. common /laptrksl/ n1 c---- Last index of subset of data. common /laptrksl/ n2 c---- Index in external array. common /laptrksl/ nn c---- Size of current subset of data. common /laptrksl/ ns cbugc***DEBUG begins. cbug 9901 format (/ 'aptrksl finding 1-D exit in slab geometry:' / cbug & (i3,' au= ',1pe22.14,' abu= ',1pe22.14 / cbug & ' cu= ',1pe22.14,' du= ',1pe22.14 / cbug & ' dintmn=',1pe22.14,' dintmx=',1pe22.14)) cbug write ( 3, 9901) (n, au(n), abu(n), cu(n), du(n), cbug & dintmn(n), dintmx(n), n = 1, np) cbugc***DEBUG ends. c.... Initialize. c---- A very small number. fuz = 1.e-99 nerr = 0 c.... Test for input errors. if (np .le. 0) then nerr = 1 go to 210 endif c.... Set up the indices of the first subset of data. n1 = 1 n2 = min (np, 64) 110 ns = n2 - n1 + 1 c.... Find the distance from point "a" to point "c". call aptvdil (au(n1), cu(n1), ns, tol, acu, nerr) c.... Find the distance to the intersection. c---- Loop over subset of data. do 140 n = 1, ns nn = n + n1 - 1 dint(nn) = acu(n) / (abu(nn) + fuz) c---- End of loop over subset of data. 140 continue c.... Test the intersection for acceptability (a zone exit) c---- Loop over subset of data. do 150 nn = n1, n2 if ((dint(nn) .ge. dintmn(nn)) .and. & (dint(nn) .le. dintmx(nn)) .and. & ((abu(nn) * du(nn)) .gt. 0.0) ) then nint(nn) = 1 else nint(nn) = 0 endif c---- End of loop over subset of data. 150 continue c.... See if all data subsets are done. c---- Do another subset of data. if (n2 .lt. np) then n1 = n2 + 1 n2 = min (np, n1 + 63) go to 110 endif cbugc***DEBUG begins. cbug 9902 format (/ 'aptrksl results:' / cbug & (i3,' dint= ',1pe22.14,' nint=',i2)) cbug write ( 3, 9902) (n, dint(n), nint(n), n = 1, np) cbugc***DEBUG ends. 210 return c.... End of subroutine aptrksl. (+1 line.) end UCRL-WEB-209832