module CDrillStemProblems use SimulationVariables implicit none public contains subroutine DrillStemProblemsFromJson(parent) type(json_value),pointer :: parent type(json_core) :: json type(json_value),pointer :: p,pval call json%get(parent,'DrillStemProblems',p) call ProblemFromJson(p,"StringDragIncrease",data%problems%DrillStemProblems%StringDragIncrease) call ProblemFromJson(p,"StringTorqueIncrease",data%problems%DrillStemProblems%StringTorqueIncrease) call ProblemFromJson(p,"StringTorqueFluctuation",data%problems%DrillStemProblems%StringTorqueFluctuation) call json%get(p,'StringDragIncreaseTime',pval) call json%get(pval,data%problems%DrillStemProblems%StringDragIncreaseTime) call json%get(p,'StringTorqueIncreaseTime',pval) call json%get(pval,data%problems%DrillStemProblems%StringTorqueIncreaseTime) end subroutine subroutine DrillStemProblemsToJson(parent) type(json_value),pointer :: parent type(json_core) :: json type(json_value),pointer :: p ! 1. create new node call json%create_object(p,'DrillStemsProblems') ! 2. add member of data type to new node call ProblemToJson(p,"StringDragIncrease",data%problems%DrillStemProblems%StringDragIncrease) call ProblemToJson(p,"StringTorqueIncrease",data%problems%DrillStemProblems%StringTorqueIncrease) call ProblemToJson(p,"StringTorqueFluctuation",data%problems%DrillStemProblems%StringTorqueFluctuation) call json%add(p,"StringDragIncreaseTime",data%problems%DrillStemProblems%StringDragIncreaseTime) call json%add(p,"StringTorqueIncreaseTime",data%problems%DrillStemProblems%StringTorqueIncreaseTime) ! 3. add new node to parent call json%add(parent,p) end subroutine subroutine ProcessDrillStemProblemsDueTime(time) implicit none integer :: time if(data%problems%DrillStemProblems%StringDragIncrease%ProblemType == Time_ProblemType) call ProcessDueTime(data%problems%DrillStemProblems%StringDragIncrease, ChangeStringDragIncrease, time) if(data%problems%DrillStemProblems%StringTorqueIncrease%ProblemType == Time_ProblemType) call ProcessDueTime(data%problems%DrillStemProblems%StringTorqueIncrease, ChangeStringTorqueIncrease, time) if(data%problems%DrillStemProblems%StringTorqueFluctuation%ProblemType == Time_ProblemType) call ProcessDueTime(data%problems%DrillStemProblems%StringTorqueFluctuation, ChangeStringTorqueFluctuation, time) end subroutine subroutine ProcessDrillStemProblemsDuePumpStrokes(strokes) implicit none integer :: strokes if(data%problems%DrillStemProblems%StringDragIncrease%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(data%problems%DrillStemProblems%StringDragIncrease, ChangeStringDragIncrease, strokes) if(data%problems%DrillStemProblems%StringTorqueIncrease%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(data%problems%DrillStemProblems%StringTorqueIncrease, ChangeStringTorqueIncrease, strokes) if(data%problems%DrillStemProblems%StringTorqueFluctuation%ProblemType == PumpStrokes_ProblemType) call ProcessDuePumpStrokes(data%problems%DrillStemProblems%StringTorqueFluctuation, ChangeStringTorqueFluctuation, strokes) end subroutine subroutine ProcessDrillStemProblemsDueVolumePumped(volume) implicit none real(8) :: volume if(data%problems%DrillStemProblems%StringDragIncrease%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(data%problems%DrillStemProblems%StringDragIncrease, ChangeStringDragIncrease, volume) if(data%problems%DrillStemProblems%StringTorqueIncrease%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(data%problems%DrillStemProblems%StringTorqueIncrease, ChangeStringTorqueIncrease, volume) if(data%problems%DrillStemProblems%StringTorqueFluctuation%ProblemType == VolumePumped_ProblemType) call ProcessDueVolumePumped(data%problems%DrillStemProblems%StringTorqueFluctuation, ChangeStringTorqueFluctuation, volume) end subroutine subroutine ProcessDrillStemProblemsDueDistanceDrilled(distance) implicit none real(8) :: distance if(data%problems%DrillStemProblems%StringDragIncrease%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(data%problems%DrillStemProblems%StringDragIncrease, ChangeStringDragIncrease, distance) if(data%problems%DrillStemProblems%StringTorqueIncrease%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(data%problems%DrillStemProblems%StringTorqueIncrease, ChangeStringTorqueIncrease, distance) if(data%problems%DrillStemProblems%StringTorqueFluctuation%ProblemType == DistanceDrilled_ProblemType) call ProcessDueDistanceDrilled(data%problems%DrillStemProblems%StringTorqueFluctuation, ChangeStringTorqueFluctuation, distance) end subroutine subroutine ChangeStringDragIncrease(status) implicit none integer, intent (in) :: status ! if(associated(StringDragIncreasePtr)) call StringDragIncreasePtr(status) !if(status == Clear_StatusType) if(print_log) print*,'On_StringDragIncrease_Clear' !if(status == Executed_StatusType) if(print_log) print*,'On_StringDragIncrease_Execute' endsubroutine subroutine ChangeStringTorqueIncrease(status) implicit none integer, intent (in) :: status ! if(associated(StringTorqueIncreasePtr)) call StringTorqueIncreasePtr(status) !if(status == Clear_StatusType) if(print_log) print*,'On_StringTorqueIncrease_Clear' !if(status == Executed_StatusType) if(print_log) print*,'On_StringTorqueIncrease_Execute' endsubroutine subroutine ChangeStringTorqueFluctuation(status) implicit none integer, intent (in) :: status ! if(associated(StringTorqueFluctuationPtr)) call StringTorqueFluctuationPtr(status) !if(status == Clear_StatusType) if(print_log) print*,'On_StringTorqueFluctuation_Clear' !if(status == Executed_StatusType) if(print_log) print*,'On_StringTorqueFluctuation_Execute' endsubroutine end module CDrillStemProblems