c     user amplitude subroutine
      Subroutine uamp(
C          passed in for information and state variables
     *     ampName, time, ampValueOld,  dt,  nSvars, svars, lFlagsInfo,
     *     nSensor, sensorValues, sensorNames, jSensorLookUpTable, 
C          to be defined
     *     ampValueNew, 
     *     lFlagsDefine,
     *     AmpDerivative, AmpSecDerivative, AmpIncIntegral, 
     *     AmpIncDoubleIntegral)
      
      include 'aba_param.inc'

C     svars - additional state variables, similar to (V)UEL
      dimension sensorValues(nSensor), svars(nSvars)
      character*80 sensorNames(nSensor)
      character*80 ampName

      parameter(zero=0.e0, one = 1.e0, two = 2.e0, ome5=1.e-5,
     *     half = 0.5d0)
      double precision oned, zerod, twod, tim, tStart, tEnd
c      double precision ampValueNew, ampDerivative, ampSecDerivative
      

C     time indices
      parameter (iStepTime        = 1,
     *           iTotalTime       = 2,
     *           nTime            = 2)
C     flags passed in for information
      parameter (iInitialization   = 1,
     *           iRegularInc       = 2,
     *           nFlagsInfo        = 2)
C     optional flags to be defined
      parameter (iComputeDeriv       = 1,
     *           iComputeSecDeriv    = 2,
     *           iComputeInteg       = 3,
     *           iComputeDoubleInteg = 4,
     *           iStopAnalysis       = 5,
     *           iConcludeStep       = 6,
     *           nFlagsDefine        = 6)
      dimension time(nTime), lFlagsInfo(nFlagsInfo),
     *          lFlagsDefine(nFlagsDefine)
      dimension jSensorLookUpTable(*)

C     User code to compute  ampValue = F(sensors)
      zerod = dble(zero)
      oned  = dble(one)
      twod  = dble(two)
      if (ampName(1:8) .eq. 'LOADAMP2' ) then
         lFlagsDefine(iComputeDeriv)    = 1
         lFlagsDefine(iComputeSecDeriv) = 1
         lFlagsDefine(iComputeInteg)    = 1
         if (lFlagsInfo(iInitialization).eq.1) then 
            ampValueNew      = ampValueOld
            ampDerivative    = oned
            ampSecDerivative = zerod
            ampIncIntegral   = ome5
         else 
c           Example: f(t) = t
            tim = dble(time(iStepTime))
            tStart = dble(tim) - dble(dt)
            tEnd   = tim 
            ampValueNew      = tim
            ampDerivative    = oned
            ampSecDerivative = zerod
            ampIncIntegral   = half*dt*(ampValueNew + ampValueOld)
C           stop the analysis, if desired
            if (ampValueNew.gt.1000) lFlagsDefine(iStopAnalysis)=1
         end if
      end if 
C
      return
      end
