module PipeRams2Main
    implicit none
    public
    contains
    
    subroutine PipeRams2_Setup()
        use CSimulationVariables
        implicit none
        call OnSimulationInitialization%Add(PipeRams2_Init)
        call OnSimulationStop%Add(PipeRams2_Init)
        call OnPipeRams2Step%Add(PipeRams2_Step)
        call OnPipeRams2Output%Add(PipeRams2_Output)
        call OnPipeRams2Main%Add(PipeRams2MainBody)
    end subroutine
    
    subroutine PipeRams2_Init
        implicit none
    end subroutine PipeRams2_Init
    
    subroutine PipeRams2_Step
        CALL PIPE_RAMS2
    end subroutine PipeRams2_Step
    
    subroutine PipeRams2_Output
        implicit none
    end subroutine PipeRams2_Output
        
    subroutine PipeRams2MainBody
        USE ifport
        USE ifmt
        USE CSimulationVariables
      !  USE BOP
        implicit none 
        
        INTEGER :: PipeRam2Duration
        integer,dimension(8) :: PipeRam2StartTime , PipeRam2EndTime          
        
        !    CALL BOP_StartUp()
        loop1: DO
            
            CALL DATE_AND_TIME(values=PipeRam2StartTime)

            
            CALL PIPE_RAMS2
            
            CALL DATE_AND_TIME(values=PipeRam2EndTime)
            
            PipeRam2Duration = 3600000 * (PipeRam2EndTime(5) - PipeRam2StartTime(5)) + 60000 * (PipeRam2EndTime(6) - PipeRam2StartTime(6)) + 1000 * (PipeRam2EndTime(7) - PipeRam2StartTime(7)) + (PipeRam2EndTime(8) - PipeRam2StartTime(8))
            
            if (PipeRam2Duration < 100) then
                call sleepqq(100 - PipeRam2Duration)
            ELSE
                WRITE (*,*) 'PipeRam2 BOP run duration exceeded 100 ms and =', PipeRam2Duration
            end if             
            
            IF (IsStopped==.true.) THEN
                EXIT loop1
            ENDIF
            

        ENDDO loop1 


        !    CALL DEALLOCATE_ARRAYS()
    end subroutine PipeRams2MainBody
    
end module PipeRams2Main