vtf-logo

clawpack/applications/eulerm/2d/ConvShock/src/track.f


c
c     =====================================================
      subroutine track(mx,q,x,xr,nc,fmin,fmax,dfmin)
c     =====================================================
c
c     Copyright (C) 2002 Ralf Deiterding
c     Brandenburgische Universitaet Cottbus
c
c     Copyright (C) 2003-2007 California Institute of Technology
c     Ralf Deiterding, ralf@amroc.net
c
      implicit double precision (a-h,o-z)
c     
      parameter ( mTab = 5000, mderiv = 2 )
      common /Tables/ xtb(mderiv,-1:mTab), ftb(mderiv,-1:mTab)
c
      dimension q(1:mx), x(1:mx), xr(1:mx)
c
      nc = 0
      do i=1,mx
         xr(i) = -1.0d0
      enddo
      do i=1,mx-1
         xtb(1,i) = 0.5d0*(x(i)+x(i+1))
         ftb(1,i) = (q(i+1)-q(i))/(x(i+1)-x(i))
      enddo
      do i=1+1,mx-1
         xtb(2,i) = 0.5d0*(xtb(1,i)+xtb(1,i-1))
         ftb(2,i) = (ftb(1,i)-ftb(1,i-1))/(xtb(1,i)-xtb(1,i-1))
      enddo
c
      do i=1+2,mx-2
         if (q(i).ge.fmin.and.q(i).le.fmax.and.
     &        dabs(ftb(1,i)*(x(i+1)-x(i))).gt.
     &        dfmin*(x(i+1)-x(i)).and.
     &        dsign(1.d0,ftb(2,i)).ne.
     &        dsign(1.d0,ftb(2,i+1))) then
c     
            nc = nc + 1
            xr(nc) = xtb(2,i) + ftb(2,i)*(xtb(2,i+1)-xtb(2,i))/
     &           (ftb(2,i)-ftb(2,i+1))
         endif
      enddo
c
      return
      end
c