|
- module CSimulation
- use CSimulationVariables
- use CSimulationThreads
- use ifcore
- use ifmt
- implicit none
- public
-
-
- contains
-
- subroutine InitThreads
- implicit none
-
- #ifdef EnableSimulation
- !BopStack
- BopStackThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- BopStackThread, &
- loc(BopStackThreadParam), &
- CREATE_SUSPENDED, &
- BopStackThreadId )
-
- !Pumps
- Pump1ThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- Pump1Thread, &
- loc(Pump1ThreadParam), &
- CREATE_SUSPENDED, &
- Pump1ThreadId )
- Pump2ThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- Pump2Thread, &
- loc(Pump2ThreadParam), &
- CREATE_SUSPENDED, &
- Pump2ThreadId )
- Pump3ThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- Pump3Thread, &
- loc(Pump3ThreadParam), &
- CREATE_SUSPENDED, &
- Pump3ThreadId )
-
-
- !ChokeControl
- ChokeControlThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- ChokeControlThread, &
- loc(ChokeControlThreadParam), &
- CREATE_SUSPENDED, &
- ChokeControlThreadId )
-
- !ROP
- RopThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- RopThread, &
- loc(RopThreadParam), &
- CREATE_SUSPENDED, &
- RopThreadId )
-
- !Geo
- GeoThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- GeoThread, &
- loc(GeoThreadParam), &
- CREATE_SUSPENDED, &
- GeoThreadId )
-
- !RotaryTable
- RotaryTableThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- RotaryTableThread, &
- loc(RotaryTableThreadParam), &
- CREATE_SUSPENDED, &
- RotaryTableThreadId )
-
-
- !Drawworks
- DrawworksThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- DrawworksThread, &
- loc(DrawworksThreadParam), &
- CREATE_SUSPENDED, &
- DrawworksThreadId )
-
- !FluidFlow
- FluidFlowThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- FluidFlowThread, &
- loc(FluidFlowThreadParam), &
- CREATE_SUSPENDED, &
- FluidFlowThreadId )
-
-
- !TorqueDrag
- TorqueDragThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- TorqueDragThread, &
- loc(TorqueDragThreadParam), &
- CREATE_SUSPENDED, &
- TorqueDragThreadId )
-
- !TopDrive
- TopDriveThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- TopDriveThread, &
- loc(TopDriveThreadParam), &
- CREATE_SUSPENDED, &
- TopDriveThreadId )
-
- !MudSystem
- MudSystemThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- MudSystemThread, &
- loc(MudSystemThreadParam), &
- CREATE_SUSPENDED, &
- MudSystemThreadId )
-
- !PipeRams1
- PipeRams1ThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- PipeRams1Thread, &
- loc(PipeRams1ThreadParam), &
- CREATE_SUSPENDED, &
- PipeRams1ThreadId )
-
- !PipeRams2
- PipeRams2ThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- PipeRams2Thread, &
- loc(PipeRams2ThreadParam), &
- CREATE_SUSPENDED, &
- PipeRams2ThreadId )
-
- !KillLine
- KillLineThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- KillLineThread, &
- loc(KillLineThreadParam), &
- CREATE_SUSPENDED, &
- KillLineThreadId )
-
- !ChokeLine
- ChokeLineThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- ChokeLineThread, &
- loc(ChokeLineThreadParam), &
- CREATE_SUSPENDED, &
- ChokeLineThreadId )
-
- !BlindRams
- BlindRamsThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- BlindRamsThread, &
- loc(BlindRamsThreadParam), &
- CREATE_SUSPENDED, &
- BlindRamsThreadId )
-
- !Annular
- AnnularThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- AnnularThread, &
- loc(AnnularThreadParam), &
- CREATE_SUSPENDED, &
- AnnularThreadId )
-
-
- !OperationScenarios
- OperationScenariosThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- OperationScenariosThread, &
- loc(OperationScenariosThreadParam), &
- CREATE_SUSPENDED, &
- OperationScenariosThreadId )
-
- !PathFinding
- PathFindingThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- PathFindingThread, &
- loc(PathFindingThreadParam), &
- CREATE_SUSPENDED, &
- PathFindingThreadId )
-
-
- !Sample
- SampleThreadHandle = CreateThread( &
- ThreadSecurity, &
- ThreadStackSize, &
- SampleThread, &
- loc(SampleThreadParam), &
- CREATE_SUSPENDED, &
- SampleThreadId )
-
- #endif
-
- end subroutine InitThreads
-
- subroutine StopThreads
- implicit none
-
- #ifdef EnableSimulation
- !BopStack
- #ifdef HardStop
- ApiResult = TerminateThread(BopStackThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(BopStackThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(BopStackThreadHandle)
-
-
-
-
- !Pump 1
- #ifdef HardStop
- ApiResult = TerminateThread(Pump1ThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(Pump1ThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(Pump1ThreadHandle)
-
- !Pump 2
- #ifdef HardStop
- ApiResult = TerminateThread(Pump2ThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(Pump2ThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(Pump2ThreadHandle)
-
- !Pump 3
- #ifdef HardStop
- ApiResult = TerminateThread(Pump3ThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(Pump3ThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(Pump3ThreadHandle)
-
-
- !ChokeControl
- #ifdef HardStop
- ApiResult = TerminateThread(ChokeControlThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(ChokeControlThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(ChokeControlThreadHandle)
-
- !ROP
- #ifdef HardStop
- ApiResult = TerminateThread(RopThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(RopThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(RopThreadHandle)
-
- !Geo
- #ifdef HardStop
- ApiResult = TerminateThread(GeoThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(GeoThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(GeoThreadHandle)
-
- !RotaryTable
- #ifdef HardStop
- ApiResult = TerminateThread(RotaryTableThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(RotaryTableThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(RotaryTableThreadHandle)
-
-
- !Drawworks
- #ifdef HardStop
- ApiResult = TerminateThread(DrawworksThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(DrawworksThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(DrawworksThreadHandle)
-
- !FluidFlow
- #ifdef HardStop
- ApiResult = TerminateThread(FluidFlowThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(FluidFlowThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(FluidFlowThreadHandle)
-
-
- !TorqueDrag
- #ifdef HardStop
- ApiResult = TerminateThread(TorqueDragThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(TorqueDragThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(TorqueDragThreadHandle)
-
-
- !TopDrive
- #ifdef HardStop
- ApiResult = TerminateThread(TopDriveThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(TopDriveThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(TopDriveThreadHandle)
-
-
-
- !MudSystem
- #ifdef HardStop
- ApiResult = TerminateThread(MudSystemThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(MudSystemThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(MudSystemThreadHandle)
-
- !PipeRams1
- #ifdef HardStop
- ApiResult = TerminateThread(PipeRams1ThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(PipeRams1ThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(PipeRams1ThreadHandle)
-
- !PipeRams2
- #ifdef HardStop
- ApiResult = TerminateThread(PipeRams2ThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(PipeRams2ThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(PipeRams2ThreadHandle)
-
- !KillLine
- #ifdef HardStop
- ApiResult = TerminateThread(KillLineThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(KillLineThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(KillLineThreadHandle)
-
- !ChokeLine
- #ifdef HardStop
- ApiResult = TerminateThread(ChokeLineThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(ChokeLineThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(ChokeLineThreadHandle)
-
- !BlindRams
- #ifdef HardStop
- ApiResult = TerminateThread(BlindRamsThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(BlindRamsThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(BlindRamsThreadHandle)
-
- !Annular
- #ifdef HardStop
- ApiResult = TerminateThread(AnnularThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(AnnularThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(AnnularThreadHandle)
-
-
- !OperationScenarios
- #ifdef HardStop
- ApiResult = TerminateThread(OperationScenariosThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(OperationScenariosThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(OperationScenariosThreadHandle)
-
- !PathFinding
- #ifdef HardStop
- ApiResult = TerminateThread(PathFindingThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(PathFindingThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(PathFindingThreadHandle)
-
-
-
-
-
-
- !Sample
- #ifdef HardStop
- ApiResult = TerminateThread(SampleThreadHandle, 0)
- #else
- !ApiResult = WaitForSingleObject(SampleThreadHandle, WaitForStopMs)
- #endif
- ApiResult = CloseHandle(SampleThreadHandle)
-
- #endif
-
-
-
-
-
-
-
-
-
-
-
-
- end subroutine StopThreads
-
- subroutine Initialization(portable)
- !DEC$ ATTRIBUTES DLLEXPORT::Initialization
- !DEC$ ATTRIBUTES ALIAS: 'Initialization' :: Initialization
- use BopStackMain
- use PumpsMain
- use ChokeControlMain
- use RopMain
- use RotaryTableMain
- use DrawworksMain
- use FluidFlowMain
- use TorqueDragMain
- use MudSystemMain
- use PipeRams1Main
- use PipeRams2Main
- use KillLineMain
- use ChokeLineMain
- use BlindRamsMain
- use AnnularMain
- use TopDriveMain
- use GeoMain
-
- use COperationScenariosMain
- use CManifolds
- implicit none
- logical, intent(in) :: portable
- IsPortable = portable
- if(portable) then
- IsPortableInt = 1
- !print*, 'IsPortableInt=', IsPortableInt
- else
- IsPortableInt = 0
- !print*, 'IsPortableInt=', IsPortableInt
- endif
-
- call BopStack_Setup()
- call Pump1_Setup()
- call Pump2_Setup()
- call Pump3_Setup()
- call ChokeControl_Setup()
- call Rop_Setup()
- call RotaryTable_Setup()
- call Drawworks_Setup()
- call FluidFlow_Setup()
- call TorqueDrag_Setup()
- call MudSystem_Setup()
- call PipeRams1_Setup()
- call PipeRams2_Setup()
- call KillLine_Setup()
- call ChokeLine_Setup()
- call BlindRams_Setup()
- call Annular_Setup()
- call TopDrive_Setup()
- call Geo_Setup()
-
- call OperationScenarios_Setup()
- call PathFinding_Setup()
-
- call Sample_Setup()
-
- call OnSimulationInitialization%RunAll()
-
- call InitThreads()
-
-
- call OnBopStackPause%Add(BopStack_Thread)
- call OnPump1Pause%Add(Pump1_Thread)
- call OnPump2Pause%Add(Pump2_Thread)
- call OnPump3Pause%Add(Pump3_Thread)
- call OnChokeControlPause%Add(ChokeControl_Thread)
- call OnRopPause%Add(Rop_Thread)
- call OnRotaryTablePause%Add(RotaryTable_Thread)
- call OnDrawworksPause%Add(Drawworks_Thread)
- call OnFluidFlowPause%Add(FluidFlow_Thread)
- call OnTorqueDragPause%Add(TorqueDrag_Thread)
- call OnMudSystemPause%Add(MudSystem_Thread)
- call OnPipeRams1Pause%Add(PipeRams1_Thread)
- call OnPipeRams2Pause%Add(PipeRams2_Thread)
- call OnKillLinePause%Add(KillLine_Thread)
- call OnChokeLinePause%Add(ChokeLine_Thread)
- call OnBlindRamsPause%Add(BlindRams_Thread)
- call OnAnnularPause%Add(Annular_Thread)
- call OnGeoPause%Add(Geo_Thread)
-
- call OnSamplePause%Add(Sample_Thread)
-
- TotalStrokesPtr => TotalStrokesDue
- TotalVolumePumpedPtr => TotalVolumePumpedDue
- DistanceDrilledPtr => DistanceDrilledDue
-
- !TODO: CHANGE LATER
- call DrillMode_ON()
-
- end subroutine Initialization
-
- subroutine StartSimulation
- !DEC$ ATTRIBUTES DLLEXPORT::StartSimulation
- !DEC$ ATTRIBUTES ALIAS: 'StartSimulation' :: StartSimulation
- implicit none
-
- if(SimulationState_old == SimulationState_Stopped) call OnSimulationStart%RunAll()
- IsStopped = .false.
- SimulationState = SimulationState_Started
- SimulationState_old = SimulationState_Started
-
- BopStackStarted = .false.
- Pump1Started = .false.
- Pump2Started = .false.
- Pump3Started = .false.
- ChokeControlStarted = .false.
- RopStarted = .false.
- RotaryTableStarted = .false.
- DrawworksStarted = .false.
- FluidFlowStarted = .false.
- TorqueDragStarted = .false.
- MudSystemStarted = .false.
- PipeRams1Started = .false.
- PipeRams2Started = .false.
- KillLineStarted = .false.
- ChokeLineStarted = .false.
- BlindRamsStarted = .false.
- AnnularStarted = .false.
- GeoStarted = .false.
-
- SampleStarted = .false.
-
-
- #ifdef EnableSimulation
-
- #ifdef M_BopStack
- ApiResult = ResumeThread(BopStackThreadHandle)
- #endif
-
- #ifdef M_Pump1
- ApiResult = ResumeThread(Pump1ThreadHandle)
- #endif
- #ifdef M_Pump2
- ApiResult = ResumeThread(Pump2ThreadHandle)
- #endif
- #ifdef M_Pump3
- ApiResult = ResumeThread(Pump3ThreadHandle)
- #endif
-
-
- #ifdef M_ChokeControl
- ApiResult = ResumeThread(ChokeControlThreadHandle)
- #endif
- #ifdef M_Rop
- ApiResult = ResumeThread(RopThreadHandle)
- #endif
- #ifdef M_Geo
- ApiResult = ResumeThread(GeoThreadHandle)
- #endif
- #ifdef M_RotaryTable
- ApiResult = ResumeThread(RotaryTableThreadHandle)
- #endif
-
- #ifdef M_Drawworks
- ApiResult = ResumeThread(DrawworksThreadHandle)
- #endif
- #ifdef M_FluidFlow
- ApiResult = ResumeThread(FluidFlowThreadHandle)
- #endif
-
- #ifdef M_TorqueDrag
- ApiResult = ResumeThread(TorqueDragThreadHandle)
- #endif
-
- #ifdef M_TopDrive
- ApiResult = ResumeThread(TopDriveThreadHandle)
- #endif
-
- #ifdef M_MudSystem
- ApiResult = ResumeThread(MudSystemThreadHandle)
- #endif
- #ifdef M_PipeRams1
- ApiResult = ResumeThread(PipeRams1ThreadHandle)
- #endif
- #ifdef M_PipeRams2
- ApiResult = ResumeThread(PipeRams2ThreadHandle)
- #endif
- #ifdef M_KillLine
- ApiResult = ResumeThread(KillLineThreadHandle)
- #endif
- #ifdef M_ChokeLine
- ApiResult = ResumeThread(ChokeLineThreadHandle)
- #endif
- #ifdef M_BlindRams
- ApiResult = ResumeThread(BlindRamsThreadHandle)
- #endif
- #ifdef M_Annular
- ApiResult = ResumeThread(AnnularThreadHandle)
- #endif
-
- !OperationScenarios
- ApiResult = ResumeThread(OperationScenariosThreadHandle)
-
- !PathFinding
- ApiResult = ResumeThread(PathFindingThreadHandle)
-
- #ifdef M_Sample
- ApiResult = ResumeThread(SampleThreadHandle)
- #endif
-
- #endif
- end subroutine StartSimulation
-
- subroutine StopSimulation
- !DEC$ ATTRIBUTES DLLEXPORT::StopSimulation
- !DEC$ ATTRIBUTES ALIAS: 'StopSimulation' :: StopSimulation
- use CDrillingConsoleVariables, only: MP1CPSwitchI, MP2SwitchI, MP1CPSwitch, MP2Switch, MP1Throttle, MP2Throttle, MP1ThrottleUpdate, MP2ThrottleUpdate
- implicit none
- MP1CPSwitchI = 0
- MP1CPSwitch = 0
- MP2SwitchI = 0
- MP2Switch = .false.
- MP1ThrottleUpdate = .false.
- MP2ThrottleUpdate = .false.
- MP1Throttle = -1.0
- MP2Throttle = -1.0
- !MP1Throttle = 0.0
- !MP2Throttle = 0.0
-
- IsSnapshot = .false.
- IsStopped = .true.
- TotalPumpStrokes = 0
- TotalVolumePumped = 0
- DistanceDrilled = 0
- SimulationState = SimulationState_Stopped
- SimulationState_old = SimulationState_Stopped
- call OnSimulationStop%RunAll()
- call StopThreads()
- call InitThreads()
- end subroutine StopSimulation
-
- subroutine PauseSimulation
- implicit none
- if(SimulationState_old == SimulationState_Stopped) then
- SimulationState_old = SimulationState_Started
- return
- endif
- SimulationState_old = SimulationState_Paused
- #ifdef EnableSimulation
- !BopStack
- ApiResult = SuspendThread(BopStackThreadHandle)
-
- !Pumps
- ApiResult = SuspendThread(Pump1ThreadHandle)
- ApiResult = SuspendThread(Pump2ThreadHandle)
- ApiResult = SuspendThread(Pump3ThreadHandle)
-
-
- !ChokeControl
- ApiResult = SuspendThread(ChokeControlThreadHandle)
-
- !ROP
- ApiResult = SuspendThread(RopThreadHandle)
-
- !Geo
- ApiResult = SuspendThread(GeoThreadHandle)
-
- !RotaryTable
- ApiResult = SuspendThread(RotaryTableThreadHandle)
-
-
- !Drawworks
- ApiResult = SuspendThread(DrawworksThreadHandle)
-
- !FluidFlow
- ApiResult = SuspendThread(FluidFlowThreadHandle)
-
-
- !TorqueDrag
- ApiResult = SuspendThread(TorqueDragThreadHandle)
-
-
- !TopDrive
- ApiResult = SuspendThread(TopDriveThreadHandle)
-
- !MudSystem
- ApiResult = SuspendThread(MudSystemThreadHandle)
-
- !PipeRams1
- ApiResult = SuspendThread(PipeRams1ThreadHandle)
-
- !PipeRams2
- ApiResult = SuspendThread(PipeRams2ThreadHandle)
-
- !KillLine
- ApiResult = SuspendThread(KillLineThreadHandle)
-
- !ChokeLine
- ApiResult = SuspendThread(ChokeLineThreadHandle)
-
- !BlindRams
- ApiResult = SuspendThread(BlindRamsThreadHandle)
-
- !Annular
- ApiResult = SuspendThread(AnnularThreadHandle)
-
-
- !OperationScenarios
- ApiResult = SuspendThread(OperationScenariosThreadHandle)
-
- !PathFinding
- ApiResult = SuspendThread(PathFindingThreadHandle)
-
-
-
- !Sample
- ApiResult = SuspendThread(SampleThreadHandle)
- #endif
- call OnSimulationPause%RunAll()
- end subroutine PauseSimulation
-
- logical function IsRunning()
- !DEC$ ATTRIBUTES DLLEXPORT :: IsRunning
- !DEC$ ATTRIBUTES ALIAS: 'IsRunning' :: IsRunning
- implicit none
- IsRunning = .not. IsStopped
- end function
-
- subroutine OnTimerTick(time, state)
- !DEC$ ATTRIBUTES DLLEXPORT :: OnTimerTick
- !DEC$ ATTRIBUTES ALIAS: 'OnTimerTick' :: OnTimerTick
- implicit none
- integer, intent(in) :: time
- integer, intent(in) :: state
- SimulationState = state
- SimulationTime = time
- end subroutine
-
- subroutine TimerTick(s)
- !DEC$ ATTRIBUTES DLLEXPORT :: TimerTick
- !DEC$ ATTRIBUTES ALIAS: 'TimerTick' :: TimerTick
- use CBitProblemsVariables
- use CBopProblemsVariables
- use CChokeProblemsVariables
- use CDrillStemProblemsVariables
- use CGaugesProblemsVariables
- use CHoistingProblemsVariables
- use CLostProblemsVariables
- use CMudTreatmentProblemsVariables
- use COtherProblemsVariables
- use CPumpProblemsVariables
- use CRotaryProblemsVariables
- use CKickProblemsVariables
- use GeoMain
- implicit none
- integer, intent(in) :: s
- SimulationTime = s
- call ProcessBitProblemsDueTime(s)
- call ProcessBopProblemsDueTime(s)
- call ProcessChokeProblemsDueTime(s)
- call ProcessDrillStemProblemsDueTime(s)
- call ProcessGaugesProblemsDueTime(s)
- call ProcessHoistingProblemsDueTime(s)
- call ProcessLostProblemsDueTime(s)
- call ProcessMudTreatmentProblemsDueTime(s)
- call ProcessOtherProblemsDueTime(s)
- call ProcessPumpProblemsDueTime(s)
- call ProcessRotaryProblemsDueTime(s)
- call ProcessKickProblemsDueTime(s)
-
- #ifdef S_BopStack
- ApiResult = ResumeThread(BopStackThreadHandle)
- #endif
- #ifdef S_Pump1
- ApiResult = ResumeThread(Pump1ThreadHandle)
- #endif
- #ifdef S_Pump2
- ApiResult = ResumeThread(Pump2ThreadHandle)
- #endif
- #ifdef S_Pump3
- ApiResult = ResumeThread(Pump3ThreadHandle)
- #endif
- #ifdef S_ChokeControl
- ApiResult = ResumeThread(ChokeControlThreadHandle)
- #endif
- #ifdef S_Rop
- ApiResult = ResumeThread(RopThreadHandle)
- #endif
- #ifdef S_RotaryTable
- ApiResult = ResumeThread(RotaryTableThreadHandle)
- #endif
- #ifdef S_Drawworks
- ApiResult = ResumeThread(DrawworksThreadHandle)
- #endif
- #ifdef S_FluidFlow
- ApiResult = ResumeThread(FluidFlowThreadHandle)
- #endif
- #ifdef S_TorqueDrag
- ApiResult = ResumeThread(TorqueDragThreadHandle)
- #endif
- #ifdef S_TopDrive
- ApiResult = ResumeThread(TopDriveThreadHandle)
- #endif
- #ifdef S_MudSystem
- ApiResult = ResumeThread(MudSystemThreadHandle)
- #endif
- #ifdef S_PipeRams1
- ApiResult = ResumeThread(PipeRams1ThreadHandle)
- #endif
- #ifdef S_PipeRams2
- ApiResult = ResumeThread(PipeRams2ThreadHandle)
- #endif
- #ifdef S_KillLine
- ApiResult = ResumeThread(KillLineThreadHandle)
- #endif
- #ifdef S_ChokeLine
- ApiResult = ResumeThread(ChokeLineThreadHandle)
- #endif
- #ifdef S_BlindRams
- ApiResult = ResumeThread(BlindRamsThreadHandle)
- #endif
- #ifdef S_Annular ت
- ApiResult = ResumeThread(AnnularThreadHandle)
- #endif
- #ifdef S_Geo
- ApiResult = ResumeThread(GeoThreadHandle)
- #endif
-
-
-
- #ifdef S_Sample
- ApiResult = ResumeThread(SampleThreadHandle)
- #endif
-
- end subroutine
-
- subroutine StateChanged(state)
- !DEC$ ATTRIBUTES DLLEXPORT :: StateChanged
- !DEC$ ATTRIBUTES ALIAS: 'StateChanged' :: StateChanged
- implicit none
- integer, intent(in) :: state
- SimulationState = state
- if(SimulationState == SimulationState_Paused) call PauseSimulation()
- end subroutine
-
- subroutine SetSimulationSpeed(speed)
- !DEC$ ATTRIBUTES DLLEXPORT :: SetSimulationSpeed
- !DEC$ ATTRIBUTES ALIAS: 'SetSimulationSpeed' :: SetSimulationSpeed
- implicit none
- integer, intent(in) :: speed
- SimulationSpeed = speed
- end subroutine
-
-
- subroutine SetSnapshot(s)
- !DEC$ ATTRIBUTES DLLEXPORT::SetSnapshot
- !DEC$ ATTRIBUTES ALIAS: 'SetSnapshot' :: SetSnapshot
- implicit none
- logical, intent(in) :: s
- IsSnapshot = s
- !if(IsSnapshot) SimulationState_old = SimulationState_Started
- end subroutine SetSnapshot
-
-
- subroutine TotalStrokesDue(strokes)
- use CBitProblemsVariables
- use CBopProblemsVariables
- use CChokeProblemsVariables
- use CDrillStemProblemsVariables
- use CGaugesProblemsVariables
- use CHoistingProblemsVariables
- use CLostProblemsVariables
- use CMudTreatmentProblemsVariables
- use COtherProblemsVariables
- use CPumpProblemsVariables
- use CRotaryProblemsVariables
- use CKickProblemsVariables
- implicit none
- integer, intent(in) :: strokes
- call ProcessBitProblemsDuePumpStrokes(strokes)
- call ProcessBopProblemsDuePumpStrokes(strokes)
- call ProcessChokeProblemsDuePumpStrokes(strokes)
- call ProcessDrillStemProblemsDuePumpStrokes(strokes)
- call ProcessGaugesProblemsDuePumpStrokes(strokes)
- call ProcessHoistingProblemsDuePumpStrokes(strokes)
- call ProcessLostProblemsDuePumpStrokes(strokes)
- call ProcessMudTreatmentProblemsDuePumpStrokes(strokes)
- call ProcessOtherProblemsDuePumpStrokes(strokes)
- call ProcessPumpProblemsDuePumpStrokes(strokes)
- call ProcessRotaryProblemsDuePumpStrokes(strokes)
- call ProcessKickProblemsDuePumpStrokes(strokes)
-
- end subroutine
-
- subroutine TotalVolumePumpedDue(volume)
- use CBitProblemsVariables
- use CBopProblemsVariables
- use CChokeProblemsVariables
- use CDrillStemProblemsVariables
- use CGaugesProblemsVariables
- use CHoistingProblemsVariables
- use CLostProblemsVariables
- use CMudTreatmentProblemsVariables
- use COtherProblemsVariables
- use CPumpProblemsVariables
- use CRotaryProblemsVariables
- use CKickProblemsVariables
- implicit none
- real(8), intent(in) :: volume
- call ProcessBitProblemsDueVolumePumped(volume)
- call ProcessBopProblemsDueVolumePumped(volume)
- call ProcessChokeProblemsDueVolumePumped(volume)
- call ProcessDrillStemProblemsDueVolumePumped(volume)
- call ProcessGaugesProblemsDueVolumePumped(volume)
- call ProcessHoistingProblemsDueVolumePumped(volume)
- call ProcessLostProblemsDueVolumePumped(volume)
- call ProcessMudTreatmentProblemsDueVolumePumped(volume)
- call ProcessOtherProblemsDueVolumePumped(volume)
- call ProcessPumpProblemsDueVolumePumped(volume)
- call ProcessRotaryProblemsDueVolumePumped(volume)
- call ProcessKickProblemsDueVolumePumped(volume)
-
- end subroutine
-
- subroutine DistanceDrilledDue(distance)
- use CBitProblemsVariables
- use CBopProblemsVariables
- use CChokeProblemsVariables
- use CDrillStemProblemsVariables
- use CGaugesProblemsVariables
- use CHoistingProblemsVariables
- use CLostProblemsVariables
- use CMudTreatmentProblemsVariables
- use COtherProblemsVariables
- use CPumpProblemsVariables
- use CRotaryProblemsVariables
- use CKickProblemsVariables
- implicit none
- real(8), intent(in) :: distance
- call ProcessBitProblemsDueDistanceDrilled(distance)
- call ProcessBopProblemsDueDistanceDrilled(distance)
- call ProcessChokeProblemsDueDistanceDrilled(distance)
- call ProcessDrillStemProblemsDueDistanceDrilled(distance)
- call ProcessGaugesProblemsDueDistanceDrilled(distance)
- call ProcessHoistingProblemsDueDistanceDrilled(distance)
- call ProcessLostProblemsDueDistanceDrilled(distance)
- call ProcessMudTreatmentProblemsDueDistanceDrilled(distance)
- call ProcessOtherProblemsDueDistanceDrilled(distance)
- call ProcessPumpProblemsDueDistanceDrilled(distance)
- call ProcessRotaryProblemsDueDistanceDrilled(distance)
- call ProcessKickProblemsDueDistanceDrilled(distance)
- end subroutine
-
-
-
-
- subroutine BopStack_Thread
- implicit none
- ApiResult = SuspendThread(BopStackThreadHandle)
- end subroutine BopStack_Thread
-
- subroutine Pump1_Thread
- implicit none
- ApiResult = SuspendThread(Pump1ThreadHandle)
- end subroutine Pump1_Thread
-
- subroutine Pump2_Thread
- implicit none
- ApiResult = SuspendThread(Pump2ThreadHandle)
- end subroutine Pump2_Thread
-
- subroutine Pump3_Thread
- implicit none
- ApiResult = SuspendThread(Pump3ThreadHandle)
- end subroutine Pump3_Thread
-
- subroutine ChokeControl_Thread
- implicit none
- ApiResult = SuspendThread(ChokeControlThreadHandle)
- end subroutine ChokeControl_Thread
-
- subroutine Rop_Thread
- implicit none
- ApiResult = SuspendThread(RopThreadHandle)
- end subroutine Rop_Thread
-
- subroutine RotaryTable_Thread
- implicit none
- ApiResult = SuspendThread(RotaryTableThreadHandle)
- end subroutine RotaryTable_Thread
-
- subroutine Drawworks_Thread
- implicit none
- ApiResult = SuspendThread(DrawworksThreadHandle)
- end subroutine Drawworks_Thread
-
- subroutine FluidFlow_Thread
- implicit none
- ApiResult = SuspendThread(FluidFlowThreadHandle)
- end subroutine FluidFlow_Thread
-
- subroutine TorqueDrag_Thread
- implicit none
- ApiResult = SuspendThread(TorqueDragThreadHandle)
- end subroutine TorqueDrag_Thread
-
- subroutine TopDrive_Thread
- implicit none
- ApiResult = SuspendThread(TopDriveThreadHandle)
- end subroutine TopDrive_Thread
-
- subroutine MudSystem_Thread
- implicit none
- ApiResult = SuspendThread(MudSystemThreadHandle)
- end subroutine MudSystem_Thread
-
- subroutine PipeRams1_Thread
- implicit none
- ApiResult = SuspendThread(PipeRams1ThreadHandle)
- end subroutine PipeRams1_Thread
-
- subroutine PipeRams2_Thread
- implicit none
- ApiResult = SuspendThread(PipeRams2ThreadHandle)
- end subroutine PipeRams2_Thread
-
- subroutine KillLine_Thread
- implicit none
- ApiResult = SuspendThread(KillLineThreadHandle)
- end subroutine KillLine_Thread
-
- subroutine ChokeLine_Thread
- implicit none
- ApiResult = SuspendThread(ChokeLineThreadHandle)
- end subroutine ChokeLine_Thread
-
- subroutine BlindRams_Thread
- implicit none
- ApiResult = SuspendThread(BlindRamsThreadHandle)
- end subroutine BlindRams_Thread
-
- subroutine Annular_Thread
- implicit none
- ApiResult = SuspendThread(AnnularThreadHandle)
- end subroutine Annular_Thread
-
- subroutine Geo_Thread
- implicit none
- ApiResult = SuspendThread(GeoThreadHandle)
- end subroutine Geo_Thread
-
-
-
- subroutine Sample_Thread
- implicit none
- ApiResult = SuspendThread(SampleThreadHandle)
- end subroutine Sample_Thread
-
- end module CSimulation
|