c     user amplitude subroutine
      Subroutine vuamp(
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)
      
      include 'vaba_param.inc'

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

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,
     *           iStopAnalysis     = 4,
     *           nFlagsDefine      = 4)
      dimension time(nTime), lFlagsInfo(nFlagsInfo),
     *          lFlagsDefine(nFlagsDefine)
      dimension jSensorLookUpTable(*)

      parameter (zero=0.d0,pt01=1.d-2, half = 0.5d0, one=1.d0)

C     User code to compute  ampValue = F(sensors)
      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    = zero 
            ampSecDerivative = zero 
            ampIncIntegral   = zero
            svars(1) = zero
            svars(2) = ampDerivative
         else 
            tim = time(iStepTime)
            tStart = tim - dt           
            tEnd   = tim 
            dtInv  = one/dt
c           coding done to match the equivalent piecewise linear 
c           tabular definition
            ampValueNew      = tEnd*tEnd*tEnd
            ampValueOld      = tStart*tStart*tStart
            ampDerivative    = (ampValueNew - ampValueOld)*dtInv

c           retrieve old values
            dtOld = svars(1)
            ampDerivativeOld = svars(2)

c           compute second derivative
            dtAveInv  = one/(half*(dtOld + dt))
            ampSecDerivative = (ampDerivative - ampDerivativeOld)*
     *                         dtAveInv

c           incremental integral
            ampIncIntegral   = (ampValueNew + ampValueOld)*dt*half

c           stop the analysis, if desired
            if (ampValueNew.gt.1000) lFlagsDefine(iStopAnalysis)=1

c           load in state variables the current time increment and the
c           current derivative
            svars(1) = dt
            svars(2) = ampDerivative
         end if
      end if 

      return
      end
