subroutine aptvadc (au, av, bmult, b, cu, cv, np, tol,
     &                    du, dv, vlen, nerr)

ccbeg.
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c                             SUBROUTINE APTVADC
c
c     call aptvadc (au, av, bmult, b, cu, cv, np, tol,
c    &              du, dv, vlen, nerr)
c
c     Version:  aptvadc  Updated    1990 November 26 10:00.
c               aptvadc  Originated 1989 November 20 13:20.
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 2-D vector
c               sum d(n) = a(n) + bmult * b(n) * c(n), where d = (du, dv),
c               a = (au, av), and c = (cu, cv), and to find vlen, the
c               magnitude of vector "d", all in the uv plane.
c               Any component of vector "d" less than the estimated error in
c               its calculation, based on tol, will be truncated to zero.
c               Flag nerr indicates any input error.
c
c     History:  1990 February 22.  Deleted truncation of vector components to
c               zero based on vector magnitude.
c
c     Input:    au, av, bmult, b, cu, cv, np, tol.
c
c     Output:   du, dv, vlen, nerr.
c
c     Glossary:
c
c     au, av    Input    The u and v coordinates of point "a".  Size np.
c                          The w components are zero.  The directions u, v and w
c                          are orthogonal.
c
c     b         Input    Coefficient of vector "c", when multiplied by bmult.
c                          Size np.
c
c     bmult     Input    Multiplier of term b(n) * c(n).  Not an array.
c
c     cu, cv    Input    The u and v coordinates of point "c".  Size np.
c                          The w components are zero.
c
c     du, dv    Output   The u and v components of vector "d".  Size np.
c                          The w components are zero.
c                          Will be truncated to zero if less than the estimated
c                          numerical error in their calculation based on tol.
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 au, av, b, cu, cv, vlen, du, dv.
c
c     tol       Input    Numerical tolerance limit.  Used to truncate
c                          the components of 2-D vector d = (du, dv).
c                          On Cray computers, recommend 1.e-5 to 1.e-11.
c
c     vlen      Output   Magnitude of vector "d".  May be truncated to zero,
c                          if less than the estimated error in its calculation.
c                          See tol.  Size np.
c
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
ccend.

c.... Dimensioned arguments.

c---- Coordinate u of point "a".
      dimension au      (1)
c---- Coordinate v of point "a".
      dimension av      (1)
c---- A scalar multiplier.
      dimension b       (1)
c---- Coordinate u of point "c".
      dimension cu      (1)
c---- Coordinate v of point "c".
      dimension cv      (1)
c---- Component u of vector "d".
      dimension du      (1)
c---- Component v of vector "d".
      dimension dv      (1)
c---- The distance from "a" to "c".
      dimension vlen    (1)

c.... Local variables.

c---- Estimated error in du.
      common /laptvadc/ duerr
c---- Estimated error in dv.
      common /laptvadc/ dverr
c---- An array index.
      common /laptvadc/ n
cbugc***DEBUG begins.
cbug 9901 format (/ 'aptvadc finding vector sum a + b * c:' /
cbug     &  '  bmult=      ',1pe22.14 /
cbug     &  (i3,' au,av=    ',1p2e22.14 /
cbug     &  '    b=        ',1pe22.14 /
cbug     &  '    cu,cv=    ',1p2e22.14))
cbug      write ( 3, 9901) bmult,
cbug     &  (n, au(n), av(n), b(n), cu(n), cv(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

c.... Find the components of vector "d".

c---- Loop over points or vectors.
      do 110 n = 1, np

        du(n)   = au(n) + bmult * b(n) * cu(n)
        dv(n)   = av(n) + bmult * b(n) * cv(n)

c---- End of loop over points or vectors.
  110 continue

c.... See if the truncation error option is to be used.

c---- Test and adjust du, dv.
      if (tol .gt. 0.0) then

c---- Loop over points or vectors.
        do 120 n = 1, np

          duerr = tol * (abs (au(n)) + abs (bmult * b(n) * cu(n)))
          if (abs (du(n)) .lt. duerr) then
            du(n) = 0.0
          endif

          dverr = tol * (abs (av(n)) + abs (bmult * b(n) * cv(n)))
          if (abs (dv(n)) .lt. dverr) then
            dv(n) = 0.0
          endif

c---- End of loop over points or vectors.
  120   continue

c---- Tested tol.
      endif

c.... Find the magnitudes of vector "d".

c---- Loop over points or vectors.
      do 130 n = 1, np

        vlen(n) = sqrt (du(n)**2 + dv(n)**2)

c---- End of loop over points or vectors.
  130 continue
cbugc***DEBUG begins.
cbug 9902 format (/ 'aptvadc results:' /
cbug     &  (i3,' du,dv,len=',1p3e22.14))
cbug      write ( 3, 9902) (n, du(n), dv(n), vlen(n), n = 1, np)
cbugc***DEBUG ends.

  210 return

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

UCRL-WEB-209832