Просмотр исходного кода

CSimulationVariables Removed

najafi
mahmood19227 1 год назад
Родитель
Сommit
b562706f42
37 измененных файлов: 436 добавлений и 701 удалений
  1. +2
    -2
      CSharp/Equipments/ControlPanels/CDataDisplayConsoleVariables.f90
  2. +1
    -1
      CSharp/Equipments/ControlPanels/CDrillingConsole.f90
  3. +1
    -1
      CSharp/OperationScenarios/Common/COperationScenariosMain.f90
  4. +6
    -43
      CSharp/OperationScenarios/UnitySignals/CTongEnum.f90
  5. +0
    -0
     
  6. +0
    -1
      Data Structures.txt
  7. +3
    -0
      Equipments/BopStack/BOP.f90
  8. +2
    -2
      Equipments/BopStack/KILL_LINE.f90
  9. +3
    -3
      Equipments/BopStack/PipeRams1Main.f90
  10. +75
    -134
      Equipments/ChokeControl/AirPump_Choke_Subs.f90
  11. +35
    -26
      Equipments/ChokeControl/CHOKE.f90
  12. +29
    -4
      Equipments/ChokeControl/ChokeControlMain.f90
  13. +14
    -29
      Equipments/Drawworks/DrawworksMain.f90
  14. +1
    -1
      Equipments/Drawworks/Drawworks_INPUTS.f90
  15. +149
    -308
      Equipments/MudSystem/MudSystem.f90
  16. +2
    -2
      Equipments/MudSystem/MudSystemMain.f90
  17. +24
    -31
      Equipments/Pumps/PumpsMain.f90
  18. +1
    -1
      Equipments/Pumps/Pumps_Outputs.f90
  19. +4
    -26
      Equipments/Pumps/Pumps_StartUp.f90
  20. +1
    -1
      Equipments/RotaryTable/RTable_INPUTS.f90
  21. +1
    -2
      Equipments/RotaryTable/RotaryTableMain.f90
  22. +3
    -3
      Equipments/TopDrive/TopDriveMain.f90
  23. +1
    -1
      Equipments/TopDrive/TopDrive_INPUTS.f90
  24. +8
    -8
      FluidFlow/FluidFlowMain.f90
  25. +1
    -1
      Rop/JetImpactForce.f90
  26. +12
    -30
      Rop/RopMain.f90
  27. +0
    -2
      Rop/sROP_Variables.f90
  28. Двоичные данные
     
  29. +0
    -0
      Simulation/CSimulation.f90
  30. +0
    -0
      Simulation/CSimulationThreads.f90
  31. +0
    -0
      Simulation/CSimulationVariables.f90
  32. +0
    -0
      Simulation/CSounds.f90
  33. +2
    -3
      SimulationCore2.vfproj
  34. +35
    -12
      Simulator.f90
  35. +1
    -1
      TorqueDrag/TD_MainCalculations.f90
  36. +1
    -1
      TorqueDrag/TD_StartUp/TD_DrillStemStartUp.f90
  37. +18
    -21
      TorqueDrag/TorqueDragMain.f90

+ 2
- 2
CSharp/Equipments/ControlPanels/CDataDisplayConsoleVariables.f90 Просмотреть файл

@@ -106,12 +106,12 @@ module CDataDisplayConsoleVariables
subroutine Set_TotalDepth(v)
use CDrillWatchVariables!!, only: DrillingWatch%Depth
use CSimulationVariables, only: SetDistanceDrilled
! use CSimulationVariables, only: SetDistanceDrilled
implicit none
real(8), intent(in) :: v
DataDisplayConsole%TotalWellDepth = v
DrillingWatch%Depth = v
call SetDistanceDrilled(v)
! call SetDistanceDrilled(v)
end subroutine
subroutine Set_BitPosition(v)


+ 1
- 1
CSharp/Equipments/ControlPanels/CDrillingConsole.f90 Просмотреть файл

@@ -1,6 +1,6 @@
module CDrillingConsole
use CDrillingConsoleVariables
use CSimulationVariables
! use CSimulationVariables
use CLog4
use CLog3
implicit none


+ 1
- 1
CSharp/OperationScenarios/Common/COperationScenariosMain.f90 Просмотреть файл

@@ -18,7 +18,7 @@ module COperationScenariosMain
! subroutine OperationScenarios_Init
! use COperationScenariosSettings, OperationScenariosInitialization => Initialization
! implicit none
! call OperationScenariosInitialization()
! call OperationScenariosInitialization()
! end subroutine OperationScenarios_Init
subroutine OperationScenarios_Step


+ 6
- 43
CSharp/OperationScenarios/UnitySignals/CTongEnum.f90 Просмотреть файл

@@ -41,62 +41,25 @@ module CTongEnum
subroutine ButtonPress_Breakout_TongNotification()
implicit none
if (Hoisting%DriveType == TopDrive_DriveType) then
#ifdef OST
print*, 'ButtonPress_Breakout_TongNotification=TopDrive'
#endif

#ifdef OST
print*, 'ButtonPress_Breakout_TongNotification=TopDrive'
#endif
!TOPDRIVE-CODE=70
if (Get_TongNotification()) then
call Set_Tong(TONG_BREAKOUT_BEGIN)
return
end if


endif
if (Hoisting%DriveType == Kelly_DriveType) then
#ifdef OST
print*, 'ButtonPress_Breakout_TongNotification=Kelly'
#endif


#ifdef OST
print*, 'ButtonPress_Breakout_TongNotification=Kelly'
#endif
!OPERATION-CODE=74
if (Get_TongNotification()) then
call Set_Tong(TONG_BREAKOUT_BEGIN)
endif





endif
end subroutine



+ 0
- 1
Data Structures.txt Просмотреть файл

@@ -126,7 +126,6 @@ Equipments:
TD_ROPHole
TD_WellGeneral
TD_WellGeo(:)

FluidFlow:



+ 3
- 0
Equipments/BopStack/BOP.f90 Просмотреть файл

@@ -1,6 +1,9 @@
module BOP
contains
subroutine BopStack_Init
call BOP_StartUp
end subroutine BopStack_Init
subroutine BopStack_Step
USE VARIABLES
USE CBopControlPanelVariables


+ 2
- 2
Equipments/BopStack/KILL_LINE.f90 Просмотреть файл

@@ -6,7 +6,7 @@ SUBROUTINE KILL_LINE
USE CBopStackVariables
USE CBopControlPanelVariables
USE CEquipmentsConstants
use CSimulationVariables
! use CSimulationVariables
implicit none
@@ -152,7 +152,7 @@ SUBROUTINE KILL_LINE_SUB
USE CBopStackVariables
USE CBopControlPanelVariables
USE CEquipmentsConstants
use CSimulationVariables
! use CSimulationVariables

implicit none


+ 3
- 3
Equipments/BopStack/PipeRams1Main.f90 Просмотреть файл

@@ -13,9 +13,9 @@ module PipeRams1Main
! call OnPipeRams1Main%Add(PipeRams1MainBody)
! end subroutine
! subroutine PipeRams1_Init
! implicit none
! end subroutine PipeRams1_Init
subroutine PipeRams1_Init
call BOP_StartUp()
end subroutine PipeRams1_Init
subroutine PipeRams1_Step
use VARIABLES


+ 75
- 134
Equipments/ChokeControl/AirPump_Choke_Subs.f90 Просмотреть файл

@@ -99,28 +99,28 @@ ENDDO


SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER)
USE CHOKEVARIABLES
Use CSimulationVariables
implicit none
INTEGER CHNUMBER
Integer I
loop3: do while (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. AirDrivenPump%ChokeAirFail==0)
if (ChokeControlPanel%ChokeControlLever == 1.0) then
CHOOKE(CHNUMBER)%ChokeIsClosing = .true.
CHOOKE(CHNUMBER)%ChokeIsOpening = .false.
endif
if (ChokeControlPanel%ChokeControlLever == -1.0) then
CHOOKE(CHNUMBER)%ChokeIsOpening = .true.
CHOOKE(CHNUMBER)%ChokeIsClosing = .false.
endif
AirPumpLine%TIME=AirPumpLine%TIME+AirPumpLine%DeltaT_Choke !overal time (s)
call airpump_code_CHOKE(CHNUMBER)
call sleepqq(100)
if (IsStopped == .true.) return
end do loop3 !while finished_Choke==0
end
! SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER)
! USE CHOKEVARIABLES
! Use CSimulationVariables
! implicit none
! INTEGER CHNUMBER
! Integer I
! loop3: do while (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. AirDrivenPump%ChokeAirFail==0)
! if (ChokeControlPanel%ChokeControlLever == 1.0) then
! CHOOKE(CHNUMBER)%ChokeIsClosing = .true.
! CHOOKE(CHNUMBER)%ChokeIsOpening = .false.
! endif
! if (ChokeControlPanel%ChokeControlLever == -1.0) then
! CHOOKE(CHNUMBER)%ChokeIsOpening = .true.
! CHOOKE(CHNUMBER)%ChokeIsClosing = .false.
! endif
! AirPumpLine%TIME=AirPumpLine%TIME+AirPumpLine%DeltaT_Choke !overal time (s)
! call airpump_code_CHOKE(CHNUMBER)
! call sleepqq(100)
! if (IsStopped == .true.) return
! end do loop3 !while finished_Choke==0
! end
@@ -244,40 +244,26 @@ SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER)
ELSE ! Choke2LED==1
ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10
ENDIF
!CALL SetHydraulicChock1(nint(MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)*100))
! CALL SetHydraulicChock2(nint(MIN(CHOOKE(2)%PercentClose / 0.91 , 1.0)*100))

! .91 >> 9 percent clearance
! =================== calculating Area
! AreaChoke=0.5
! .91 >> 9 percent clearance

CHOOKE(1)%AreaChoke=0.01334635-(0.01334635* MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)) !ft^2 0.01334635 is ChokeAreaFullyOpen (ft^2)
CHOOKE(2)%AreaChoke=0.01334635-(0.01334635* MIN(CHOOKE(2)%PercentClose/ 0.91 , 1.0)) !ft^2
!write(*,*) 'CHOOKE(1)%AreaChoke= ' , CHOOKE(1)%AreaChoke

Choke%HydraulicChoke1WashoutCoef= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf
Choke%HydraulicChoke1WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time
Choke%HydraulicChoke2WashoutCoef= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf
Choke%HydraulicChoke2WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time

!write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef
IF (CHOOKE(1)%PlugMalf == 1) THEN
!CALL SetHydraulicChock1(nint(MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)*100))
! CALL SetHydraulicChock2(nint(MIN(CHOOKE(2)%PercentClose / 0.91 , 1.0)*100))
! .91 >> 9 percent clearance

! =================== calculating Area
! AreaChoke=0.5
! .91 >> 9 percent clearance

CHOOKE(1)%AreaChoke=0.01334635-(0.01334635* MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)) !ft^2 0.01334635 is ChokeAreaFullyOpen (ft^2)
CHOOKE(2)%AreaChoke=0.01334635-(0.01334635* MIN(CHOOKE(2)%PercentClose/ 0.91 , 1.0)) !ft^2
Choke%HydraulicChoke1WashoutCoef= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf
Choke%HydraulicChoke1WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time
Choke%HydraulicChoke2WashoutCoef= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf
Choke%HydraulicChoke2WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time
!write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef
IF (CHOOKE(1)%PlugMalf == 1) THEN
Choke%Present_HydraulicChoke1Plug= Choke%Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf
! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay
! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent
!write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then
@@ -285,106 +271,61 @@ SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER)
Choke%Plug1TimeCounter = 0
!write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug
endif
Choke%Plug1TimeCounter= Choke%Plug1TimeCounter + 1

Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent
if (Choke%Plug1TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=600
Choke%Present_HydraulicChoke1Plug = Choke%Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((Choke%DeltaPlug1Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0
endif
!write(*,*) 'Present_HydraulicChoke1Plug=' , Present_HydraulicChoke1Plug
ENDIF
!write(*,*) 'Present_HydraulicChoke1Plug=' , Present_HydraulicChoke1Plug
ENDIF
IF (CHOOKE(2)%PlugMalf == 1) THEN

IF (CHOOKE(2)%PlugMalf == 1) THEN
Choke%Present_HydraulicChoke2Plug= Choke%Present_HydraulicChoke2Plug * CHOOKE(2)%PlugMalf
! integer: HydraulicChoke2PluggedPercent,HydraulicChoke2PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay
! real: Present_HydraulicChoke2Plug,DeltaPlug2Percent
if ( (ChokeProblems%HydraulicChoke2PluggedPercent - Choke%HydraulicChoke2PluggedPercent_Old) /= 0 ) then
Choke%DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Choke%Present_HydraulicChoke2Plug
Choke%Plug2TimeCounter = 0
endif
Choke%Plug2TimeCounter= Choke%Plug2TimeCounter + 1

Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent
if (Choke%Plug2TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=600
Choke%Present_HydraulicChoke2Plug = Choke%Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((Choke%DeltaPlug2Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0
endif
ENDIF
! fully open area is 123/64 in^2 = 0.01334635 ft^2
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*Choke%HydraulicChoke1WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup
endif
ENDIF

! fully open area is 123/64 in^2 = 0.01334635 ft^2
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*Choke%HydraulicChoke1WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup
!write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Choke%Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*Choke%HydraulicChoke2WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Choke%Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup
!write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke
CHOOKE(1)%AreaChokeFinal= CHOOKE(1)%AreaChoke
CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke
! 144: ft^2 to in^2
CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve
CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve
!write(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100
!write(*,*) 'ChokePosition=' , ChokePosition ! close position 0 to 10 for display
!write(*,*) 'CHOOKE(1)%AreaChokeFinal=' , CHOOKE(1)%AreaChokeFinal ! Open Area (in^2) with clearance
!write(*,*) '(ChokeAreaFullyOpen/144.)=' , (ChokeAreaFullyOpen/144.)
!write(*,*) 'valve value=' , 100 - nint((CHOOKE(1)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100) ! percent close 0 to 100 with clearance
!write(*,*) 'Valve(33)%Status=' , Valve(33)%Status ! T : open , F: close

! =================== calculating Area
!write(*,*) 'CHOOKE(1)%AreaChoke= ' , CHOOKE(1)%AreaChoke

! WRITE(150,50) alpha_timeair,alpha_Qair,alpha_pairp, &
! alpha_Pdownstrem,alpha_diffpair,alpha_lossesair,CHOOKE(CHNUMBER)%PassedCourse
!50 FORMAT(7(f15.5))

!========================================================================================
!========================================================================================
!write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Choke%Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*Choke%HydraulicChoke2WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Choke%Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup
!write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke
CHOOKE(1)%AreaChokeFinal= CHOOKE(1)%AreaChoke
CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke
! 144: ft^2 to in^2
CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve
CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve
!write(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100
!write(*,*) 'ChokePosition=' , ChokePosition ! close position 0 to 10 for display
!write(*,*) 'CHOOKE(1)%AreaChokeFinal=' , CHOOKE(1)%AreaChokeFinal ! Open Area (in^2) with clearance
!write(*,*) '(ChokeAreaFullyOpen/144.)=' , (ChokeAreaFullyOpen/144.)
!write(*,*) 'valve value=' , 100 - nint((CHOOKE(1)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100) ! percent close 0 to 100 with clearance
!write(*,*) 'Valve(33)%Status=' , Valve(33)%Status ! T : open , F: close
! =================== calculating Area
!write(*,*) 'CHOOKE(1)%AreaChoke= ' , CHOOKE(1)%AreaChoke
!WRITE(150,50) alpha_timeair,alpha_Qair,alpha_pairp, &
!alpha_Pdownstrem,alpha_diffpair,alpha_lossesair,CHOOKE(CHNUMBER)%PassedCourse
!50 FORMAT(7(f15.5))
!========================================================================================
!========================================================================================
! write(*,*) PassedCourse
end

+ 35
- 26
Equipments/ChokeControl/CHOKE.f90 Просмотреть файл

@@ -10,31 +10,40 @@ module ChokeModule
contains
subroutine CHOKE_MainBody
implicit none
Integer I
INTEGER CHNUMBER
!===========================================================================
!StandPipePressureChoke= STGauge_Pressure ! from module mud system
!CasingPressure = CasingPressureDataDisplay
!===========================================================================
!
! HYDRAULIC CHOKE CONTROL
!
!===========================================================================
IF(ChokeControlPanel%ChokeSelectorSwitch== 1) THEN
ChokeControlPanel%Choke1LED=1
ChokeControlPanel%Choke2LED=0
CHNUMBER=1
ELSE
ChokeControlPanel%Choke2LED=1
ChokeControlPanel%Choke1LED=0
CHNUMBER=2
ENDIF
if (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. (CHOOKE(1)%FailMalf==0 .OR. CHOOKE(2)%FailMalf==0)) then
CALL PIPE_RAMS_CHOKE(CHNUMBER)
end if
! function CHOKE_MainBody1 result(CHNUMBER)
! implicit none
! INTEGER CHNUMBER
! IF(ChokeControlPanel%ChokeSelectorSwitch== 1) THEN
! ChokeControlPanel%Choke1LED=1
! ChokeControlPanel%Choke2LED=0
! CHNUMBER=1
! ELSE
! ChokeControlPanel%Choke2LED=1
! ChokeControlPanel%Choke1LED=0
! CHNUMBER=2
! ENDIF
! end function CHOKE_MainBody1
! CALL PIPE_RAMS_CHOKE(CHNUMBER)

! subroutine Choke_innerLoop
! ! do while (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. AirDrivenPump%ChokeAirFail==0)
! if (ChokeControlPanel%ChokeControlLever == 1.0) then
! CHOOKE(CHNUMBER)%ChokeIsClosing = .true.
! CHOOKE(CHNUMBER)%ChokeIsOpening = .false.
! endif
! if (ChokeControlPanel%ChokeControlLever == -1.0) then
! CHOOKE(CHNUMBER)%ChokeIsOpening = .true.
! CHOOKE(CHNUMBER)%ChokeIsClosing = .false.
! endif
! AirPumpLine%TIME=AirPumpLine%TIME+AirPumpLine%DeltaT_Choke !overal time (s)
! call airpump_code_CHOKE(CHNUMBER)
! ! call sleepqq(100)
! ! if (IsStopped == .true.) return
! ! enddo
! end if
! end subroutine Choke_innerLoop
subroutine CHOKE_MainBody2
IF (ChokeControlPanel%Choke1LED==1) THEN
ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 ! display monitor
ELSE ! Choke2LED==1
@@ -121,6 +130,6 @@ module ChokeModule
!===========================================================================
!************************* IN MUD SYSTEM MODULE*************************
end subroutine CHOKE_MainBody
end subroutine CHOKE_MainBody2

end module ChokeModule

+ 29
- 4
Equipments/ChokeControl/ChokeControlMain.f90 Просмотреть файл

@@ -1,4 +1,5 @@
module ChokeControlMain
use CHOKEVARIABLES
implicit none
public
contains
@@ -13,14 +14,38 @@ module ChokeControlMain
! call OnChokeControlMain%Add(ChokeControlMainBody)
! end subroutine
! subroutine ChokeControl_Init
! implicit none
! end subroutine ChokeControl_Init
subroutine ChokeControl_Init
call Choke_StartUp
end subroutine ChokeControl_Init
subroutine ChokeControl_Step
use ChokeModule
implicit none
CALL CHOKE_MainBody
INTEGER CHNUMBER

IF(ChokeControlPanel%ChokeSelectorSwitch== 1) THEN
ChokeControlPanel%Choke1LED=1
ChokeControlPanel%Choke2LED=0
CHNUMBER=1
ELSE
ChokeControlPanel%Choke2LED=1
ChokeControlPanel%Choke1LED=0
CHNUMBER=2
ENDIF
if(ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. AirDrivenPump%ChokeAirFail==0) then
if (ChokeControlPanel%ChokeControlLever == 1.0) then
CHOOKE(CHNUMBER)%ChokeIsClosing = .true.
CHOOKE(CHNUMBER)%ChokeIsOpening = .false.
endif
if (ChokeControlPanel%ChokeControlLever == -1.0) then
CHOOKE(CHNUMBER)%ChokeIsOpening = .true.
CHOOKE(CHNUMBER)%ChokeIsClosing = .false.
endif
AirPumpLine%TIME=AirPumpLine%TIME+AirPumpLine%DeltaT_Choke !overal time (s)
call airpump_code_CHOKE(CHNUMBER)
else
call CHOKE_MainBody2()
endif
end subroutine ChokeControl_Step
! subroutine ChokeControl_Output


+ 14
- 29
Equipments/Drawworks/DrawworksMain.f90 Просмотреть файл

@@ -3,45 +3,30 @@ module DrawworksMain
public
contains
subroutine Drawworks_Setup()
use CSimulationVariables
implicit none
call OnSimulationInitialization%Add(Drawworks_Init)
call OnSimulationStop%Add(Drawworks_Init)
call OnDrawworksStep%Add(Drawworks_Step)
call OnDrawworksOutput%Add(Drawworks_Output)
call OnDrawworksMain%Add(DrawworksMainBody)
end subroutine
! subroutine Drawworks_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(Drawworks_Init)
! call OnSimulationStop%Add(Drawworks_Init)
! call OnDrawworksStep%Add(Drawworks_Step)
! call OnDrawworksOutput%Add(Drawworks_Output)
! call OnDrawworksMain%Add(DrawworksMainBody)
! end subroutine
subroutine Drawworks_Init
implicit none
call Drawworks_StartUp
end subroutine Drawworks_Init
subroutine Drawworks_Step
implicit none
call Drawworks_MainSolver
end subroutine Drawworks_Step
subroutine Drawworks_Output
implicit none
end subroutine Drawworks_Output
subroutine DrawworksMainBody
subroutine DrawworksMainBody
Use Drawworks_VARIABLES
implicit none
Call Drawworks_StartUp
loopdrawsim : do
Call Drawworks_MainSolver
end do loopdrawsim
end do loopdrawsim
end subroutine DrawworksMainBody
end module DrawworksMain

+ 1
- 1
Equipments/Drawworks/Drawworks_INPUTS.f90 Просмотреть файл

@@ -1,7 +1,7 @@
subroutine Drawworks_Inputs

Use CDrillingConsoleVariables
Use CSimulationVariables
! Use CSimulationVariables
Use COperationScenariosVariables
Use CWarningsVariables
Use VARIABLES


+ 149
- 308
Equipments/MudSystem/MudSystem.f90 Просмотреть файл

@@ -633,7 +633,7 @@ module MudSystemModule
use CTanksVariables
Use KickVariables
Use CHoistingVariables
use CSimulationVariables
! use CSimulationVariables
implicit none
Integer I
@@ -647,87 +647,64 @@ module MudSystemModule
if (PumpsSpecification%MudPump1ReliefValveIsSet==.false.) PumpsSpecification%MudPump1ReliefValvePressure=6000.
if (PumpsSpecification%MudPump2ReliefValveIsSet==.false.) PumpsSpecification%MudPump2ReliefValvePressure=6000.
if (PumpsSpecification%CementPumpReliefValveIsSet==.false.) PumpsSpecification%CementPumpReliefValvePressure=6000.
!===========================================================================================================================
!===========================================================================================================================
! >>> Should Be on Top of Other Codes <<<
!===========================================================================================================================
!===========================================================================================================================
! >>> Should Be on Top of Other Codes <<<
!ActiveTankVolume= ActiveMudVolumeGal ! update from student input
!ActiveTankDensity= ActiveDensity ! update from student input
!ReserveTankVolume= ReserveMudVolumeGal ! update from student input
!ReserveTankDensity= ReserveDensity ! update from student input
!ActiveTankVolume= ActiveMudVolumeGal ! update from student input
!ActiveTankDensity= ActiveDensity ! update from student input
!ReserveTankVolume= ReserveMudVolumeGal ! update from student input
!ReserveTankDensity= ReserveDensity ! update from student input
if (j7 > 0) then !ActiveTankToDump
MudSystem%ActiveTankDensity= 0.
MudSystem%ActiveTankVolume= 0.
endif
endif
if (j8 > 0) then !TripTankToDump
MudSystem%TripTankDensityCalc= 0.
MudSystem%TripTankVolumeCalc= 0.
endif
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
if (j15 > 0) then !MudPumps1&2ToActiveTank_Through65&66
!write(*,*) 'j15 is open'
! << if H82 or H83 or H4 are open, no flow goes to other parts of system >>
! << if H82 or H83 or H4 are open, no flow goes to other parts of system >>
if (j2>0) Mp1Coef= 1.0
if (j12>0) Mp2Coef= 1.0
if (j2 /= 0 .or. j12/= 0) then

MudSystem%ActiveTankDensity = (MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume+ Mp1Coef*MudSystem%Mp1Density*(PUMP(1)%Flow_Rate*MudSystem%DeltaT_Mudline/60.) + Mp2Coef*MudSystem%Mp2Density*(PUMP(2)%Flow_Rate*MudSystem%DeltaT_Mudline/60.))/ &
(MudSystem%ActiveTankVolume+ Mp1Coef*(PUMP(1)%Flow_Rate*MudSystem%DeltaT_Mudline/60.) + Mp2Coef*(PUMP(2)%Flow_Rate*MudSystem%DeltaT_Mudline/60.))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ Mp1Coef*PUMP(1)%Flow_Rate*MudSystem%DeltaT_Mudline/60. + Mp2Coef*PUMP(2)%Flow_Rate*MudSystem%DeltaT_Mudline/60.
!write(*,*) 'active by j15'
MudSystem%ActiveTankDensity = (MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume+ Mp1Coef*MudSystem%Mp1Density*(PUMP(1)%Flow_Rate*MudSystem%DeltaT_Mudline/60.) + Mp2Coef*MudSystem%Mp2Density*(PUMP(2)%Flow_Rate*MudSystem%DeltaT_Mudline/60.))/ &
(MudSystem%ActiveTankVolume+ Mp1Coef*(PUMP(1)%Flow_Rate*MudSystem%DeltaT_Mudline/60.) + Mp2Coef*(PUMP(2)%Flow_Rate*MudSystem%DeltaT_Mudline/60.))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ Mp1Coef*PUMP(1)%Flow_Rate*MudSystem%DeltaT_Mudline/60. + Mp2Coef*PUMP(2)%Flow_Rate*MudSystem%DeltaT_Mudline/60.
!write(*,*) 'active by j15'
endif
MudSystem%ActiveTankVolume=min(MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal)
!if ActiveTankVolume is higher, excess amount is dumped
MudSystem%ActiveTankVolume=min(MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal)
!if ActiveTankVolume is higher, excess amount is dumped
endif
if (H84 > 0.0) then !CementPumpToCementTank_Through67
if (H84 > 0.0) then !CementPumpToCementTank_Through67
if (j13>0) CpCoef= 1.0
MudSystem%CementTankDensityCalc= (MudSystem%CementTankDensityCalc*MudSystem%CementTankVolumeCalc+ CpCoef*MudSystem%Mp3Density*(PUMP(3)%Flow_Rate*MudSystem%DeltaT_Mudline/60.) ) / &
(MudSystem%CementTankVolumeCalc+CpCoef*(PUMP(3)%Flow_Rate*MudSystem%DeltaT_Mudline/60.))
MudSystem%CementTankVolumeCalc= MudSystem%CementTankVolumeCalc+ CpCoef*(PUMP(3)%Flow_Rate*MudSystem%DeltaT_Mudline/60.)

MudSystem%CementTankDensityCalc= (MudSystem%CementTankDensityCalc*MudSystem%CementTankVolumeCalc+ CpCoef*MudSystem%Mp3Density*(PUMP(3)%Flow_Rate*MudSystem%DeltaT_Mudline/60.) ) / &
(MudSystem%CementTankVolumeCalc+CpCoef*(PUMP(3)%Flow_Rate*MudSystem%DeltaT_Mudline/60.))
MudSystem%CementTankVolumeCalc= MudSystem%CementTankVolumeCalc+ CpCoef*(PUMP(3)%Flow_Rate*MudSystem%DeltaT_Mudline/60.)
endif
!===========================================================================================================================
!===========================================================================================================================
! DUMP Path
!===========================================================================================================================
!===========================================================================================================================
! DUMP Path
MudSystem%PumpsDumpVolume= MudSystem%PumpsDumpVolume+ (jj2*(1-H82)*DumpPump1*PUMP(1)%Flow_Rate + jj12*(1-H83)*DumpPump2*PUMP(2)%Flow_Rate + jj13*(1-H84)*DumpCementPump*PUMP(3)%Flow_Rate) *MudSystem%DeltaT_Mudline/60.
MudSystem%PumpsDumpFlowRate= jj2*(1-H82)*DumpPump1*PUMP(1)%Flow_Rate + jj12*(1-H83)*DumpPump2*PUMP(2)%Flow_Rate + jj13*(1-H84)*DumpCementPump*PUMP(3)%Flow_Rate
!write(*,*) 'PumpsDumpFlowRate=' , PumpsDumpFlowRate
!write(*,*) 'PumpsDumpFlowRate=' , PumpsDumpFlowRate

if (Hoisting%DriveType==1 .and. MudSystem%PumpsDumpFlowRate > 0.0 .and. (DumpFromKelly_Pump1 .or. DumpFromKelly_Pump2 .or. DumpFromKelly_Pump3)) then
!write(*,*) 'Set_FlowFromKelly(.TRUE.)'
call Activate_PumpWithKellyDisconnected()
!write(*,*) 'PumpsDumpFlowRate=' , PumpsDumpFlowRate
!write(*,*) 'PumpsDumpFlowRate=' , PumpsDumpFlowRate
CALL Set_FlowFromKelly(min(MudSystem%PumpsDumpFlowRate/6.,100.)) ! .TRUE. before
elseif (Hoisting%DriveType==1) then
call Deactivate_PumpWithKellyDisconnected()
CALL Set_FlowFromKelly(0.0) ! .FALSE. before
!write(*,*) 'Set_FlowFromKelly(.FALSE.)'

endif
!write(*,*) 'DumpFromFillupHead_Pump1=' , DumpFromFillupHead_Pump1

if (Hoisting%DriveType==0 .and. MudSystem%PumpsDumpFlowRate > 0.0 .and. (DumpFromTopDrive_Pump1 .or. DumpFromTopDrive_Pump2 .or. DumpFromTopDrive_Pump3)) then
!write(*,*) 'Set_FlowFromKelly(.TRUE.)'
call Activate_PumpWithTopdriveDisconnected()
@@ -736,106 +713,85 @@ module MudSystemModule
call Deactivate_PumpWithTopdriveDisconnected()
CALL Set_FlowFromKelly(0.0) ! .FALSE. before
!write(*,*) 'Set_FlowFromKelly(.FALSE.)'

endif

if (MudSystem%PumpsDumpFlowRate > 0.0 .and. (DumpFromFillupHead_Pump1 .or. DumpFromFillupHead_Pump2 .or. DumpFromFillupHead_Pump3)) then
endif
if (MudSystem%PumpsDumpFlowRate > 0.0 .and. (DumpFromFillupHead_Pump1 .or. DumpFromFillupHead_Pump2 .or. DumpFromFillupHead_Pump3)) then
!call Activate_PumpWithKellyDisconnected()
CALL Set_FlowFromFillupHead(min(MudSystem%PumpsDumpFlowRate/6.,100.)) ! .TRUE. before
else
!call Deactivate_PumpWithKellyDisconnected()
CALL Set_FlowFromFillupHead(0.0) ! .FALSE. before

endif
!####C_Program -----> DriveType =
! = 0 TopDrive_DriveType
! = 1 Kelly_DriveType
!===========================================================================================================================
!===========================================================================================================================
! ****** Calculating Maximum Working Pressure
!####C_Program -----> DriveType =
! = 0 TopDrive_DriveType
! = 1 Kelly_DriveType
!===========================================================================================================================
!===========================================================================================================================
! ****** Calculating Maximum Working Pressure
if (PumpsSpecification%MudPump1ReliefValveIsSet) then
MaxWorkingPressure1= PumpsSpecification%MudPump1ReliefValvePressure
else
MaxWorkingPressure1= 6000. !psi
endif
endif
if (PumpsSpecification%MudPump2ReliefValveIsSet) then
MaxWorkingPressure2= PumpsSpecification%MudPump2ReliefValvePressure
else
MaxWorkingPressure2= 6000. !psi
endif
if (PumpsSpecification%CementPumpReliefValveIsSet) then
MaxWorkingPressure3= PumpsSpecification%CementPumpReliefValveIsSet
else
MaxWorkingPressure3= 6000. !psi
endif

if (State1) then
MaxWorkingPressure= min(MaxWorkingPressure1 , MaxWorkingPressure2 , MaxWorkingPressure3)
MaxWorkingPressure1= MaxWorkingPressure
MaxWorkingPressure2= MaxWorkingPressure
MaxWorkingPressure3= MaxWorkingPressure
endif
if (State2) then
MaxWorkingPressure= min(MaxWorkingPressure1 , MaxWorkingPressure2)
MaxWorkingPressure1= MaxWorkingPressure
MaxWorkingPressure2= MaxWorkingPressure
endif
if (State3) then
MaxWorkingPressure= min(MaxWorkingPressure1 , MaxWorkingPressure3)
MaxWorkingPressure1= MaxWorkingPressure
MaxWorkingPressure3= MaxWorkingPressure
endif
if (State4) then
MaxWorkingPressure= min(MaxWorkingPressure2 , MaxWorkingPressure3)
MaxWorkingPressure2= MaxWorkingPressure
MaxWorkingPressure3= MaxWorkingPressure
endif
! Calculating Maximum Working Pressure ******

!===========================================================================================================================
!===========================================================================================================================
! ****** Blown Conditions
endif
! Calculating Maximum Working Pressure ******
!===========================================================================================================================
!===========================================================================================================================
! ****** Blown Conditions
!G: PumpsToString Coefficient
!jJ2,Jj12,Jj13: TanksToMudPump Coefficient
!H: Pumps To Tank_Through65 or 67 Coefficient
!G: PumpsToString Coefficient
!jJ2,Jj12,Jj13: TanksToMudPump Coefficient
!H: Pumps To Tank_Through65 or 67 Coefficient

!write(*,*) 'j12=' , j12
!write(*,*) 'H83=' , H83
!write(*,*) 'DumpPump2=' , DumpPump2
!write(*,*) 'G83=' , G83
!write(*,*) 'j12=' , j12
!write(*,*) 'H83=' , H83
!write(*,*) 'DumpPump2=' , DumpPump2
!write(*,*) 'G83=' , G83
PumpPressure1= jj2*(1-H82)*(1-DumpPump1)*G82* PressureGauges(1)
PumpPressure2= jj12*(1-H83)*(1-DumpPump2)*G83* PressureGauges(1)
PumpPressure3= jj13*(1-H84)*(1-DumpCementPump)*G84* PressureGauges(1)
!
!write(*,*) 'jj2 , H82 , DumpPump1 , G82,PresCsureGauges(1)=' , jj2 , H82 , DumpPump1 , G82,PressureGauges(1)
!write(*,*) '1)PumpPressure1=' , PumpPressure1
!write(*,*) '1)PumpPressure1=' , PumpPressure1
!write(*,*) 'PumpPressure2=' , PumpPressure2
PumpToManifoldMudVol = 3.0 * 42.0
!PumpToManifoldCompressedMudVol = PumpToManifoldCompressedMudVol + MP1_Q / ConvMinToSec * dt
!PumpToManifoldDeltaPDueToCompressibility = PumpToManifoldCompressedMudVol / (MudCompressibility * PumpToManifoldMudVol)
IF(Mp1_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_82 .and. MP1_Q > 0.0) then
PumpToManifoldCompressedMudVol = PumpToManifoldCompressedMudVol + MP1_Q / ConvMinToSec * dt
PumpPressure1= PumpToManifoldCompressedMudVol / (MudCompressibility * PumpToManifoldMudVol)
write(*,*) '21)PumpPressure1=' , PumpPressure1
write(*,*) '21)PumpPressure1=' , PumpPressure1
WRITE (*,*) ' valve 1 ', Manifold%Valve(1)%Status
WRITE (*,*) ' valve 4 ', Manifold%Valve(4)%Status
WRITE (*,*) ' valve 6 ', Manifold%Valve(6)%Status
@@ -846,16 +802,13 @@ module MudSystemModule
WRITE (*,*) ' valve 68 ', Manifold%Valve(68)%Status
WRITE (*,*) ' valve 69 ', Manifold%Valve(69)%Status
WRITE (*,*) ' valve 48 ', Manifold%Valve(48)%Status
!call DisplayOpenPathsWrite()
ENDIF
IF(Mp2_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_83 .and. MP2_Q > 0.0 ) then
PumpToManifoldCompressedMudVol = PumpToManifoldCompressedMudVol + MP2_Q / ConvMinToSec * dt
PumpPressure2= PumpToManifoldCompressedMudVol / (MudCompressibility * PumpToManifoldMudVol)
write(*,*) '22)PumpPressure1=' , PumpPressure2
write(*,*) '22)PumpPressure1=' , PumpPressure2
WRITE (*,*) ' -valve 1 ', Manifold%Valve(1)%Status
WRITE (*,*) ' -valve 4 ', Manifold%Valve(4)%Status
WRITE (*,*) ' -valve 6 ', Manifold%Valve(6)%Status
@@ -866,20 +819,16 @@ module MudSystemModule
WRITE (*,*) ' -valve 68 ', Manifold%Valve(68)%Status
WRITE (*,*) ' -valve 69 ', Manifold%Valve(69)%Status
WRITE (*,*) ' -valve 48 ', Manifold%Valve(48)%Status
!call DisplayOpenPathsWrites()
ENDIF
ENDIF

IF(Cp_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_84 .AND. MP3_Q > 0.0 ) then
PumpToManifoldCompressedMudVol = PumpToManifoldCompressedMudVol + MP3_Q / ConvMinToSec * dt
PumpPressure3= PumpToManifoldCompressedMudVol / (MudCompressibility * PumpToManifoldMudVol)
ENDIF
!*****************************************************************************
!if(((Mp1_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_82) .or. ( PumpPressure1 >= MaxWorkingPressure1 ) &
!.or.(J14> 0 .and. j4==0 .and. j9==0 .and. NOT(ALLOCATED(GasPocketWeight%Array)))) .and. MP1_Q > 0.0 ) then
!*****************************************************************************
!if(((Mp1_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_82) .or. ( PumpPressure1 >= MaxWorkingPressure1 ) &
!.or.(J14> 0 .and. j4==0 .and. j9==0 .and. NOT(ALLOCATED(GasPocketWeight%Array)))) .and. MP1_Q > 0.0 ) then
!write(*,*) ' failurrrrre '

if (PumpPressure1 >= MaxWorkingPressure1 .and. MP1_Q > 0.0) then
@@ -907,15 +856,11 @@ module MudSystemModule
!write(*,*) 'Pump1BlownStarted = .FALSE.'
endif
!write(*,*) ' valve 65=' , Valve(65)%Status


!write(*,*) ' valve 65=' , Valve(65)%Status
!if(((Mp2_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_83) .or. PumpPressure2 >= MaxWorkingPressure2 &
!.or.(J14> 0 .and. j4==0 .and. j9==0 .and. NOT(ALLOCATED(GasPocketWeight%Array))) ) .and. MP2_Q > 0.0 ) then

if(PumpPressure2 >= MaxWorkingPressure2 .and. MP2_Q > 0.0 ) then

write(*,*) 'mp2,if=' , PumpPressure2 , MaxWorkingPressure2 , MP2_Q
MudSystem%Pump2BlownCount = MudSystem%Pump2BlownCount + 1
!if (Pump2BlownStarted == .FALSE. ) then
@@ -937,9 +882,8 @@ module MudSystemModule
!Pump2BlownInTimeStep = 0
!Pump2BlownStarted = .FALSE.
endif

!if(((Cp_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_84) .or. PumpPressure3 >= MaxWorkingPressure3 &
!.or.(J14> 0 .and. j4==0 .and. j9==0 .and. NOT(ALLOCATED(GasPocketWeight%Array)))) .and. MP3_Q > 0.0 ) then
!if(((Cp_NoPath == 1 .and. ThereIsPathFrom_71_72_73_To_84) .or. PumpPressure3 >= MaxWorkingPressure3 &
!.or.(J14> 0 .and. j4==0 .and. j9==0 .and. NOT(ALLOCATED(GasPocketWeight%Array)))) .and. MP3_Q > 0.0 ) then
if(PumpPressure3 >= MaxWorkingPressure3 .and. MP3_Q > 0.0 ) then
MudSystem%Pump3BlownCount = MudSystem%Pump3BlownCount + 1
@@ -955,9 +899,7 @@ module MudSystemModule
!Pump3BlownInTimeStep = 0
!Pump3BlownStarted = .FALSE.
endif

!write(*,*) '3)PumpPressure1=' , PumpPressure1
if (PumpPressure1>= 6000.) then
MudSystem%Pump1BlownCount = MudSystem%Pump1BlownCount + 1
if(MudSystem%Pump1BlownCount >= BlownThreshold) then
@@ -998,69 +940,45 @@ module MudSystemModule
!else
!Pump3BlownInTimeStep = 0
!Pump3BlownStarted = .FALSE.
endif
! Blown Conditions ********
!===========================================================================================================================
!===========================================================================================================================
endif
! Blown Conditions ********
!===========================================================================================================================
!===========================================================================================================================
if (j9 > 0 ) then !.and. WellisNOTFull== .false.) then !WellToBellNipple
!write(*,*) 'j9 is open'

!MUD(7)%Q= ( Ann_Saved_MudDischarged_Volume_Final+Ann_Kick_Saved_Volume_Final - ((Qlost/60.0d0)*DeltaT_Mudline) )*60.d0/DeltaT_Mudline
MUD(7)%Q= ( MudSystem%MudVolume_InjectedFromAnn + MudSystem%Ann_Kick_Saved_Volume )*60.d0/MudSystem%DeltaT_Mudline !Injected is referred only to Mud
if (j4 > 0) then
BellNipple_FlowCoef= 13.625/(13.625+BopStackSpecification%ChokeLineId) ! 13.625= BellNipple ID (inch)
MUD(7)%Q= BellNipple_FlowCoef * MUD(7)%Q
endif
!total_annFlow= total_annFlow+(AnnulusFlowRateFinal/600.d0)
!total_DeltaVPipe= total_DeltaVPipe + DeltaVolumePipe
!write(*,*) 'total_annFlow,total_DeltaVPipe' , total_annFlow,total_DeltaVPipe
if (MUD(7)%Q < 0.0 ) MUD(7)%Q= 0.0 !.or. WellisNOTFull== .true.) MUD(7)%Q= 0.0
!!AnnulusFlowRateFinal: flow from string mud , DeltaVolumeOp: due to trip in
!write(*,*) 'MUD(7)%Q=' , MUD(7)%Q
!write(*,*) 'MudSystem%MudVolume_InjectedFromAnn-WellToBellNipple=' , MudSystem%MudVolume_InjectedFromAnn
!write(*,*) 'Ann_Kick_Saved_Volume=' , Ann_Kick_Saved_Volume
sys_total_injected= sys_total_injected+ MudSystem%MudVolume_InjectedFromAnn
if (ChokeControlPanel%ChokePanelStrokeResetSwitch == 1) then
sys_total_injected= 0.
endif
!write(*,*) 'sys_total_injected=' , sys_total_injected

!WellOutletDensity= Ann_Density%Last() ! (ppg) <<< in CirculationCodeSelect Code


!MUD(7)%Q= ( Ann_Saved_MudDischarged_Volume_Final+Ann_Kick_Saved_Volume_Final - ((Qlost/60.0d0)*DeltaT_Mudline) )*60.d0/DeltaT_Mudline
MUD(7)%Q= ( MudSystem%MudVolume_InjectedFromAnn + MudSystem%Ann_Kick_Saved_Volume )*60.d0/MudSystem%DeltaT_Mudline !Injected is referred only to Mud
if (j4 > 0) then
BellNipple_FlowCoef= 13.625/(13.625+BopStackSpecification%ChokeLineId) ! 13.625= BellNipple ID (inch)
MUD(7)%Q= BellNipple_FlowCoef * MUD(7)%Q
endif
!total_annFlow= total_annFlow+(AnnulusFlowRateFinal/600.d0)
!total_DeltaVPipe= total_DeltaVPipe + DeltaVolumePipe
!write(*,*) 'total_annFlow,total_DeltaVPipe' , total_annFlow,total_DeltaVPipe
if (MUD(7)%Q < 0.0 ) MUD(7)%Q= 0.0 !.or. WellisNOTFull== .true.) MUD(7)%Q= 0.0
!!AnnulusFlowRateFinal: flow from string mud , DeltaVolumeOp: due to trip in
!write(*,*) 'MUD(7)%Q=' , MUD(7)%Q
!write(*,*) 'MudSystem%MudVolume_InjectedFromAnn-WellToBellNipple=' , MudSystem%MudVolume_InjectedFromAnn
!write(*,*) 'Ann_Kick_Saved_Volume=' , Ann_Kick_Saved_Volume
sys_total_injected= sys_total_injected+ MudSystem%MudVolume_InjectedFromAnn
if (ChokeControlPanel%ChokePanelStrokeResetSwitch == 1) then
sys_total_injected= 0.
endif
!write(*,*) 'sys_total_injected=' , sys_total_injected
!WellOutletDensity= Ann_Density%Last() ! (ppg) <<< in CirculationCodeSelect Code
if ((MudSystem%BellNippleVolume+((MUD(7)%Q/60.)*MudSystem%DeltaT_Mudline)) /= 0.0) then

MudSystem%BellNippleDensity= ((MudSystem%BellNippleDensity*MudSystem%BellNippleVolume)+(MudSystem%WellOutletDensity*(MUD(7)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%BellNippleVolume+((MUD(7)%Q/60.)*MudSystem%DeltaT_Mudline))
else
MudSystem%BellNippleDensity= 0.0
endif


!IF (WellisNOTFull== .false.) THEN ! well must be full to do this order
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume+ ((MUD(7)%Q/60.)*MudSystem%DeltaT_Mudline)
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume+ ((MUD(7)%Q/60.)*MudSystem%DeltaT_Mudline)
!ENDIF

VolumeToBellNipple= VolumeToBellNipple + MudSystem%BellNippleVolume
!write(*,*) 'VolumeToBellNipple*****=' , VolumeToBellNipple
!write(*,*) 'BellNippleVolume in j9=' , BellNippleVolume , MUD(7)%Q
VolumeToBellNipple= VolumeToBellNipple + MudSystem%BellNippleVolume
!write(*,*) 'VolumeToBellNipple*****=' , VolumeToBellNipple
!write(*,*) 'BellNippleVolume in j9=' , BellNippleVolume , MUD(7)%Q
endif
if (j9 == 0 ) then !.or. WellisNOTFull== .true.) then
@@ -1073,12 +991,8 @@ module MudSystemModule
else
MudSystem%WellToPitsOpen= .false.
endif
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
if (j10 > 0) then !MudBucketToBellNipple
!write(*,*) 'j10 is open'
!MudBucketVolume= 0.
@@ -1088,182 +1002,109 @@ module MudSystemModule
MudSystem%BellNippleDensity= MudSystem%ActiveTankDensity
MudSystem%MudBucketVolume= 0.
endif
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
if (j6 > 0) then !TripTankToActiveTank And BellNipple
!write(*,*) 'j6 is open'
!write(*,*) 'active by j6'
MUD(6)%Q= 300. ! constant flow rate(gpm)

MudSystem%TripTankVolumeCalc= MudSystem%TripTankVolumeCalc - ((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)

!write(*,*) 'ActiveTankVolume before=', ActiveTankVolume
if (j6 == 1 .and. D71==1) then
!write(*,*) 'add to active'
MudSystem%ActiveTankDensity= ((MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume)+(MudSystem%TripTankDensityCalc*(MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%ActiveTankVolume+((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
!write(*,*) 'ActiveTankVolume after=', ActiveTankVolume
endif
if (j6 == 1 .and. D80==1) then
MudSystem%BellNippleDensity= ((MudSystem%BellNippleDensity*MudSystem%BellNippleVolume)+(MudSystem%TripTankDensityCalc*(MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%BellNippleVolume+((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume+ ((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
endif
if (j6 == 2) then
MudSystem%ActiveTankDensity= ((MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume)+(MudSystem%TripTankDensityCalc*(0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%ActiveTankVolume+((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%BellNippleDensity= ((MudSystem%BellNippleDensity*MudSystem%BellNippleVolume)+(MudSystem%TripTankDensityCalc*(0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%BellNippleVolume+((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%TripTankVolumeCalc= MudSystem%TripTankVolumeCalc - ((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
!write(*,*) 'ActiveTankVolume before=', ActiveTankVolume
if (j6 == 1 .and. D71==1) then
!write(*,*) 'add to active'
MudSystem%ActiveTankDensity= ((MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume)+(MudSystem%TripTankDensityCalc*(MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%ActiveTankVolume+((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
!write(*,*) 'ActiveTankVolume after=', ActiveTankVolume
endif
if (j6 == 1 .and. D80==1) then
MudSystem%BellNippleDensity= ((MudSystem%BellNippleDensity*MudSystem%BellNippleVolume)+(MudSystem%TripTankDensityCalc*(MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%BellNippleVolume+((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume+ ((MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
endif
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume+ ((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
endif
MudSystem%ActiveTankVolume=min(MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal)
!if ActiveTankVolume is higher, excess amount is dumped
if (j6 == 2) then
MudSystem%ActiveTankDensity= ((MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume)+(MudSystem%TripTankDensityCalc*(0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%ActiveTankVolume+((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%BellNippleDensity= ((MudSystem%BellNippleDensity*MudSystem%BellNippleVolume)+(MudSystem%TripTankDensityCalc*(0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%BellNippleVolume+((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume+ ((0.5*MUD(6)%Q/60.)*MudSystem%DeltaT_Mudline)
endif
MudSystem%ActiveTankVolume=min(MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal)
!if ActiveTankVolume is higher, excess amount is dumped
endif
if (j6 == 0) then
MUD(6)%Q=0.0
endif
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
!===========================================================================================================================
CALL Set_FlowFromReturnLine(.false.)

if (j3 > 0) then !BellNippleToPits-FullWell - must be after **WellToBellNipple(j9)**
!write(*,*) 'j3 is open'
!write(*,*) 'active by j3'
!BellNipple flow rate= sum flow rate (well+ mudbucket+ triptank)
!Well to BellNipple: BellNippleVolume
!MudBucket to BellNipple: BellNippleVolume
!TripTnak to BellNipple: BellNippleVolume
MUD(3)%Q = (MudSystem%BellNippleVolume/MudSystem%DeltaT_Mudline)*60.d0 ! (gpm)
!write(*,*) 'BellNippleVolume in j3 =' , BellNippleVolume
!write(*,*) 'MUD(3)%Q =' , MUD(3)%Q
call Set_FlowRate(real(100.*min(MUD(3)%Q,MudSystem%PedalMeter)/MudSystem%PedalMeter, 8)) ! for unity display
unityreturn = real(100.*min(MUD(3)%Q,MudSystem%PedalMeter)/MudSystem%PedalMeter, 8)
!write(*,*) 'unity return=' , real(100.*min(MUD(3)%Q,PedalMeter)/PedalMeter, 8)

if (MUD(3)%Q > MudSystem%PedalMeter .and. B78==0) then
MudSystem%BellNippleDumpVolume= MudSystem%BellNippleDumpVolume + ((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline - (MudSystem%PedalMeter/60.)*MudSystem%DeltaT_Mudline)
!BellNippleDumpRate= MUD(3)%Q - PedalMeter

CALL Set_FlowFromReturnLine(.TRUE.) ! for unity display
endif
!VolumeToActive = VolumeToActive + BellNippleVolume
!write(*,*) 'VolumeToActive*******=' , VolumeToActive
!VolumeToActive = VolumeToActive + BellNippleVolume
!write(*,*) 'VolumeToActive*******=' , VolumeToActive
active_before= MudSystem%ActiveTankVolume
MudSystem%BellNippleVolume= MudSystem%BellNippleVolume- ((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline) ! to be 0.

if ( MudSystem%BellNippleDensity > 1.0) then
if (j3 == 1 .and. B71==1) then !(volumes in galon)
MUD(3)%Q = min(MUD(3)%Q , MudSystem%PedalMeter)
!write(*,*) 'MUD(3)%Q=' , MUD(3)%Q
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN

MudSystem%ActiveTankDensity= ((MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume)+(MudSystem%BellNippleDensity*(MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%ActiveTankVolume+((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline)

!write(*,*) 'active increase bell 1=' , ((MUD(3)%Q/60.)*DeltaT_Mudline)
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity > MudSystem%ActiveTankDensity) THEN


MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((20.8d0-MudSystem%BellNippleDensity)/(20.8d0-MudSystem%ActiveTankDensity))*((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline) ! asumed cutting density = 20.8 ppg
!write(*,*) 'active increase bell 2=' , ((20.8d0-BellNippleDensity)/(20.8d0-ActiveTankDensity))*((MUD(3)%Q/60.d0)*DeltaT_Mudline)
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity < 5.0) THEN
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((2.d0-MudSystem%BellNippleDensity)/(2.d0-MudSystem%ActiveTankDensity))*((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg
!write(*,*) 'active increase bell 3=' , ((2.d0-BellNippleDensity)/(2.d0-ActiveTankDensity))*((MUD(3)%Q/60.d0)*DeltaT_Mudline)
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < MudSystem%BellNippleDensity .and. MudSystem%BellNippleDensity <= MudSystem%ActiveTankDensity) THEN
!write(*,*) ' Auto true 3'

MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline)
!write(*,*) 'active increase bell 4=' , ((MUD(3)%Q/60.d0)*DeltaT_Mudline)
ENDIF
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN
MudSystem%ActiveTankDensity= ((MudSystem%ActiveTankDensity*MudSystem%ActiveTankVolume)+(MudSystem%BellNippleDensity*(MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%ActiveTankVolume+((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline)
!write(*,*) 'active increase bell 1=' , ((MUD(3)%Q/60.)*DeltaT_Mudline)
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity > MudSystem%ActiveTankDensity) THEN
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((20.8d0-MudSystem%BellNippleDensity)/(20.8d0-MudSystem%ActiveTankDensity))*((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline) ! asumed cutting density = 20.8 ppg
!write(*,*) 'active increase bell 2=' , ((20.8d0-BellNippleDensity)/(20.8d0-ActiveTankDensity))*((MUD(3)%Q/60.d0)*DeltaT_Mudline)
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity < 5.0) THEN
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((2.d0-MudSystem%BellNippleDensity)/(2.d0-MudSystem%ActiveTankDensity))*((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg
!write(*,*) 'active increase bell 3=' , ((2.d0-BellNippleDensity)/(2.d0-ActiveTankDensity))*((MUD(3)%Q/60.d0)*DeltaT_Mudline)
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < MudSystem%BellNippleDensity .and. MudSystem%BellNippleDensity <= MudSystem%ActiveTankDensity) THEN
!write(*,*) ' Auto true 3'
MudSystem%ActiveTankVolume= MudSystem%ActiveTankVolume+ ((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline)
!write(*,*) 'active increase bell 4=' , ((MUD(3)%Q/60.d0)*DeltaT_Mudline)
ENDIF
endif
if (j3 == 1 .and. B77==1) then
MUD(3)%Q = min(MUD(3)%Q , MudSystem%PedalMeter)
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN
if (j3 == 1 .and. B77==1) then
MUD(3)%Q = min(MUD(3)%Q , MudSystem%PedalMeter)
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN
MudSystem%TripTankDensityCalc= ((MudSystem%TripTankDensityCalc*MudSystem%TripTankVolumeCalc)+(MudSystem%BellNippleDensity*(MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline))/(MudSystem%TripTankVolumeCalc+((MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline))
MudSystem%TripTankVolumeCalc= MudSystem%TripTankVolumeCalc+ (MUD(3)%Q/60.)*MudSystem%DeltaT_Mudline
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity > MudSystem%ActiveTankDensity) THEN
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity > MudSystem%ActiveTankDensity) THEN
AddedVolumeToTank= ((20.8d0-MudSystem%BellNippleDensity)/(20.8d0-MudSystem%ActiveTankDensity))*((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline)
MudSystem%TripTankDensityCalc= ((MudSystem%TripTankDensityCalc*MudSystem%TripTankVolumeCalc)+(MudSystem%ActiveTankDensity*AddedVolumeToTank))/(MudSystem%TripTankVolumeCalc+AddedVolumeToTank)
MudSystem%TripTankDensityCalc= ((MudSystem%TripTankDensityCalc*MudSystem%TripTankVolumeCalc)+(MudSystem%ActiveTankDensity*AddedVolumeToTank))/(MudSystem%TripTankVolumeCalc+AddedVolumeToTank)
MudSystem%TripTankVolumeCalc= MudSystem%TripTankVolumeCalc+ AddedVolumeToTank
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity < 5.0) THEN
ELSEIF (MudProperties%ActiveAutoDensity .and. MudSystem%BellNippleDensity < 5.0) THEN
AddedVolumeToTank= ((2.d0-MudSystem%BellNippleDensity)/(2.d0-MudSystem%ActiveTankDensity))*((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg
MudSystem%TripTankDensityCalc= ((MudSystem%TripTankDensityCalc*MudSystem%TripTankVolumeCalc)+(MudSystem%ActiveTankDensity*AddedVolumeToTank))/(MudSystem%TripTankVolumeCalc+AddedVolumeToTank)
MudSystem%TripTankVolumeCalc= MudSystem%TripTankVolumeCalc+ AddedVolumeToTank
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < MudSystem%BellNippleDensity .and. MudSystem%BellNippleDensity <= MudSystem%ActiveTankDensity) THEN
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < MudSystem%BellNippleDensity .and. MudSystem%BellNippleDensity <= MudSystem%ActiveTankDensity) THEN
AddedVolumeToTank= ((MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline)
MudSystem%TripTankDensityCalc= ((MudSystem%TripTankDensityCalc*MudSystem%TripTankVolumeCalc)+(MudSystem%ActiveTankDensity*AddedVolumeToTank))/(MudSystem%TripTankVolumeCalc+AddedVolumeToTank)
MudSystem%TripTankVolumeCalc= MudSystem%TripTankVolumeCalc+ AddedVolumeToTank
ENDIF
endif
if (j3 == 1 .and. B78==1) then

MudSystem%BellNippleDumpVolume= MudSystem%BellNippleDumpVolume+ (MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline
!BellNippleDumpRate= MUD(3)%Q

endif
ENDIF
endif
if (j3 == 1 .and. B78==1) then
MudSystem%BellNippleDumpVolume= MudSystem%BellNippleDumpVolume+ (MUD(3)%Q/60.d0)*MudSystem%DeltaT_Mudline
!BellNippleDumpRate= MUD(3)%Q
endif
if (j3 == 2) then !78 is not allowded in this position
MUD(3)%Q = min(MUD(3)%Q , MudSystem%PedalMeter)
@@ -2191,7 +2032,7 @@ module MudSystemModule
MPumps%Total_Stroke_Counter_For_Plot = MPumps%Total_Stroke_Counter_For_Plot + ((DataDisplayConsole%MP1SPMGauge + DataDisplayConsole%MP2SPMGauge) / 60.0) * MudSystem%DeltaT_Mudline
CALL SetTotalStrokes(INT(MPumps%Total_Stroke_Counter_For_Plot))
! CALL SetTotalStrokes(INT(MPumps%Total_Stroke_Counter_For_Plot))
DataDisplayConsole%TotalStrokeCounter= real(nint(MudSystem%TotalStrokesPump1+MudSystem%TotalStrokesPump2)) !for drilling data display


+ 2
- 2
Equipments/MudSystem/MudSystemMain.f90 Просмотреть файл

@@ -20,11 +20,11 @@ module MudSystemMain
CALL DEALLOCATE_ARRAYS_MudSystem()
end subroutine MudSystem_Stop
subroutine MudSystem_Start
subroutine MudSystem_Init
implicit none
!print* , 'MudSystem_Start'
CALL MudSystem_StartUp()
end subroutine MudSystem_Start
end subroutine MudSystem_Init
subroutine MudSystem_Step
use MudSystemModule


+ 24
- 31
Equipments/Pumps/PumpsMain.f90 Просмотреть файл

@@ -1,27 +1,20 @@
module PumpsMain
Use Pumps_VARIABLES
implicit none
implicit none
public
contains
! ****************************************
! ***** subroutine Pump1MainBody *****
! ****************************
subroutine Pump1_Setup()
use CSimulationVariables
implicit none
call OnSimulationInitialization%Add(Pump1_Init)
call OnSimulationStop%Add(Pump1_Init)
call OnPump1Step%Add(Pump1_Step)
call OnPump1Output%Add(Pump1_Output)
call OnPump1Main%Add(Pump1MainBody)
end subroutine
! ***** subroutine Pump1MainBody *****
! ****************************
! subroutine Pump1_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(Pump1_Init)
! call OnSimulationStop%Add(Pump1_Init)
! call OnPump1Step%Add(Pump1_Step)
! call OnPump1Output%Add(Pump1_Output)
! call OnPump1Main%Add(Pump1MainBody)
! end subroutine
subroutine Pump1_Init
Call Pumps_StartUp
@@ -31,27 +24,27 @@ module PumpsMain
Call Pump1_MainSolver
end subroutine Pump1_Step
subroutine Pump1_Output
implicit none
end subroutine Pump1_Output
! subroutine Pump1_Output
! implicit none
! end subroutine Pump1_Output
subroutine Pump1MainBody
use ifport
use ifmt
implicit none
! subroutine Pump1MainBody
! use ifport
! use ifmt
! implicit none
Call Pumps_StartUp
! Call Pumps_StartUp
loop1 : do
! loop1 : do
Call Pumps_MainSolver
! Call Pumps_MainSolver

end do loop1
! end do loop1
end subroutine Pump1MainBody
! end subroutine Pump1MainBody


+ 1
- 1
Equipments/Pumps/Pumps_Outputs.f90 Просмотреть файл

@@ -1,7 +1,7 @@
subroutine Pumps_Outputs
Use CDataDisplayConsoleVariables
Use CSimulationVariables
! Use CSimulationVariables
Use Pumps_VARIABLES
Use MudSystemModule
Use CDrillWatchVariables


+ 4
- 26
Equipments/Pumps/Pumps_StartUp.f90 Просмотреть файл

@@ -1,14 +1,8 @@
subroutine Pumps_StartUp
Use CPumpsVariables
Use Pumps_VARIABLES
IMPLICIT NONE
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<
PUMP(1)%FlowRatePerSTK = .04d0 ![bbl] !??????? motaghayere voroudi
!PUMP(1)%FlowRatePerSTK = PUMP(1)%FlowRatePerSTK*0.0292d0 ![gpm]
PUMP(1)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi
@@ -23,11 +17,7 @@ subroutine Pumps_StartUp
PUMP(1)%K_throttle = 0
PUMP(1)%N_old = 0.d0
Call Pump_OffMode_Solver(1)
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<
PUMP(2)%FlowRatePerSTK = .04d0 ![bbl] !??????? motaghayere voroudi
!PUMP(2)%FlowRatePerSTK = PUMP(2)%FlowRatePerSTK*0.0292d0 ![gpm]
PUMP(2)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi
@@ -37,17 +27,11 @@ subroutine Pumps_StartUp
PUMP(2)%MaxSPM = PumpsSpecification%MudPump2Maximum ![spm]
PUMP(2)%Trans_Ratio = 965.d0/PUMP(2)%MaxSPM
PUMP(2)%time_step = 0.1d0 !?????? niaz hast ya na??
PUMP(2)%RateChange = 193.d0!PUMP(2)%RateChange*PUMP(2)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s
PUMP(2)%K_throttle = 0
PUMP(2)%N_old = 0.d0
Call Pump_OffMode_Solver(2)
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<
Call Pump_OffMode_Solver(2)
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<
PUMP(3)%FlowRatePerSTK = .04d0 ![bbl] !??????? motaghayere voroudi
!PUMP(3)%FlowRatePerSTK = PUMP(3)%FlowRatePerSTK*0.0292d0 ![gpm]
PUMP(3)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi
@@ -57,14 +41,8 @@ subroutine Pumps_StartUp
PUMP(3)%MaxSPM = PumpsSpecification%CementPumpMaximum ![spm]
PUMP(3)%Trans_Ratio = 965.d0/PUMP(3)%MaxSPM
PUMP(3)%time_step = 0.1d0 !?????? niaz hast ya na??
PUMP(3)%RateChange = 193.d0!PUMP(3)%RateChange*PUMP(3)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s
PUMP(3)%K_throttle = 0
PUMP(3)%N_old = 0.d0
Call Pump_OffMode_Solver(3)
end subroutine Pumps_StartUp

+ 1
- 1
Equipments/RotaryTable/RTable_INPUTS.f90 Просмотреть файл

@@ -1,7 +1,7 @@
subroutine RTable_INPUTS
use CDrillingConsoleVariables
use CSimulationVariables
! use CSimulationVariables
use CTdsConnectionModesEnumVariables
use CTdsElevatorModesEnumVariables
use CHoistingVariables


+ 1
- 2
Equipments/RotaryTable/RotaryTableMain.f90 Просмотреть файл

@@ -16,8 +16,7 @@ module RotaryTableMain
Call RTable_StartUp
end subroutine RotaryTable_Init
subroutine RotaryTable_Step
implicit none
subroutine RotaryTable_Step
Call Rtable_MainSolver
end subroutine RotaryTable_Step



+ 3
- 3
Equipments/TopDrive/TopDriveMain.f90 Просмотреть файл

@@ -23,18 +23,18 @@ module TopDriveMain
subroutine TopDrive_Start
implicit none
call Log_4('TopDrive_Start')
! call Log_4('TopDrive_Start')
end subroutine TopDrive_Start
subroutine TopDrive_Step
implicit none
call Log_4('TopDrive_Step')
! call Log_4('TopDrive_Step')
Call Rtable_MainSolver
end subroutine TopDrive_Step
subroutine TopDriveMainBody
use CSimulationVariables
! use CSimulationVariables
use TopDrive_VARIABLES
use CDrillWatchVariables
use CWarningsVariables


+ 1
- 1
Equipments/TopDrive/TopDrive_INPUTS.f90 Просмотреть файл

@@ -1,6 +1,6 @@
subroutine TopDrive_Inputs
Use CSimulationVariables
! Use CSimulationVariables
Use CTopDrivePanelVariables
Use CTdsConnectionModesEnumVariables
Use TopDrive_VARIABLES


+ 8
- 8
FluidFlow/FluidFlowMain.f90 Просмотреть файл

@@ -14,14 +14,14 @@ module FluidFlowMain
! call OnFluidFlowMain%Add(FluidFlowMainBody)
! end subroutine
subroutine FluidFlow_Stop
implicit none
!WRITE (*,*) ' fluid flow done_Stop'
call DEALLOCATE_ARRAYS_NormalCirculation()
CALL DeallocateFlowTypes
end subroutine FluidFlow_Stop
! subroutine FluidFlow_Stop
! implicit none
! !WRITE (*,*) ' fluid flow done_Stop'
! call DEALLOCATE_ARRAYS_NormalCirculation()
! CALL DeallocateFlowTypes
! end subroutine FluidFlow_Stop
subroutine FluidFlow_Start
subroutine FluidFlow_Init
USE Fluid_Flow_Startup_Vars
implicit none
!WRITE (*,*) ' fluid flow done_Start'
@@ -33,7 +33,7 @@ module FluidFlowMain
Call TD_WellElementsReadData
Call TD_DrillStemReadData
Call TD_PipePropertiesReadData
end subroutine FluidFlow_Start
end subroutine FluidFlow_Init
subroutine FluidFlow_Step
implicit none


+ 1
- 1
Rop/JetImpactForce.f90 Просмотреть файл

@@ -4,7 +4,7 @@ subroutine JetImpactForce
use sROP_Variables
use CStringConfigurationVariables
use CformationVariables
use CSimulationVariables
! use CSimulationVariables
use CmudPropertiesVariables
use MudSystemVARIABLES


+ 12
- 30
Rop/RopMain.f90 Просмотреть файл

@@ -3,36 +3,18 @@ module RopMain
public
contains
subroutine Rop_Setup()
use CSimulationVariables
implicit none
call OnSimulationInitialization%Add(Rop_Init)
call OnSimulationStop%Add(Rop_Init)
call OnRopStep%Add(Rop_Step)
call OnRopOutput%Add(Rop_Output)
call OnRopMain%Add(RopMainBody)
end subroutine
subroutine Rop_Init
implicit none
end subroutine Rop_Init
! subroutine Rop_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(Rop_Init)
! call OnSimulationStop%Add(Rop_Init)
! call OnRopStep%Add(Rop_Step)
! call OnRopOutput%Add(Rop_Output)
! call OnRopMain%Add(RopMainBody)
! end subroutine
subroutine Rop_Step
implicit none
end subroutine Rop_Step
subroutine Rop_Output
implicit none
end subroutine Rop_Output
subroutine RopMainBody
implicit none
!loop1: do
!call sleep(1)
!call Calculate_ROP
!write(*,*) 'ROP main reached'
!end do loop1
end subroutine RopMainBody
end subroutine Rop_Step
end module RopMain

+ 0
- 2
Rop/sROP_Variables.f90 Просмотреть файл

@@ -13,6 +13,4 @@ implicit none
END TYPE ROPInfo
TYPE(ROPInfo) :: ROP_Bit


end module sROP_Variables

Двоичные данные
Просмотреть файл


CSharp/Simulation/CSimulation.f90 → Simulation/CSimulation.f90 Просмотреть файл


CSharp/Simulation/CSimulationThreads.f90 → Simulation/CSimulationThreads.f90 Просмотреть файл


CSharp/Simulation/CSimulationVariables.f90 → Simulation/CSimulationVariables.f90 Просмотреть файл


CSharp/Simulation/CSounds.f90 → Simulation/CSounds.f90 Просмотреть файл


+ 2
- 3
SimulationCore2.vfproj Просмотреть файл

@@ -226,9 +226,6 @@
<File RelativePath=".\CSharp\Problems\CProblemDifinition.f90"/>
<File RelativePath=".\CSharp\Problems\CPumpProblemsVariables.f90"/>
<File RelativePath=".\CSharp\Problems\CRotaryProblemsVariables.f90"/></Filter>
<Filter Name="Simulation">
<File RelativePath=".\CSharp\Simulation\CSimulationVariables.f90"/>
<File RelativePath=".\CSharp\Simulation\CSounds.f90"/></Filter>
<Filter Name="StudentStation">
<File RelativePath=".\CSharp\StudentStation\CStudentStationVariables.f90"/></Filter>
<Filter Name="Warnings">
@@ -342,6 +339,8 @@
<File RelativePath=".\FluidFlow\Well_Pressure_Data_Transfer.f90"/></Filter>
<Filter Name="Geo">
<File RelativePath=".\Geo\GeoMain.f90"/></Filter>
<Filter Name="Simulation">
<File RelativePath=".\Simulation\CSounds.f90"/></Filter>
<Filter Name="Rop">
<File RelativePath=".\Rop\Bit_Specification.f90"/>
<File RelativePath=".\Rop\JetImpactForce.f90"/>


+ 35
- 12
Simulator.f90 Просмотреть файл

@@ -31,25 +31,17 @@ contains
integer :: t
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
t=0
call init_modules()
do while (t<10)
!!read variable from shared file
call read_variables()

!!Location: ./bop
!! Variables:
!! Nothing exist in rop_step or even ropMainBody!
!! Tarmigh, Now merged with FluidFlow
call Rop_Step()
!! Tarmigh, Now merged with TorqueDrag (FluidFlow)
! call Rop_Step()
!!Location: ./Equipment/BopStack
!! Rafiee, nothing changed
call BopStack_Step()
!! Location: /Equipment/Pumps
!! Variables:
!! Does not have step function
!! Call Pump_StartUp in the start
!! Why we have a infinite loop (loop2) in step? Must be rewritten
!! Tarmigh, now is rewritten
call Pump1_Step()
!call Pump2_Step()
@@ -154,5 +146,36 @@ contains
! Clean up.
call json%destroy()
end subroutine
subroutine init_modules
!Tarmigh
call Pump1_Init()
!call Pump2_Step()
call RotaryTable_Init()
call Drawworks_Init()
call TopDrive_Init()
!Nothing in init (and step)
! call Rop_Init()
! call TorqueDrag_Init()
! call Geo_Step()
!! Rafiee
call BopStack_Init()
call ChokeControl_Init()
call MudSystem_Init()
!Again calls Bop_Startup
! call PipeRams1_Init()
! call PipeRams2_Step()
! call KillLine_Step()
! call ChokeLine_Step()
! call BlindRams_Step()
! call Annular_Step()
!! Sheikh
call FluidFlow_Init()
!! Ahmadi
call PathFinding_Init()
! Calls OSInitialization and that sub only subscribes some notif
! call OperationScenarios_Init()
end subroutine init_modules
end module Simulator

+ 1
- 1
TorqueDrag/TD_MainCalculations.f90 Просмотреть файл

@@ -2,7 +2,7 @@ subroutine TD_MainCalculations
Use CCasingLinerChokeVariables
Use CStringConfigurationVariables
Use CSimulationVariables
! Use CSimulationVariables
Use TD_DrillStemComponents
Use TD_WellElements
Use TD_WellGeometry


+ 1
- 1
TorqueDrag/TD_StartUp/TD_DrillStemStartUp.f90 Просмотреть файл

@@ -2,7 +2,7 @@ subroutine TD_DrillStemStartUp
Use CCasingLinerChokeVariables
Use CStringConfigurationVariables
Use CSimulationVariables
! Use CSimulationVariables
Use TD_DrillStemComponents
Use TD_WellElements
Use TD_WellGeometry


+ 18
- 21
TorqueDrag/TorqueDragMain.f90 Просмотреть файл

@@ -2,21 +2,21 @@ MODULE TorqueDragMain
USE CPumpsVariables
USE CDrillingConsoleVariables
USE CDataDisplayConsoleVariables
USE CSimulationVariables
! USE CSimulationVariables
USE Pumps_VARIABLES
IMPLICIT NONE
PUBLIC
CONTAINS
subroutine TorqueDrag_Setup()
use CSimulationVariables
implicit none
call OnSimulationInitialization%Add(TorqueDrag_Init)
call OnSimulationStop%Add(TorqueDrag_Init)
call OnTorqueDragStep%Add(TorqueDrag_Step)
call OnTorqueDragOutput%Add(TorqueDrag_Output)
call OnTorqueDragMain%Add(TorqueDragMainBody)
end subroutine
! subroutine TorqueDrag_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(TorqueDrag_Init)
! call OnSimulationStop%Add(TorqueDrag_Init)
! call OnTorqueDragStep%Add(TorqueDrag_Step)
! call OnTorqueDragOutput%Add(TorqueDrag_Output)
! call OnTorqueDragMain%Add(TorqueDragMainBody)
! end subroutine
subroutine TorqueDrag_Init
implicit none
@@ -31,16 +31,13 @@ MODULE TorqueDragMain
end subroutine TorqueDrag_Output
SUBROUTINE TorqueDragMainBody
USE ifport
USE ifmt
USE CSimulationVariables
!USE TDSUP
IMPLICIT NONE
!CALL TD_MainCalculations

END SUBROUTINE TorqueDragMainBody
! SUBROUTINE TorqueDragMainBody
! ! USE ifport
! ! USE ifmt
! ! USE CSimulationVariables
! !USE TDSUP
! IMPLICIT NONE
! !CALL TD_MainCalculations
! END SUBROUTINE TorqueDragMainBody

END MODULE TorqueDragMain

Загрузка…
Отмена
Сохранить