module CRotaryProblems use SimulationVariables implicit none public contains subroutine ProcessRotaryProblemsDueTime(time) implicit none integer :: time if(data%problems%RotaryProblems%MotorFail%ProblemType == Time_ProblemType) call ProcessDueTime(data%problems%RotaryProblems%MotorFail, ChangeMotorFail, time) if(data%problems%RotaryProblems%OverideTorqueLimit%ProblemType == Time_ProblemType) call ProcessDueTime(data%problems%RotaryProblems%OverideTorqueLimit, ChangeOverideTorqueLimit, time) end subroutine subroutine ProcessRotaryProblemsDuePumpStrokes(strokes) implicit none integer :: strokes if(data%problems%RotaryProblems%MotorFail%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(data%problems%RotaryProblems%MotorFail, ChangeMotorFail, strokes) if(data%problems%RotaryProblems%OverideTorqueLimit%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(data%problems%RotaryProblems%OverideTorqueLimit, ChangeOverideTorqueLimit, strokes) end subroutine subroutine ProcessRotaryProblemsDueVolumePumped(volume) implicit none real(8) :: volume if(data%problems%RotaryProblems%MotorFail%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(data%problems%RotaryProblems%MotorFail, ChangeMotorFail, volume) if(data%problems%RotaryProblems%OverideTorqueLimit%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(data%problems%RotaryProblems%OverideTorqueLimit, ChangeOverideTorqueLimit, volume) end subroutine subroutine ProcessRotaryProblemsDueDistanceDrilled(distance) implicit none real(8) :: distance if(data%problems%RotaryProblems%MotorFail%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(data%problems%RotaryProblems%MotorFail, ChangeMotorFail, distance) if(data%problems%RotaryProblems%OverideTorqueLimit%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(data%problems%RotaryProblems%OverideTorqueLimit, ChangeOverideTorqueLimit, distance) end subroutine subroutine ChangeMotorFail(status) use SimulationVariables !@ implicit none integer, intent (in) :: status !if(associated(MotorFailPtr)) call MotorFailPtr(status) if(status == Clear_StatusType) data%State%RTable%MotorFaileMalf=0 if(status == Executed_StatusType) data%State%RTable%MotorFaileMalf=1 endsubroutine subroutine ChangeOverideTorqueLimit(status) use SimulationVariables !@ implicit none integer, intent (in) :: status !if(associated(OverideTorqueLimitPtr)) call OverideTorqueLimitPtr(status) if(status == Clear_StatusType) data%State%RTable%OverideTorqueLimitMalf=0 if(status == Executed_StatusType) data%State%RTable%OverideTorqueLimitMalf=1 endsubroutine end module CRotaryProblems