module CDrillStemProblemsVariables use CProblemDifinition implicit none public ! Input vars type(CProblem) :: StringDragIncrease type(CProblem) :: StringTorqueIncrease type(CProblem) :: StringTorqueFluctuation real(8) :: StringDragIncreaseTime real(8) :: StringTorqueIncreaseTime procedure (ActionInteger), pointer :: StringDragIncreasePtr procedure (ActionInteger), pointer :: StringTorqueIncreasePtr procedure (ActionInteger), pointer :: StringTorqueFluctuationPtr contains subroutine ProcessDrillStemProblemsDueTime(time) implicit none integer :: time if(StringDragIncrease%ProblemType == Time_ProblemType) call ProcessDueTime(StringDragIncrease, ChangeStringDragIncrease, time) if(StringTorqueIncrease%ProblemType == Time_ProblemType) call ProcessDueTime(StringTorqueIncrease, ChangeStringTorqueIncrease, time) if(StringTorqueFluctuation%ProblemType == Time_ProblemType) call ProcessDueTime(StringTorqueFluctuation, ChangeStringTorqueFluctuation, time) end subroutine subroutine ProcessDrillStemProblemsDuePumpStrokes(strokes) implicit none integer :: strokes if(StringDragIncrease%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(StringDragIncrease, ChangeStringDragIncrease, strokes) if(StringTorqueIncrease%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(StringTorqueIncrease, ChangeStringTorqueIncrease, strokes) if(StringTorqueFluctuation%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(StringTorqueFluctuation, ChangeStringTorqueFluctuation, strokes) end subroutine subroutine ProcessDrillStemProblemsDueVolumePumped(volume) implicit none real(8) :: volume if(StringDragIncrease%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(StringDragIncrease, ChangeStringDragIncrease, volume) if(StringTorqueIncrease%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(StringTorqueIncrease, ChangeStringTorqueIncrease, volume) if(StringTorqueFluctuation%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(StringTorqueFluctuation, ChangeStringTorqueFluctuation, volume) end subroutine subroutine ProcessDrillStemProblemsDueDistanceDrilled(distance) implicit none real(8) :: distance if(StringDragIncrease%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(StringDragIncrease, ChangeStringDragIncrease, distance) if(StringTorqueIncrease%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(StringTorqueIncrease, ChangeStringTorqueIncrease, distance) if(StringTorqueFluctuation%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(StringTorqueFluctuation, ChangeStringTorqueFluctuation, distance) end subroutine subroutine ChangeStringDragIncrease(status) implicit none integer, intent (in) :: status if(associated(StringDragIncreasePtr)) call StringDragIncreasePtr(status) !if(status == Clear_StatusType) print*,'On_StringDragIncrease_Clear' !if(status == Executed_StatusType) print*,'On_StringDragIncrease_Execute' endsubroutine subroutine ChangeStringTorqueIncrease(status) implicit none integer, intent (in) :: status if(associated(StringTorqueIncreasePtr)) call StringTorqueIncreasePtr(status) !if(status == Clear_StatusType) print*,'On_StringTorqueIncrease_Clear' !if(status == Executed_StatusType) print*,'On_StringTorqueIncrease_Execute' endsubroutine subroutine ChangeStringTorqueFluctuation(status) implicit none integer, intent (in) :: status if(associated(StringTorqueFluctuationPtr)) call StringTorqueFluctuationPtr(status) !if(status == Clear_StatusType) print*,'On_StringTorqueFluctuation_Clear' !if(status == Executed_StatusType) print*,'On_StringTorqueFluctuation_Execute' endsubroutine subroutine SubscribeStringDragIncrease(v) !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringDragIncrease !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringDragIncrease' :: SubscribeStringDragIncrease implicit none procedure (ActionInteger) :: v StringDragIncreasePtr => v end subroutine subroutine SubscribeStringTorqueIncrease(v) !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringTorqueIncrease !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringTorqueIncrease' :: SubscribeStringTorqueIncrease implicit none procedure (ActionInteger) :: v StringTorqueIncreasePtr => v end subroutine subroutine SubscribeStringTorqueFluctuation(v) !DEC$ ATTRIBUTES DLLEXPORT :: SubscribeStringTorqueFluctuation !DEC$ ATTRIBUTES ALIAS: 'SubscribeStringTorqueFluctuation' :: SubscribeStringTorqueFluctuation implicit none procedure (ActionInteger) :: v StringTorqueFluctuationPtr => v end subroutine end module CDrillStemProblemsVariables