anchor.diff:           
         ! Set any steady-state inputs, once before the time-stepping loop   
            
  -      IF ( drvrInitInp%WAMITInputsMod /= 2 ) THEN
  +      IF (( drvrInitInp%WAMITInputsMod /= 2 ) .AND. ( drvrInitInp%WAMITInputsMod >= 0 )) THEN
                   
            u(1)%PRPMesh%TranslationDisp(:,1)   = drvrInitInp%uWAMITInSteady(1:3) 
   
  
positive.code:    REAL(ReKi), ALLOCATABLE                            :: WAMITin(:,:)          ! Variable for storing time, forces, and body velocities, in m/s or rad/s for WAMIT
     REAL(ReKi), ALLOCATABLE                            :: Morisonin(:,:)        ! Variable for storing time, forces, and body velocities, in m/s or rad/s for Morison elements
     
     INTEGER(IntKi)                                     :: I                    ! Generic loop counter
     INTEGER(IntKi)                                     :: J                    ! Generic loop counter
     INTEGER(IntKi)                                     :: n                    ! Loop counter (for time step)
  
negative.code:             end if
     
           END IF
  		 
  		 
            !@mhall: new kinematics input for moving bodies individually
            ! WAMITInputsMod < 0: Reads time series of positions for each body individually, and uses finite differences to also get velocities and accelerations.
            ! The number of bodies is the negative of WAMITInputsMod.
           IF ( drvrInitInp%WAMITInputsMod < 0 ) THEN
                 
              ! platform reference point (PRP), and body 1-NBody displacements
              u(1)%PRPMesh%TranslationDisp(:,1)   = WAMITin(n,2:4) 
              DO I=1,NBody
                 u(1)%WAMITMesh%TranslationDisp(:,I)   = WAMITin(n, 6*I+2:6*I+4) 
              END DO
                 
              ! PRP and body 1-NBody orientations (skipping the maxAngle stuff)
              CALL SmllRotTrans( 'InputRotation', REAL(WAMITin(n,5),ReKi), REAL(WAMITin(n,6),ReKi), REAL(WAMITin(n,7),ReKi), dcm, 'PRP orientation', ErrStat, ErrMsg )            
              u(1)%PRPMesh%Orientation(:,:,1)     = dcm     
              DO I=1, NBody
                 CALL SmllRotTrans( 'InputRotation', REAL(WAMITin(n,6*I+5),ReKi), REAL(WAMITin(n,6*I+6),ReKi), REAL(WAMITin(n,6*I+7),ReKi), dcm, 'body '//I//' orientation', ErrStat, ErrMsg )            
                 u(1)%PRPMesh%Orientation(:,:,1)     = dcm     
              END DO
  
              ! use finite differences for velocities and accelerations
              IF (n == 1) THEN   ! use forward differences for first time step
              
                 u(1)%PRPMesh%TranslationVel(:,1) = (WAMITin(n+1, 2:4) -   WAMITin(n  , 2:4))/drvrInitInp%TimeInterval
                 u(1)%PRPMesh%RotationVel(   :,1) = (WAMITin(n+1, 5:7) -   WAMITin(n  , 5:7))/drvrInitInp%TimeInterval
                 u(1)%PRPMesh%TranslationAcc(:,1) = (WAMITin(n+2, 2:4) - 2*WAMITin(n+1, 2:4) + WAMITin(n, 2:4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 u(1)%PRPMesh%RotationAcc(   :,1) = (WAMITin(n+2, 5:7) - 2*WAMITin(n+1, 5:7) + WAMITin(n, 5:7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 
                 DO I=1,NBody
                    u(1)%WAMITMesh%TranslationVel(:,I) = (WAMITin(n+1, 6*I+2:6*I+4) -   WAMITin(n  , 6*I+2:6*I+4))/drvrInitInp%TimeInterval
                    u(1)%WAMITMesh%RotationVel(   :,I) = (WAMITin(n+1, 6*I+5:6*I+7) -   WAMITin(n  , 6*I+5:6*I+7))/drvrInitInp%TimeInterval
                    u(1)%WAMITMesh%TranslationAcc(:,I) = (WAMITin(n+2, 6*I+2:6*I+4) - 2*WAMITin(n+1, 6*I+2:6*I+4) + WAMITin(n, 6*I+2:6*I+4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                    u(1)%WAMITMesh%RotationAcc(   :,I) = (WAMITin(n+2, 6*I+5:6*I+7) - 2*WAMITin(n+1, 6*I+5:6*I+7) + WAMITin(n, 6*I+5:6*I+7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 END DO
  
              ELSE IF (n == drvrInitInp%NSteps) THEN  ! use backward differences for last time step
              
                 u(1)%PRPMesh%TranslationVel(:,1) = (WAMITin(n, 2:4) -   WAMITin(n-1, 2:4))/drvrInitInp%TimeInterval
                 u(1)%PRPMesh%RotationVel(   :,1) = (WAMITin(n, 5:7) -   WAMITin(n-1, 5:7))/drvrInitInp%TimeInterval
                 u(1)%PRPMesh%TranslationAcc(:,1) = (WAMITin(n, 2:4) - 2*WAMITin(n-1, 2:4) + WAMITin(n-2, 2:4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 u(1)%PRPMesh%RotationAcc(   :,1) = (WAMITin(n, 5:7) - 2*WAMITin(n-1, 5:7) + WAMITin(n-2, 5:7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 
                 DO I=1,NBody
                    u(1)%WAMITMesh%TranslationVel(:,I) = (WAMITin(n, 6*I+2:6*I+4) -   WAMITin(n-1, 6*I+2:6*I+4))/drvrInitInp%TimeInterval
                    u(1)%WAMITMesh%RotationVel(   :,I) = (WAMITin(n, 6*I+5:6*I+7) -   WAMITin(n-1, 6*I+5:6*I+7))/drvrInitInp%TimeInterval
                    u(1)%WAMITMesh%TranslationAcc(:,I) = (WAMITin(n, 6*I+2:6*I+4) - 2*WAMITin(n-1, 6*I+2:6*I+4) + WAMITin(n-2, 6*I+2:6*I+4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                    u(1)%WAMITMesh%RotationAcc(   :,I) = (WAMITin(n, 6*I+5:6*I+7) - 2*WAMITin(n-1, 6*I+5:6*I+7) + WAMITin(n-2, 6*I+5:6*I+7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 END DO
              
              ELSE   ! otherwise use central differences for intermediate time steps
                       
                 u(1)%PRPMesh%TranslationVel(:,1) = (WAMITin(n+1, 2:4) - WAMITin(n-1, 2:4))*0.5/drvrInitInp%TimeInterval
                 u(1)%PRPMesh%RotationVel(   :,1) = (WAMITin(n+1, 5:7) - WAMITin(n-1, 5:7))*0.5/drvrInitInp%TimeInterval
                 u(1)%PRPMesh%TranslationAcc(:,1) = (WAMITin(n+1, 2:4) - 2*WAMITin(n, 2:4) + WAMITin(n-1, 2:4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 u(1)%PRPMesh%RotationAcc(   :,1) = (WAMITin(n+1, 5:7) - 2*WAMITin(n, 5:7) + WAMITin(n-1, 5:7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 
                 DO I=1,NBody
                    u(1)%WAMITMesh%TranslationVel(:,I) = (WAMITin(n+1, 6*I+2:6*I+4) - WAMITin(n-1, 6*I+2:6*I+4))*0.5/drvrInitInp%TimeInterval
                    u(1)%WAMITMesh%RotationVel(   :,I) = (WAMITin(n+1, 6*I+5:6*I+7) - WAMITin(n-1, 6*I+5:6*I+7))*0.5/drvrInitInp%TimeInterval
                    u(1)%WAMITMesh%TranslationAcc(:,I) = (WAMITin(n+1, 6*I+2:6*I+4) - 2*WAMITin(n, 6*I+2:6*I+4) + WAMITin(n-1, 6*I+2:6*I+4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                    u(1)%WAMITMesh%RotationAcc(   :,I) = (WAMITin(n+1, 6*I+5:6*I+7) - 2*WAMITin(n, 6*I+5:6*I+7) + WAMITin(n-1, 6*I+5:6*I+7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval)
                 END DO
                 
              END
               
           END IF
          !@mhall: end of addition
  		 
           
        END IF  ! ( u(1)%WAMITMesh%Initialized )
        
        IF ( u(1)%Morison%DistribMesh%Initialized ) THEN
           IF ( drvrInitInp%MorisonInputsMod == 2 ) THEN
  