module AnnularMain
    implicit none
    public
    contains
    
    subroutine Annular_Setup()
        use CSimulationVariables
        implicit none
        call OnSimulationInitialization%Add(Annular_Init)
        call OnSimulationStop%Add(Annular_Init)
        call OnAnnularStep%Add(Annular_Step)
        call OnAnnularOutput%Add(Annular_Output)
        call OnAnnularMain%Add(AnnularMainBody)
    end subroutine
    
    subroutine Annular_Init
        implicit none
    end subroutine Annular_Init
    
    subroutine Annular_Step
        CALL ANNULAR
    end subroutine Annular_Step
    
    subroutine Annular_Output
        implicit none
    end subroutine Annular_Output
    
    subroutine AnnularMainBody
        USE ifport
        USE ifmt
        USE CSimulationVariables
      !  USE BOP
        implicit none  
        
        INTEGER :: AnnularDuration
        integer,dimension(8) :: AnnularStartTime , AnnularEndTime
        
       !     CALL BOP_StartUp()
        loop1: DO
            CALL DATE_AND_TIME(values=AnnularStartTime)
            
            CALL ANNULAR
            
            CALL DATE_AND_TIME(values=AnnularEndTime)
            
            AnnularDuration = 3600000 * (AnnularEndTime(5) - AnnularStartTime(5)) + 60000 * (AnnularEndTime(6) - AnnularStartTime(6)) + 1000 * (AnnularEndTime(7) - AnnularStartTime(7)) + (AnnularEndTime(8) - AnnularStartTime(8))
            
            if (AnnularDuration < 100) then
                call sleepqq(100 - AnnularDuration)
            ELSE
                WRITE (*,*) 'Annular BOP run duration exceeded 100 ms and =', AnnularDuration
            end if            
            
            IF (IsStopped==.true.) THEN
                EXIT loop1
            ENDIF
            

        ENDDO loop1 


        !    CALL DEALLOCATE_ARRAYS()
    end subroutine AnnularMainBody
    
end module AnnularMain