diff --git a/.vscode/launch.json b/.vscode/launch.json index 293403f..039245b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -30,7 +30,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceRoot}/SimulationCore2", - "args": ["Config-local.json"], + "args": ["aberama.iran.liara.ir","32815","4YKFnubfFFjfh4yTK7b0Rg9X","test","5"], "stopAtEntry": false, "cwd": "${workspaceRoot}", "externalConsole": false, diff --git a/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90 b/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90 index 1345e01..904faf7 100644 --- a/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90 +++ b/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90 @@ -40,7 +40,7 @@ module CCasingLinerChoke use json_module,IK =>json_ik type(json_value),pointer :: parent type(json_core) :: json - type(json_value),pointer :: p,pitems,pitem,pval,pbit + type(json_value),pointer :: p,pitem call json%get(parent,'CasingLinerChoke',p) diff --git a/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.i90 b/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.i90 new file mode 100644 index 0000000..ed98176 --- /dev/null +++ b/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.i90 @@ -0,0 +1,82 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90" +module CCasingLinerChoke + use SimulationVariables + use json_module + implicit none + public + contains + + subroutine CasingLinerChokeToJson(parent) + + type(json_value),pointer :: parent + type(json_core) :: json + type(json_value),pointer :: p + +! 1. create new node + call json%create_object(p,'CasingLinerChoke') + +! 2. add member of data type to new node +! call StringConfigurationToJson(p) +! call FormationToJson(p) + call json%add(p,"CasingDepth",data%Configuration%CasingLinerChoke%CasingDepth) + call json%add(p,"CasingId",data%Configuration%CasingLinerChoke%CasingId) + call json%add(p,"CasingOd",data%Configuration%CasingLinerChoke%CasingOd) + call json%add(p,"CasingWeight",data%Configuration%CasingLinerChoke%CasingWeight) + call json%add(p,"CasingCollapsePressure",data%Configuration%CasingLinerChoke%CasingCollapsePressure) + call json%add(p,"CasingTensileStrength",data%Configuration%CasingLinerChoke%CasingTensileStrength) + call json%add(p,"LinerTopDepth",data%Configuration%CasingLinerChoke%LinerTopDepth) + call json%add(p,"LinerLength",data%Configuration%CasingLinerChoke%LinerLength) + call json%add(p,"LinerId",data%Configuration%CasingLinerChoke%LinerId) + call json%add(p,"LinerOd",data%Configuration%CasingLinerChoke%LinerOd) + call json%add(p,"LinerWeight",data%Configuration%CasingLinerChoke%LinerWeight) + call json%add(p,"LinerCollapsePressure",data%Configuration%CasingLinerChoke%LinerCollapsePressure) + call json%add(p,"LinerTensileStrength",data%Configuration%CasingLinerChoke%LinerTensileStrength) + call json%add(p,"OpenHoleId",data%Configuration%CasingLinerChoke%OpenHoleId) + call json%add(p,"OpenHoleLength",data%Configuration%CasingLinerChoke%OpenHoleLength) +! 3. add new node to parent + call json%add(parent,p) + end subroutine + + subroutine CasingLinerChokeFromJson(parent) + use json_module,IK =>json_ik + type(json_value),pointer :: parent + type(json_core) :: json + type(json_value),pointer :: p,pitem + + call json%get(parent,'CasingLinerChoke',p) + + call json%get(p,"CasingDepth",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%CasingDepth) + call json%get(p,"CasingId",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%CasingId) + call json%get(p,"CasingOd",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%CasingOd) + call json%get(p,"CasingWeight",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%CasingWeight) + call json%get(p,"CasingCollapsePressure",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%CasingCollapsePressure) + call json%get(p,"CasingTensileStrength",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%CasingTensileStrength) + call json%get(p,"LinerTopDepth",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerTopDepth) + call json%get(p,"LinerLength",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerLength) + call json%get(p,"LinerId",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerId) + call json%get(p,"LinerOd",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerOd) + call json%get(p,"LinerWeight",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerWeight) + call json%get(p,"LinerCollapsePressure",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerCollapsePressure) + call json%get(p,"LinerTensileStrength",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%LinerTensileStrength) + call json%get(p,"OpenHoleId",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%OpenHoleId) + call json%get(p,"OpenHoleLength",pitem) + call json%get(pitem,data%Configuration%CasingLinerChoke%OpenHoleLength) + + end subroutine + + +end module CCasingLinerChoke diff --git a/CSharp/OperationScenarios/Common/COperationScenariosMain.f90 b/CSharp/OperationScenarios/Common/COperationScenariosMain.f90 index 40b0063..a8995eb 100644 --- a/CSharp/OperationScenarios/Common/COperationScenariosMain.f90 +++ b/CSharp/OperationScenarios/Common/COperationScenariosMain.f90 @@ -36,14 +36,15 @@ module COperationScenariosMain ! use CStandRack ! use CStringPressure ! use CZeroStringSpeed - use CUnityInputs, only: & - Get_ElevatorConnectionPossible, & - Get_JointConnectionPossible, & - Get_ElevatorPickup, & - Get_NearFloorPosition, & - Get_SingleSetInMouseHole + ! use CUnityInputs, only: & + ! Get_ElevatorConnectionPossible, & + ! Get_JointConnectionPossible, & + ! Get_ElevatorPickup, & + ! Get_NearFloorPosition, & + ! Get_SingleSetInMouseHole ! use CBucketEnum ! use UnitySignalsModule + use UnityModule use CElevatorEnum ! use CHeadEnum use CIbopEnum diff --git a/CSharp/OperationScenarios/Common/COperationScenariosMain.i90 b/CSharp/OperationScenarios/Common/COperationScenariosMain.i90 index 047cb58..071dd61 100644 --- a/CSharp/OperationScenarios/Common/COperationScenariosMain.i90 +++ b/CSharp/OperationScenarios/Common/COperationScenariosMain.i90 @@ -37,14 +37,15 @@ module COperationScenariosMain ! use CStandRack ! use CStringPressure ! use CZeroStringSpeed - use CUnityInputs, only: & - Get_ElevatorConnectionPossible, & - Get_JointConnectionPossible, & - Get_ElevatorPickup, & - Get_NearFloorPosition, & - Get_SingleSetInMouseHole +! use CUnityInputs, only: & +! Get_ElevatorConnectionPossible, & +! Get_JointConnectionPossible, & +! Get_ElevatorPickup, & +! Get_NearFloorPosition, & +! Get_SingleSetInMouseHole ! use CBucketEnum ! use UnitySignalsModule + use UnityModule use CElevatorEnum ! use CHeadEnum use CIbopEnum diff --git a/CSharp/OperationScenarios/Common/OperationScenarios.f90 b/CSharp/OperationScenarios/Common/OperationScenarios.f90 index 95aa689..7603bf1 100644 --- a/CSharp/OperationScenarios/Common/OperationScenarios.f90 +++ b/CSharp/OperationScenarios/Common/OperationScenarios.f90 @@ -8,8 +8,8 @@ module OperationScenariosModule use SimulationVariables use PermissionsModule ! use SoftwareInputsVariables - use CUnityInputs - use CUnityOutputs, only: GetRotaryRpm + ! use CUnityInputs + use UnityModule use UnitySignalVariables use UnitySignalsModule use PermissionsModule diff --git a/CSharp/OperationScenarios/Common/OperationScenarios.i90 b/CSharp/OperationScenarios/Common/OperationScenarios.i90 index 924f751..045cd10 100644 --- a/CSharp/OperationScenarios/Common/OperationScenarios.i90 +++ b/CSharp/OperationScenarios/Common/OperationScenarios.i90 @@ -9,8 +9,8 @@ module OperationScenariosModule use SimulationVariables use PermissionsModule ! use SoftwareInputsVariables - use CUnityInputs - use CUnityOutputs, only: GetRotaryRpm +! use CUnityInputs + use UnityModule use UnitySignalVariables use UnitySignalsModule use PermissionsModule diff --git a/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90 b/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90 index 8de0e93..a7156b9 100644 --- a/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90 +++ b/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90 @@ -1,5 +1,6 @@ module CTdsElevatorModesEnum use OperationScenariosModule + use UnityModule implicit none contains diff --git a/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.i90 b/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.i90 new file mode 100644 index 0000000..e54c931 --- /dev/null +++ b/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.i90 @@ -0,0 +1,332 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90" +module CTdsElevatorModesEnum + use OperationScenariosModule + use UnityModule + implicit none + contains + + subroutine Evaluate_TdsElevatorModes() + use CCommon, only: SetStandRack + implicit none + + if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then +# 14 + + + +!TOPDRIVE-CODE=7 + if (Get_Elevator() == ELEVATOR_LATCH_STRING_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_NOTHING .and.& + Get_TdsSwing() == TDS_SWING_OFF_END ) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_STRING) + call Set_Elevator(ELEVATOR_NEUTRAL) + return + end if + + + +!TOPDRIVE-CODE=8 + if (Get_HookHeight() <= (TL() + TJH() - data%State%OperationScenario%ECG) .and.& + Get_ElevatorPickup() == .false. .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_STRING) + return + end if + + + +!TOPDRIVE-CODE=9 + if (Get_ElevatorPickup() .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_STRING) + return + end if + + +!TOPDRIVE-CODE=10 + if (Get_Elevator() == ELEVATOR_UNLATCH_STRING_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_NOTHING) + call Set_Elevator(ELEVATOR_NEUTRAL) + return + end if + + + + +!TOPDRIVE-CODE=11 + if (Get_Elevator() == ELEVATOR_UNLATCH_STRING_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING .and.& + Get_TdsConnectionModes() == TDS_CONNECTION_STRING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_NOTHING) + call Set_Elevator(ELEVATOR_NEUTRAL) + return + end if + + + + + +!TOPDRIVE-CODE=12 + if (Get_Elevator() == ELEVATOR_LATCH_STAND_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_NOTHING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_STAND) + call Set_Elevator(ELEVATOR_NEUTRAL) + call SetStandRack(Get_StandRack() - 1) + return + end if + + + + +!TOPDRIVE-CODE=13 + if (Get_Elevator() == ELEVATOR_UNLATCH_STAND_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STAND) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_NOTHING) + call Set_Elevator(ELEVATOR_NEUTRAL) + call SetStandRack(Get_StandRack() + 1) + return + end if + + + + +!TOPDRIVE-CODE=14 + if (Get_Elevator() == ELEVATOR_LATCH_SINGLE_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_NOTHING .and.& + Get_TdsSwing() == TDS_SWING_TILT_END .and.& + Get_FillMouseHoleLed()) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_SINGLE) + call Set_Elevator(ELEVATOR_NEUTRAL) + call Set_UnlatchLed(.true.) + call Set_FillMouseHoleLed(.false.) + call Set_MouseHole(MOUSE_HOLE_NEUTRAL) + return + end if + + + + + +!TOPDRIVE-CODE=15 + if (Get_Elevator() == ELEVATOR_UNLATCH_SINGLE_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_SINGLE .and.& + Get_TdsSwing() == TDS_SWING_TILT_END .and.& + Get_FillMouseHoleLed() == .false.) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_NOTHING) + call Set_Elevator(ELEVATOR_NEUTRAL) + call Set_UnlatchLed(.false.) + call Set_FillMouseHoleLed(.true.) + call Set_MouseHole(MOUSE_HOLE_NEUTRAL) + return + end if + + + +!TOPDRIVE-CODE=16 + if (Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%PL - data%State%OperationScenario%ECG) .and.& + Get_Tong() == TONG_BREAKOUT_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING .and.& + Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_SINGLE) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_REMOVE_SINGLE) + return + end if + + + + +!TOPDRIVE-CODE=17 + if (Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%PL - data%State%OperationScenario%ECG) .and.& + Get_Tong() == TONG_BREAKOUT_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING .and.& + Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_SINGLE) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_REMOVE_SINGLE) + return + end if + + + +!TOPDRIVE-CODE=18 + if (Get_ElevatorPickup() .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_SINGLE) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_SINGLE) + return + end if + + + + +!TOPDRIVE-CODE=19 + if (Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%PL - data%State%OperationScenario%ECG) .and.& + Get_ElevatorPickup() == .false. .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_SINGLE) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_SINGLE) + + return + end if + + + + + + +!TOPDRIVE-CODE=20 + if (Get_Tong() == TONG_MAKEUP_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_SINGLE) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_STRING) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_ADD_SINGLE) + return + end if + + + + +!TOPDRIVE-CODE=21 + if (Get_Tong() == TONG_MAKEUP_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_SINGLE) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_STRING) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_ADD_SINGLE) + return + end if + + + +!TOPDRIVE-CODE=22 + if (Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG) .and.& + Get_Tong() == TONG_BREAKOUT_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING .and.& + Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_STAND) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_REMOVE_STAND) + return + end if + + + +!TOPDRIVE-CODE=23 + if (Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG) .and.& + Get_Tong() == TONG_BREAKOUT_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING .and.& + Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_STAND) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_REMOVE_STAND) + return + end if + + + +!TOPDRIVE-CODE=24 + if (Get_ElevatorPickup() .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STAND) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_STAND) + return + end if + + + + + +!TOPDRIVE-CODE=25 + if (Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG) .and.& + Get_ElevatorPickup() == .false. .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STAND) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_STAND) + return + end if + + + + +!TOPDRIVE-CODE=26 + if (Get_Tong() == TONG_MAKEUP_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STAND) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_CONNECTION_STRING) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_ADD_STAND) + return + end if + + + + + + + + + +!TOPDRIVE-CODE=27 + if (Get_Tong() == TONG_MAKEUP_END .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STAND) then + + call Set_TdsElevatorModes(TDS_ELEVATOR_LATCH_STRING) + call Set_Tong(TONG_NEUTRAL) + call Set_StringUpdate(STRING_UPDATE_ADD_STAND) + return + end if + + + + + + + + + + + + endif + + + + + + + + + + if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then +# 318 + + endif + + + + + end subroutine + + subroutine Subscribe_TdsElevatorModes() + use CDrillingConsoleVariables + use SimulationVariables + use SimulationVariables + implicit none + end subroutine + +end module CTdsElevatorModesEnum diff --git a/CSharp/OperationScenarios/Notifications/CSlipsNotification.i90 b/CSharp/OperationScenarios/Notifications/CSlipsNotification.i90 new file mode 100644 index 0000000..75ad059 --- /dev/null +++ b/CSharp/OperationScenarios/Notifications/CSlipsNotification.i90 @@ -0,0 +1,133 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Notifications/CSlipsNotification.f90" +module CSlipsNotification + use OperationScenariosModule + implicit none + contains + + subroutine Evaluate_SlipsNotification() + implicit none + + + + + if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then +# 15 + + +!TOPDRIVE-CODE=28 + if (Get_ZeroStringSpeed() .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_Slips() == SLIPS_UNSET_END .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0) then + + call Set_SlipsNotification(.true.) + return + end if + + + +!TOPDRIVE-CODE=29 + if (Get_ZeroStringSpeed() .and.& + GetRotaryRpm() == 0.0d0 .and.& + (Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING .or.& + Get_TdsConnectionModes() == TDS_CONNECTION_STRING) .and.& + Get_Slips() == SLIPS_SET_END .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0) then + + call Set_SlipsNotification(.true.) + return + end if + + + + + endif + + + + + + + + + + + if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then +# 58 + + +!OPERATION-CODE=53 + if (Get_ZeroStringSpeed() .and.& + GetRotaryRpm() == 0.0d0 .and.& +!Get_KellyConnection() == KELLY_CONNECTION_STRING + Get_Slips() == SLIPS_UNSET_END .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0) then + call Set_SlipsNotification(.true.) + return + end if + + + + + +!OPERATION-CODE=77 + if (Get_ZeroStringSpeed() .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_Slips() == SLIPS_SET_END .and.& + Get_IsKellyBushingSetInTable() == .false. .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0 .and.& + (Get_ElevatorConnection() == ELEVATOR_CONNECTION_STRING .or. Get_KellyConnection() == KELLY_CONNECTION_STRING)) then + call Set_SlipsNotification(.true.) + + return + end if + + + + + +!if (Get_OperationCondition() == OPERATION_DRILL .and.& +! Get_ZeroStringSpeed() .and.& +! Get_SlackOff() .and.& +! Get_KellyConnection() == KELLY_CONNECTION_STRING) then +! call Set_SlipsNotification(.true.) +! return +!end if +! +! +!if (Get_OperationCondition() == OPERATION_TRIP .and.& +! Get_ZeroStringSpeed() .and.& +! Get_NearFloorConnection() >= 21 .and. Get_NearFloorConnection() <= 25 .and.& +! Get_ElevatorConnection() == ELEVATOR_CONNECTION_STRING) then +! call Set_SlipsNotification(.true.) +! return +!end if + + + + + call Set_SlipsNotification(.false.) + + endif + + + + + + + end subroutine + +! subroutine Subscribe_SlipsNotification() +! implicit none + +! call OnOperationConditionChange%Add(Evaluate_SlipsNotification) +! call OnSlackOffChange%Add(Evaluate_SlipsNotification) +! call OnZeroStringSpeedChange%Add(Evaluate_SlipsNotification) +! call OnNearFloorConnectionChange%Add(Evaluate_SlipsNotification) +! call data%State%OperationScenario%OnElevatorConnectionChange%Add(Evaluate_SlipsNotification) +! call OnKellyConnectionChange%Add(Evaluate_SlipsNotification) +! call OnSlipsChange%Add(Evaluate_SlipsNotification) + +! end subroutine + +end module CSlipsNotification diff --git a/CSharp/OperationScenarios/Notifications/CSwingLedNotification.f90 b/CSharp/OperationScenarios/Notifications/CSwingLedNotification.f90 index 2f3ee7d..a147f61 100644 --- a/CSharp/OperationScenarios/Notifications/CSwingLedNotification.f90 +++ b/CSharp/OperationScenarios/Notifications/CSwingLedNotification.f90 @@ -1,5 +1,6 @@ module CSwingLedNotification use OperationScenariosModule + use UnityModule implicit none contains diff --git a/CSharp/OperationScenarios/Notifications/CSwingLedNotification.i90 b/CSharp/OperationScenarios/Notifications/CSwingLedNotification.i90 new file mode 100644 index 0000000..331bcb4 --- /dev/null +++ b/CSharp/OperationScenarios/Notifications/CSwingLedNotification.i90 @@ -0,0 +1,122 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Notifications/CSwingLedNotification.f90" +module CSwingLedNotification + use OperationScenariosModule + use UnityModule + implicit none + contains + + subroutine Evaluate_SwingLed() + implicit none + + + + + + if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then +# 17 + + + + + endif + + + + + + + + + + if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then +# 34 + + + +!OPERATION-CODE=22 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + Get_HookHeight() >= (data%State%OperationScenario%HL + Get_NearFloorConnection()) .and. Get_HookHeight() <= (data%State%OperationScenario%HL + Get_NearFloorConnection() + data%State%OperationScenario%LG) .and.& + Get_ElevatorConnection() == ELEVATOR_CONNECTION_NOTHING .and.& + Get_JointConnectionPossible() == .false. .and.& + (Get_Swing() /= SWING_WELL_BEGIN .and.& + Get_Swing() /= SWING_MOUSE_HOLE_BEGIN .and.& + Get_Swing() /= SWING_RAT_HOLE_BEGIN) .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_SwingLed(.true.) + return + end if + + +!OPERATION-CODE=23 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + Get_HookHeight() >= (data%State%OperationScenario%HL + Get_NearFloorConnection() + data%State%OperationScenario%PL) .and. Get_HookHeight() <= (data%State%OperationScenario%HL + Get_NearFloorConnection() + data%State%OperationScenario%LG + data%State%OperationScenario%PL) .and.& + Get_ElevatorConnection() == ELEVATOR_CONNECTION_SINGLE .and.& + Get_JointConnectionPossible() == .false. .and.& + (Get_Swing() /= SWING_WELL_BEGIN .and.& + Get_Swing() /= SWING_MOUSE_HOLE_BEGIN .and.& + Get_Swing() /= SWING_RAT_HOLE_BEGIN) .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_SwingLed(.true.) + return + end if + + +!OPERATION-CODE=24 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + Get_HookHeight() >= (data%State%OperationScenario%HKL + Get_NearFloorConnection()) .and. Get_HookHeight() <= (data%State%OperationScenario%HKL + Get_NearFloorConnection() + data%State%OperationScenario%LG) .and.& + Get_JointConnectionPossible() == .false. .and.& + Get_KellyConnection() == KELLY_CONNECTION_NOTHING .and.& + (Get_Swing() /= SWING_WELL_BEGIN .and.& + Get_Swing() /= SWING_MOUSE_HOLE_BEGIN .and.& + Get_Swing() /= SWING_RAT_HOLE_BEGIN) .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_SwingLed(.true.) + return + end if + +!OPERATION-CODE=25 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + Get_HookHeight() >= (data%State%OperationScenario%HKL + Get_NearFloorConnection() + data%State%OperationScenario%PL) .and. Get_HookHeight() <= (data%State%OperationScenario%HKL + Get_NearFloorConnection() + data%State%OperationScenario%LG + data%State%OperationScenario%PL) .and.& + Get_KellyConnection() == KELLY_CONNECTION_SINGLE .and.& + Get_JointConnectionPossible() == .false. .and.& + (Get_Swing() /= SWING_WELL_BEGIN .and.& + Get_Swing() /= SWING_MOUSE_HOLE_BEGIN .and.& + Get_Swing() /= SWING_RAT_HOLE_BEGIN) .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_SwingLed(.true.) + return + end if + + + call Set_SwingLed(.false.) + + + endif + + + + + + + + + end subroutine + +! subroutine Subscribe_SwingLed() +! implicit none + +! call OnOperationConditionChange%Add(Evaluate_SwingLed) +! call OnHookHeightChange%Add(Evaluate_SwingLed) +! call OnElevatorConnectionChange%Add(Evaluate_SwingLed) +! call OnKellyConnectionChange%Add(Evaluate_SwingLed) +! call OnSwingChange%Add(Evaluate_SwingLed) +! call OnSlipsChange%Add(Evaluate_SwingLed) +! call OnFillMouseHoleLedChange%Add(Evaluate_SwingLed) + +! end subroutine + +end module CSwingLedNotification diff --git a/CSharp/OperationScenarios/Notifications/CTongNotification.f90 b/CSharp/OperationScenarios/Notifications/CTongNotification.f90 index 51bbad3..3b213b4 100644 --- a/CSharp/OperationScenarios/Notifications/CTongNotification.f90 +++ b/CSharp/OperationScenarios/Notifications/CTongNotification.f90 @@ -273,8 +273,8 @@ module CTongNotification ! call data%State%unitySignals%OnOperationConditionChange%Add(Evaluate_TongNotification) ! ! call softwareInputs%OnHookHeightChange%Add(Evaluate_TongNotification) - ! call UnityInputs%OnJointConnectionPossibleChange%Add(Evaluate_TongNotification) - ! call UnityInputs%OnSingleSetInMouseHoleChange%Add(Evaluate_TongNotification) + ! call data%Equipments%UnityInputs%OnJointConnectionPossibleChange%Add(Evaluate_TongNotification) + ! call data%Equipments%UnityInputs%OnSingleSetInMouseHoleChange%Add(Evaluate_TongNotification) ! call data%State%OperationScenario%OnElevatorConnectionChange%Add(Evaluate_TongNotification) ! call KellyConnectionEnum%OnKellyConnectionChange%Add(Evaluate_TongNotification) ! call data%State%unitySignals%OnSwingChange%Add(Evaluate_TongNotification) diff --git a/CSharp/OperationScenarios/Notifications/CTongNotification.i90 b/CSharp/OperationScenarios/Notifications/CTongNotification.i90 new file mode 100644 index 0000000..4146d08 --- /dev/null +++ b/CSharp/OperationScenarios/Notifications/CTongNotification.i90 @@ -0,0 +1,286 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Notifications/CTongNotification.f90" +module CTongNotification + use OperationScenariosModule + implicit none + contains + + subroutine Evaluate_TongNotification() + implicit none + + + + + + if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then +# 16 + + + + + +!TOPDRIVE-CODE=50 + if (((Get_HookHeight() >= (TL() + data%State%OperationScenario%PL - data%State%OperationScenario%ECG + NFC() - data%State%OperationScenario%RE) .and. Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%PL - data%State%OperationScenario%ECG + data%State%OperationScenario%TG)) .or.& + (Get_HookHeight() >= (TL() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + NFC() - data%State%OperationScenario%RE) .and. Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + data%State%OperationScenario%TG))).and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0 .and.& + ((Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .or.& + Get_Tong() == TONG_NEUTRAL ) .and.& + (Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING .or. Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING) .and.& + Get_TdsSwing() == TDS_SWING_OFF_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + +!TOPDRIVE-CODE=51 + if (GetRotaryRpm() == 0.0d0 .and.& + Get_JointConnectionPossible() .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + (Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_SINGLE .or. Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_SINGLE) .and.& + Get_TdsSwing() == TDS_SWING_OFF_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + + + + +!TOPDRIVE-CODE=52 + if (GetRotaryRpm() == 0.0d0 .and.& + Get_JointConnectionPossible() .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + (Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STAND .or. Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STAND) .and.& + Get_TdsSwing() == TDS_SWING_OFF_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + + endif + + + + + + + + + + + if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then +# 92 + + +!OPERATION-CODE=44 + if (Get_OperationCondition() == OPERATION_DRILL .and.& +!((Get_HookHeight() >= 65.0 .and. Get_HookHeight() <= 70.0) .or.& +! (Get_HookHeight() >= 96.0 .and. Get_HookHeight() <= 101.0)).and.& + ((Get_HookHeight() >= (data%State%OperationScenario%HKL + Get_NearFloorConnection() - data%State%OperationScenario%RE) .and. Get_HookHeight() <= (data%State%OperationScenario%HKL + Get_NearFloorConnection() + data%State%OperationScenario%TG)) .or.& + (Get_HookHeight() >= (data%State%OperationScenario%HKL + Get_NearFloorConnection() + data%State%OperationScenario%PL -data%State%OperationScenario%RE) .and. Get_HookHeight() <= (data%State%OperationScenario%HKL + Get_NearFloorConnection() + data%State%OperationScenario%TG + data%State%OperationScenario%PL))).and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_KellyConnection() == KELLY_CONNECTION_STRING .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0 .and.& + Get_Swing() == SWING_WELL_END .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + +!OPERATION-CODE=45 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + Get_HookHeight() >= 66 .and. Get_HookHeight() <= 69 .and.& + Get_KellyConnection() == KELLY_CONNECTION_SINGLE .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_MOUSE_HOLE_END) then + + call Set_TongNotification(.true.) + return + end if + + + +!OPERATION-CODE=46 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + Get_JointConnectionPossible() .and.& + Get_KellyConnection() == KELLY_CONNECTION_NOTHING .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_MOUSE_HOLE_END) then + + call Set_TongNotification(.true.) + return + end if + + + + +!OPERATION-CODE=47 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_JointConnectionPossible() .and.& + Get_KellyConnection() == KELLY_CONNECTION_NOTHING .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + +!OPERATION-CODE=48 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_JointConnectionPossible() .and.& + Get_KellyConnection() == KELLY_CONNECTION_SINGLE .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + + + + + + + + + + + +!OPERATION-CODE=50 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + ((Get_HookHeight() >= (data%State%OperationScenario%HL + data%State%OperationScenario%PL - data%State%OperationScenario%ECG + Get_NearFloorConnection() - data%State%OperationScenario%RE) .and. Get_HookHeight() <= (data%State%OperationScenario%HL + Get_NearFloorConnection() + data%State%OperationScenario%PL - data%State%OperationScenario%ECG + data%State%OperationScenario%TG)) .or.& + (Get_HookHeight() >= (data%State%OperationScenario%HL + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + Get_NearFloorConnection() - data%State%OperationScenario%RE) .and. Get_HookHeight() <= (data%State%OperationScenario%HL + Get_NearFloorConnection() + data%State%OperationScenario%TG - data%State%OperationScenario%ECG + data%State%OperationScenario%SL))).and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0 .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_ElevatorConnection() == ELEVATOR_CONNECTION_STRING .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + +!OPERATION-CODE=51 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_JointConnectionPossible() .and.& + Get_ElevatorConnection() == ELEVATOR_CONNECTION_SINGLE .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + + +!OPERATION-CODE=52 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + GetRotaryRpm() == 0.0d0 .and.& + Get_JointConnectionPossible() .and.& + Get_ElevatorConnection() == ELEVATOR_CONNECTION_STAND .and.& + (Get_Tong() /= TONG_BREAKOUT_BEGIN .and.& + Get_Tong() /= TONG_MAKEUP_BEGIN) .and.& + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_TongNotification(.true.) + return + end if + + + + +!if (Get_OperationCondition() == OPERATION_DRILL .and.& +! Get_KellyConnection() == KELLY_CONNECTION_STRING .and.& +! Get_Swing() == SWING_WELL_END .and.& +! Get_Slips() == SLIPS_SET_END) then +! +! call Set_TongNotification(.true.) +! return +!end if +! + + + call Set_TongNotification(.false.) + + endif + + + + + + + + + + + end subroutine + +! subroutine Subscribe_TongNotification() +! implicit none + +! call data%State%unitySignals%OnOperationConditionChange%Add(Evaluate_TongNotification) +! ! call softwareInputs%OnHookHeightChange%Add(Evaluate_TongNotification) +! call data%Equipments%UnityInputs%OnJointConnectionPossibleChange%Add(Evaluate_TongNotification) +! call data%Equipments%UnityInputs%OnSingleSetInMouseHoleChange%Add(Evaluate_TongNotification) +! call data%State%OperationScenario%OnElevatorConnectionChange%Add(Evaluate_TongNotification) +! call KellyConnectionEnum%OnKellyConnectionChange%Add(Evaluate_TongNotification) +! call data%State%unitySignals%OnSwingChange%Add(Evaluate_TongNotification) +! call data%State%unitySignals%OnSlipsChange%Add(Evaluate_TongNotification) + +! end subroutine + + + +end module CTongNotification diff --git a/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90 b/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90 index 8ce3a59..50c5db4 100644 --- a/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90 +++ b/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90 @@ -1,5 +1,6 @@ module CUnlatchLedNotification use OperationScenariosModule + use UnityModule use CLog4 implicit none contains diff --git a/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.i90 b/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.i90 new file mode 100644 index 0000000..62e181a --- /dev/null +++ b/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.i90 @@ -0,0 +1,216 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90" +module CUnlatchLedNotification + use OperationScenariosModule + use UnityModule + use CLog4 + implicit none + contains + + subroutine Evaluate_UnlatchLed() + use CCommon + implicit none + + + if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then +# 16 + + + + +!TOPDRIVE-CODE=47 + if (Get_HookHeight() <= (TL() + NFC() - data%State%OperationScenario%ECG) .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0 .and.& + (Get_Elevator() /= ELEVATOR_LATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_SINGLE_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_SINGLE_BEGIN) .and.& + Get_ElevatorPickup() == .false. .and.& + (Get_TdsElevatorModes() == TDS_ELEVATOR_LATCH_STRING .or. Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING) .and.& + Get_TdsSwing() == TDS_SWING_OFF_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_UnlatchLed(.true.) + return + end if + + + + +!TOPDRIVE-CODE=48 + if ((Get_HookHeight() >= (TL() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + NFC()) .and. Get_HookHeight() <= (TL() + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + NFC() + data%State%OperationScenario%TG)) .and.& + GetStandRack() > 80 .and.& + Get_JointConnectionPossible() == .false. .and.& + (Get_Elevator() /= ELEVATOR_LATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_SINGLE_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_SINGLE_BEGIN) .and.& + Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STAND .and.& + Get_TdsSwing() == TDS_SWING_OFF_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_UnlatchLed(.true.) + return + end if + + + + + + +!TOPDRIVE-CODE=49 + if ((Get_HookHeight() >= TL() .and. Get_HookHeight() <= (TL() + NFC() + data%State%OperationScenario%SG)) .and.& + (Get_Elevator() /= ELEVATOR_LATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_SINGLE_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_SINGLE_BEGIN) .and.& + (Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_STRING .or. Get_TdsElevatorModes() == TDS_ELEVATOR_CONNECTION_SINGLE) .and.& + Get_TdsSwing() == TDS_SWING_TILT_END .and.& + Get_FillMouseHoleLed() == .false.) then + + call Set_UnlatchLed(.true.) + return + end if + + + + + + + + + endif + + + + + + + + + if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then +# 99 + + + + +!OPERATION-CODE=40 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + Get_HookHeight() <= (data%State%OperationScenario%HL + Get_NearFloorConnection() - data%State%OperationScenario%ECG) .and.& + Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 6.0 .and.& + (Get_Elevator() /= ELEVATOR_LATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_SINGLE_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_SINGLE_BEGIN) .and.& +!Get_Elevator() == ELEVATOR_LATCH_STRING_END .and.& + (Get_ElevatorConnection() == ELEVATOR_LATCH_STRING) .and.& +!(Get_ElevatorConnection() == ELEVATOR_CONNECTION_STRING .or. Get_ElevatorConnection() == ELEVATOR_LATCH_STRING) .and.& +!Get_LatchLed() == .false. + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END ) then + + call Set_UnlatchLed(.true.) +!call Set_LatchLed(.false.) + return + end if + + + + + + + + +!OPERATION-CODE=41 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + Get_HookHeight() >= (data%State%OperationScenario%HL + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + Get_NearFloorConnection()) .and. Get_HookHeight() <= (data%State%OperationScenario%HL + data%State%OperationScenario%SL - data%State%OperationScenario%ECG + Get_NearFloorConnection() + data%State%OperationScenario%LG) .and.& +!Get_HookHeight() >= (HL + Get_NearFloorConnection() + SL + RE) .and. Get_HookHeight() <= (HL + Get_NearFloorConnection() + SL + LG) .and.& + (Get_Elevator() /= ELEVATOR_LATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_SINGLE_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_SINGLE_BEGIN) .and.& + Get_StandRack() < 80 .and.& + Get_JointConnectionPossible() == .false. .and.& +!Get_Elevator() == ELEVATOR_UNLATCH_STAND_END .and.& +!Get_LatchLed() == .false. + Get_ElevatorConnection() == ELEVATOR_CONNECTION_STAND .and.& + Get_Swing() == SWING_WELL_END .and.& + Get_Slips() == SLIPS_SET_END) then + + call Set_UnlatchLed(.true.) +!call Set_LatchLed(.false.) + return + end if + + + + + +!OPERATION-CODE=42 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + Get_HookHeight() >= data%State%OperationScenario%HL .and. Get_HookHeight() <= (data%State%OperationScenario%HL + Get_NearFloorConnection() + data%State%OperationScenario%SG) .and.& + (Get_Elevator() /= ELEVATOR_LATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STRING_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_STAND_BEGIN .and.& + Get_Elevator() /= ELEVATOR_LATCH_SINGLE_BEGIN .and.& + Get_Elevator() /= ELEVATOR_UNLATCH_SINGLE_BEGIN) .and.& +!Get_Elevator() == ELEVATOR_UNLATCH_SINGLE_END .and.& + Get_Swing() == SWING_MOUSE_HOLE_END .and.& +!Get_LatchLed() == .false. .and.& + Get_FillMouseHoleLed() == .false.) then + + call Set_UnlatchLed(.true.) +!call Set_LatchLed(.false.) + return + end if + + + + + +!call Log_4('OPERATION-CODE=43-OPERATION_DRILL=', Get_OperationCondition() == OPERATION_DRILL) +!call Log_4('OPERATION-CODE=43-Get_HookHeight=', Get_HookHeight() >= 27.41) +!call Log_4('OPERATION-CODE=43-Get_Swing()=', Get_Swing() == SWING_RAT_HOLE_END) +!call Log_4('OPERATION-CODE=43-Get_LatchLed()=', Get_LatchLed() == .false.) +!OPERATION-CODE=43 + if (Get_OperationCondition() == OPERATION_DRILL .and.& + Get_HookHeight() >= 27.41 .and.& +!Get_LatchLed() == .false. + Get_Swing() == SWING_RAT_HOLE_END) then +!call Log_4('OPERATION-CODE=43-call Set_UnlatchLed(.true.)') + call Set_UnlatchLed(.true.) +!call Set_LatchLed(.false.) + return + end if + + + + call Set_UnlatchLed(.false.) + + endif + end subroutine + +! subroutine Subscribe_UnlatchLed() +! implicit none + +! !**call data%State%unitySignals%OnOperationConditionChange%Add(Evaluate_UnlatchLed) +! ! call softwareInputs%OnHookHeightChange%Add(Evaluate_UnlatchLed) +! ! call softwareInputs%OnStandRackChanged%Add(Evaluate_UnlatchLed) +! call data%State%OperationScenario%OnElevatorConnectionChange%Add(Evaluate_UnlatchLed) +! !**call data%State%unitySignals%OnSwingChange%Add(Evaluate_UnlatchLed) +! !**call data%State%unitySignals%OnSlipsChange%Add(Evaluate_UnlatchLed) +! !**call data%State%notifications%OnLatchLedChange%Add(Evaluate_UnlatchLed) +! !**call data%State%notifications%OnFillMouseHoleLedChange%Add(Evaluate_UnlatchLed) +! end subroutine + +end module CUnlatchLedNotification diff --git a/CSharp/OperationScenarios/Permissions/CIrSafetyValvePermission.i90 b/CSharp/OperationScenarios/Permissions/CIrSafetyValvePermission.i90 new file mode 100644 index 0000000..d7eca13 --- /dev/null +++ b/CSharp/OperationScenarios/Permissions/CIrSafetyValvePermission.i90 @@ -0,0 +1,86 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Permissions/CIrSafetyValvePermission.f90" +module CIrSafetyValvePermission + use OperationScenariosModule + implicit none + contains + + subroutine Evaluate_IrSafetyValvePermission() + use TD_DrillStemComponents + use CStudentStationVariables!!, only: data%State%StudentStation%FillupHeadInstallation + implicit none + + + + + if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then +# 17 + + + + +!TOPDRIVE-CODE=55 + if (GetRotaryRpm() == 0.0d0 .and.& + (Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 10.0) .and.& + Get_JointConnectionPossible() == .false. .and.& + Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING .and.& + data%State%StudentStation%FillupHeadInstallation == .false.) then + + call Set_IrSafetyValvePermission(.true.) + return + end if + + + + endif + + + + + + + + + if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then +# 46 + + + +!OPERATION-CODE=57 + if (Get_OperationCondition() == OPERATION_TRIP .and.& + GetRotaryRpm() == 0.0d0 .and.& +!(Get_ElevatorConnection() == ELEVATOR_CONNECTION_NOTHING .or. Get_ElevatorConnection() == ELEVATOR_LATCH_STRING) .and.& +!Get_NearFloorConnection() >= 3.0 .and. Get_NearFloorConnection() <= 10.0 .and.& + data%State%TD_String%TopJointHeight >= 3.0 .and. data%State%TD_String%TopJointHeight <= 10.0 .and.& +!Get_SafetyValveHeight() >= 22.0 .and. Get_SafetyValveHeight() <= 35.0 .and.& + Get_JointConnectionPossible() == .false. .and.& + Get_FillupHead() == FILLUP_HEAD_REMOVE .and.& + Get_Swing() == SWING_WELL_END) then + call Set_IrSafetyValvePermission(.true.) + return + end if + + + + + + call Set_IrSafetyValvePermission(.false.) + + endif + + + + + + + + + + + end subroutine + + subroutine Subscribe_IrSafetyValvePermission() + implicit none +! imp me... + end subroutine + +end module CIrSafetyValvePermission diff --git a/CSharp/OperationScenarios/Unity/CUnityInputs.f90 b/CSharp/OperationScenarios/Unity/CUnityInputs.f90 index b9830d8..a8793fe 100644 --- a/CSharp/OperationScenarios/Unity/CUnityInputs.f90 +++ b/CSharp/OperationScenarios/Unity/CUnityInputs.f90 @@ -32,8 +32,6 @@ module CUnityInputs ! type(VoidEventHandlerCollection) :: OnTdsConnectionPossibleChange ! type(VoidEventHandlerCollection) :: OnTdsStemInChange end type UnityInputsType - - type(UnityInputsType)::UnityInputs contains @@ -303,25 +301,21 @@ module CUnityInputs ! implicit none ! logical, intent(in) :: v ! #ifdef ExcludeExtraChanges -! if(UnityInputs%ElevatorConnectionPossible == v) return +! if(data%Equipments%UnityInputs%ElevatorConnectionPossible == v) return ! #endif -! UnityInputs%ElevatorConnectionPossible = v -! !**call UnityInputs%OnElevatorConnectionPossibleChange%RunAll() +! data%Equipments%UnityInputs%ElevatorConnectionPossible = v +! !**call data%Equipments%UnityInputs%OnElevatorConnectionPossibleChange%RunAll() ! #ifdef deb -! print*, 'ElevatorConnectionPossible=', UnityInputs%ElevatorConnectionPossible +! print*, 'ElevatorConnectionPossible=', data%Equipments%UnityInputs%ElevatorConnectionPossible ! #endif ! end subroutine - logical function Get_ElevatorConnectionPossible() - implicit none - Get_ElevatorConnectionPossible = UnityInputs%ElevatorConnectionPossible - end function ! logical function Get_ElevatorConnectionPossible_WN() ! !DEC$ ATTRIBUTES DLLEXPORT :: Get_ElevatorConnectionPossible_WN ! !DEC$ ATTRIBUTES ALIAS: 'Get_ElevatorConnectionPossible_WN' :: Get_ElevatorConnectionPossible_WN ! implicit none - ! Get_ElevatorConnectionPossible_WN = UnityInputs%ElevatorConnectionPossible + ! Get_ElevatorConnectionPossible_WN = data%Equipments%UnityInputs%ElevatorConnectionPossible ! !Get_ElevatorConnectionPossible_WN = .true. ! end function @@ -338,26 +332,22 @@ module CUnityInputs ! implicit none ! logical, intent(in) :: v ! #ifdef ExcludeExtraChanges -! if(UnityInputs%JointConnectionPossible == v) return +! if(data%Equipments%UnityInputs%JointConnectionPossible == v) return ! #endif -! UnityInputs%JointConnectionPossible = v -! !**call UnityInputs%OnJointConnectionPossibleChange%RunAll() +! data%Equipments%UnityInputs%JointConnectionPossible = v +! !**call data%Equipments%UnityInputs%OnJointConnectionPossibleChange%RunAll() ! #ifdef deb -! print*, 'JointConnectionPossible=', UnityInputs%JointConnectionPossible +! print*, 'JointConnectionPossible=', data%Equipments%UnityInputs%JointConnectionPossible ! #endif ! end subroutine - logical function Get_JointConnectionPossible() - implicit none - Get_JointConnectionPossible = UnityInputs%JointConnectionPossible - end function ! logical function Get_JointConnectionPossible_WN() ! !DEC$ ATTRIBUTES DLLEXPORT :: Get_JointConnectionPossible_WN ! !DEC$ ATTRIBUTES ALIAS: 'Get_JointConnectionPossible_WN' :: Get_JointConnectionPossible_WN ! implicit none - ! Get_JointConnectionPossible_WN = UnityInputs%JointConnectionPossible + ! Get_JointConnectionPossible_WN = data%Equipments%UnityInputs%JointConnectionPossible ! end function @@ -370,25 +360,20 @@ module CUnityInputs ! implicit none ! logical, intent(in) :: v ! #ifdef ExcludeExtraChanges -! if(UnityInputs%IsKellyBushingSetInTable == v) return +! if(data%Equipments%UnityInputs%IsKellyBushingSetInTable == v) return ! #endif -! UnityInputs%IsKellyBushingSetInTable = v -! !**call UnityInputs%OnIsKellyBushingSetInTableChange%RunAll() +! data%Equipments%UnityInputs%IsKellyBushingSetInTable = v +! !**call data%Equipments%UnityInputs%OnIsKellyBushingSetInTableChange%RunAll() ! #ifdef deb -! print*, 'IsKellyBushingSetInTable=', UnityInputs%IsKellyBushingSetInTable +! print*, 'IsKellyBushingSetInTable=', data%Equipments%UnityInputs%IsKellyBushingSetInTable ! #endif ! end subroutine - logical function Get_IsKellyBushingSetInTable() - implicit none - Get_IsKellyBushingSetInTable = UnityInputs%IsKellyBushingSetInTable - end function - ! logical function Get_IsKellyBushingSetInTable_WN() ! !DEC$ ATTRIBUTES DLLEXPORT :: Get_IsKellyBushingSetInTable_WN ! !DEC$ ATTRIBUTES ALIAS: 'Get_IsKellyBushingSetInTable_WN' :: Get_IsKellyBushingSetInTable_WN ! implicit none - ! Get_IsKellyBushingSetInTable_WN = UnityInputs%IsKellyBushingSetInTable + ! Get_IsKellyBushingSetInTable_WN = data%Equipments%UnityInputs%IsKellyBushingSetInTable ! end function @@ -403,26 +388,22 @@ module CUnityInputs ! implicit none ! logical, intent(in) :: v ! #ifdef ExcludeExtraChanges -! if(UnityInputs%ElevatorPickup == v) return +! if(data%Equipments%UnityInputs%ElevatorPickup == v) return ! #endif -! UnityInputs%ElevatorPickup = v -! !**call UnityInputs%OnElevatorPickupChange%RunAll() +! data%Equipments%UnityInputs%ElevatorPickup = v +! !**call data%Equipments%UnityInputs%OnElevatorPickupChange%RunAll() ! #ifdef deb -! print*, 'ElevatorPickup =', UnityInputs%ElevatorPickup +! print*, 'ElevatorPickup =', data%Equipments%UnityInputs%ElevatorPickup ! #endif ! end subroutine - logical function Get_ElevatorPickup() - implicit none - Get_ElevatorPickup = UnityInputs%ElevatorPickup - end function ! logical function Get_ElevatorPickup_WN() ! !DEC$ ATTRIBUTES DLLEXPORT :: Get_ElevatorPickup_WN ! !DEC$ ATTRIBUTES ALIAS: 'Get_ElevatorPickup_WN' :: Get_ElevatorPickup_WN ! implicit none - ! Get_ElevatorPickup_WN = UnityInputs%ElevatorPickup + ! Get_ElevatorPickup_WN = data%Equipments%UnityInputs%ElevatorPickup ! end function @@ -431,18 +412,6 @@ module CUnityInputs - subroutine Set_NearFloorPosition(v) - implicit none - logical, intent(in) :: v -#ifdef ExcludeExtraChanges - if(UnityInputs%NearFloorPosition == v) return -#endif - UnityInputs%NearFloorPosition = v - !**call UnityInputs%OnNearFloorPositionChange%RunAll() -#ifdef deb - print*, 'NearFloorPosition =', UnityInputs%NearFloorPosition -#endif - end subroutine ! subroutine Set_NearFloorPosition_WN(v) ! !DEC$ ATTRIBUTES DLLEXPORT :: Set_NearFloorPosition_WN @@ -452,17 +421,13 @@ module CUnityInputs ! call Set_NearFloorPosition(v) ! end subroutine - logical function Get_NearFloorPosition() - implicit none - Get_NearFloorPosition = UnityInputs%NearFloorPosition - end function ! logical function Get_NearFloorPosition_WN() ! !DEC$ ATTRIBUTES DLLEXPORT :: Get_NearFloorPosition_WN ! !DEC$ ATTRIBUTES ALIAS: 'Get_NearFloorPosition_WN' :: Get_NearFloorPosition_WN ! implicit none -! Get_NearFloorPosition_WN = UnityInputs%NearFloorPosition +! Get_NearFloorPosition_WN = data%Equipments%UnityInputs%NearFloorPosition ! end function @@ -479,38 +444,21 @@ module CUnityInputs ! implicit none ! logical, intent(in) :: v ! #ifdef ExcludeExtraChanges -! if(UnityInputs%SingleSetInMouseHole == v) return +! if(data%Equipments%UnityInputs%SingleSetInMouseHole == v) return ! #endif -! UnityInputs%SingleSetInMouseHole = v -! !**call UnityInputs%OnSingleSetInMouseHoleChange%RunAll() +! data%Equipments%UnityInputs%SingleSetInMouseHole = v +! !**call data%Equipments%UnityInputs%OnSingleSetInMouseHoleChange%RunAll() ! #ifdef deb -! print*, 'singleSetInMouseHole=', UnityInputs%SingleSetInMouseHole +! print*, 'singleSetInMouseHole=', data%Equipments%UnityInputs%SingleSetInMouseHole ! #endif ! end subroutine - logical function Get_SingleSetInMouseHole() - implicit none - Get_SingleSetInMouseHole = UnityInputs%SingleSetInMouseHole - end function - - - - logical function Get_TdsConnectionPossible() - implicit none - Get_TdsConnectionPossible = UnityInputs%TdsConnectionPossible - end function - - - logical function Get_TdsStemIn() - implicit none - Get_TdsStemIn = UnityInputs%TdsStemIn - end function ! logical function Get_TdsStemIn_WN() ! !DEC$ ATTRIBUTES DLLEXPORT :: Get_TdsStemIn_WN ! !DEC$ ATTRIBUTES ALIAS: 'Get_TdsStemIn_WN' :: Get_TdsStemIn_WN ! implicit none - ! Get_TdsStemIn_WN = UnityInputs%TdsStemIn + ! Get_TdsStemIn_WN = data%Equipments%UnityInputs%TdsStemIn ! !Get_TdsStemIn_WN = .true. ! end function diff --git a/CSharp/OperationScenarios/Unity/CUnityInputs.i90 b/CSharp/OperationScenarios/Unity/CUnityInputs.i90 new file mode 100644 index 0000000..1e9dd6e --- /dev/null +++ b/CSharp/OperationScenarios/Unity/CUnityInputs.i90 @@ -0,0 +1,469 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Unity/CUnityInputs.f90" +module CUnityInputs +! use CVoidEventHandlerCollection + implicit none + type :: UnityInputsType + logical :: ElevatorConnectionPossible + logical :: JointConnectionPossible + logical :: IsKellyBushingSetInTable + logical :: ElevatorPickup + logical :: NearFloorPosition + logical :: SingleSetInMouseHole + logical :: TdsConnectionPossible + logical :: TdsStemIn + +! private :: ElevatorConnectionPossible +! private :: JointConnectionPossible +! private :: IsKellyBushingSetInTable +! private :: ElevatorPickup +! private :: NearFloorPosition +! private :: SingleSetInMouseHole +! private :: TdsConnectionPossible +! private :: TdsStemIn + +! public + +! type(VoidEventHandlerCollection) :: OnElevatorConnectionPossibleChange +! type(VoidEventHandlerCollection) :: OnJointConnectionPossibleChange +! type(VoidEventHandlerCollection) :: OnIsKellyBushingSetInTableChange +! type(VoidEventHandlerCollection) :: OnElevatorPickupChange +! type(VoidEventHandlerCollection) :: OnNearFloorPositionChange +! type(VoidEventHandlerCollection) :: OnSingleSetInMouseHoleChange + +! type(VoidEventHandlerCollection) :: OnTdsConnectionPossibleChange +! type(VoidEventHandlerCollection) :: OnTdsStemInChange + end type UnityInputsType + + contains + +! Input routines + + +! subroutine Set_OutOfMouseHole(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_OutOfMouseHole +! !DEC$ ATTRIBUTES ALIAS: 'Set_OutOfMouseHole' :: Set_OutOfMouseHole +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(OutOfMouseHole == v) return +! !#endif +! ! OutOfMouseHole = v +! ! call OnOutOfMouseHoleChange%RunAll() +! !#ifdef deb +! ! print*, 'OutOfMouseHole=', OutOfMouseHole +! !#endif +! end subroutine + +! !logical function Get_OutOfMouseHole() +! ! implicit none +! ! Get_OutOfMouseHole = OutOfMouseHole +! !end function + + + + + + + + + + + + +! subroutine Set_Unlatch(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_Unlatch +! !DEC$ ATTRIBUTES ALIAS: 'Set_Unlatch' :: Set_Unlatch +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(Unlatch == v) return +! !#endif +! ! Unlatch = v +! ! call OnUnlatchChange%RunAll() +! !#ifdef deb +! ! print*, 'Unlatch=', Unlatch +! !#endif +! end subroutine + +! !logical function Get_Unlatch() +! ! implicit none +! ! Get_Unlatch = Unlatch +! !end function + + + + + + + + + + + + + + +! subroutine Set_Latch(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_Latch +! !DEC$ ATTRIBUTES ALIAS: 'Set_Latch' :: Set_Latch +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(Latch == v) return +! !#endif +! ! Latch = v +! ! call OnLatchChange%RunAll() +! !#ifdef deb +! ! print*, 'Latch=', Latch +! !#endif +! end subroutine + +! !logical function Get_Latch() +! ! implicit none +! ! Get_Latch = Latch +! !end function + + + + + + + + + + + + + + + + +! subroutine Set_SlipsUnSet(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_SlipsUnSet +! !DEC$ ATTRIBUTES ALIAS: 'Set_SlipsUnSet' :: Set_SlipsUnSet +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(SlipsUnSet == v) return +! !#endif +! ! SlipsUnSet = v +! ! call OnSlipsUnSetChange%RunAll() +! !#ifdef deb +! ! print*, 'SlipsUnSet=', SlipsUnSet +! !#endif +! end subroutine + +! !logical function Get_SlipsUnSet() +! ! implicit none +! ! Get_SlipsUnSet = SlipsUnSet +! !end function + + + + + + + + + + + + + +! subroutine Set_SlipsSet(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_SlipsSet +! !DEC$ ATTRIBUTES ALIAS: 'Set_SlipsSet' :: Set_SlipsSet +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(SlipsSet == v) return +! !#endif +! ! SlipsSet = v +! ! call OnSlipsSetChange%RunAll() +! !#ifdef deb +! ! print*, 'SlipsSet=', SlipsSet +! !#endif +! end subroutine + +! !logical function Get_SlipsSet() +! ! implicit none +! ! Get_SlipsSet = SlipsSet +! !end function + + + + + + + + + + + +! subroutine Set_BreakupTong(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_BreakupTong +! !DEC$ ATTRIBUTES ALIAS: 'Set_BreakupTong' :: Set_BreakupTong +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(BreakupTong == v) return +! !#endif +! ! BreakupTong = v +! ! call OnBreakupTongChange%RunAll() +! !#ifdef deb +! ! print*, 'BreakupTong=', BreakupTong +! !#endif +! end subroutine + +! !logical function Get_BreakupTong() +! ! implicit none +! ! Get_BreakupTong = BreakupTong +! !end function + + + + + + + + + +! subroutine Set_MakeupTong(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_MakeupTong +! !DEC$ ATTRIBUTES ALIAS: 'Set_MakeupTong' :: Set_MakeupTong +! implicit none +! logical, intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(MakeupTong == v) return +! !#endif +! ! MakeupTong = v +! ! call OnMakeupTongChange%RunAll() +! !#ifdef deb +! ! print*, 'MakeupTong=', MakeupTong +! !#endif +! end subroutine + +! !logical function Get_MakeupTong() +! ! implicit none +! ! Get_MakeupTong = MakeupTong +! !end function + + + + + + + + + + + + + + + + + + + + + +! subroutine Set_NewHookHeight(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_NewHookHeight +! !DEC$ ATTRIBUTES ALIAS: 'Set_NewHookHeight' :: Set_NewHookHeight +! implicit none +! real(8), intent(in) :: v +! !#ifdef ExcludeExtraChanges +! ! if(NewHookHeight == v) return +! !#endif +! ! NewHookHeight = v +! ! call OnNewHookHeightChange%RunAll() +! !#ifdef deb +! ! print*, 'NewHookHeight=', NewHookHeight +! !#endif +! end subroutine + +! !real(8) function Get_NewHookHeight() +! ! implicit none +! ! Get_NewHookHeight = NewHookHeight +! !end function + + + + + + + + + +! subroutine Set_ElevatorConnectionPossible(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_ElevatorConnectionPossible +! !DEC$ ATTRIBUTES ALIAS: 'Set_ElevatorConnectionPossible' :: Set_ElevatorConnectionPossible +! implicit none +! logical, intent(in) :: v +! #ifdef ExcludeExtraChanges +! if(data%Equipments%UnityInputs%ElevatorConnectionPossible == v) return +! #endif +! data%Equipments%UnityInputs%ElevatorConnectionPossible = v +! !**call data%Equipments%UnityInputs%OnElevatorConnectionPossibleChange%RunAll() +! #ifdef deb +! print*, 'ElevatorConnectionPossible=', data%Equipments%UnityInputs%ElevatorConnectionPossible +! #endif +! end subroutine + + +! logical function Get_ElevatorConnectionPossible_WN() +! !DEC$ ATTRIBUTES DLLEXPORT :: Get_ElevatorConnectionPossible_WN +! !DEC$ ATTRIBUTES ALIAS: 'Get_ElevatorConnectionPossible_WN' :: Get_ElevatorConnectionPossible_WN +! implicit none +! Get_ElevatorConnectionPossible_WN = data%Equipments%UnityInputs%ElevatorConnectionPossible +! !Get_ElevatorConnectionPossible_WN = .true. +! end function + + + + + + + + +! subroutine Set_JointConnectionPossible(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_JointConnectionPossible +! !DEC$ ATTRIBUTES ALIAS: 'Set_JointConnectionPossible' :: Set_JointConnectionPossible +! implicit none +! logical, intent(in) :: v +! #ifdef ExcludeExtraChanges +! if(data%Equipments%UnityInputs%JointConnectionPossible == v) return +! #endif +! data%Equipments%UnityInputs%JointConnectionPossible = v +! !**call data%Equipments%UnityInputs%OnJointConnectionPossibleChange%RunAll() +! #ifdef deb +! print*, 'JointConnectionPossible=', data%Equipments%UnityInputs%JointConnectionPossible +! #endif +! end subroutine + + + +! logical function Get_JointConnectionPossible_WN() +! !DEC$ ATTRIBUTES DLLEXPORT :: Get_JointConnectionPossible_WN +! !DEC$ ATTRIBUTES ALIAS: 'Get_JointConnectionPossible_WN' :: Get_JointConnectionPossible_WN +! implicit none +! Get_JointConnectionPossible_WN = data%Equipments%UnityInputs%JointConnectionPossible +! end function + + + + + +! subroutine Set_IsKellyBushingSetInTable(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_IsKellyBushingSetInTable +! !DEC$ ATTRIBUTES ALIAS: 'Set_IsKellyBushingSetInTable' :: Set_IsKellyBushingSetInTable +! implicit none +! logical, intent(in) :: v +! #ifdef ExcludeExtraChanges +! if(data%Equipments%UnityInputs%IsKellyBushingSetInTable == v) return +! #endif +! data%Equipments%UnityInputs%IsKellyBushingSetInTable = v +! !**call data%Equipments%UnityInputs%OnIsKellyBushingSetInTableChange%RunAll() +! #ifdef deb +! print*, 'IsKellyBushingSetInTable=', data%Equipments%UnityInputs%IsKellyBushingSetInTable +! #endif +! end subroutine + +! logical function Get_IsKellyBushingSetInTable_WN() +! !DEC$ ATTRIBUTES DLLEXPORT :: Get_IsKellyBushingSetInTable_WN +! !DEC$ ATTRIBUTES ALIAS: 'Get_IsKellyBushingSetInTable_WN' :: Get_IsKellyBushingSetInTable_WN +! implicit none +! Get_IsKellyBushingSetInTable_WN = data%Equipments%UnityInputs%IsKellyBushingSetInTable +! end function + + + + + + + +! subroutine Set_ElevatorPickup(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_ElevatorPickup +! !DEC$ ATTRIBUTES ALIAS: 'Set_ElevatorPickup' :: Set_ElevatorPickup +! implicit none +! logical, intent(in) :: v +! #ifdef ExcludeExtraChanges +! if(data%Equipments%UnityInputs%ElevatorPickup == v) return +! #endif +! data%Equipments%UnityInputs%ElevatorPickup = v +! !**call data%Equipments%UnityInputs%OnElevatorPickupChange%RunAll() +! #ifdef deb +! print*, 'ElevatorPickup =', data%Equipments%UnityInputs%ElevatorPickup +! #endif +! end subroutine + + + +! logical function Get_ElevatorPickup_WN() +! !DEC$ ATTRIBUTES DLLEXPORT :: Get_ElevatorPickup_WN +! !DEC$ ATTRIBUTES ALIAS: 'Get_ElevatorPickup_WN' :: Get_ElevatorPickup_WN +! implicit none +! Get_ElevatorPickup_WN = data%Equipments%UnityInputs%ElevatorPickup +! end function + + + + + + + + +! subroutine Set_NearFloorPosition_WN(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_NearFloorPosition_WN +! !DEC$ ATTRIBUTES ALIAS: 'Set_NearFloorPosition_WN' :: Set_NearFloorPosition_WN +! implicit none +! logical, intent(in) :: v +! call Set_NearFloorPosition(v) +! end subroutine + + + +! logical function Get_NearFloorPosition_WN() +! !DEC$ ATTRIBUTES DLLEXPORT :: Get_NearFloorPosition_WN +! !DEC$ ATTRIBUTES ALIAS: 'Get_NearFloorPosition_WN' :: Get_NearFloorPosition_WN +! implicit none +! Get_NearFloorPosition_WN = data%Equipments%UnityInputs%NearFloorPosition +! end function + + + + + + + + + +! subroutine Set_SingleSetInMouseHole(v) +! !DEC$ ATTRIBUTES DLLEXPORT :: Set_SingleSetInMouseHole +! !DEC$ ATTRIBUTES ALIAS: 'Set_SingleSetInMouseHole' :: Set_SingleSetInMouseHole +! implicit none +! logical, intent(in) :: v +! #ifdef ExcludeExtraChanges +! if(data%Equipments%UnityInputs%SingleSetInMouseHole == v) return +! #endif +! data%Equipments%UnityInputs%SingleSetInMouseHole = v +! !**call data%Equipments%UnityInputs%OnSingleSetInMouseHoleChange%RunAll() +! #ifdef deb +! print*, 'singleSetInMouseHole=', data%Equipments%UnityInputs%SingleSetInMouseHole +! #endif +! end subroutine + + +! logical function Get_TdsStemIn_WN() +! !DEC$ ATTRIBUTES DLLEXPORT :: Get_TdsStemIn_WN +! !DEC$ ATTRIBUTES ALIAS: 'Get_TdsStemIn_WN' :: Get_TdsStemIn_WN +! implicit none +! Get_TdsStemIn_WN = data%Equipments%UnityInputs%TdsStemIn +! !Get_TdsStemIn_WN = .true. +! end function + + + + +end module CUnityInputs diff --git a/CSharp/OperationScenarios/Unity/CUnityOutputs.f90 b/CSharp/OperationScenarios/Unity/CUnityOutputs.f90 index 1f8df34..7031c43 100644 --- a/CSharp/OperationScenarios/Unity/CUnityOutputs.f90 +++ b/CSharp/OperationScenarios/Unity/CUnityOutputs.f90 @@ -1,6 +1,6 @@ module CUnityOutputs implicit none - type :: UnityOutputsType + type :: UnityOutputsType real(8) :: KellyHoseVibrationRate real(8) :: BlowoutFromStringPercent real(8) :: Pedal @@ -14,7 +14,6 @@ module CUnityOutputs logical :: FlowKellyDisconnect logical :: FlowPipeDisconnect end type UnityOutputsType - type(UnityOutputsType):: UnityOutputs contains @@ -35,192 +34,4 @@ module CUnityOutputs - subroutine Set_BlowoutFromString(v) - implicit none - logical, intent (in) :: v - UnityOutputs%BlowoutFromString = v -#ifdef deb - print*, 'BlowoutFromString=', v -#endif - end subroutine - - logical function Get_BlowoutFromString() - implicit none - Get_BlowoutFromString = UnityOutputs%BlowoutFromString - end function - - subroutine Set_BlowoutFromAnnular(v) - implicit none - logical, intent (in) :: v - UnityOutputs%BlowoutFromAnnular = v -#ifdef deb - print*, 'BlowoutFromAnnular=', v -#endif - end subroutine - - logical function Get_BlowoutFromAnnular() - implicit none - Get_BlowoutFromAnnular = UnityOutputs%BlowoutFromAnnular - end function - - - - - - subroutine Set_FlowFromReturnLine(v) - implicit none - logical, intent (in) :: v - UnityOutputs%FlowFromReturnLine = v -#ifdef deb - print*, 'FlowFromReturnLine=', v -#endif - end subroutine - - logical function Get_FlowFromReturnLine() - implicit none - Get_FlowFromReturnLine = UnityOutputs%FlowFromReturnLine - end function - - - - subroutine Set_FlowFromKelly(v) - implicit none - real, intent (in) :: v - UnityOutputs%FlowFromKelly = v -#ifdef deb - print*, 'FlowFromKelly=', v -#endif - end subroutine - - real function Get_FlowFromKelly() - implicit none - Get_FlowFromKelly = UnityOutputs%FlowFromKelly - end function - - - - - - subroutine Set_FlowFromFillupHead(v) - implicit none - real, intent (in) :: v - UnityOutputs%FlowFromFillupHead = v -#ifdef deb - print*, 'FlowFromFillupHead=', v -#endif - end subroutine - - real function Get_FlowFromFillupHead() - implicit none - Get_FlowFromFillupHead = UnityOutputs%FlowFromFillupHead - end function - - - - - - - subroutine Set_FlowKellyDisconnect(v) - implicit none - logical, intent (in) :: v - UnityOutputs%FlowKellyDisconnect = v -#ifdef deb - print*, 'FlowKellyDisconnect=', v -#endif - end subroutine - - logical function Get_FlowKellyDisconnect() - implicit none - Get_FlowKellyDisconnect = UnityOutputs%FlowKellyDisconnect - end function - - - - - subroutine Set_FlowPipeDisconnect(v) - implicit none - logical, intent (in) :: v - UnityOutputs%FlowPipeDisconnect = v -#ifdef deb - print*, 'FlowPipeDisconnect=', v -#endif - end subroutine - - logical function Get_FlowPipeDisconnect() - implicit none - Get_FlowPipeDisconnect = UnityOutputs%FlowPipeDisconnect - end function - - subroutine Set_BlowoutFromStringPercent(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%BlowoutFromStringPercent = v -#ifdef deb - print*, 'BlowoutFromStringPercent=', v -#endif - end subroutine - - real(8) function GetBlowoutFromStringPercent() - implicit none - GetBlowoutFromStringPercent = UnityOutputs%BlowoutFromStringPercent - end function - - subroutine Calc_KellyHoseVibrationRate(spm1, spm2) - use CScaleRange - implicit none - real(8), intent (in) :: spm1, spm2 - real :: total - total = (spm1 + spm2)/2 - UnityOutputs%KellyHoseVibrationRate = ScaleRange(total, 0.0, 10.0, 0.0, 120.0) -#ifdef deb - print*, 'KellyHoseVibrationRate=', UnityOutputs%KellyHoseVibrationRate -#endif - end subroutine - - real(8) function GetKellyHoseVibrationRate() - implicit none - GetKellyHoseVibrationRate = UnityOutputs%KellyHoseVibrationRate - end function - - subroutine Set_Pedal(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%Pedal = v -#ifdef deb - print*, 'Pedal=', v -#endif - end subroutine - - real(8) function GetPedal() - implicit none - GetPedal = UnityOutputs%Pedal - end function - - subroutine Set_FlowRate(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%FlowRate = v -#ifdef deb - print*, 'FlowRate=', v -#endif - end subroutine - - - real(8) function GetFlowRate() - implicit none - GetFlowRate = UnityOutputs%FlowRate - end function - subroutine Set_RotaryRpm(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%RotaryRpm = v -#ifdef deb - print*, 'RotaryRpm=', v -#endif - end subroutine - - real(8) function GetRotaryRpm() - implicit none - GetRotaryRpm = UnityOutputs%RotaryRpm - end function end module CUnityOutputs diff --git a/CSharp/OperationScenarios/Unity/CUnityOutputs.i90 b/CSharp/OperationScenarios/Unity/CUnityOutputs.i90 index b4f0ad3..47e4347 100644 --- a/CSharp/OperationScenarios/Unity/CUnityOutputs.i90 +++ b/CSharp/OperationScenarios/Unity/CUnityOutputs.i90 @@ -1,7 +1,7 @@ # 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Unity/CUnityOutputs.f90" module CUnityOutputs implicit none - type :: UnityOutputsType + type :: UnityOutputsType real(8) :: KellyHoseVibrationRate real(8) :: BlowoutFromStringPercent real(8) :: Pedal @@ -15,7 +15,6 @@ module CUnityOutputs logical :: FlowKellyDisconnect logical :: FlowPipeDisconnect end type UnityOutputsType - type(UnityOutputsType):: UnityOutputs contains @@ -36,180 +35,4 @@ module CUnityOutputs - subroutine Set_BlowoutFromString(v) - implicit none - logical, intent (in) :: v - UnityOutputs%BlowoutFromString = v -# 44 - - end subroutine - - logical function Get_BlowoutFromString() - implicit none - Get_BlowoutFromString = UnityOutputs%BlowoutFromString - end function - - subroutine Set_BlowoutFromAnnular(v) - implicit none - logical, intent (in) :: v - UnityOutputs%BlowoutFromAnnular = v -# 58 - - end subroutine - - logical function Get_BlowoutFromAnnular() - implicit none - Get_BlowoutFromAnnular = UnityOutputs%BlowoutFromAnnular - end function - - - - - - subroutine Set_FlowFromReturnLine(v) - implicit none - logical, intent (in) :: v - UnityOutputs%FlowFromReturnLine = v -# 76 - - end subroutine - - logical function Get_FlowFromReturnLine() - implicit none - Get_FlowFromReturnLine = UnityOutputs%FlowFromReturnLine - end function - - - - subroutine Set_FlowFromKelly(v) - implicit none - real, intent (in) :: v - UnityOutputs%FlowFromKelly = v -# 92 - - end subroutine - - real function Get_FlowFromKelly() - implicit none - Get_FlowFromKelly = UnityOutputs%FlowFromKelly - end function - - - - - - subroutine Set_FlowFromFillupHead(v) - implicit none - real, intent (in) :: v - UnityOutputs%FlowFromFillupHead = v -# 110 - - end subroutine - - real function Get_FlowFromFillupHead() - implicit none - Get_FlowFromFillupHead = UnityOutputs%FlowFromFillupHead - end function - - - - - - - subroutine Set_FlowKellyDisconnect(v) - implicit none - logical, intent (in) :: v - UnityOutputs%FlowKellyDisconnect = v -# 129 - - end subroutine - - logical function Get_FlowKellyDisconnect() - implicit none - Get_FlowKellyDisconnect = UnityOutputs%FlowKellyDisconnect - end function - - - - - subroutine Set_FlowPipeDisconnect(v) - implicit none - logical, intent (in) :: v - UnityOutputs%FlowPipeDisconnect = v -# 146 - - end subroutine - - logical function Get_FlowPipeDisconnect() - implicit none - Get_FlowPipeDisconnect = UnityOutputs%FlowPipeDisconnect - end function - - subroutine Set_BlowoutFromStringPercent(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%BlowoutFromStringPercent = v -# 160 - - end subroutine - - real(8) function GetBlowoutFromStringPercent() - implicit none - GetBlowoutFromStringPercent = UnityOutputs%BlowoutFromStringPercent - end function - - subroutine Calc_KellyHoseVibrationRate(spm1, spm2) - use CScaleRange - implicit none - real(8), intent (in) :: spm1, spm2 - real :: total - total = (spm1 + spm2)/2 - UnityOutputs%KellyHoseVibrationRate = ScaleRange(total, 0.0, 10.0, 0.0, 120.0) -# 177 - - end subroutine - - real(8) function GetKellyHoseVibrationRate() - implicit none - GetKellyHoseVibrationRate = UnityOutputs%KellyHoseVibrationRate - end function - - subroutine Set_Pedal(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%Pedal = v -# 191 - - end subroutine - - real(8) function GetPedal() - implicit none - GetPedal = UnityOutputs%Pedal - end function - - subroutine Set_FlowRate(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%FlowRate = v -# 205 - - end subroutine - - - real(8) function GetFlowRate() - implicit none - GetFlowRate = UnityOutputs%FlowRate - end function - subroutine Set_RotaryRpm(v) - implicit none - real(8), intent (in) :: v - UnityOutputs%RotaryRpm = v -# 219 - - end subroutine - - real(8) function GetRotaryRpm() - implicit none - GetRotaryRpm = UnityOutputs%RotaryRpm - end function end module CUnityOutputs diff --git a/CSharp/OperationScenarios/Unity/UnityModule.f90 b/CSharp/OperationScenarios/Unity/UnityModule.f90 new file mode 100644 index 0000000..f1d552b --- /dev/null +++ b/CSharp/OperationScenarios/Unity/UnityModule.f90 @@ -0,0 +1,288 @@ +module UnityModule + use SimulationVariables + implicit none +contains + subroutine UnityInputsFromJson(parent) + use json_module,IK =>json_ik + type(json_value),pointer :: parent + type(json_core) :: json + type(json_value),pointer :: p,pval + + call json%get(parent,'Unity',p) + + call json%get(p,'ElevatorConnectionPossible',pval) + call json%get(pval,data%Equipments%UnityInputs%ElevatorConnectionPossible) + call json%get(p,'JointConnectionPossible',pval) + call json%get(pval,data%Equipments%UnityInputs%JointConnectionPossible) + call json%get(p,'IsKellyBushingSetInTable',pval) + call json%get(pval,data%Equipments%UnityInputs%IsKellyBushingSetInTable) + call json%get(p,'ElevatorPickup',pval) + call json%get(pval,data%Equipments%UnityInputs%ElevatorPickup) + call json%get(p,'NearFloorPosition',pval) + call json%get(pval,data%Equipments%UnityInputs%NearFloorPosition) + call json%get(p,'SingleSetInMouseHole',pval) + call json%get(pval,data%Equipments%UnityInputs%SingleSetInMouseHole) + call json%get(p,'TdsConnectionPossible',pval) + call json%get(pval,data%Equipments%UnityInputs%TdsConnectionPossible) + call json%get(p,'TdsStemIn',pval) + call json%get(pval,data%Equipments%UnityInputs%TdsStemIn) + end subroutine + + subroutine UnityOutputsToJson(parent) + type(json_value),pointer :: parent + type(json_core) :: json + type(json_value),pointer :: p + + ! 1. create new node + call json%create_object(p,'Unity') + + ! 2. add member of data type to new node + call json%add(p,"KellyHoseVibrationRate",data%Equipments%UnityOutputs%KellyHoseVibrationRate) + call json%add(p,"BlowoutFromStringPercent",data%Equipments%UnityOutputs%BlowoutFromStringPercent) + call json%add(p,"Pedal",data%Equipments%UnityOutputs%Pedal) + call json%add(p,"FlowRate",data%Equipments%UnityOutputs%FlowRate) + call json%add(p,"RotaryRpm",data%Equipments%UnityOutputs%RotaryRpm) + call json%add(p,"BlowoutFromString",data%Equipments%UnityOutputs%BlowoutFromString) + call json%add(p,"BlowoutFromAnnular",data%Equipments%UnityOutputs%BlowoutFromAnnular) + call json%add(p,"FlowFromReturnLine",data%Equipments%UnityOutputs%FlowFromReturnLine) + call json%add(p,"FlowFromKelly",data%Equipments%UnityOutputs%FlowFromKelly) + call json%add(p,"FlowFromFillupHead",data%Equipments%UnityOutputs%FlowFromFillupHead) + call json%add(p,"FlowKellyDisconnect",data%Equipments%UnityOutputs%FlowKellyDisconnect) + call json%add(p,"FlowPipeDisconnect",data%Equipments%UnityOutputs%FlowPipeDisconnect) + + ! 3. add new node to parent + call json%add(parent,p) +end subroutine + +logical function Get_ElevatorPickup() + Get_ElevatorPickup = data%Equipments%UnityInputs%ElevatorPickup +end function + +logical function Get_IsKellyBushingSetInTable() + Get_IsKellyBushingSetInTable = data%Equipments%UnityInputs%IsKellyBushingSetInTable +end function +logical function Get_JointConnectionPossible() + Get_JointConnectionPossible = data%Equipments%UnityInputs%JointConnectionPossible +end function +logical function Get_ElevatorConnectionPossible() + implicit none + Get_ElevatorConnectionPossible = data%Equipments%UnityInputs%ElevatorConnectionPossible +end function +logical function Get_NearFloorPosition() + Get_NearFloorPosition = data%Equipments%UnityInputs%NearFloorPosition +end function +subroutine Set_NearFloorPosition(v) + implicit none + logical, intent(in) :: v + ! #ifdef ExcludeExtraChanges + ! if(data%Equipments%UnityInputs%NearFloorPosition == v) return + ! #endif + data%Equipments%UnityInputs%NearFloorPosition = v + !**call data%Equipments%UnityInputs%OnNearFloorPositionChange%RunAll() + if(logging>4) then + print*, 'NearFloorPosition =', data%Equipments%UnityInputs%NearFloorPosition + endif +end subroutine + +logical function Get_SingleSetInMouseHole() + Get_SingleSetInMouseHole = data%Equipments%UnityInputs%SingleSetInMouseHole +end function + +logical function Get_TdsConnectionPossible() + Get_TdsConnectionPossible = data%Equipments%UnityInputs%TdsConnectionPossible +end function + +logical function Get_TdsStemIn() + Get_TdsStemIn = data%Equipments%UnityInputs%TdsStemIn +end function + +subroutine Set_BlowoutFromString(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%BlowoutFromString = v +#ifdef deb + print*, 'BlowoutFromString=', v +#endif +end subroutine + +logical function Get_BlowoutFromString() + implicit none + Get_BlowoutFromString = data%Equipments%UnityOutputs%BlowoutFromString +end function + +subroutine Set_BlowoutFromAnnular(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%BlowoutFromAnnular = v +#ifdef deb + print*, 'BlowoutFromAnnular=', v +#endif +end subroutine + +logical function Get_BlowoutFromAnnular() + implicit none + Get_BlowoutFromAnnular = data%Equipments%UnityOutputs%BlowoutFromAnnular +end function + + + + + +subroutine Set_FlowFromReturnLine(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%FlowFromReturnLine = v +#ifdef deb + print*, 'FlowFromReturnLine=', v +#endif +end subroutine + +logical function Get_FlowFromReturnLine() + implicit none + Get_FlowFromReturnLine = data%Equipments%UnityOutputs%FlowFromReturnLine +end function + + + +subroutine Set_FlowFromKelly(v) + implicit none + real, intent (in) :: v + data%Equipments%UnityOutputs%FlowFromKelly = v +#ifdef deb + print*, 'FlowFromKelly=', v +#endif +end subroutine + +real function Get_FlowFromKelly() + implicit none + Get_FlowFromKelly = data%Equipments%UnityOutputs%FlowFromKelly +end function + + + + + +subroutine Set_FlowFromFillupHead(v) + implicit none + real, intent (in) :: v + data%Equipments%UnityOutputs%FlowFromFillupHead = v +#ifdef deb + print*, 'FlowFromFillupHead=', v +#endif +end subroutine + +real function Get_FlowFromFillupHead() + implicit none + Get_FlowFromFillupHead = data%Equipments%UnityOutputs%FlowFromFillupHead +end function + + + + + + +subroutine Set_FlowKellyDisconnect(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%FlowKellyDisconnect = v +#ifdef deb + print*, 'FlowKellyDisconnect=', v +#endif +end subroutine + +logical function Get_FlowKellyDisconnect() + implicit none + Get_FlowKellyDisconnect = data%Equipments%UnityOutputs%FlowKellyDisconnect +end function + + + + +subroutine Set_FlowPipeDisconnect(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%FlowPipeDisconnect = v +#ifdef deb + print*, 'FlowPipeDisconnect=', v +#endif +end subroutine + +logical function Get_FlowPipeDisconnect() + implicit none + Get_FlowPipeDisconnect = data%Equipments%UnityOutputs%FlowPipeDisconnect +end function + +subroutine Set_BlowoutFromStringPercent(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%BlowoutFromStringPercent = v +#ifdef deb + print*, 'BlowoutFromStringPercent=', v +#endif +end subroutine + +real(8) function GetBlowoutFromStringPercent() + implicit none + GetBlowoutFromStringPercent = data%Equipments%UnityOutputs%BlowoutFromStringPercent +end function + +subroutine Calc_KellyHoseVibrationRate(spm1, spm2) + use CScaleRange + implicit none + real(8), intent (in) :: spm1, spm2 + real :: total + total = (spm1 + spm2)/2 + data%Equipments%UnityOutputs%KellyHoseVibrationRate = ScaleRange(total, 0.0, 10.0, 0.0, 120.0) +#ifdef deb + print*, 'KellyHoseVibrationRate=', data%Equipments%UnityOutputs%KellyHoseVibrationRate +#endif +end subroutine + +real(8) function GetKellyHoseVibrationRate() + implicit none + GetKellyHoseVibrationRate = data%Equipments%UnityOutputs%KellyHoseVibrationRate +end function + +subroutine Set_Pedal(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%Pedal = v +#ifdef deb + print*, 'Pedal=', v +#endif +end subroutine + +real(8) function GetPedal() + implicit none + GetPedal = data%Equipments%UnityOutputs%Pedal +end function + +subroutine Set_FlowRate(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%FlowRate = v +#ifdef deb + print*, 'FlowRate=', v +#endif +end subroutine + + +real(8) function GetFlowRate() + implicit none + GetFlowRate = data%Equipments%UnityOutputs%FlowRate +end function +subroutine Set_RotaryRpm(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%RotaryRpm = v +#ifdef deb + print*, 'RotaryRpm=', v +#endif +end subroutine + +real(8) function GetRotaryRpm() + implicit none + GetRotaryRpm = data%Equipments%UnityOutputs%RotaryRpm +end function + +end module UnityModule \ No newline at end of file diff --git a/CSharp/OperationScenarios/Unity/UnityModule.i90 b/CSharp/OperationScenarios/Unity/UnityModule.i90 new file mode 100644 index 0000000..0d0e92c --- /dev/null +++ b/CSharp/OperationScenarios/Unity/UnityModule.i90 @@ -0,0 +1,277 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Unity/UnityModule.f90" +module UnityModule + use SimulationVariables + implicit none +contains + subroutine UnityInputsFromJson(parent) + use json_module,IK =>json_ik + type(json_value),pointer :: parent + type(json_core) :: json + type(json_value),pointer :: p,pval + + call json%get(parent,'Unity',p) + + call json%get(p,'ElevatorConnectionPossible',pval) + call json%get(pval,data%Equipments%UnityInputs%ElevatorConnectionPossible) + call json%get(p,'JointConnectionPossible',pval) + call json%get(pval,data%Equipments%UnityInputs%JointConnectionPossible) + call json%get(p,'IsKellyBushingSetInTable',pval) + call json%get(pval,data%Equipments%UnityInputs%IsKellyBushingSetInTable) + call json%get(p,'ElevatorPickup',pval) + call json%get(pval,data%Equipments%UnityInputs%ElevatorPickup) + call json%get(p,'NearFloorPosition',pval) + call json%get(pval,data%Equipments%UnityInputs%NearFloorPosition) + call json%get(p,'SingleSetInMouseHole',pval) + call json%get(pval,data%Equipments%UnityInputs%SingleSetInMouseHole) + call json%get(p,'TdsConnectionPossible',pval) + call json%get(pval,data%Equipments%UnityInputs%TdsConnectionPossible) + call json%get(p,'TdsStemIn',pval) + call json%get(pval,data%Equipments%UnityInputs%TdsStemIn) + end subroutine + + subroutine UnityOutputsToJson(parent) + type(json_value),pointer :: parent + type(json_core) :: json + type(json_value),pointer :: p + +! 1. create new node + call json%create_object(p,'Unity') + +! 2. add member of data type to new node + call json%add(p,"KellyHoseVibrationRate",data%Equipments%UnityOutputs%KellyHoseVibrationRate) + call json%add(p,"BlowoutFromStringPercent",data%Equipments%UnityOutputs%BlowoutFromStringPercent) + call json%add(p,"Pedal",data%Equipments%UnityOutputs%Pedal) + call json%add(p,"FlowRate",data%Equipments%UnityOutputs%FlowRate) + call json%add(p,"RotaryRpm",data%Equipments%UnityOutputs%RotaryRpm) + call json%add(p,"BlowoutFromString",data%Equipments%UnityOutputs%BlowoutFromString) + call json%add(p,"BlowoutFromAnnular",data%Equipments%UnityOutputs%BlowoutFromAnnular) + call json%add(p,"FlowFromReturnLine",data%Equipments%UnityOutputs%FlowFromReturnLine) + call json%add(p,"FlowFromKelly",data%Equipments%UnityOutputs%FlowFromKelly) + call json%add(p,"FlowFromFillupHead",data%Equipments%UnityOutputs%FlowFromFillupHead) + call json%add(p,"FlowKellyDisconnect",data%Equipments%UnityOutputs%FlowKellyDisconnect) + call json%add(p,"FlowPipeDisconnect",data%Equipments%UnityOutputs%FlowPipeDisconnect) + +! 3. add new node to parent + call json%add(parent,p) +end subroutine + +logical function Get_ElevatorPickup() + Get_ElevatorPickup = data%Equipments%UnityInputs%ElevatorPickup +end function + +logical function Get_IsKellyBushingSetInTable() + Get_IsKellyBushingSetInTable = data%Equipments%UnityInputs%IsKellyBushingSetInTable +end function +logical function Get_JointConnectionPossible() + Get_JointConnectionPossible = data%Equipments%UnityInputs%JointConnectionPossible +end function +logical function Get_ElevatorConnectionPossible() + implicit none + Get_ElevatorConnectionPossible = data%Equipments%UnityInputs%ElevatorConnectionPossible +end function +logical function Get_NearFloorPosition() + Get_NearFloorPosition = data%Equipments%UnityInputs%NearFloorPosition +end function +subroutine Set_NearFloorPosition(v) + implicit none + logical, intent(in) :: v +! #ifdef ExcludeExtraChanges +! if(data%Equipments%UnityInputs%NearFloorPosition == v) return +! #endif + data%Equipments%UnityInputs%NearFloorPosition = v +!**call data%Equipments%UnityInputs%OnNearFloorPositionChange%RunAll() + if(logging>4) then + print*, 'NearFloorPosition =', data%Equipments%UnityInputs%NearFloorPosition + endif +end subroutine + +logical function Get_SingleSetInMouseHole() + Get_SingleSetInMouseHole = data%Equipments%UnityInputs%SingleSetInMouseHole +end function + +logical function Get_TdsConnectionPossible() + Get_TdsConnectionPossible = data%Equipments%UnityInputs%TdsConnectionPossible +end function + +logical function Get_TdsStemIn() + Get_TdsStemIn = data%Equipments%UnityInputs%TdsStemIn +end function + +subroutine Set_BlowoutFromString(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%BlowoutFromString = v +# 105 + +end subroutine + +logical function Get_BlowoutFromString() + implicit none + Get_BlowoutFromString = data%Equipments%UnityOutputs%BlowoutFromString +end function + +subroutine Set_BlowoutFromAnnular(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%BlowoutFromAnnular = v +# 119 + +end subroutine + +logical function Get_BlowoutFromAnnular() + implicit none + Get_BlowoutFromAnnular = data%Equipments%UnityOutputs%BlowoutFromAnnular +end function + + + + + +subroutine Set_FlowFromReturnLine(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%FlowFromReturnLine = v +# 137 + +end subroutine + +logical function Get_FlowFromReturnLine() + implicit none + Get_FlowFromReturnLine = data%Equipments%UnityOutputs%FlowFromReturnLine +end function + + + +subroutine Set_FlowFromKelly(v) + implicit none + real, intent (in) :: v + data%Equipments%UnityOutputs%FlowFromKelly = v +# 153 + +end subroutine + +real function Get_FlowFromKelly() + implicit none + Get_FlowFromKelly = data%Equipments%UnityOutputs%FlowFromKelly +end function + + + + + +subroutine Set_FlowFromFillupHead(v) + implicit none + real, intent (in) :: v + data%Equipments%UnityOutputs%FlowFromFillupHead = v +# 171 + +end subroutine + +real function Get_FlowFromFillupHead() + implicit none + Get_FlowFromFillupHead = data%Equipments%UnityOutputs%FlowFromFillupHead +end function + + + + + + +subroutine Set_FlowKellyDisconnect(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%FlowKellyDisconnect = v +# 190 + +end subroutine + +logical function Get_FlowKellyDisconnect() + implicit none + Get_FlowKellyDisconnect = data%Equipments%UnityOutputs%FlowKellyDisconnect +end function + + + + +subroutine Set_FlowPipeDisconnect(v) + implicit none + logical, intent (in) :: v + data%Equipments%UnityOutputs%FlowPipeDisconnect = v +# 207 + +end subroutine + +logical function Get_FlowPipeDisconnect() + implicit none + Get_FlowPipeDisconnect = data%Equipments%UnityOutputs%FlowPipeDisconnect +end function + +subroutine Set_BlowoutFromStringPercent(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%BlowoutFromStringPercent = v +# 221 + +end subroutine + +real(8) function GetBlowoutFromStringPercent() + implicit none + GetBlowoutFromStringPercent = data%Equipments%UnityOutputs%BlowoutFromStringPercent +end function + +subroutine Calc_KellyHoseVibrationRate(spm1, spm2) + use CScaleRange + implicit none + real(8), intent (in) :: spm1, spm2 + real :: total + total = (spm1 + spm2)/2 + data%Equipments%UnityOutputs%KellyHoseVibrationRate = ScaleRange(total, 0.0, 10.0, 0.0, 120.0) +# 238 + +end subroutine + +real(8) function GetKellyHoseVibrationRate() + implicit none + GetKellyHoseVibrationRate = data%Equipments%UnityOutputs%KellyHoseVibrationRate +end function + +subroutine Set_Pedal(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%Pedal = v +# 252 + +end subroutine + +real(8) function GetPedal() + implicit none + GetPedal = data%Equipments%UnityOutputs%Pedal +end function + +subroutine Set_FlowRate(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%FlowRate = v +# 266 + +end subroutine + + +real(8) function GetFlowRate() + implicit none + GetFlowRate = data%Equipments%UnityOutputs%FlowRate +end function +subroutine Set_RotaryRpm(v) + implicit none + real(8), intent (in) :: v + data%Equipments%UnityOutputs%RotaryRpm = v +# 280 + +end subroutine + +real(8) function GetRotaryRpm() + implicit none + GetRotaryRpm = data%Equipments%UnityOutputs%RotaryRpm +end function + +end module UnityModule diff --git a/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90 b/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90 index 13f4a6e..660e82c 100644 --- a/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90 +++ b/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90 @@ -1,5 +1,6 @@ module CTdsSpineEnum use OperationScenariosModule + use UnityModule use UnitySignalsModule !for CTdsConnectionModesEnum, only:Get_TdsConnectionModes implicit none contains diff --git a/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.i90 b/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.i90 index 8c9e85c..275235f 100644 --- a/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.i90 +++ b/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.i90 @@ -1,6 +1,7 @@ # 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90" module CTdsSpineEnum use OperationScenariosModule + use UnityModule use UnitySignalsModule !for CTdsConnectionModesEnum, only:Get_TdsConnectionModes implicit none contains @@ -9,7 +10,7 @@ module CTdsSpineEnum implicit none if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then -# 13 +# 14 !TOPDRIVE-CODE=83 @@ -47,7 +48,7 @@ module CTdsSpineEnum if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then -# 52 +# 53 endif diff --git a/CSharp/OperationScenarios/UnitySignals/UnitySignals.f90 b/CSharp/OperationScenarios/UnitySignals/UnitySignals.f90 index 286f239..0e00620 100644 --- a/CSharp/OperationScenarios/UnitySignals/UnitySignals.f90 +++ b/CSharp/OperationScenarios/UnitySignals/UnitySignals.f90 @@ -433,6 +433,7 @@ end function subroutine Evaluate_TdsConnectionModes() use CUnityInputs use SimulationVariables + use UnityModule implicit none if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then diff --git a/CSharp/OperationScenarios/UnitySignals/UnitySignals.i90 b/CSharp/OperationScenarios/UnitySignals/UnitySignals.i90 index 6754e4d..8ecf474 100644 --- a/CSharp/OperationScenarios/UnitySignals/UnitySignals.i90 +++ b/CSharp/OperationScenarios/UnitySignals/UnitySignals.i90 @@ -423,6 +423,7 @@ end function subroutine Evaluate_TdsConnectionModes() use CUnityInputs use SimulationVariables + use UnityModule implicit none if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then diff --git a/CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.i90 b/CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.i90 new file mode 100644 index 0000000..538b205 --- /dev/null +++ b/CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.i90 @@ -0,0 +1,143 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90" +module UnitySignalVariables +! use CVoidEventHandlerCollection +! use CIntegerEventHandlerCollection + + type:: UnitySignalsType + integer :: MudBucket = 0 + integer :: Elevator = 0 + integer :: FillupHead = 0 + integer :: Ibop = 0 + integer :: Kelly = 0 + integer :: MouseHole = 0 + integer :: OperationCondition = 0 + integer :: SafetyValve = 0 + integer :: operation = 0 + integer :: Slips = 0 + integer :: Slips_S = 0 + integer :: Swing = 0 + integer :: Swing_S = 0 + integer :: TdsBackupClamp = 0 + integer :: TdsSpine = 0 + integer :: TdsSwing = 0 + integer :: TdsTong = 0 + integer :: Tong = 0 + integer :: Tong_S = 0 + integer :: TdsConnectionModes = 0 + integer :: TdsElevatorModes = 0 + + end type UnitySignalsType + + enum, bind(c) + enumerator TONG_NEUTRAL + enumerator TONG_BREAKOUT_BEGIN + enumerator TONG_BREAKOUT_END + enumerator TONG_MAKEUP_BEGIN + enumerator TONG_MAKEUP_END + + enumerator TDS_SWING_NEUTRAL + enumerator TDS_SWING_OFF_BEGIN + enumerator TDS_SWING_OFF_END + enumerator TDS_SWING_DRILL_BEGIN + enumerator TDS_SWING_DRILL_END + enumerator TDS_SWING_TILT_BEGIN + enumerator TDS_SWING_TILT_END + + enumerator TDS_SPINE_NEUTRAL + enumerator TDS_SPINE_CONNECT_BEGIN + enumerator TDS_SPINE_CONNECT_END + enumerator TDS_SPINE_DISCONNECT_BEGIN + enumerator TDS_SPINE_DISCONNECT_END + + enumerator BACKUP_CLAMP_OFF_END + enumerator BACKUP_CLAMP_OFF_BEGIN + enumerator BACKUP_CLAMP_FW_BEGIN + enumerator BACKUP_CLAMP_FW_END + + enumerator SWING_NEUTRAL + enumerator SWING_MOUSE_HOLE_BEGIN + enumerator SWING_MOUSE_HOLE_END + enumerator SWING_RAT_HOLE_BEGIN + enumerator SWING_RAT_HOLE_END + enumerator SWING_WELL_BEGIN + enumerator SWING_WELL_END + end enum + enum, bind(c) + enumerator TDS_TONG_BREAKOUT_END + enumerator TDS_TONG_BREAKOUT_BEGIN + enumerator TDS_TONG_MAKEUP_BEGIN + enumerator TDS_TONG_MAKEUP_END + + enumerator SAFETY_VALVE_NEUTRAL + enumerator SAFETY_VALVE_REMOVE + enumerator SAFETY_VALVE_INSTALL + + end enum + enum, bind(c) + enumerator OPERATION_DRILL + enumerator OPERATION_TRIP + end enum + enum, bind(c) + enumerator SLIPS_NEUTRAL + enumerator SLIPS_SET_BEGIN + enumerator SLIPS_SET_END + enumerator SLIPS_UNSET_BEGIN + enumerator SLIPS_UNSET_END + + enumerator MOUSE_HOLE_NEUTRAL + enumerator MOUSE_HOLE_FILL + enumerator MOUSE_HOLE_EMPTY + + enumerator KELLY_NEUTRAL + enumerator KELLY_INSTALL + enumerator KELLY_REMOVE + +!enumerator FILLUP_HEAD_NEUTRAL + enumerator FILLUP_HEAD_REMOVE + enumerator FILLUP_HEAD_INSTALL + + enumerator ELEVATOR_NEUTRAL + + enumerator ELEVATOR_LATCH_STRING_BEGIN + enumerator ELEVATOR_LATCH_STRING_END + + enumerator ELEVATOR_UNLATCH_STRING_BEGIN + enumerator ELEVATOR_UNLATCH_STRING_END + + enumerator ELEVATOR_LATCH_STAND_BEGIN + enumerator ELEVATOR_LATCH_STAND_END + + enumerator ELEVATOR_UNLATCH_STAND_BEGIN + enumerator ELEVATOR_UNLATCH_STAND_END + + enumerator ELEVATOR_LATCH_SINGLE_BEGIN + enumerator ELEVATOR_LATCH_SINGLE_END + + enumerator ELEVATOR_UNLATCH_SINGLE_BEGIN + enumerator ELEVATOR_UNLATCH_SINGLE_END + +!enumerator MUD_BUCKET_NEUTRAL + enumerator MUD_BUCKET_REMOVE + enumerator MUD_BUCKET_INSTALL + +!enumerator IBOP_NEUTRAL + enumerator IBOP_REMOVE + enumerator IBOP_INSTALL + + enumerator TDS_CONNECTION_NOTHING + enumerator TDS_CONNECTION_STRING + enumerator TDS_CONNECTION_SPINE + + enumerator TDS_ELEVATOR_CONNECTION_NOTHING + enumerator TDS_ELEVATOR_CONNECTION_STRING + enumerator TDS_ELEVATOR_CONNECTION_SINGLE + enumerator TDS_ELEVATOR_CONNECTION_STAND + enumerator TDS_ELEVATOR_LATCH_STRING + enumerator TDS_ELEVATOR_LATCH_SINGLE + enumerator TDS_ELEVATOR_LATCH_STAND + end enum + + contains + + +end module UnitySignalVariables diff --git a/Common/DynamicLogicalArray.i90 b/Common/DynamicLogicalArray.i90 new file mode 100644 index 0000000..bbd43cc --- /dev/null +++ b/Common/DynamicLogicalArray.i90 @@ -0,0 +1,159 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/DynamicLogicalArray.f90" +module DynamicLogicalArray + implicit none + public + + type, public :: DynamicLogicalArrayType + logical, allocatable :: Array(:) + contains + procedure :: First => First + procedure :: Last => Last + procedure :: Length => Length + procedure :: Add => Add + procedure :: AddToFirst => AddToFirst + procedure :: AddTo => AddTo + procedure :: Remove => Remove + procedure :: Empty => Empty + end type DynamicLogicalArrayType + private::First,Last,Length + + contains + + + logical function First(this) + implicit none + class(DynamicLogicalArrayType), intent(in) :: this + if(allocated(this%Array) .and. size(this%Array) > 0) then + First = this%Array(1) + return + end if + First = 0 + end function + + logical function Last(this) + implicit none + class(DynamicLogicalArrayType), intent(in) :: this + if(allocated(this%Array) .and. size(this%Array) > 0) then + Last = this%Array(size(this%Array)) + return + end if + Last = 0 + end function + + integer function Length(this) + implicit none + class(DynamicLogicalArrayType), intent(in) :: this + if(allocated(this%Array)) then + Length = size(this%Array) + return + end if + Length = 0 + end function + + + subroutine AddToFirst(this, value) + implicit none + class(DynamicLogicalArrayType), intent(inout) :: this + logical, allocatable :: tempArr(:) + logical, intent(in) :: value + integer :: i, isize + + if(allocated(this%Array)) then + isize = size(this%Array) + allocate(tempArr(isize+1)) + tempArr(1) = value + do i=2,isize+1 + tempArr(i) = this%Array(i-1) + end do + deallocate(this%Array) + call move_alloc(tempArr, this%Array) + else + allocate(this%Array(1)) + this%Array(1) = value + end if + + end subroutine + + subroutine AddTo(this, index, value) + implicit none + class(DynamicLogicalArrayType), intent(inout) :: this + logical, allocatable :: tempArr(:) + integer, intent(in) :: index + logical, intent(in) :: value + integer :: i, isize + if(index <= 0) return + if(index > size(this%Array)) then + call this%Add(value) + return + endif + if(allocated(this%Array)) then + isize = size(this%Array) + allocate(tempArr(isize+1)) + tempArr(:index-1) = this%Array(:index-1) + tempArr(index) = value + tempArr(index+1:) = this%Array(index:) + deallocate(this%Array) + call move_alloc(tempArr, this%Array) + end if + end subroutine + + subroutine Add(this, value) + implicit none + class(DynamicLogicalArrayType), intent(inout) :: this + logical, allocatable :: tempArr(:) + logical, intent(in) :: value + integer :: i, isize + + if(allocated(this%Array)) then + isize = size(this%Array) + allocate(tempArr(isize+1)) + do i=1,isize + tempArr(i) = this%Array(i) + end do + tempArr(isize+1) = value + deallocate(this%Array) + call move_alloc(tempArr, this%Array) + else + allocate(this%Array(1)) + this%Array(1) = value + end if + + end subroutine + + + subroutine Empty(this) + implicit none + class(DynamicLogicalArrayType), intent(inout) :: this + if(allocated(this%Array)) deallocate(this%Array) + end subroutine + + + subroutine Remove(this, index) + implicit none + class(DynamicLogicalArrayType), intent(inout) :: this + integer, intent(in) :: index + logical, allocatable :: tempArr(:) + integer :: i + logical :: found + + if(index <= 0 .or. index > size(this%Array)) return + if(.not.allocated(this%Array))return + allocate(tempArr(size(this%Array)-1)) + found = .false. + do i=1, size(this%Array) + if(i==index) then + found = .true. + cycle + end if + if(found) then + tempArr(i-1) = this%Array(i) + else + tempArr(i) = this%Array(i) + endif + end do + deallocate(this%Array) + call move_alloc(tempArr, this%Array) + end subroutine + + +end module DynamicLogicalArray diff --git a/Equipments/BopStack/LOSS_INPUTS.f90 b/Equipments/BopStack/LOSS_INPUTS.f90 index b16f3d7..21566ea 100644 --- a/Equipments/BopStack/LOSS_INPUTS.f90 +++ b/Equipments/BopStack/LOSS_INPUTS.f90 @@ -1,5 +1,6 @@ SUBROUTINE DEALLOCATE_ARRAYS() use SimulationVariables +use UnityModule implicit none !=========================================================================== ! RAMLINE MINOR LOSSES INPUT @@ -553,7 +554,7 @@ data%State%Pumps%DELTAV_AIR=data%State%Pumps%QAIR*data%State%RamLine%DeltaT_BOP/ USE CEquipmentsConstants ! use CSimulationVariables use SimulationVariables !@ - use CUnityOutputs + use UnityModule implicit none integer ramtype, I real H_RAMBOP diff --git a/Equipments/BopStack/LOSS_INPUTS.i90 b/Equipments/BopStack/LOSS_INPUTS.i90 index d98449f..05fc3da 100644 --- a/Equipments/BopStack/LOSS_INPUTS.i90 +++ b/Equipments/BopStack/LOSS_INPUTS.i90 @@ -1,6 +1,7 @@ # 1 "/mnt/c/Projects/VSIM/SimulationCore2/Equipments/BopStack/LOSS_INPUTS.f90" SUBROUTINE DEALLOCATE_ARRAYS() use SimulationVariables +use UnityModule implicit none !=========================================================================== ! RAMLINE MINOR LOSSES INPUT @@ -554,7 +555,7 @@ data%State%Pumps%DELTAV_AIR=data%State%Pumps%QAIR*data%State%RamLine%DeltaT_BOP/ USE CEquipmentsConstants ! use CSimulationVariables use SimulationVariables !@ - use CUnityOutputs + use UnityModule implicit none integer ramtype, I real H_RAMBOP diff --git a/Equipments/MudSystem/Circulation_Code_Select.f90 b/Equipments/MudSystem/Circulation_Code_Select.f90 index 8911bfb..d3d3e0c 100644 --- a/Equipments/MudSystem/Circulation_Code_Select.f90 +++ b/Equipments/MudSystem/Circulation_Code_Select.f90 @@ -1,15 +1,13 @@ subroutine CirculationCodeSelect ! is called in subroutine Fluid_Flow_Solver - use KickVARIABLESModule USE MudSystemVARIABLES -use SimulationVariables !@@@ + use SimulationVariables !@@@ USE TD_DrillStemComponents - Use CUnityInputs - Use CUnityOutputs use OperationScenariosModule use UTUBEVARSModule use sROP_Variables use PressureDisplayVARIABLESModule + use UnityModule diff --git a/Equipments/MudSystem/Circulation_Code_Select.i90 b/Equipments/MudSystem/Circulation_Code_Select.i90 new file mode 100644 index 0000000..5c94164 --- /dev/null +++ b/Equipments/MudSystem/Circulation_Code_Select.i90 @@ -0,0 +1,147 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Equipments/MudSystem/Circulation_Code_Select.f90" +subroutine CirculationCodeSelect ! is called in subroutine Fluid_Flow_Solver + use KickVARIABLESModule + USE MudSystemVARIABLES + use SimulationVariables !@@@ + USE TD_DrillStemComponents + use OperationScenariosModule + use UTUBEVARSModule + use sROP_Variables + use PressureDisplayVARIABLESModule + use UnityModule + + + + implicit none + + + Integer i,KickNumber + +!NewInfluxNumber = NoGasPocket + + data%State%MudSystem%Flow_timeCounter= data%State%MudSystem%Flow_timeCounter+1 + +!if (ChokePanelStrokeResetSwitch == 1) then +! Flow_timeCounter= 0 +!endif + + +!write(*,*) 'Flow_timeCounter' , Flow_timeCounter + +!===========================Shoe Lost=============================== + + call ShoeLostSub + +!=================================================================== + + + data%State%MudSystem%iLoc= 1 ! will be changed in KickFlux and Migration or Pump and TripIn (save OP Mud data) +!KickMigration_2SideBit= .false. + Call Set_FlowPipeDisconnect(.false.) + Call Set_FlowKellyDisconnect(.false.) + + call ElementsCreation + + + + + if (data%State%MUD(8)%Q > 0.0) call FillingWell_By_BellNipple ! Filling Well Through BellNipple ( Path j11 ) +!if (data%State%MUD(10)%Q > 0.0) call FillingWell_By_Pumps ! Filling Well Through Pumps ( Path j19 ) + +!write(*,*) 'TD_RemoveVolume,Get_JointConnectionPossible=' , TD_RemoveVolume,Get_JointConnectionPossible() + + if (data%State%TD_Vol%RemoveVolume > 0.) call DisconnectingPipe !! .and. Get_JointConnectionPossible() == .false.) call DisconnectingPipe + + + IF (KickVARIABLES%KickFlux .AND. NOT(KickVARIABLES%KickOffBottom)) THEN + call Kick_Influx + endif + + + + + IF ( data%State%MudSystem%NewInfluxNumber > 0 ) THEN + call Kick_Migration + endif + +! ============================ must be after migration ============================== + + DO KickNumber= data%State%MudSystem%NewInfluxNumber-KickVARIABLES%NoGasPocket+1 , data%State%MudSystem%NewInfluxNumber +! FINDING NEW KICK LOCATIONS: + data%State%MudSystem%Ann_KickLoc= 0 + data%State%MudSystem%Op_KickLoc= 0 + data%State%MudSystem%ChokeLine_KickLoc= 0 + + do i = 1, data%State%MudSystem%Ann_MudOrKick%Length () + if (data%State%MudSystem%Ann_MudOrKick%Array(i) == KickNumber) then + data%State%MudSystem%Ann_KickLoc = i + exit + endif + end do + + do i = 1, data%State%MudSystem%Op_MudOrKick%Length () + if (data%State%MudSystem%Op_MudOrKick%Array(i) == KickNumber) then + data%State%MudSystem%Op_KickLoc = i + exit + endif + end do + + do i = 1, data%State%MudSystem%ChokeLine_MudOrKick%Length () + if (data%State%MudSystem%ChokeLine_MudOrKick%Array(i) == KickNumber) then + data%State%MudSystem%ChokeLine_KickLoc = i + exit + endif + end do + +! ============================ must be after migration-end =========================== + + IF (ALLOCATED(GasPocketWeight%Array) .and. KickNumber == data%State%MudSystem%NewInfluxNumber .AND. NOT(KickVARIABLES%KickOffBottom) .AND. data%State%MudSystem%WellHeadIsOpen) THEN + + cycle + + ELSE IF (ALLOCATED(GasPocketWeight%Array)) THEN + + if (((GasPocketDeltaVol%Array(data%State%MudSystem%NewInfluxNumber - KickNumber + 1) > 0.0 .AND. data%State%MudSystem%WellHeadIsOpen) .or. data%State%MudSystem%Kickexpansion_DueToMudLost) ) call Kick_Expansion + + if ((GasPocketDeltaVol%Array(data%State%MudSystem%NewInfluxNumber - KickNumber + 1) < 0.0 ) .OR. data%State%MudSystem%WellHeadIsOpen == .FALSE.) CALL Kick_Contraction + + ENDIF + ENDDO + data%State%MudSystem%KickNumber = KickNumber + data%State%MudSystem%LostInTripOutIsDone= .false. + + if( data%State%MudSystem%DeltaVolumeOp >= 0.0 .and. Get_KellyConnection()==KELLY_CONNECTION_STRING) then +!write(*,*) 'DeltaVolumeOp=' , DeltaVolumeOp + call Pump_and_TripIn + elseif (data%State%MudSystem%DeltaVolumeOp < 0.0) then +! when we have Utube and tripping out simultaneously, it uses "TripOut_and_Pump" subroutine, and then Utube code is done +! "Utube" and "Pump_and_TripIn" subroutines, not to be used simultaneously because "Utube" code supports trip in + call TripOut_and_Pump + endif + + data%State%MudSystem%WellOutletDensity= data%State%MudSystem%Ann_Density%Last() ! (ppg) used in MudSystem + + + + if (data%State%MUD(4)%Q > 0.) then ! ( j4 > 0 ) ! THIS CIRCULATION CODE IS JUST FOR LINE J4, AND NOT NEEDED FOR LINE J18 + call ChokeLineMud + endif + + + call Choke_GasSound + +!WRITE(*,*) 'CIRCU-Ann_Saved_MudDischarged_Volume' , Ann_Saved_MudDischarged_Volume + +!****Utube is called in Plot Subroutine**** + + Call Instructor_CirculationMud_Edit + + + + call PlotFinalMudElements + + data%State%MudSystem%MudChecked= .true. + data%State%MudSystem%UtubePossibility= .true. +!WRITE(*,*) '***********************************************************************' + +end subroutine CirculationCodeSelect diff --git a/Equipments/MudSystem/Disconnecting_Pipe.f90 b/Equipments/MudSystem/Disconnecting_Pipe.f90 index 5baf6fe..bcef0a5 100644 --- a/Equipments/MudSystem/Disconnecting_Pipe.f90 +++ b/Equipments/MudSystem/Disconnecting_Pipe.f90 @@ -3,9 +3,7 @@ subroutine DisconnectingPipe ! is called in subroutine CirculationCodeSelect Use GeoElements_FluidModule USE CMudPropertiesVariables USE MudSystemVARIABLES -use SimulationVariables !@@@ use SimulationVariables - use SimulationVariables !@ ! !use CTanks !@use ConfigurationVariables, TripTankVolume2 => data%Equipments%DrillingWatch%TripTankVolume, TripTankDensity2 => TripTankDensity USE sROP_Other_Variables @@ -13,7 +11,7 @@ use SimulationVariables !@@@ use KickVARIABLESModule USE TD_DrillStemComponents use OperationScenariosModule - Use CUnityOutputs + Use UnityModule USE CManifolds implicit none diff --git a/Equipments/MudSystem/Disconnecting_Pipe.i90 b/Equipments/MudSystem/Disconnecting_Pipe.i90 index 247886b..1bb06de 100644 --- a/Equipments/MudSystem/Disconnecting_Pipe.i90 +++ b/Equipments/MudSystem/Disconnecting_Pipe.i90 @@ -4,9 +4,7 @@ subroutine DisconnectingPipe ! is called in subroutine CirculationCodeSelect Use GeoElements_FluidModule USE CMudPropertiesVariables USE MudSystemVARIABLES -use SimulationVariables !@@@ use SimulationVariables - use SimulationVariables !@ ! !use CTanks !@use ConfigurationVariables, TripTankVolume2 => data%Equipments%DrillingWatch%TripTankVolume, TripTankDensity2 => TripTankDensity USE sROP_Other_Variables @@ -14,7 +12,7 @@ use SimulationVariables !@@@ use KickVARIABLESModule USE TD_DrillStemComponents use OperationScenariosModule - Use CUnityOutputs + Use UnityModule USE CManifolds implicit none diff --git a/Equipments/MudSystem/MudSystem.f90 b/Equipments/MudSystem/MudSystem.f90 index 6167e04..0b09f36 100644 --- a/Equipments/MudSystem/MudSystem.f90 +++ b/Equipments/MudSystem/MudSystem.f90 @@ -1,7 +1,6 @@ module MudSystemModule USE MudSystemVARIABLES -use SimulationVariables !@@@ use PressureDisplayVARIABLESModule USE FricPressDropVarsModule USE Fluid_Flow_Startup_Vars @@ -9,7 +8,6 @@ use SimulationVariables !@@@ USE CManifolds use CPumpsVariables use CPumps - USE CUnityOutputs use CWarnings use DynamicIntegerArray,only: DynamicIntegerArrayType use CError @@ -18,6 +16,7 @@ use SimulationVariables !@@@ use SimulationVariables use CStudentStationVariables !, PitGainLossReset=>PitGainLossZero use MudPropertiesModule + use UnityModule implicit none diff --git a/Equipments/MudSystem/MudSystem.i90 b/Equipments/MudSystem/MudSystem.i90 index 8d1ef2d..3de8fc2 100644 --- a/Equipments/MudSystem/MudSystem.i90 +++ b/Equipments/MudSystem/MudSystem.i90 @@ -2,7 +2,6 @@ module MudSystemModule USE MudSystemVARIABLES -use SimulationVariables !@@@ use PressureDisplayVARIABLESModule USE FricPressDropVarsModule USE Fluid_Flow_Startup_Vars @@ -10,7 +9,6 @@ use SimulationVariables !@@@ USE CManifolds use CPumpsVariables use CPumps - USE CUnityOutputs use CWarnings use DynamicIntegerArray,only: DynamicIntegerArrayType use CError @@ -19,6 +17,7 @@ use SimulationVariables !@@@ use SimulationVariables use CStudentStationVariables !, PitGainLossReset=>PitGainLossZero use MudPropertiesModule + use UnityModule implicit none diff --git a/Equipments/MudSystem/MudSystemStartup.f90 b/Equipments/MudSystem/MudSystemStartup.f90 index 71d61dd..f67d479 100644 --- a/Equipments/MudSystem/MudSystemStartup.f90 +++ b/Equipments/MudSystem/MudSystemStartup.f90 @@ -1,13 +1,12 @@ SUBROUTINE NormalCirculation_StartUp() ! is called in module FluidFlowMain USE MudSystemVARIABLES -use SimulationVariables !@@@ use CTanks use SimulationVariables USE CMudPropertiesVariables Use GeoElements_FluidModule use KickVARIABLESModule - Use CUnityOutputs + Use UnityModule Use CShoeVariables use SimulationVariables diff --git a/Equipments/MudSystem/MudSystemStartup.i90 b/Equipments/MudSystem/MudSystemStartup.i90 index 5e70b8d..382ebe7 100644 --- a/Equipments/MudSystem/MudSystemStartup.i90 +++ b/Equipments/MudSystem/MudSystemStartup.i90 @@ -2,13 +2,12 @@ SUBROUTINE NormalCirculation_StartUp() ! is called in module FluidFlowMain USE MudSystemVARIABLES -use SimulationVariables !@@@ use CTanks use SimulationVariables USE CMudPropertiesVariables Use GeoElements_FluidModule use KickVARIABLESModule - Use CUnityOutputs + Use UnityModule Use CShoeVariables use SimulationVariables diff --git a/Equipments/RotaryTable/RTable_INPUTS.f90 b/Equipments/RotaryTable/RTable_INPUTS.f90 index f2972fc..d0abaa5 100644 --- a/Equipments/RotaryTable/RTable_INPUTS.f90 +++ b/Equipments/RotaryTable/RTable_INPUTS.f90 @@ -2,15 +2,12 @@ subroutine RTable_INPUTS use CDrillingConsoleVariables use SimulationVariables - use SimulationVariables ! use CSimulationVariables use UnitySignalsModule ! use CTdsElevatorModesEnumVariables use CHoistingVariables - use SimulationVariables - use SimulationVariables !@ use TD_DrillStemComponents - use CUnityInputs + use UnityModule use CWarnings use UnitySignalVariables use UnitySignalsModule diff --git a/Equipments/RotaryTable/RTable_Inputs.i90 b/Equipments/RotaryTable/RTable_Inputs.i90 index 99c41db..8372744 100644 --- a/Equipments/RotaryTable/RTable_Inputs.i90 +++ b/Equipments/RotaryTable/RTable_Inputs.i90 @@ -3,15 +3,12 @@ subroutine RTable_INPUTS use CDrillingConsoleVariables use SimulationVariables - use SimulationVariables ! use CSimulationVariables use UnitySignalsModule ! use CTdsElevatorModesEnumVariables use CHoistingVariables - use SimulationVariables - use SimulationVariables !@ use TD_DrillStemComponents - use CUnityInputs + use UnityModule use CWarnings use UnitySignalVariables use UnitySignalsModule diff --git a/Makefile b/Makefile index 0be1c8e..cf1a3a6 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,8 @@ VPATH = \ TorqueDrag/TD_Forces/TD_ViscousDragForce \ TorqueDrag/TD_Modules \ TorqueDrag/TD_StartUp \ - Redis + Redis \ + . FC = ifort TOP_DIR = . @@ -263,6 +264,7 @@ SRCS_F =\ Equipments/TopDrive/TopDrive_Outputs.f90 \ Equipments/Drawworks/DWFixModeMotion.f90 \ CSharp/Equipments/ControlPanels/CBopControlPanel.f90 \ + CSharp/OperationScenarios/Unity/UnityModule.f90 \ CSharp/OperationScenarios/UnitySignals/UnitySignals.f90 \ CSharp/BasicInputs/RigSpecifications/CPumps.f90 \ CSharp/Equipments/ControlPanels/CChokeManifold.f90 \ @@ -377,9 +379,7 @@ SRCS_F =\ TorqueDrag/TD_MainCalculations.f90 \ FluidFlow/Well_Pressure_Data_Transfer.f90 \ Equipments/MudSystem/Plot_Final_Mud_Elements.f90 \ - FluidFlow/Fluid_Flow_Solver.f90\ - # SimulationCore2.f90 \ - + FluidFlow/Fluid_Flow_Solver.f90 OBJS_T1 = $(patsubst %.f90,%.o,$(SRCS_F)) diff --git a/Redis/Redis_Interface.f90 b/Redis/Redis_Interface.f90 index 6cba7dc..6f4aa9f 100644 --- a/Redis/Redis_Interface.f90 +++ b/Redis/Redis_Interface.f90 @@ -33,31 +33,30 @@ Module RedisInterface contains - SUBROUTINE initConnection(configFilename,status) - use json_module + SUBROUTINE initConnection(address,port,password, datakey,status) use iso_c_binding, only: c_null_char,c_char - character(len=*) :: configFilename + ! use json_module + character(len=*) :: password,address,datakey integer::port,status - type(json_file) :: jsonfile - type(json_value),pointer :: jsonvalue,jsonvalue2 - type(json_core) :: jsoncore - character(len=:),allocatable :: password,address,datakey character(len=:),allocatable::c_address,c_password,c_datakey + ! type(json_file) :: jsonfile + ! type(json_value),pointer :: jsonvalue,jsonvalue2 + ! type(json_core) :: jsoncore - call jsonfile%initialize() - print *,"Initilized: simulation with ",configFilename - call jsonfile%load_file(configFilename); - if (jsonfile%failed()) then - print *,"can not open config file: ",configFilename ; - stop - endif - ! print *,"file read" - call jsonfile%json_file_get_root(jsonvalue) - call jsoncore%get(jsonvalue,'redis',jsonvalue2) - call jsoncore%get(jsonvalue2,"address",address); - call jsoncore%get(jsonvalue2,"port",port); - call jsoncore%get(jsonvalue2,"password",password); - call jsoncore%get(jsonvalue2,"datakey",datakey); + ! call jsonfile%initialize() + ! print *,"Initilized: simulation with ",configFilename + ! call jsonfile%load_file(configFilename); + ! if (jsonfile%failed()) then + ! print *,"can not open config file: ",configFilename ; + ! stop + ! endif + ! ! print *,"file read" + ! call jsonfile%json_file_get_root(jsonvalue) + ! call jsoncore%get(jsonvalue,'redis',jsonvalue2) + ! call jsoncore%get(jsonvalue2,"address",address); + ! call jsoncore%get(jsonvalue2,"port",port); + ! call jsoncore%get(jsonvalue2,"password",password); + ! call jsoncore%get(jsonvalue2,"datakey",datakey); c_datakey = datakey//c_null_char c_password = password//c_null_char diff --git a/Redis/Redis_Interface.i90 b/Redis/Redis_Interface.i90 index b207fe3..81a27b0 100644 --- a/Redis/Redis_Interface.i90 +++ b/Redis/Redis_Interface.i90 @@ -34,31 +34,30 @@ Module RedisInterface contains - SUBROUTINE initConnection(configFilename,status) - use json_module + SUBROUTINE initConnection(address,port,password, datakey,status) use iso_c_binding, only: c_null_char,c_char - character(len=*) :: configFilename +! use json_module + character(len=*) :: password,address,datakey integer::port,status - type(json_file) :: jsonfile - type(json_value),pointer :: jsonvalue,jsonvalue2 - type(json_core) :: jsoncore - character(len=:),allocatable :: password,address,datakey character(len=:),allocatable::c_address,c_password,c_datakey +! type(json_file) :: jsonfile +! type(json_value),pointer :: jsonvalue,jsonvalue2 +! type(json_core) :: jsoncore - call jsonfile%initialize() - print *,"Initilized: simulation with ",configFilename - call jsonfile%load_file(configFilename); - if (jsonfile%failed()) then - print *,"can not open config file: ",configFilename ; - stop - endif -! print *,"file read" - call jsonfile%json_file_get_root(jsonvalue) - call jsoncore%get(jsonvalue,'redis',jsonvalue2) - call jsoncore%get(jsonvalue2,"address",address); - call jsoncore%get(jsonvalue2,"port",port); - call jsoncore%get(jsonvalue2,"password",password); - call jsoncore%get(jsonvalue2,"datakey",datakey); +! call jsonfile%initialize() +! print *,"Initilized: simulation with ",configFilename +! call jsonfile%load_file(configFilename); +! if (jsonfile%failed()) then +! print *,"can not open config file: ",configFilename ; +! stop +! endif +! ! print *,"file read" +! call jsonfile%json_file_get_root(jsonvalue) +! call jsoncore%get(jsonvalue,'redis',jsonvalue2) +! call jsoncore%get(jsonvalue2,"address",address); +! call jsoncore%get(jsonvalue2,"port",port); +! call jsoncore%get(jsonvalue2,"password",password); +! call jsoncore%get(jsonvalue2,"datakey",datakey); c_datakey = datakey//c_null_char c_password = password//c_null_char diff --git a/Simulation/SimulationVariables.f90 b/Simulation/SimulationVariables.f90 index 7d907f2..fff4f9f 100644 --- a/Simulation/SimulationVariables.f90 +++ b/Simulation/SimulationVariables.f90 @@ -2,6 +2,8 @@ module SimulationVariables use Constants use json_module + use CUnityInputs + use CUnityOutputs use COperationScenariosVariables use CStringConfigurationVariables use CFormationVariables @@ -86,6 +88,7 @@ module SimulationVariables Type(PathGenerationType)::Path ! Type(WellSurveyDataType)::WellSurveyData Type(MudPropertiesType)::Mud + end type ConfigurationType type EquipmentControlType @@ -101,6 +104,9 @@ module SimulationVariables Type(DrillingWatchType)::DrillingWatch Type(TankType)::Tank type(DownHoleType):: DownHole + + type(UnityInputsType)::UnityInputs + type(UnityOutputsType):: UnityOutputs end type EquipmentControlType type SimulationStateType diff --git a/Simulation/SimulationVariables.i90 b/Simulation/SimulationVariables.i90 index 0a11f07..af88ae0 100644 --- a/Simulation/SimulationVariables.i90 +++ b/Simulation/SimulationVariables.i90 @@ -3,6 +3,8 @@ module SimulationVariables use Constants use json_module + use CUnityInputs + use CUnityOutputs use COperationScenariosVariables use CStringConfigurationVariables use CFormationVariables @@ -87,6 +89,7 @@ module SimulationVariables Type(PathGenerationType)::Path ! Type(WellSurveyDataType)::WellSurveyData Type(MudPropertiesType)::Mud + end type ConfigurationType type EquipmentControlType @@ -102,6 +105,9 @@ module SimulationVariables Type(DrillingWatchType)::DrillingWatch Type(TankType)::Tank type(DownHoleType):: DownHole + + type(UnityInputsType)::UnityInputs + type(UnityOutputsType):: UnityOutputs end type EquipmentControlType type SimulationStateType diff --git a/SimulationCore2 b/SimulationCore2 index 8643025..1c3db09 100644 Binary files a/SimulationCore2 and b/SimulationCore2 differ diff --git a/SimulationCore2.f90 b/SimulationCore2.f90 index fc2b631..be9557c 100644 --- a/SimulationCore2.f90 +++ b/SimulationCore2.f90 @@ -17,20 +17,25 @@ program SimulationCore2 use RedisInterface !use testRedisModule implicit none - character(len=50)::configFilename = "config-local.json" + character(len=100) :: redis_host,redis_password, sim_id, temp + integer :: redis_port, log_level, stat ! Variables ! Body of SimulationCore2 ! print *, 'Hello World' ! call read_variables() - if(command_argument_count()>0) then - call get_command_argument(1, configFilename) + if(command_argument_count()/=5) then + print *, "Simulator Program must have 5 parameter: redis_host,redisPort,redis_password, sim_id,log_level" + stop endif - ! print *,"config-file at SimCore= ",configFilename - ! call initSimulation() - call simulate(configFilename) - ! Initialise the json_file object. - ! call testRedis() - ! pause + call get_command_argument(1, redis_host) + call get_command_argument(2, temp) + read(temp,*,iostat=stat) redis_port + call get_command_argument(3, redis_password) + call get_command_argument(4, sim_id) + call get_command_argument(5, temp) + read(temp,*,iostat=stat) log_level + + call simulate(trim(redis_host),redis_port,trim(redis_password), trim(sim_id),log_level) end program SimulationCore2 diff --git a/SimulationCore2.i90 b/SimulationCore2.i90 new file mode 100644 index 0000000..b03ebb8 --- /dev/null +++ b/SimulationCore2.i90 @@ -0,0 +1,42 @@ +# 1 "/mnt/c/Projects/VSIM/SimulationCore2/SimulationCore2.f90" +! SimulationCore2.f90 +! +! FUNCTIONS: +! SimulationCore2 - Entry point of console application. +! +!**************************************************************************** +! +! PROGRAM: SimulationCore2 +! +! PURPOSE: Entry point for the console application. +! +!**************************************************************************** + +program SimulationCore2 + + use Simulator + use RedisInterface +!use testRedisModule + implicit none + character(len=100) :: redis_host,redis_password, sim_id, temp + integer :: redis_port, log_level, stat +! Variables + +! Body of SimulationCore2 +! print *, 'Hello World' +! call read_variables() + if(command_argument_count()/=5) then + print *, "Simulator Program must have 5 parameter: redis_host,redisPort,redis_password, sim_id,log_level" + stop + endif + call get_command_argument(1, redis_host) + call get_command_argument(2, temp) + read(temp,*,iostat=stat) redis_port + call get_command_argument(3, redis_password) + call get_command_argument(4, sim_id) + call get_command_argument(5, temp) + read(temp,*,iostat=stat) log_level + + call simulate(trim(redis_host),redis_port,trim(redis_password), trim(sim_id),log_level) +end program SimulationCore2 + diff --git a/Simulator.f90 b/Simulator.f90 index 346a68b..1829d28 100644 --- a/Simulator.f90 +++ b/Simulator.f90 @@ -48,11 +48,9 @@ module Simulator use COtherProblems use CPumpProblems use CRotaryProblems - use OperationScenariosModule use PermissionsModule use UnitySignalsModule - use CBopControlPanel use CChokeControlPanel use CChokeManifold @@ -63,6 +61,7 @@ module Simulator use CTopDrivePanel use DrillingWatchModule use CTanks + use UnityModule implicit none type(json_file) :: jsonfile @@ -80,17 +79,18 @@ module Simulator contains - subroutine Simulate(configFilename) - character(*)::configFilename - integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status + subroutine Simulate(redis_host,redis_port,redis_password, sim_id,log_level) + character(len=*) :: redis_host,redis_password, sim_id + integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status,redis_port,log_level integer,dimension(12)::t,t_modules !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + do i=1,size(t_modules) t_modules(i)=0 end do - call initSimulation(configFilename) - call initConnection(configFilename,status) - + logging = log_level + ! call initSimulation(configFilename) + call initConnection(redis_host,redis_port,redis_password, sim_id,status) if (status<0) then print *,"Can not init connection to redis." stop @@ -221,29 +221,29 @@ module Simulator print *,"Total Time =",t_read+t_write+t_exec end subroutine Simulate - subroutine initSimulation(configFilename) - use json_module - use iso_c_binding, only: c_null_char,c_char - character(len=*) :: configFilename - ! type(json_file) :: jsonfile - type(json_value),pointer :: jsonvalue - type(json_core) :: jsoncore - ! logical :: is_found - ! character(len=:),allocatable :: password,address,datakey - ! character(len=:),allocatable::c_address,c_password,c_datakey - - call jsonfile%initialize() - ! print *,"init simulation with ",configFilename - call jsonfile%load_file(configFilename); - if (jsonfile%failed()) then - print *,"can not open config file: ",configFilename ; - stop - endif - ! print *,"file read" - call jsonfile%json_file_get_root(jsonvalue) - call jsoncore%get(jsonvalue,'logging',logging) - print *,"logging=",logging - end subroutine + ! subroutine initSimulation(configFilename) + ! use json_module + ! use iso_c_binding, only: c_null_char,c_char + ! character(len=*) :: configFilename + ! ! type(json_file) :: jsonfile + ! type(json_value),pointer :: jsonvalue + ! type(json_core) :: jsoncore + ! ! logical :: is_found + ! ! character(len=:),allocatable :: password,address,datakey + ! ! character(len=:),allocatable::c_address,c_password,c_datakey + + ! call jsonfile%initialize() + ! ! print *,"init simulation with ",configFilename + ! call jsonfile%load_file(configFilename); + ! if (jsonfile%failed()) then + ! print *,"can not open config file: ",configFilename ; + ! stop + ! endif + ! ! print *,"file read" + ! call jsonfile%json_file_get_root(jsonvalue) + ! call jsoncore%get(jsonvalue,'logging',logging) + ! print *,"logging=",logging + ! end subroutine subroutine write_variables() use CAccumulator @@ -455,7 +455,8 @@ module Simulator call CasingLinerChokeToJson(p) call PathGenerationToJson(p) ! call WellSurveyDataToJson(p) - call MudPropertiesToJson(p) + call MudPropertiesToJson(p) + call UnityOutputsToJson(p) ! 3. add new node to parent call json%add(parent,p) @@ -635,7 +636,7 @@ module Simulator call CasingLinerChokeFromJson(p) call PathGenerationFromJson(p) call MudPropertiesFromJson(p) - + call UnityInputsFromJson(p) ! 3. add new node to parent call json%add(parent,p) end subroutine diff --git a/Simulator.i90 b/Simulator.i90 index 468ce7b..757f68c 100644 --- a/Simulator.i90 +++ b/Simulator.i90 @@ -49,11 +49,9 @@ module Simulator use COtherProblems use CPumpProblems use CRotaryProblems - use OperationScenariosModule use PermissionsModule use UnitySignalsModule - use CBopControlPanel use CChokeControlPanel use CChokeManifold @@ -64,6 +62,7 @@ module Simulator use CTopDrivePanel use DrillingWatchModule use CTanks + use UnityModule implicit none type(json_file) :: jsonfile @@ -81,17 +80,18 @@ module Simulator contains - subroutine Simulate(configFilename) - character(*)::configFilename - integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status + subroutine Simulate(redis_host,redis_port,redis_password, sim_id,log_level) + character(len=*) :: redis_host,redis_password, sim_id + integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status,redis_port,log_level integer,dimension(12)::t,t_modules !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + do i=1,size(t_modules) t_modules(i)=0 end do - call initSimulation(configFilename) - call initConnection(configFilename,status) - + logging = log_level +! call initSimulation(configFilename) + call initConnection(redis_host,redis_port,redis_password, sim_id,status) if (status<0) then print *,"Can not init connection to redis." stop @@ -222,29 +222,29 @@ module Simulator print *,"Total Time =",t_read+t_write+t_exec end subroutine Simulate - subroutine initSimulation(configFilename) - use json_module - use iso_c_binding, only: c_null_char,c_char - character(len=*) :: configFilename -! type(json_file) :: jsonfile - type(json_value),pointer :: jsonvalue - type(json_core) :: jsoncore -! logical :: is_found -! character(len=:),allocatable :: password,address,datakey -! character(len=:),allocatable::c_address,c_password,c_datakey - - call jsonfile%initialize() -! print *,"init simulation with ",configFilename - call jsonfile%load_file(configFilename); - if (jsonfile%failed()) then - print *,"can not open config file: ",configFilename ; - stop - endif -! print *,"file read" - call jsonfile%json_file_get_root(jsonvalue) - call jsoncore%get(jsonvalue,'logging',logging) - print *,"logging=",logging - end subroutine +! subroutine initSimulation(configFilename) +! use json_module +! use iso_c_binding, only: c_null_char,c_char +! character(len=*) :: configFilename +! ! type(json_file) :: jsonfile +! type(json_value),pointer :: jsonvalue +! type(json_core) :: jsoncore +! ! logical :: is_found +! ! character(len=:),allocatable :: password,address,datakey +! ! character(len=:),allocatable::c_address,c_password,c_datakey + +! call jsonfile%initialize() +! ! print *,"init simulation with ",configFilename +! call jsonfile%load_file(configFilename); +! if (jsonfile%failed()) then +! print *,"can not open config file: ",configFilename ; +! stop +! endif +! ! print *,"file read" +! call jsonfile%json_file_get_root(jsonvalue) +! call jsoncore%get(jsonvalue,'logging',logging) +! print *,"logging=",logging +! end subroutine subroutine write_variables() use CAccumulator @@ -456,7 +456,8 @@ module Simulator call CasingLinerChokeToJson(p) call PathGenerationToJson(p) ! call WellSurveyDataToJson(p) - call MudPropertiesToJson(p) + call MudPropertiesToJson(p) + call UnityOutputsToJson(p) ! 3. add new node to parent call json%add(parent,p) @@ -636,7 +637,7 @@ module Simulator call CasingLinerChokeFromJson(p) call PathGenerationFromJson(p) call MudPropertiesFromJson(p) - + call UnityInputsFromJson(p) ! 3. add new node to parent call json%add(parent,p) end subroutine diff --git a/Text1.txt b/Text1.txt index a304744..3623696 100644 --- a/Text1.txt +++ b/Text1.txt @@ -1,2 +1,12 @@ - logical :: AnnDrillMud - logical :: AnnCirculateMud + real(8) :: KellyHoseVibrationRate + real(8) :: BlowoutFromStringPercent + real(8) :: Pedal + real(8) :: FlowRate + real(8) :: RotaryRpm + logical :: BlowoutFromString + logical :: BlowoutFromAnnular + logical :: FlowFromReturnLine + real :: FlowFromKelly + real :: FlowFromFillupHead + logical :: FlowKellyDisconnect + logical :: FlowPipeDisconnect \ No newline at end of file diff --git a/TorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 b/TorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 index fd54f5c..28af62b 100644 --- a/TorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 +++ b/TorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 @@ -1,27 +1,20 @@ subroutine TD_HookLoadCalculation Use TD_DrillStemComponents - use SimulationVariables !@ - use SimulationVariables !@ - use SimulationVariables !@ Use TD_StringConnectionData - use SimulationVariables !@, only: Drawworks use CDataDisplayConsole - use SimulationVariables use CHoistingVariables - use SimulationVariables -! Use CSlipsEnumVariables use UnitySignalVariables - use UnitySignalsModule + use UnitySignalsModule Use CBopStackVariables use SimulationVariables - Use CUnityInputs + Use UnityModule implicit none Integer :: i , kk - Real(8) :: TD_eConst=0.98d0 , TD_SumWeight + Real(8) :: TD_SumWeight !,TD_eConst=0.98d0 diff --git a/TorqueDrag/TD_Forces/TD_HookLoadCalculation.i90 b/TorqueDrag/TD_Forces/TD_HookLoadCalculation.i90 index 7b85046..f0583ba 100644 --- a/TorqueDrag/TD_Forces/TD_HookLoadCalculation.i90 +++ b/TorqueDrag/TD_Forces/TD_HookLoadCalculation.i90 @@ -2,27 +2,20 @@ subroutine TD_HookLoadCalculation Use TD_DrillStemComponents - use SimulationVariables !@ - use SimulationVariables !@ - use SimulationVariables !@ Use TD_StringConnectionData - use SimulationVariables !@, only: Drawworks use CDataDisplayConsole - use SimulationVariables use CHoistingVariables - use SimulationVariables -! Use CSlipsEnumVariables use UnitySignalVariables - use UnitySignalsModule + use UnitySignalsModule Use CBopStackVariables use SimulationVariables - Use CUnityInputs + Use UnityModule implicit none Integer :: i , kk - Real(8) :: TD_eConst=0.98d0 , TD_SumWeight + Real(8) :: TD_SumWeight !,TD_eConst=0.98d0 diff --git a/config-remote.json b/config-remote.json index a12bc74..15bb550 100644 --- a/config-remote.json +++ b/config-remote.json @@ -5,5 +5,7 @@ "password":"4YKFnubfFFjfh4yTK7b0Rg9X", "datakey":"data" }, - "logging":4 + "logging":4, + "process_name": "SimulationCore2", + "work_dir" : "/mnt/c/Projects/VSIM/SimulationCore2" } \ No newline at end of file diff --git a/helper.ipynb b/helper.ipynb index 3efd9dd..e6e375b 100644 --- a/helper.ipynb +++ b/helper.ipynb @@ -877,31 +877,18 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1-(0, 1)\n", - "1-(1, 3)\n", - "1-(2, 3)\n", - "1-(3, 5)\n", - "2-(0, 1)\n", - "2-(1, 3)\n", - "2-(2, 3)\n", - "2-(3, 5)\n" + "assets={'USDT': {'Total': '5858.36917324', 'Free': 3879.35}, 'BUSD': {'Total': '-156.01984572', 'Free': 3877.23}}\n" ] } ], - "source": [ - "l = [1,3,3,5]\n", - "for a in enumerate(l):\n", - " print(f\"1-{a}\")\n", - "for a in enumerate(l):\n", - " print(f\"2-{a}\")" - ] + "source": [] }, { "attachments": {}, @@ -920,16 +907,28 @@ "name": "stdout", "output_type": "stream", "text": [ - "\t\tcall json%get(p,'AnnDrillMud',pval)\n", - "\t\tcall json%get(pval,data%Equipments%DownHole%AnnDrillMud)\n", - "\t\tcall json%get(p,'AnnCirculateMud',pval)\n", - "\t\tcall json%get(pval,data%Equipments%DownHole%AnnCirculateMud)\n" + "\t\tcall json%get(p,'ElevatorConnectionPossible',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%ElevatorConnectionPossible)\n", + "\t\tcall json%get(p,'JointConnectionPossible',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%JointConnectionPossible)\n", + "\t\tcall json%get(p,'IsKellyBushingSetInTable',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%IsKellyBushingSetInTable)\n", + "\t\tcall json%get(p,'ElevatorPickup',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%ElevatorPickup)\n", + "\t\tcall json%get(p,'NearFloorPosition',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%NearFloorPosition)\n", + "\t\tcall json%get(p,'SingleSetInMouseHole',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%SingleSetInMouseHole)\n", + "\t\tcall json%get(p,'TdsConnectionPossible',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%TdsConnectionPossible)\n", + "\t\tcall json%get(p,'TdsStemIn',pval)\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%TdsStemIn)\n" ] } ], "source": [ "pattern=\"\"\"\t\tcall json%get(p,'@@@',pval)\n", - "\t\tcall json%get(pval,data%Equipments%DownHole%@@@)\"\"\"\n", + "\t\tcall json%get(pval,data%Equipments%UnityInputs%@@@)\"\"\"\n", "\n", "input = open(\"Text1.txt\")\n", "lines = input.readlines()\n", @@ -981,37 +980,30 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "call json%add(p,\"AnnalusFluidsCount\",data%Equipments%DownHole%AnnalusFluidsCount)\n", - "call json%add(p,\"StringFluidsCount\",data%Equipments%DownHole%StringFluidsCount)\n", - "call json%add(p,\"AnnalusFluids(:)\",data%Equipments%DownHole%AnnalusFluids(:))\n", - "call json%add(p,\"StringFluids(:)\",data%Equipments%DownHole%StringFluids(:))\n", - "call json%add(p,\"\",data%Equipments%DownHole%)\n", - "call json%add(p,\"StringCount\",data%Equipments%DownHole%StringCount)\n", - "call json%add(p,\"String(:)\",data%Equipments%DownHole%String(:))\n", - "call json%add(p,\"\",data%Equipments%DownHole%)\n", - "call json%add(p,\"BopElements(:)\",data%Equipments%DownHole%BopElements(:))\n", - "call json%add(p,\"\",data%Equipments%DownHole%)\n", - "call json%add(p,\"DrillPipePressure\",data%Equipments%DownHole%DrillPipePressure)\n", - "call json%add(p,\"CasingPressure\",data%Equipments%DownHole%CasingPressure)\n", - "call json%add(p,\"ShoePressure\",data%Equipments%DownHole%ShoePressure)\n", - "call json%add(p,\"BottomHolePressure\",data%Equipments%DownHole%BottomHolePressure)\n", - "call json%add(p,\"FormationPressure\",data%Equipments%DownHole%FormationPressure)\n", - "call json%add(p,\"InfluxRate\",data%Equipments%DownHole%InfluxRate)\n", - "call json%add(p,\"KickVolume\",data%Equipments%DownHole%KickVolume)\n", - "call json%add(p,\"SecondKickVolume\",data%Equipments%DownHole%SecondKickVolume)\n", - "call json%add(p,\"PermeabilityExposedHeight\",data%Equipments%DownHole%PermeabilityExposedHeight)\n" + "call json%add(p,\"KellyHoseVibrationRate\",data%Equipments%UnityOutputs%KellyHoseVibrationRate)\n", + "call json%add(p,\"BlowoutFromStringPercent\",data%Equipments%UnityOutputs%BlowoutFromStringPercent)\n", + "call json%add(p,\"Pedal\",data%Equipments%UnityOutputs%Pedal)\n", + "call json%add(p,\"FlowRate\",data%Equipments%UnityOutputs%FlowRate)\n", + "call json%add(p,\"RotaryRpm\",data%Equipments%UnityOutputs%RotaryRpm)\n", + "call json%add(p,\"BlowoutFromString\",data%Equipments%UnityOutputs%BlowoutFromString)\n", + "call json%add(p,\"BlowoutFromAnnular\",data%Equipments%UnityOutputs%BlowoutFromAnnular)\n", + "call json%add(p,\"FlowFromReturnLine\",data%Equipments%UnityOutputs%FlowFromReturnLine)\n", + "call json%add(p,\"FlowFromKelly\",data%Equipments%UnityOutputs%FlowFromKelly)\n", + "call json%add(p,\"FlowFromFillupHead\",data%Equipments%UnityOutputs%FlowFromFillupHead)\n", + "call json%add(p,\"FlowKellyDisconnect\",data%Equipments%UnityOutputs%FlowKellyDisconnect)\n", + "call json%add(p,\"FlowPipeDisconnect\",data%Equipments%UnityOutputs%FlowPipeDisconnect)\n" ] } ], "source": [ - "precode = \"\"\"call json%add(p,\"\",data%Equipments%DownHole%\"\"\"\n", + "precode = \"\"\"call json%add(p,\"\",data%Equipments%UnityOutputs%\"\"\"\n", "input = open(\"Text1.txt\")\n", "lines = input.readlines()\n", "for line in lines:\n", diff --git a/redisContent.json b/redisContent.json index 775015d..39ed2ca 100644 --- a/redisContent.json +++ b/redisContent.json @@ -942,4 +942,3 @@ } } } - diff --git a/simulatorManager.py b/simulatorManager.py new file mode 100644 index 0000000..f070c3e --- /dev/null +++ b/simulatorManager.py @@ -0,0 +1,75 @@ +import sys +import redis +import json +import time +import subprocess +import psutil + +if __name__=='__main__': + if len(sys.argv)<=1: + configFN = 'config-remote.json' + else: + configFN = sys.argv[1] + + f = open(configFN) + config = json.load(f) + + redis_address = config['redis']['address'] + redis_password = config['redis']['password'] + redis_port = config['redis']['port'] + log_level = config['logging'] + work_dir = config['work_dir'] + process_name = config['process_name'] + + r = redis.Redis(host=redis_address, port=redis_port, decode_responses=True,password=redis_password) + runnings = [] + while True: + sims = r.get('Simulations') + sims = json.loads(sims) + for sim in sims: + simulation_id = sim['Id'] + process_exists = False + for proc in psutil.process_iter(['pid', 'name', 'cmdline']): + if proc.info['name'] == process_name and len(proc.info['cmdline']) > 1 and proc.info['cmdline'][1] == simulation_id: + process_exists = True + break + if not process_exists: + subprocess.Popen(['./SimulationCore2', simulation_id], cwd=work_dir) + + time.sleep(1) + + + + +# Connect to Redis server +redis_host = 'localhost' # Replace with your Redis server's host +redis_port = 6379 # Replace with your Redis server's port +redis_client = redis.Redis(host=redis_host, port=redis_port) +if redis_client is None: + print(f"Can not connect to {redis_host}.\nExiting...") + exit(1) +# Main loop +while True: + # Retrieve array from Redis + simulations = redis_client.lrange('simulations', 0, -1) + + # Check each entry in the array + for entry in simulations: + simulation_id = entry.decode() + + # Check if 'SimulationCore2' process with specific parameter is running + process_name = 'SimulationCore2' + process_exists = False + + for proc in psutil.process_iter(['pid', 'name', 'cmdline']): + if proc.info['name'] == process_name and len(proc.info['cmdline']) > 1 and proc.info['cmdline'][1] == simulation_id: + process_exists = True + break + + if not process_exists: + # Run 'SimulationCore2' process with specific parameter + printf(f"Starting new simulator process for {simulation_id}") + subprocess.Popen(['./SimulationCore2', simulation_id], cwd='/path/to/SimulationCore2/directory') + + # Wait for 1 second before checking again + time.sleep(1) \ No newline at end of file