subroutine aptqdic (au, av, bu, bv, cu, cv, du, dv,
     &                    pu, pv, np, tol,
     &                    pab, pbc, pcd, pda, dpmin, nerr)

ccbeg.
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c                             SUBROUTINE APTQDIC
c
c     call aptqdic (au, av, bu, bv, cu, cv, du, dv,
c    &              pu, pv, np, tol,
c    &              pab, pbc, pcd, pda, dpmin, nerr)
c
c     Version:  aptqdic  Updated    1990 April 2 13:20.
c               aptqdic  Originated 1990 February 21 11:00.
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, the distances
c               pab, pbc, pcd and pda from the point p = (pu, pv) to the sides
c               of the quadrangle with vertices a = (au, av), b = (bu, bv),
c               c = (cu, cv), and d = (du, dv), in counterclockwise order in
c               the uv plane, and the minimum dpmin of pab, pbc, pcd and pda.
c               The values of pab, pbc, pcd and pda will be truncated to zero,
c               if less than the estimated error in their calculation, based on
c               tol.  Flag nerr indicates any input error.
c
c     Input:    au, av, bu, bv, cu, cv, du, dv, pu, pv, np, tol.
c
c     Output:   pab, pbc, pcd, pda, dpmin, nerr.
c
c     Calls: aptptlc 
c
c     Glossary:
c
c     au, av    Input    The u, v coordinates of vertex "a" of the quadrangle.
c                          Size np.
c
c     bu, bv    Input    The u, v coordinates of vertex "b" of the quadrangle.
c                          Size np.
c
c     cu, cv    Input    The u, v coordinates of vertex "c" of the quadrangle.
c                          Size np.
c
c     dpmin     Output   Minimum of absolute values of distances
c                          pab, pbc, pcd and pda.  Size np.
c
c     du, dv    Input    The u, v coordinates of vertex "d" of the quadrangle.
c                          Size np.
c
c     nerr      Output   Indicates an input error, if not 0.
c                          1 if np is not positive.
c
c     np        Input    Size of arrays pu, pv, au, av, bu, bv, cu, cv, du, dv,
c                          pab, pbc, pcd, pda.
c
c     pab       Output   Distance from point "p" to quadrangle edge "ab".
c                          Truncated to zero, if less than the estimated error
c                          in its calculation, based on tol.  Absolute value.
c                          Size np.
c
c     pbc       Output   Distance from point "p" to quadrangle edge "bc".
c                          Truncated to zero, if less than the estimated error
c                          in its calculation, based on tol.  Absolute value.
c                          Size np.
c
c     pcd       Output   Distance from point "p" to quadrangle edge "cd".
c                          Truncated to zero, if less than the estimated error
c                          in its calculation, based on tol.  Absolute value.
c                          Size np.
c
c     pda       Output   Distance from point "p" to quadrangle edge "da".
c                          Truncated to zero, if less than the estimated error
c                          in its calculation, based on tol.  Absolute value.
c                          Size np.
c
c     pu, pv    Input    The u and v coordinates of point "p" in the uv plane.
c                          Size np.
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 quadrangle vertex "a".
      dimension au      (1)
c---- Coordinate v of quadrangle vertex "a".
      dimension av      (1)
c---- Coordinate u of quadrangle vertex "b".
      dimension bu      (1)
c---- Coordinate v of quadrangle vertex "b".
      dimension bv      (1)
c---- Coordinate u of quadrangle vertex "c".
      dimension cu      (1)
c---- Coordinate v of quadrangle vertex "c".
      dimension cv      (1)
c---- Minimum of pab, pbc, pcd, pda.
      dimension dpmin   (1)
c---- Coordinate u of quadrangle vertex "d".
      dimension du      (1)
c---- Coordinate v of quadrangle vertex "d".
      dimension dv      (1)
c---- Distance from point "p" to edge "ab".
      dimension pab     (1)
c---- Distance from point "p" to edge "bc".
      dimension pbc     (1)
c---- Distance from point "p" to edge "cd".
      dimension pcd     (1)
c---- Distance from point "p" to edge "da".
      dimension pda     (1)
c---- Coordinate u of point "p".
      dimension pu      (1)
c---- Coordinate v of point "p".
      dimension pv      (1)

c.... Local variables.

c---- Dummy argument.
      common /laptqdic/ fdmin
c---- Truncation error indicator.
      common /laptqdic/ itrunab (64)
c---- Truncation error indicator.
      common /laptqdic/ itrunbc (64)
c---- Truncation error indicator.
      common /laptqdic/ itruncd (64)
c---- Truncation error indicator.
      common /laptqdic/ itrunda (64)
c---- Index in arrays.
      common /laptqdic/ n
c---- First index of subset of data.
      common /laptqdic/ n1
c---- Last index of subset of data.
      common /laptqdic/ n2
c---- Dummy argument.
      common /laptqdic/ nlim
c---- Index in external array.
      common /laptqdic/ nn
c---- Size of current subset of data.
      common /laptqdic/ ns
cbugc***DEBUG begins.
cbug 9901 format (/ 'aptqdic finding distances from point in quadrangle.')
cbug 9902 format (i3,' pu,pv=  ',1p2e22.14,' (point)' /
cbug     &  '    au,av=  ',1p2e22.14,' (vertices)' /
cbug     &  '    bu,bv=  ',1p2e22.14 /
cbug     &  '    cu,cv=  ',1p2e22.14 /
cbug     &  '    du,dv=  ',1p2e22.14)
cbug      write ( 3, 9901)
cbug      do 105 n = 1, np
cbug        write ( 3, 9902) n, pu(n), pv(n), au(n), av(n),
cbug     &    bu(n), bv(n), cu(n), cv(n), du(n), dv(n)
cbug  105 continue
cbugc***DEBUG ends.

c.... Initialize.

      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 distances from point "p" to the sides of the quadrangle "abcd".

      call aptptlc (pu(n1), pv(n1), au(n1), av(n1), bu(n1), bv(n1),
     &              ns, tol, -1, pab(n1), fdmin, nlim, itrunab, nerr)

      call aptptlc (pu(n1), pv(n1), bu(n1), bv(n1), cu(n1), cv(n1),
     &              ns, tol, -1, pbc(n1), fdmin, nlim, itrunbc, nerr)

      call aptptlc (pu(n1), pv(n1), cu(n1), cv(n1), du(n1), dv(n1),
     &              ns, tol, -1, pcd(n1), fdmin, nlim, itruncd, nerr)

      call aptptlc (pu(n1), pv(n1), du(n1), dv(n1), au(n1), av(n1),
     &              ns, tol, -1, pda(n1), fdmin, nlim, itrunda, nerr)

c.... Find the minimum distance from point "p" to an edge of quadrangle "abcd".

c---- Loop over subset of data.
      do 120 nn = n1, n2

        dpmin(nn) = amin1 (abs (pab(nn)), abs (pbc(nn)),
     &                     abs (pcd(nn)), abs (pda(nn)))

c---- End of loop over subset of data.
  120 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 9904 format (/ 'aptqdic results:' /
cbug     &  (i3,' pab,pbc=',1p2e22.14 /
cbug     &  '    pcd,pda=',1p2e22.14 /
cbug     &  '    dpmin=  ',1pe22.14))
cbug      write ( 3, 9904) (n, pab(n), pbc(n), pcd(n), pda(n),
cbug     &  dpmin(n), n = 1, np)
cbugc***DEBUG ends.

  210 return

c.... End of subroutine aptqdic.      (+1 line.)
      end

UCRL-WEB-209832