瀏覽代碼

Added some rafiee data structures

najafi
mahmood19227 2 年之前
父節點
當前提交
8d59cc0a67
共有 35 個文件被更改,包括 1549 次插入1531 次删除
  1. +18
    -18
      CSharp/Problems/CBopProblemsVariables.f90
  2. +2
    -2
      CSharp/Problems/CChokeProblemsVariables.f90
  3. +10
    -10
      CSharp/Problems/CGaugesProblemsVariables.f90
  4. +2
    -2
      CSharp/Problems/COtherProblemsVariables.f90
  5. +22
    -1
      Data Structures.txt
  6. +73
    -73
      Equipments/BopStack/ANNULAR.f90
  7. +6
    -6
      Equipments/BopStack/AnnularMain.f90
  8. +113
    -113
      Equipments/BopStack/BOP.f90
  9. +135
    -135
      Equipments/BopStack/BOPstartup.f90
  10. +9
    -9
      Equipments/BopStack/BlindRamsMain.f90
  11. +53
    -53
      Equipments/BopStack/CHOKE_LINE.f90
  12. +5
    -5
      Equipments/BopStack/ChokeLineMain.f90
  13. +56
    -56
      Equipments/BopStack/KILL_LINE.f90
  14. +3
    -3
      Equipments/BopStack/KillLineMain.f90
  15. +444
    -449
      Equipments/BopStack/LOSS_INPUTS.f90
  16. +68
    -68
      Equipments/BopStack/PIPE_RAM1.f90
  17. +66
    -66
      Equipments/BopStack/PIPE_RAM2.f90
  18. +3
    -3
      Equipments/BopStack/PipeRams1Main.f90
  19. +3
    -3
      Equipments/BopStack/PipeRams2Main.f90
  20. +62
    -62
      Equipments/BopStack/SHEAR_RAM.f90
  21. +121
    -98
      Equipments/BopStack/VARIABLES.f90
  22. +122
    -122
      Equipments/ChokeControl/AirPump_Choke_Subs.f90
  23. +30
    -30
      Equipments/ChokeControl/CHOKE.f90
  24. +41
    -62
      Equipments/ChokeControl/CHOKE_VARIABLES.f90
  25. +1
    -1
      Equipments/ChokeControl/ChokeControlMain.f90
  26. +42
    -42
      Equipments/ChokeControl/ChokeStartup.f90
  27. +1
    -1
      Equipments/Drawworks/Drawworks_INPUTS.f90
  28. +9
    -9
      Equipments/MudSystem/MudSystem.f90
  29. +2
    -2
      Equipments/MudSystem/MudSystemStartup.f90
  30. +5
    -5
      FluidFlow/Annulus_and_Openhole_Pressure_Distribution.f90
  31. +1
    -1
      FluidFlow/Flow_Startup.f90
  32. +1
    -1
      FluidFlow/Horizontal_and_String_Pressure_Distribution.f90
  33. +6
    -6
      FluidFlow/Well_Pressure_Data_Transfer.f90
  34. +4
    -4
      TorqueDrag/TD_DrillingSubs/TD_BOPDiamCalculation.f90
  35. +10
    -10
      TorqueDrag/TD_Forces/TD_HookLoadCalculation.f90

+ 18
- 18
CSharp/Problems/CBopProblemsVariables.f90 查看文件

@@ -141,8 +141,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! ! if(associated(AnnularFailPtr)) call AnnularFailPtr(status) ! ! if(associated(AnnularFailPtr)) call AnnularFailPtr(status)
if(status == Clear_StatusType) AnnularFailureMalf = 0 if(status == Clear_StatusType) Annular%AnnularFailureMalf = 0
if(status == Executed_StatusType) AnnularFailureMalf = 1 if(status == Executed_StatusType) Annular%AnnularFailureMalf = 1
endsubroutine endsubroutine
subroutine ChangeAnnularLeak(status) subroutine ChangeAnnularLeak(status)
@@ -150,8 +150,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! ! if(associated(AnnularLeakPtr)) call AnnularLeakPtr(status) ! ! if(associated(AnnularLeakPtr)) call AnnularLeakPtr(status)
if(status == Clear_StatusType) AnnularLeakMalf = 0 if(status == Clear_StatusType) Annular%AnnularLeakMalf = 0
if(status == Executed_StatusType) AnnularLeakMalf = 1 if(status == Executed_StatusType) Annular%AnnularLeakMalf = 1
endsubroutine endsubroutine
@@ -169,8 +169,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! ! if(associated(UpperRamFailPtr)) call UpperRamFailPtr(status) ! ! if(associated(UpperRamFailPtr)) call UpperRamFailPtr(status)
if(status == Clear_StatusType) UpperRamsFailureMalf = 0 if(status == Clear_StatusType) PipeRam1%UpperRamsFailureMalf = 0
if(status == Executed_StatusType) UpperRamsFailureMalf = 1 if(status == Executed_StatusType) PipeRam1%UpperRamsFailureMalf = 1
endsubroutine endsubroutine
subroutine ChangeUpperRamLeak(status) subroutine ChangeUpperRamLeak(status)
@@ -178,8 +178,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! ! if(associated(UpperRamLeakPtr)) call UpperRamLeakPtr(status) ! ! if(associated(UpperRamLeakPtr)) call UpperRamLeakPtr(status)
if(status == Clear_StatusType) UpperRamsLeakMalf = 0 if(status == Clear_StatusType) PipeRam1%UpperRamsLeakMalf = 0
if(status == Executed_StatusType) UpperRamsLeakMalf = 1 if(status == Executed_StatusType) PipeRam1%UpperRamsLeakMalf = 1
endsubroutine endsubroutine
@@ -196,8 +196,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(MiddleRamFailPtr)) call MiddleRamFailPtr(status) ! if(associated(MiddleRamFailPtr)) call MiddleRamFailPtr(status)
if(status == Clear_StatusType) MiddleRamsFailureMalf = 0 if(status == Clear_StatusType) ShearRam%MiddleRamsFailureMalf = 0
if(status == Executed_StatusType) MiddleRamsFailureMalf = 1 if(status == Executed_StatusType) ShearRam%MiddleRamsFailureMalf = 1
endsubroutine endsubroutine
subroutine ChangeMiddleRamLeak(status) subroutine ChangeMiddleRamLeak(status)
@@ -205,8 +205,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! ! if(associated(MiddleRamLeakPtr)) call MiddleRamLeakPtr(status) ! ! if(associated(MiddleRamLeakPtr)) call MiddleRamLeakPtr(status)
if(status == Clear_StatusType) MiddleRamsLeakMalf = 0 if(status == Clear_StatusType) ShearRam%MiddleRamsLeakMalf = 0
if(status == Executed_StatusType) MiddleRamsLeakMalf = 1 if(status == Executed_StatusType) ShearRam%MiddleRamsLeakMalf = 1
endsubroutine endsubroutine
@@ -224,8 +224,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! ! if(associated(LowerRamFailPtr)) call LowerRamFailPtr(status) ! ! if(associated(LowerRamFailPtr)) call LowerRamFailPtr(status)
if(status == Clear_StatusType) LowerRamsFailureMalf = 0 if(status == Clear_StatusType) PipeRam2%LowerRamsFailureMalf = 0
if(status == Executed_StatusType) LowerRamsFailureMalf = 1 if(status == Executed_StatusType) PipeRam2%LowerRamsFailureMalf = 1
endsubroutine endsubroutine
subroutine ChangeLowerRamLeak(status) subroutine ChangeLowerRamLeak(status)
@@ -233,8 +233,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(LowerRamLeakPtr)) call LowerRamLeakPtr(status) ! if(associated(LowerRamLeakPtr)) call LowerRamLeakPtr(status)
if(status == Clear_StatusType) LowerRamsLeakMalf = 0 if(status == Clear_StatusType) PipeRam2%LowerRamsLeakMalf = 0
if(status == Executed_StatusType) LowerRamsLeakMalf = 1 if(status == Executed_StatusType) PipeRam2%LowerRamsLeakMalf = 1
endsubroutine endsubroutine
subroutine ChangeAccumulatorPumpFail(status) subroutine ChangeAccumulatorPumpFail(status)
@@ -242,8 +242,8 @@ module CBopProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(AccumulatorPumpFailPtr)) call AccumulatorPumpFailPtr(status) ! if(associated(AccumulatorPumpFailPtr)) call AccumulatorPumpFailPtr(status)
if(status == Clear_StatusType) AccPupmsFailMalf = 0 if(status == Clear_StatusType) BopStackAcc%AccPupmsFailMalf = 0
if(status == Executed_StatusType) AccPupmsFailMalf = 1 if(status == Executed_StatusType) BopStackAcc%AccPupmsFailMalf = 1
endsubroutine endsubroutine
subroutine ChangeAccumulatorPumpLeak(status) subroutine ChangeAccumulatorPumpLeak(status)


+ 2
- 2
CSharp/Problems/CChokeProblemsVariables.f90 查看文件

@@ -243,8 +243,8 @@ module CChokeProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(ChokePanelAirFailPtr)) call ChokePanelAirFailPtr(status) ! if(associated(ChokePanelAirFailPtr)) call ChokePanelAirFailPtr(status)
if(status == Clear_StatusType) ChokeAirFail = 0 if(status == Clear_StatusType) AirDrivenPump%ChokeAirFail = 0
if(status == Executed_StatusType) ChokeAirFail = 1 if(status == Executed_StatusType) AirDrivenPump%ChokeAirFail = 1
endsubroutine endsubroutine


+ 10
- 10
CSharp/Problems/CGaugesProblemsVariables.f90 查看文件

@@ -305,8 +305,8 @@ module CGaugesProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(AccumulatorPressurePtr)) call AccumulatorPressurePtr(status) ! if(associated(AccumulatorPressurePtr)) call AccumulatorPressurePtr(status)
if(status == Clear_StatusType) AccumulatorPressureGaugeMalf = 0 if(status == Clear_StatusType) BopStackAcc%AccumulatorPressureGaugeMalf = 0
if(status == Executed_StatusType) AccumulatorPressureGaugeMalf = 1 if(status == Executed_StatusType) BopStackAcc%AccumulatorPressureGaugeMalf = 1
endsubroutine endsubroutine
subroutine ChangeManifoldPressure(status) subroutine ChangeManifoldPressure(status)
@@ -314,8 +314,8 @@ module CGaugesProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(ManifoldPressurePtr)) call ManifoldPressurePtr(status) ! if(associated(ManifoldPressurePtr)) call ManifoldPressurePtr(status)
if(status == Clear_StatusType) ManifoldPressureGaugeMalf = 0 if(status == Clear_StatusType) BopStackAcc%ManifoldPressureGaugeMalf = 0
if(status == Executed_StatusType) ManifoldPressureGaugeMalf = 1 if(status == Executed_StatusType) BopStackAcc%ManifoldPressureGaugeMalf = 1
endsubroutine endsubroutine
subroutine ChangeAnnularPressure(status) subroutine ChangeAnnularPressure(status)
@@ -323,8 +323,8 @@ module CGaugesProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(AnnularPressurePtr)) call AnnularPressurePtr(status) ! if(associated(AnnularPressurePtr)) call AnnularPressurePtr(status)
if(status == Clear_StatusType) AnnularPressureGaugeMalf = 0 if(status == Clear_StatusType) Annular%AnnularPressureGaugeMalf = 0
if(status == Executed_StatusType) AnnularPressureGaugeMalf = 1 if(status == Executed_StatusType) Annular%AnnularPressureGaugeMalf = 1
endsubroutine endsubroutine
subroutine ChangeRigAirPressure(status) subroutine ChangeRigAirPressure(status)
@@ -332,8 +332,8 @@ module CGaugesProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(RigAirPressurePtr)) call RigAirPressurePtr(status) ! if(associated(RigAirPressurePtr)) call RigAirPressurePtr(status)
if(status == Clear_StatusType) AirSupplyPressureGaugeMalf = 0 if(status == Clear_StatusType) BopStackAcc%AirSupplyPressureGaugeMalf = 0
if(status == Executed_StatusType) AirSupplyPressureGaugeMalf = 1 if(status == Executed_StatusType) BopStackAcc%AirSupplyPressureGaugeMalf = 1
endsubroutine endsubroutine
subroutine ChangeStandPipe1(status) subroutine ChangeStandPipe1(status)
@@ -368,8 +368,8 @@ module CGaugesProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
! if(associated(ChokePositionPtr)) call ChokePositionPtr(status) ! if(associated(ChokePositionPtr)) call ChokePositionPtr(status)
if(status == Clear_StatusType) GaugeChokePositionMailf = 0 if(status == Clear_StatusType) Choke%GaugeChokePositionMailf = 0
if(status == Executed_StatusType) GaugeChokePositionMailf = 1 if(status == Executed_StatusType) Choke%GaugeChokePositionMailf = 1
endsubroutine endsubroutine
subroutine ChangeCasingPressure2(status) subroutine ChangeCasingPressure2(status)


+ 2
- 2
CSharp/Problems/COtherProblemsVariables.f90 查看文件

@@ -126,8 +126,8 @@ module COtherProblemsVariables
implicit none implicit none
integer, intent (in) :: status integer, intent (in) :: status
!if(associated(RigAirPtr)) call RigAirPtr(status) !if(associated(RigAirPtr)) call RigAirPtr(status)
if(status == Clear_StatusType) RigAirMalf = 0 if(status == Clear_StatusType) BopStackAcc%RigAirMalf = 0
if(status == Executed_StatusType) RigAirMalf = 1 if(status == Executed_StatusType) BopStackAcc%RigAirMalf = 1
endsubroutine endsubroutine
subroutine ChangeGen1(status) subroutine ChangeGen1(status)


+ 22
- 1
Data Structures.txt 查看文件

@@ -69,4 +69,25 @@ CSharp:
OtherProblems OtherProblems
PumpProblems PumpProblems
RotaryProblems RotaryProblems
Equipments:
BopStack:
BopStackInput
BopStackAcc
RamLine
AnnularComputational
Annular
PipeRam1
ShearRam
PipeRam2
ChokeLine
KillLine
Pumps
RAM (previously exists)
RAMS
ChokeControl:
Choke
AirDrivenPump
AirPumpLine
CHOOKE (previously exists)
MudSystem:.........

+ 73
- 73
Equipments/BopStack/ANNULAR.f90 查看文件

@@ -1,4 +1,4 @@
SUBROUTINE ANNULAR SUBROUTINE ANNULAR_SUB1
USE VARIABLES USE VARIABLES
USE CBopControlPanelVariables USE CBopControlPanelVariables
USE PressureDisplayVARIABLES USE PressureDisplayVARIABLES
@@ -15,9 +15,9 @@ SUBROUTINE ANNULAR
RAM(1)%SuccessionCounter = RAM(1)%SuccessionCounter + 1 RAM(1)%SuccessionCounter = RAM(1)%SuccessionCounter + 1
if (BopControlPanel%AnnularValve == 1.0 .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%AnnularValve == 1.0 .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if (AnnularCloseLedMine == LedOn) then if (BopStackInput%AnnularCloseLedMine == LedOn) then
RETURN RETURN
end if end if
@@ -32,13 +32,13 @@ SUBROUTINE ANNULAR


if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(1)%First_CloseTimecheck= 1 RAM(1)%First_CloseTimecheck= 1
BopControlPanel%AnnularOpenLED = LedOff BopControlPanel%AnnularOpenLED = LedOff
AnnularOpenLedMine = LedOff BopStackInput%AnnularOpenLedMine = LedOff
BopControlPanel%AnnularCloseLED = LedOn !LedBlinking BopControlPanel%AnnularCloseLED = LedOn !LedBlinking
RAM(1)%FourwayValve = 1 RAM(1)%FourwayValve = 1
@@ -48,45 +48,45 @@ SUBROUTINE ANNULAR
endif endif
if (RAM(1)%FourwayValve == 1 .and. p_acc>acc_MinPressure .and. Pannular_reg>AnnularMovingPressure) then ! 1: Open , 0: Close if (RAM(1)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure) then ! 1: Open , 0: Close
RAM(1)%FourwayValve = 0 RAM(1)%FourwayValve = 0
Annular_closed=0 Annular%Annular_closed=0
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1)
RAM(1)%vdis_tot=0 RAM(1)%vdis_tot=0
RAM(1)%vdis_bottles=0. RAM(1)%vdis_bottles=0.
RAM(1)%fvr_air=0. RAM(1)%fvr_air=0.
RAM(1)%vdis_elecp=0. RAM(1)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(1)%Qzero=70 RAM(1)%Qzero=70
RAM(1)%Q=RAM(1)%Qzero RAM(1)%Q=RAM(1)%Qzero
RAM(1)%flow=70 RAM(1)%flow=70
tolAnnular=0.0018 Annular%tolAnnular=0.0018
if (finished_Annular==1) then if (Annular%finished_Annular==1) then
AnnularLeverOld=-1.0 Annular%AnnularLeverOld=-1.0
else else
AnnularLeverOld=BopControlPanel%AnnularValve Annular%AnnularLeverOld=BopControlPanel%AnnularValve
endif endif
finished_Annular=0 Annular%finished_Annular=0
AnnularIsClosing = .true. Annular%AnnularIsClosing = .true.
AnnularIsOpening = .false. Annular%AnnularIsOpening = .false.


RAM(2)%bop_type = 3 RAM(2)%bop_type = 3
!AbopAnnular=963.1 !(in^2) !AbopAnnular=963.1 !(in^2)
AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231.)/((IDAnnularBase-ODDrillpipe_inAnnularBase)/2.) ! 231 in^3 = 1 gal Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231.)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.) ! 231 in^3 = 1 gal
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/(2.*231) !=17.98 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnularBase=5 Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnularBase-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/(2.*231) !=17.98 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnularBase=5
!WRITE(*,*) 'a)NeededVolumeAnnular=' , NeededVolumeAnnular !WRITE(*,*) 'a)NeededVolumeAnnular=' , NeededVolumeAnnular
!write(*,*) 'close 1' !write(*,*) 'close 1'
endif endif
if (BopControlPanel%AnnularValve == -1.0 .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then if (BopControlPanel%AnnularValve == -1.0 .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then
if (AnnularOpenLedMine == LedOn) then if (BopStackInput%AnnularOpenLedMine == LedOn) then
RETURN RETURN
end if end if
@@ -105,13 +105,13 @@ SUBROUTINE ANNULAR


if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(1)%First_OpenTimecheck= 1 RAM(1)%First_OpenTimecheck= 1
BopControlPanel%AnnularCloseLED = LedOff !new BopControlPanel%AnnularCloseLED = LedOff !new
AnnularCloseLedMine = LedOff !new BopStackInput%AnnularCloseLedMine = LedOff !new
BopControlPanel%AnnularOpenLED = LedOn !LedBlinking BopControlPanel%AnnularOpenLED = LedOn !LedBlinking
RAM(1)%FourwayValve = 1 RAM(1)%FourwayValve = 1
@@ -124,36 +124,36 @@ SUBROUTINE ANNULAR


if (RAM(1)%FourwayValve == 1 .and. Pannular_reg>AnnularMovingPressure .and. p_acc>acc_MinPressure & if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure &
.and. (Annular_closed==0 .or. (Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Pannular_reg>=AnnularSealingPressure))) then ! 1: Open , 0: Close .and. (Annular%Annular_closed==0 .or. (Annular%Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular%Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Annular%Pannular_reg>=AnnularComputational%AnnularSealingPressure))) then ! 1: Open , 0: Close
!write(*,*) 'open 2' !write(*,*) 'open 2'
RAM(1)%FourwayValve = 0 RAM(1)%FourwayValve = 0


Annular_closed=0 Annular%Annular_closed=0
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1)
RAM(1)%vdis_tot=0 RAM(1)%vdis_tot=0
RAM(1)%vdis_bottles=0. RAM(1)%vdis_bottles=0.
RAM(1)%fvr_air=0. RAM(1)%fvr_air=0.
RAM(1)%vdis_elecp=0. RAM(1)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(1)%Qzero=70 RAM(1)%Qzero=70
RAM(1)%Q=RAM(1)%Qzero RAM(1)%Q=RAM(1)%Qzero
RAM(1)%flow=70 RAM(1)%flow=70
tolAnnular=0.0018 Annular%tolAnnular=0.0018


if (finished_Annular==1) then if (Annular%finished_Annular==1) then
AnnularLeverOld=1.0 Annular%AnnularLeverOld=1.0
else else
AnnularLeverOld=BopControlPanel%AnnularValve Annular%AnnularLeverOld=BopControlPanel%AnnularValve
endif endif
finished_Annular=0 Annular%finished_Annular=0
AnnularIsOpening = .true. Annular%AnnularIsOpening = .true.
AnnularIsClosing = .false. Annular%AnnularIsClosing = .false.


!if (AnnularOpenLed == LedOn) then !if (AnnularOpenLed == LedOn) then
@@ -164,22 +164,22 @@ SUBROUTINE ANNULAR


RAM(1)%bop_type = 3 RAM(1)%bop_type = 3
!AbopAnnular=758.48 !(in^2) !AbopAnnular=758.48 !(in^2)
AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((IDAnnularBase-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/2.) Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((Annular%IDAnnularBase-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/2.)
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-ODDrillpipe_inAnnular)/(2.*231) !=14.16 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnular=5 Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnular)/(2.*231) !=14.16 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnular=5
!write(*,*) 'open 1' !write(*,*) 'open 1'
endif endif
!===================================================================== !=====================================================================
if (AnnularIsOpening .or. AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then if (Annular%AnnularIsOpening .or. Annular%AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then
CALL ANNULAR_SUB CALL ANNULAR_SUB2
end if end if
END SUBROUTINE ANNULAR END SUBROUTINE ANNULAR_SUB1
@@ -194,7 +194,7 @@ end if
SUBROUTINE ANNULAR_SUB SUBROUTINE ANNULAR_SUB2
USE VARIABLES USE VARIABLES
USE PressureDisplayVARIABLES USE PressureDisplayVARIABLES
USE CBopControlPanelVariables USE CBopControlPanelVariables
@@ -205,8 +205,8 @@ SUBROUTINE ANNULAR_SUB
implicit none implicit none
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
! loop5: do while (finished_Annular==0) ! loop5: do while (finished_Annular==0)
@@ -218,7 +218,7 @@ SUBROUTINE ANNULAR_SUB


! CALL CPU_TIME(Annular_StartTime) ! CALL CPU_TIME(Annular_StartTime)
if (BopControlPanel%AnnularValve == 1.0 .and. AnnularLeverOld == -1.0 .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%AnnularValve == 1.0 .and. Annular%AnnularLeverOld == -1.0 .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if ( RAM(1)%First_CloseTimecheck == 0 ) then if ( RAM(1)%First_CloseTimecheck == 0 ) then


@@ -233,11 +233,11 @@ SUBROUTINE ANNULAR_SUB


if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
BopControlPanel%AnnularOpenLED = LedOff BopControlPanel%AnnularOpenLED = LedOff
AnnularOpenLedMine = LedOff BopStackInput%AnnularOpenLedMine = LedOff
BopControlPanel%AnnularCloseLED = LedOn !LedBlinking BopControlPanel%AnnularCloseLED = LedOn !LedBlinking
RAM(1)%FourwayValve = 1 RAM(1)%FourwayValve = 1
@@ -250,36 +250,36 @@ SUBROUTINE ANNULAR_SUB
endif endif
if (RAM(1)%FourwayValve == 1 .and. Pannular_reg>AnnularMovingPressure .and. p_acc>acc_MinPressure) then if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
!write(*,*) 'close 4' !write(*,*) 'close 4'
RAM(1)%FourwayValve = 0 RAM(1)%FourwayValve = 0
Annular_closed=0 Annular%Annular_closed=0
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1)
p_annular=pa_annular AnnularComputational%p_annular=AnnularComputational%pa_annular
AnnularLeverOld = BopControlPanel%AnnularValve Annular%AnnularLeverOld = BopControlPanel%AnnularValve


CALL OpenAnnular CALL OpenAnnular
Annular_Situation_forTD= 0 ! open - for TD code Annular%Annular_Situation_forTD= 0 ! open - for TD code
RAM(1)%bop_type = 3 RAM(1)%bop_type = 3
!AbopAnnular=963.1 !(in^2) !AbopAnnular=963.1 !(in^2)
AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231)/((IDAnnularBase-ODDrillpipe_inAnnularBase)/2.) Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.)
!write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams !write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams
NeededVolumeAnnular=AbopAnnular*(IDAnnular-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/(2*231.) Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnular-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/(2*231.)
! write(*,*) 'NeededVolumeAnnular=',NeededVolumeAnnular ! write(*,*) 'NeededVolumeAnnular=',NeededVolumeAnnular


RAM(1)%vdis_bottles=0. RAM(1)%vdis_bottles=0.
RAM(1)%fvr_air=0. RAM(1)%fvr_air=0.
RAM(1)%vdis_elecp=0. RAM(1)%vdis_elecp=0.
AnnularIsClosing = .true. Annular%AnnularIsClosing = .true.
AnnularIsOpening = .false. Annular%AnnularIsOpening = .false.
!write(*,*) 'close 2' !write(*,*) 'close 2'
endif endif
if (BopControlPanel%AnnularValve == -1.0 .and. AnnularLeverOld == 1.0 .and. p_acc>acc_MinPressure .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then if (BopControlPanel%AnnularValve == -1.0 .and. Annular%AnnularLeverOld == 1.0 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then
!CasingPressure : PressureGauges(2) *****temp conditionssssss !CasingPressure : PressureGauges(2) *****temp conditionssssss
@@ -295,11 +295,11 @@ SUBROUTINE ANNULAR_SUB
RAM(1)%SuccessionCounterOld= RAM(1)%SuccessionCounter RAM(1)%SuccessionCounterOld= RAM(1)%SuccessionCounter
endif endif
if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
BopControlPanel%AnnularCloseLED = LedOff BopControlPanel%AnnularCloseLED = LedOff
AnnularCloseLedMine= LedOff BopStackInput%AnnularCloseLedMine= LedOff
BopControlPanel%AnnularOpenLED = LedOn !LedBlinking BopControlPanel%AnnularOpenLED = LedOn !LedBlinking
RAM(1)%FourwayValve = 1 RAM(1)%FourwayValve = 1
@@ -313,30 +313,30 @@ SUBROUTINE ANNULAR_SUB
if (RAM(1)%FourwayValve == 1 .and. Pannular_reg>AnnularMovingPressure & if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure &
.and. (Annular_closed==0 .or. (Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Pannular_reg>=AnnularSealingPressure))) then .and. (Annular%Annular_closed==0 .or. (Annular%Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular%Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Annular%Pannular_reg>=AnnularComputational%AnnularSealingPressure))) then
!write(*,*) 'open 4' !write(*,*) 'open 4'
RAM(1)%FourwayValve = 0 RAM(1)%FourwayValve = 0
Annular_closed=0 Annular%Annular_closed=0
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1)
p_annular=pa_annular AnnularComputational%p_annular=AnnularComputational%pa_annular
AnnularLeverOld = BopControlPanel%AnnularValve Annular%AnnularLeverOld = BopControlPanel%AnnularValve


CALL OpenAnnular CALL OpenAnnular
Annular_Situation_forTD= 0 ! open - for TD code Annular%Annular_Situation_forTD= 0 ! open - for TD code
RAM(1)%bop_type = 3 RAM(1)%bop_type = 3
!AbopAnnular=758.48 !(in^2) !AbopAnnular=758.48 !(in^2)
AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((IDAnnularBase-ODDrillpipe_inAnnularBase)/2.) Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.)
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-IDAnnular)/(2*231.) Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnularBase-Annular%IDAnnular)/(2*231.)
RAM(1)%vdis_bottles=0. RAM(1)%vdis_bottles=0.
RAM(1)%fvr_air=0. RAM(1)%fvr_air=0.
RAM(1)%vdis_elecp=0. RAM(1)%vdis_elecp=0.


AnnularIsOpening = .true. Annular%AnnularIsOpening = .true.
AnnularIsClosing = .false. Annular%AnnularIsClosing = .false.
!write(*,*) 'open 2' !write(*,*) 'open 2'
@@ -347,7 +347,7 @@ SUBROUTINE ANNULAR_SUB
RAM(1)%First_CloseTimecheck = 0 RAM(1)%First_CloseTimecheck = 0
RAM(1)%First_OpenTimecheck = 0 RAM(1)%First_OpenTimecheck = 0
RAM(1)%time=RAM(1)%time+DeltaT_BOP !overal time (s) RAM(1)%time=RAM(1)%time+RamLine%DeltaT_BOP !overal time (s)






@@ -356,15 +356,15 @@ SUBROUTINE ANNULAR_SUB
!=================================================== !===================================================
! BOP ! BOP
!=================================================== !===================================================
if (Annular_closed==0) then !bop closing if (Annular%Annular_closed==0) then !bop closing
!write(*,*) 'AnnularIsClosing,AnnularIsOpening' , AnnularIsClosing,AnnularIsOpening !write(*,*) 'AnnularIsClosing,AnnularIsOpening' , AnnularIsClosing,AnnularIsOpening
call bop_codeAnnular(1) !ramtype=4 1=RNUMBER call bop_codeAnnular(1) !ramtype=4 1=RNUMBER
endif !bop is closing endif !bop is closing
!================================================================ !================================================================
if (Annular_closed==1) then if (Annular%Annular_closed==1) then
RAM(1)%Q=0 RAM(1)%Q=0
!p_bop=pram_reg !p_bop=pram_reg
p_annular=pa_annular AnnularComputational%p_annular=AnnularComputational%pa_annular
endif endif


RAM(1)%timecounter_ram=RAM(1)%timecounter_ram+1 RAM(1)%timecounter_ram=RAM(1)%timecounter_ram+1
@@ -404,9 +404,9 @@ RAM(1)%timecounter_ram=RAM(1)%timecounter_ram+1
if (Annular_closed==1) then if (Annular%Annular_closed==1) then
! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then ! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then
finished_Annular=1 Annular%finished_Annular=1
! endif ! endif
endif endif
@@ -419,9 +419,9 @@ endif
if ( finished_Annular==1 .and. RAM(1)%Bottles_Charged_MalfActive==.true.) then if ( Annular%finished_Annular==1 .and. RAM(1)%Bottles_Charged_MalfActive==.true.) then
call bop_codeAnnular(1) !ramtype=4 1=RNUMBER call bop_codeAnnular(1) !ramtype=4 1=RNUMBER
! call sleepqq(100) ! call sleepqq(100)
endif endif
END SUBROUTINE ANNULAR_SUB END SUBROUTINE ANNULAR_SUB2

+ 6
- 6
Equipments/BopStack/AnnularMain.f90 查看文件

@@ -20,15 +20,15 @@ module AnnularMain
subroutine Annular_Step subroutine Annular_Step
use VARIABLES use VARIABLES
implicit none implicit none
if (finished_Annular/=0) then if (Annular%finished_Annular/=0) then
call ANNULAR call ANNULAR_SUB1
if (AnnularIsOpening .or. AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then if (Annular%AnnularIsOpening .or. Annular%AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then
if(finished_Annular==0) then if(Annular%finished_Annular==0) then
call ANNULAR_SUB !only body of loop2 call ANNULAR_SUB2 !only body of loop2
endif endif
endif endif
else else
call ANNULAR_SUB call ANNULAR_SUB2
endif endif
end subroutine Annular_Step end subroutine Annular_Step


+ 113
- 113
Equipments/BopStack/BOP.f90 查看文件

@@ -10,17 +10,17 @@ module BOP
implicit none implicit none
BOP_timeCounter= BOP_timeCounter + 1 BopStackInput%BOP_timeCounter= BopStackInput%BOP_timeCounter + 1


write(*,*) 'BOP_timeCounter=' , BOP_timeCounter write(*,*) 'BOP_timeCounter=' , BopStackInput%BOP_timeCounter
BopControlPanel%AirSupplyPressureGauge= (1 - AirSupplyPressureGaugeMalf)* (1 - RigAirMalf) *120. !psi BopControlPanel%AirSupplyPressureGauge= (1 - BopStackAcc%AirSupplyPressureGaugeMalf)* (1 - BopStackAcc%RigAirMalf) *120. !psi
if (pram_reg < 2300.) then if (BopStackAcc%pram_reg < 2300.) then
ShearIsNotAllowed= 1 ShearRam%ShearIsNotAllowed= 1
else else
ShearIsNotAllowed= 0 ShearRam%ShearIsNotAllowed= 0
endif endif
!write(*,*) 'ShearIsNotAllowed=' , ShearIsNotAllowed !write(*,*) 'ShearIsNotAllowed=' , ShearIsNotAllowed
@@ -36,10 +36,10 @@ module BOP


!=== Instantaneous Pipe Diameters in Each Ram (Input from TD Module):== !=== Instantaneous Pipe Diameters in Each Ram (Input from TD Module):==
ODDrillpipe_inAnnular= TD_AnnularPreventerDiam * 12.0 ! ft to inch Annular%ODDrillpipe_inAnnular= TD_AnnularPreventerDiam * 12.0 ! ft to inch
ODDrillpipe_inPipeRam1= TD_UpperRamDiam * 12.0 PipeRam1%ODDrillpipe_in= TD_UpperRamDiam * 12.0
ODDrillpipe_inShearRam= TD_BlindRamDiam * 12.0 ShearRam%ODDrillpipe_inShearRam= TD_BlindRamDiam * 12.0
ODDrillpipe_inPipeRam2= TD_LowerRamDiam * 12.0 PipeRam2%ODDrillpipe_in= TD_LowerRamDiam * 12.0
@@ -48,12 +48,12 @@ module BOP
!IDPipeRam2Final !IDPipeRam2Final
!IDAnnularFinal !IDAnnularFinal
OpenArea_shearBop= PI*(IDshearBopFinal**2-ODDrillpipe_inShearRam**2)/4.0d0 !D(in), AREA(in^2) ShearRam%OpenArea_shearBop= PI*(ShearRam%IDshearBopFinal**2-ShearRam%ODDrillpipe_inShearRam**2)/4.0d0 !D(in), AREA(in^2)
OpenArea_PipeRam1= PI*(IDPipeRam1Final**2-ODDrillpipe_inPipeRam1**2)/4.0d0 !D(in), AREA(in^2) ShearRam%OpenArea_PipeRam1= PI*(ShearRam%IDPipeRam1Final**2-PipeRam1%ODDrillpipe_in**2)/4.0d0 !D(in), AREA(in^2)
OpenArea_PipeRam2= PI*(IDPipeRam2Final**2-ODDrillpipe_inPipeRam2**2)/4.0d0 !D(in), AREA(in^2) ShearRam%OpenArea_PipeRam2= PI*(ShearRam%IDPipeRam2Final**2-PipeRam2%ODDrillpipe_in**2)/4.0d0 !D(in), AREA(in^2)
OpenArea_Annular= PI*(IDAnnularFinal**2-ODDrillpipe_inAnnular**2)/4.0d0 !D(in), AREA(in^2) ShearRam%OpenArea_Annular= PI*(ShearRam%IDAnnularFinal**2-Annular%ODDrillpipe_inAnnular**2)/4.0d0 !D(in), AREA(in^2)
MinimumOpenArea_InBOP= min(OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular) ShearRam%MinimumOpenArea_InBOP= min(ShearRam%OpenArea_shearBop,ShearRam%OpenArea_PipeRam1,ShearRam%OpenArea_PipeRam2,ShearRam%OpenArea_Annular)
!TD_BOPConnectionPossibility(j) = 0 or 1 !TD_BOPConnectionPossibility(j) = 0 or 1
@@ -64,89 +64,89 @@ module BOP


!===================================================================== !=====================================================================
!============SEALING PRESSURES TO BE SET IN ANNULAR REGULATOR========== !============SEALING PRESSURES TO BE SET IN ANNULAR REGULATOR==========
WellBorePressure=5000. AnnularComputational%WellBorePressure=5000.
if (ODDrillpipe_inAnnular>0.) then if (Annular%ODDrillpipe_inAnnular>0.) then
if (ODDrillpipe_inAnnular>0. .and. ODDrillpipe_inAnnular<=1.99) then if (Annular%ODDrillpipe_inAnnular>0. .and. Annular%ODDrillpipe_inAnnular<=1.99) then
acoef=-0.2673 AnnularComputational%acoef=-0.2673
bcoef=994.3 AnnularComputational%Bcoef=994.3
const=77 AnnularComputational%const=77
elseif (ODDrillpipe_inAnnular>1.99 .and. ODDrillpipe_inAnnular<=2.375) then elseif (Annular%ODDrillpipe_inAnnular>1.99 .and. Annular%ODDrillpipe_inAnnular<=2.375) then
acoef=-0.2539 AnnularComputational%acoef=-0.2539
bcoef=994.3 AnnularComputational%Bcoef=994.3
const=73.15 AnnularComputational%const=73.15
elseif (ODDrillpipe_inAnnular>2.375 .and. ODDrillpipe_inAnnular<=2.875) then elseif (Annular%ODDrillpipe_inAnnular>2.375 .and. Annular%ODDrillpipe_inAnnular<=2.875) then
acoef=-0.2005 AnnularComputational%acoef=-0.2005
bcoef=745.9 AnnularComputational%Bcoef=745.9
const=57.75 AnnularComputational%const=57.75
elseif (ODDrillpipe_inAnnular>2.875 .and. ODDrillpipe_inAnnular<=3.5) then elseif (Annular%ODDrillpipe_inAnnular>2.875 .and. Annular%ODDrillpipe_inAnnular<=3.5) then
acoef=-0.1871 AnnularComputational%acoef=-0.1871
bcoef=696.1 AnnularComputational%Bcoef=696.1
const=53.9 AnnularComputational%const=53.9
elseif (ODDrillpipe_inAnnular>3.5 .and. ODDrillpipe_inAnnular<=5) then elseif (Annular%ODDrillpipe_inAnnular>3.5 .and. Annular%ODDrillpipe_inAnnular<=5) then
acoef=-0.1733 AnnularComputational%acoef=-0.1733
bcoef=647 AnnularComputational%Bcoef=647
const=50 AnnularComputational%const=50
elseif (ODDrillpipe_inAnnular>5 .and. ODDrillpipe_inAnnular<=10) then elseif (Annular%ODDrillpipe_inAnnular>5 .and. Annular%ODDrillpipe_inAnnular<=10) then
acoef=-0.1604 AnnularComputational%acoef=-0.1604
bcoef=596.7 AnnularComputational%Bcoef=596.7
const=46.2 AnnularComputational%const=46.2
endif endif
AnnularSealingPressure= max((acoef*WellBorePressure+bcoef), const) !(psi) AnnularComputational%AnnularSealingPressure= max((AnnularComputational%acoef*AnnularComputational%WellBorePressure+AnnularComputational%Bcoef), AnnularComputational%const) !(psi)
else !CSO(COMPLETE SHUT OFF) ODDrillpipe_inAnnular=0 else !CSO(COMPLETE SHUT OFF) ODDrillpipe_inAnnular=0
AnnularSealingPressure= 1150. !(psi) AnnularComputational%AnnularSealingPressure= 1150. !(psi)
endif endif
!===================================================================== !=====================================================================
! BYPASS POSITION ! BYPASS POSITION
!===================================================================== !=====================================================================
if(BopControlPanel%ByePassValve == -1.0 .and. BopControlPanel%AirMasterValve==1) then if(BopControlPanel%ByePassValve == -1.0 .and. BopControlPanel%AirMasterValve==1) then
ByPassOld= -1.0 BopStackAcc%ByPassOld= -1.0
!write(*,*) 'ByePassValve to -1' ,ByePassValve !write(*,*) 'ByePassValve to -1' ,ByePassValve
elseif(BopControlPanel%ByePassValve == 1.0 .and. BopControlPanel%AirMasterValve==1) then elseif(BopControlPanel%ByePassValve == 1.0 .and. BopControlPanel%AirMasterValve==1) then
ByPassOld= 1.0 BopStackAcc%ByPassOld= 1.0
!write(*,*) 'ByePassValve to 1=' ,ByePassValve !write(*,*) 'ByePassValve to 1=' ,ByePassValve
endif endif
!write(*,*) 'ByePassValve,ByPassOld=' ,ByePassValve,ByPassOld !write(*,*) 'ByePassValve,ByPassOld=' ,ByePassValve,ByPassOld
!===================================================================== !=====================================================================
!WRITE(*,*) 'AnnularRegulatorSetControl====' , AnnularRegulatorSetControl !WRITE(*,*) 'AnnularRegulatorSetControl====' , AnnularRegulatorSetControl
Pannular_regset=min(BopControlPanel%AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously Annular%Pannular_regset=min(BopControlPanel%AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously
if (Annular_closed==1) then if (Annular%Annular_closed==1) then
if (FirstSet==1) then ! code start if (Annular%FirstSet==1) then ! code start
Pannular_reg= Pannular_regset Annular%Pannular_reg= Annular%Pannular_regset
endif endif


if (FirstSet==0) then ! durig run, but annular is not closing or opening if (Annular%FirstSet==0) then ! durig run, but annular is not closing or opening
Pannular_reg= min(p_acc,Pannular_regset) Annular%Pannular_reg= min(RamLine%P_ACC,Annular%Pannular_regset)
endif endif
endif endif
!=================================================================== !===================================================================
! Annular Preventer Pressure Rise On Tooljoint ! Annular Preventer Pressure Rise On Tooljoint
!=================================================================== !===================================================================
if ( Annular_Situation_forTD == 1 .and. TD_AnnularFillingFinal==0.0 ) then ! Annular_Situation_forTD= 1 ! closed - for TD code if ( Annular%Annular_Situation_forTD == 1 .and. TD_AnnularFillingFinal==0.0 ) then ! Annular_Situation_forTD= 1 ! closed - for TD code
AnnPressureRise= .true. AnnularComputational%AnnPressureRise= .true.
elseif ( Annular_Situation_forTD == 0 ) then elseif ( Annular%Annular_Situation_forTD == 0 ) then
AnnPressureRise= .false. AnnularComputational%AnnPressureRise= .false.
endif endif
if (AnnPressureRise == .true.) then if (AnnularComputational%AnnPressureRise == .true.) then
Pannular_reg= Pannular_reg + 200. * TD_AnnularFillingFinal ! 200 psi pressure rise when 100% of AnnPreventer is filled by tool joint Annular%Pannular_reg= Annular%Pannular_reg + 200. * TD_AnnularFillingFinal ! 200 psi pressure rise when 100% of AnnPreventer is filled by tool joint
!TD_AnnularFillingFinal ! (0.0 to 1.0) percentage filled by tool joint !TD_AnnularFillingFinal ! (0.0 to 1.0) percentage filled by tool joint
endif endif
!=================================================================== !===================================================================
if (FirstSet== 1) then if (Annular%FirstSet== 1) then
!new= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.) !new= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.)
CALL Pannular_regDelay%AddToFirst( (1 - AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) ) CALL AnnularComputational%Pannular_regDelay%AddToFirst( (1 - Annular%AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) )
CALL Pannular_regDelay%Remove(Pannular_regDelay%Length()) CALL AnnularComputational%Pannular_regDelay%Remove(AnnularComputational%Pannular_regDelay%Length())
BopControlPanel%AnnularPressureGauge= Pannular_regDelay%Last() BopControlPanel%AnnularPressureGauge= AnnularComputational%Pannular_regDelay%Last()
!AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.) !AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.)
!write(*,*) 'set 1' , AnnularPressureGauge !write(*,*) 'set 1' , AnnularPressureGauge
else !FirstSet== 0 else !FirstSet== 0
!new= (1 - AnnularPressureGaugeMalf) * Pannular_reg !new= (1 - AnnularPressureGaugeMalf) * Pannular_reg
CALL Pannular_regDelay%AddToFirst( (1 - AnnularPressureGaugeMalf) * Pannular_reg) CALL AnnularComputational%Pannular_regDelay%AddToFirst( (1 - Annular%AnnularPressureGaugeMalf) * Annular%Pannular_reg)
CALL Pannular_regDelay%Remove(Pannular_regDelay%Length()) CALL AnnularComputational%Pannular_regDelay%Remove(AnnularComputational%Pannular_regDelay%Length())
BopControlPanel%AnnularPressureGauge= Pannular_regDelay%Last() BopControlPanel%AnnularPressureGauge= AnnularComputational%Pannular_regDelay%Last()
!AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * Pannular_reg !AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * Pannular_reg
!write(*,*) 'set 0' , AnnularPressureGauge !write(*,*) 'set 0' , AnnularPressureGauge
endif endif
@@ -154,122 +154,122 @@ module BOP
!=================================================== !===================================================
! AIR OPERATED PUMP CODE- START ! AIR OPERATED PUMP CODE- START
!=================================================== !===================================================
if (p_acc<AIR_PUMPON .and. airp_switch==0) then if (RamLine%P_ACC<Pumps%AIR_ON .and. RamLine%AIRP_SWITCH==0) then
airp_switch=1 RamLine%AIRP_SWITCH=1
endif endif
if (p_acc>AIR_PUMPOFF .and. airp_switch==1) then if (RamLine%P_ACC>Pumps%AIR_OFF .and. RamLine%AIRP_SWITCH==1) then
airp_switch=0 RamLine%AIRP_SWITCH=0
call SetSoundKoomeyAirPump(airp_switch) call SetSoundKoomeyAirPump(RamLine%AIRP_SWITCH)
endif endif
if (p_acc<ELECTRIC_PUMPON .and. elecp_switch==0) then if (RamLine%P_ACC<Pumps%ELECTRIC_ON .and. RamLine%ELECP_SWITCH==0) then
elecp_switch=1 RamLine%ELECP_SWITCH=1
endif endif
if (p_acc>ELECTRIC_PUMPOFF .and. elecp_switch==1) then if (RamLine%P_ACC>Pumps%ELECTRIC_OFF .and. RamLine%ELECP_SWITCH==1) then
elecp_switch=0 RamLine%ELECP_SWITCH=0
endif endif


!write(*,*) 'airp_switch,elecp_switch=' , airp_switch,elecp_switch !write(*,*) 'airp_switch,elecp_switch=' , airp_switch,elecp_switch
!================CHARGING BOTTLES======================= !================CHARGING BOTTLES=======================
if (airp_switch==1 .or. elecp_switch==1) then if (RamLine%AIRP_SWITCH==1 .or. RamLine%ELECP_SWITCH==1) then
if (Annular_closed==1 .and. ShearBop_closed==1 .and. PipeRam1_closed==1 .and. PipeRam2_closed==1 .and. ChokeLine_closed==1 .and. KillLine_closed==1) then if (Annular%Annular_closed==1 .and. RamLine%ShearBop_closed==1 .and. PipeRam1%closed==1 .and. PipeRam2%closed==1 .and. ChokeLine%closed==1 .and. KillLine%closed==1) then
call pumps_charge_bottle() call pumps_charge_bottle()
! increases volume and pressure in the bottles ! increases volume and pressure in the bottles
if (p_acc>acc_ChargedPressure) then if (RamLine%P_ACC>BopStackAcc%acc_ChargedPressure) then
p_acc=acc_ChargedPressure RamLine%P_ACC=BopStackAcc%acc_ChargedPressure
if (AnnularLeakMalf== 0) then if (Annular%AnnularLeakMalf== 0) then
!finished_Annular=1 !finished_Annular=1
RAM(1)%Bottles_Charged_MalfActive= .false. RAM(1)%Bottles_Charged_MalfActive= .false.
else else
finished_Annular=0 Annular%finished_Annular=0
RAM(1)%Bottles_Charged_MalfActive= .true. RAM(1)%Bottles_Charged_MalfActive= .true.
!fvr=fvr-2.5 !fvr=fvr-2.5
endif endif
if (UpperRamsLeakMalf== 0) then if (PipeRam1%UpperRamsLeakMalf== 0) then
!finished_pipe1=1 !finished_pipe1=1
RAM(2)%Bottles_Charged_MalfActive= .false. RAM(2)%Bottles_Charged_MalfActive= .false.
else else
finished_pipe1=0 PipeRam1%finished=0
RAM(2)%Bottles_Charged_MalfActive= .true. RAM(2)%Bottles_Charged_MalfActive= .true.
!fvr=fvr-2.5 !fvr=fvr-2.5
endif endif
if (LowerRamsLeakMalf== 0) then if (PipeRam2%LowerRamsLeakMalf== 0) then
!finished_pipe2=1 !finished_pipe2=1
RAM(3)%Bottles_Charged_MalfActive= .false. RAM(3)%Bottles_Charged_MalfActive= .false.
else else
finished_pipe2=0 PipeRam2%finished=0
RAM(3)%Bottles_Charged_MalfActive= .true. RAM(3)%Bottles_Charged_MalfActive= .true.
!fvr=fvr-2.5 !fvr=fvr-2.5
endif endif
if (MiddleRamsLeakMalf== 0) then if (ShearRam%MiddleRamsLeakMalf== 0) then
!finished_shear=1 !finished_shear=1
RAM(4)%Bottles_Charged_MalfActive= .false. RAM(4)%Bottles_Charged_MalfActive= .false.
else else
finished_shear=0 RamLine%FINISHED_shear=0
RAM(4)%Bottles_Charged_MalfActive= .true. RAM(4)%Bottles_Charged_MalfActive= .true.
!fvr=fvr-2.5 !fvr=fvr-2.5
endif endif
finished_KillLine=1 KillLine%finished=1
finished_ChokeLine=1 ChokeLine%finished=1
if (AnnularLeakMalf== 0 .and. UpperRamsLeakMalf== 0 .and. LowerRamsLeakMalf== 0 .and. MiddleRamsLeakMalf== 0) then if (Annular%AnnularLeakMalf== 0 .and. PipeRam1%UpperRamsLeakMalf== 0 .and. PipeRam2%LowerRamsLeakMalf== 0 .and. ShearRam%MiddleRamsLeakMalf== 0) then
elecp_switch=0 RamLine%ELECP_SWITCH=0
airp_switch=0 RamLine%AIRP_SWITCH=0
endif endif
endif endif
endif endif
endif endif


!======================================================= !=======================================================
if (elecp_switch==1 .and. AccPupmsFailMalf==0) then !on position if (RamLine%ELECP_SWITCH==1 .and. BopStackAcc%AccPupmsFailMalf==0) then !on position
deltav_elecp=QELECTRIC_PUMP*DeltaT_BOP/60. !QELECTRIC_PUMP(gpm), deltav_elecp(gal), DeltaT_BOP(0.1 sec) Pumps%DELTAV_ELECP=Pumps%QELECTRIC*RamLine%DeltaT_BOP/60. !QELECTRIC_PUMP(gpm), deltav_elecp(gal), DeltaT_BOP(0.1 sec)
SoundKoomeyElectricPump= .True. Pumps%SoundKoomeyElectric= .True.
else else
deltav_elecp=0 Pumps%DELTAV_ELECP=0
SoundKoomeyElectricPump= .false. Pumps%SoundKoomeyElectric= .false.
endif endif


!call SetSoundKoomeyElectricPump(SoundKoomeyElectricPump) !call SetSoundKoomeyElectricPump(SoundKoomeyElectricPump)
if (airp_switch==1 .and. AccPupmsFailMalf==0) then !on position if (RamLine%AIRP_SWITCH==1 .and. BopStackAcc%AccPupmsFailMalf==0) then !on position
call airpump_code() !ramtype=2 call airpump_code() !ramtype=2
end if ! if (airp_switch==1) then !on position end if ! if (airp_switch==1) then !on position




!===============AIR OPERATED PUMP CODE- END================ !===============AIR OPERATED PUMP CODE- END================
if (ShearBop_closed==1 .and. PipeRam1_closed==1 .and. PipeRam2_closed==1 .and. ChokeLine_closed==1 .and. KillLine_closed==1) then if (RamLine%ShearBop_closed==1 .and. PipeRam1%closed==1 .and. PipeRam2%closed==1 .and. ChokeLine%closed==1 .and. KillLine%closed==1) then
!write(*,*) ' All Rams are closed' !write(*,*) ' All Rams are closed'
if(ByPassOld== -1.0) then ! (OPEN POSITION) if(BopStackAcc%ByPassOld== -1.0) then ! (OPEN POSITION)
!old=pram_reg !old=pram_reg
!new=p_acc- MAXVAL(RAM%loss_before) !new=p_acc- MAXVAL(RAM%loss_before)
!difference= new-old !difference= new-old
PressureDifference= p_acc- MAXVAL(RAM%loss_before) - pram_reg BopStackAcc%PressureDifference= RamLine%P_ACC- MAXVAL(RAM%loss_before) - BopStackAcc%pram_reg
if (ABS(PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 300. psi if (ABS(BopStackAcc%PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 300. psi
pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. BopStackAcc%pram_reg= BopStackAcc%pram_reg + (BopStackAcc%PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20.
else else
pram_reg= p_acc- MAXVAL(RAM%loss_before) ! mishe khate paeen ye shart gozasht ke pacc=3000 shod, in adad dige kam nashe BopStackAcc%pram_reg= RamLine%P_ACC- MAXVAL(RAM%loss_before) ! mishe khate paeen ye shart gozasht ke pacc=3000 shod, in adad dige kam nashe
endif endif
elseif (ByPassOld== 1.0) then ! (CLOSE POSITION) elseif (BopStackAcc%ByPassOld== 1.0) then ! (CLOSE POSITION)
!pram_reg= prams_regset !pram_reg= prams_regset
!if (RamsFirstSet==1) then !if (RamsFirstSet==1) then
!write(*,*) 'bypass CLOSE POSITION' !write(*,*) 'bypass CLOSE POSITION'
!old=pram_reg !old=pram_reg
!new=prams_regset !new=prams_regset
!difference= new-old !difference= new-old
PressureDifference= prams_regset - pram_reg BopStackAcc%PressureDifference= BopStackAcc%PRAMS_REGSET - BopStackAcc%pram_reg
!write(*,*) 'PressureDifference, prams_regset , pram_reg=' , PressureDifference, prams_regset , pram_reg !write(*,*) 'PressureDifference, prams_regset , pram_reg=' , PressureDifference, prams_regset , pram_reg
if (ABS(PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 200. ! psi in starup if (ABS(BopStackAcc%PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 200. ! psi in starup
pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. in startup BopStackAcc%pram_reg= BopStackAcc%pram_reg + (BopStackAcc%PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. in startup
else else
pram_reg= prams_regset BopStackAcc%pram_reg= BopStackAcc%PRAMS_REGSET
endif endif
!write(*,*) 'pram_reg=' , pram_reg !write(*,*) 'pram_reg=' , pram_reg
@@ -279,12 +279,12 @@ module BOP
endif endif
BopControlPanel%MiddleRamsStatus = IDshearBop BopControlPanel%MiddleRamsStatus = ShearRam%IDshearBop
BopControlPanel%UpperRamsStatus = IDPipeRam1 BopControlPanel%UpperRamsStatus = PipeRam1%ID
BopControlPanel%LowerRamsStatus = IDPipeRam2 BopControlPanel%LowerRamsStatus = PipeRam2%ID
BopControlPanel%AnnularStatus = IDAnnular BopControlPanel%AnnularStatus = Annular%IDAnnular
BopControlPanel%AccumulatorPressureGauge = (1 - AccumulatorPressureGaugeMalf) * p_acc BopControlPanel%AccumulatorPressureGauge = (1 - BopStackAcc%AccumulatorPressureGaugeMalf) * RamLine%P_ACC
BopControlPanel%ManifoldPressureGauge= (1 - ManifoldPressureGaugeMalf) * pram_reg BopControlPanel%ManifoldPressureGauge= (1 - BopStackAcc%ManifoldPressureGaugeMalf) * BopStackAcc%pram_reg
!AnnularPressureGauge=Pannular_reg !AnnularPressureGauge=Pannular_reg
! !
! WRITE(60,60) RAM(2)%time,RAM(2)%Q,RAM(2)%vdis_tot,p_acc, & ! WRITE(60,60) RAM(2)%time,RAM(2)%Q,RAM(2)%vdis_tot,p_acc, &


+ 135
- 135
Equipments/BopStack/BOPstartup.f90 查看文件

@@ -22,7 +22,7 @@ integer i
!AirSupplyPressureGauge=0 !AirSupplyPressureGauge=0
!======================= SETTING VARIABLES !======================= SETTING VARIABLES


BOP_timeCounter= 0 BopStackInput%BOP_timeCounter= 0


!============== FOR MANIFOLD VALVES CODE===================== !============== FOR MANIFOLD VALVES CODE=====================
CALL OpenAnnular CALL OpenAnnular
@@ -32,10 +32,10 @@ CALL CloseKillLine
CALL CloseChokeLine CALL CloseChokeLine
CALL OpenLowerRams CALL OpenLowerRams


Annular_Situation_forTD= 0 ! open - for TD code Annular%Annular_Situation_forTD= 0 ! open - for TD code
ShearBop_Situation_forTD= 0 ! open - for TD code RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code
PipeRam1_Situation_forTD= 0 ! open - for TD code PipeRam1%Situation_forTD= 0 ! open - for TD code
PipeRam2_Situation_forTD= 0 ! open - for TD code PipeRam2%Situation_forTD= 0 ! open - for TD code
!====================================================================== !======================================================================


CALL LOSS_INPUTS() CALL LOSS_INPUTS()
@@ -54,11 +54,11 @@ RAM%First_OpenTimecheck= 0






Cumulative_AirVolume= 0.0 BopStackAcc%Cumulative_AirVolume= 0.0




bottle_capacity=10 !(GALON) BopStackAcc%BOTTLE_CAPACITY=10 !(GALON)
nobottles=Accumulator%NumberOfBottels BopStackAcc%NOBOTTLES=Accumulator%NumberOfBottels






@@ -67,82 +67,82 @@ nobottles=Accumulator%NumberOfBottels




!fvr_tot=40 !(GALON) IN CHARGED POSITION !fvr_tot=40 !(GALON) IN CHARGED POSITION
prams_regset=1500 !RamsReglatorSet !=1500 DEFAULT regulator set pressure (PSI) BopStackAcc%PRAMS_REGSET=1500 !RamsReglatorSet !=1500 DEFAULT regulator set pressure (PSI)
acc_ChargedPressure=3000 !charged(PSI) BopStackAcc%acc_ChargedPressure=3000 !charged(PSI)
acc_MinPressure=Accumulator%AccumulatorMinimumOperatingPressure !1200 !discharged(PSI) BopStackAcc%acc_MinPressure=Accumulator%AccumulatorMinimumOperatingPressure !1200 !discharged(PSI)
!acc_precharge=1000 !acc_precharge=1000




fvr_tot=(-2451*(acc_ChargedPressure**(-0.8202))+8.435)*nobottles ! IT IS WRRITEN FOR PRECHARGE 1000 PSI FROM ITS CURVE BopStackAcc%FVR_TOT=(-2451*(BopStackAcc%acc_ChargedPressure**(-0.8202))+8.435)*BopStackAcc%NOBOTTLES ! IT IS WRRITEN FOR PRECHARGE 1000 PSI FROM ITS CURVE


!write(*,*) 'fvr_tot=',fvr_tot !write(*,*) 'fvr_tot=',fvr_tot


!ELECTRIC_PUMPON=2800 !ELECTRIC_PUMPON=2800
ELECTRIC_PUMPON=Accumulator%StartPressure Pumps%ELECTRIC_ON=Accumulator%StartPressure
!ELECTRIC_PUMPOFF=acc_ChargedPressure !=3000 psi !ELECTRIC_PUMPOFF=acc_ChargedPressure !=3000 psi
ELECTRIC_PUMPOFF=Accumulator%StopPressure Pumps%ELECTRIC_OFF=Accumulator%StopPressure
!QELECTRIC_PUMP=12 !(gpm) !QELECTRIC_PUMP=12 !(gpm)
QELECTRIC_PUMP=Accumulator%ElectricPumpOutput Pumps%QELECTRIC=Accumulator%ElectricPumpOutput






!AIR_PUMPON=2600 !AIR_PUMPON=2600
AIR_PUMPON=Accumulator%StartPressure2 Pumps%AIR_ON=Accumulator%StartPressure2
!AIR_PUMPOFF=2900 !AIR_PUMPOFF=2900
AIR_PUMPOFF=Accumulator%StopPressure2 Pumps%AIR_OFF=Accumulator%StopPressure2






RAM%tol=0.0037 !%=(2700-2600)/2700 RAM%tol=0.0037 !%=(2700-2600)/2700
RAM%tolzero=RAM%tol RAM%tolzero=RAM%tol


tolAnnular=0.0018 !=(2900-2895)/2900 Annular%tolAnnular=0.0018 !=(2900-2895)/2900
tolzeroAnnular=tolAnnular Annular%tolzeroAnnular=Annular%tolAnnular
!======================OTHER INPUTS(CONSTANTS)=========================== !======================OTHER INPUTS(CONSTANTS)===========================
pa=300 !(PSI) ShearRam%PA=300 !(PSI)
p_shear=1200 !(PSI) ShearRam%P_SHEAR=1200 !(PSI)
!p_shear=2423.1 !(PSI) !p_shear=2423.1 !(PSI)
pb=p_shear-pa ShearRam%PB=ShearRam%P_SHEAR-ShearRam%PA
pa_annular=100 !(psi) AnnularComputational%pa_annular=100 !(psi)






IDAnnularBase=13.625 !(inch) Annular%IDAnnularBase=13.625 !(inch)
IDAnnular=IDAnnularBase Annular%IDAnnular=Annular%IDAnnularBase
ODDrillpipe_inAnnularBase=5. ! so 18 gal is for complete closing of annular Annular%ODDrillpipe_inAnnularBase=5. ! so 18 gal is for complete closing of annular
ODDrillpipe_inAnnular=5. ! initial Annular%ODDrillpipe_inAnnular=5. ! initial
AnnularMovingPressure=360. !(psi) AnnularComputational%AnnularMovingPressure=360. !(psi)
IDAnnularFinal= IDAnnular ShearRam%IDAnnularFinal= Annular%IDAnnular




IDshearBopBase=13.625 !(inch) ShearRam%IDshearBopBase=13.625 !(inch)
IDshearBop=IDshearBopBase ShearRam%IDshearBop=ShearRam%IDshearBopBase
ODDrillpipe_inShearRamBase=5 !initial ShearRam%ODDrillpipe_inShearRamBase=5 !initial
ODDrillpipe_inShearRam=5 !initial ShearRam%ODDrillpipe_inShearRam=5 !initial
IDshearBopFinal= IDshearBop ShearRam%IDshearBopFinal= ShearRam%IDshearBop


IDPipeRamBase=13.625 !(inch) PipeRam1%IDBase=13.625 !(inch)
IDPipeRam1=IDPipeRamBase PipeRam1%ID=PipeRam1%IDBase
ODDrillpipe_inPipeRam1Base=5 !initial PipeRam1%ODDrillpipe_inBase=5 !initial
ODDrillpipe_inPipeRam1=5 !initial PipeRam1%ODDrillpipe_in=5 !initial
IDPipeRam1Final= IDPipeRam1 ShearRam%IDPipeRam1Final= PipeRam1%ID




IDPipeRam2=IDPipeRamBase !(inch) PipeRam2%ID=PipeRam1%IDBase !(inch)
ODDrillpipe_inPipeRam2Base=5 !initial PipeRam2%ODDrillpipe_inBase=5 !initial
ODDrillpipe_inPipeRam2=5 !initial PipeRam2%ODDrillpipe_in=5 !initial
IDPipeRam2Final= IDPipeRam2 ShearRam%IDPipeRam2Final= PipeRam2%ID


IDChokeLineBase=8.6 !(inch) ChokeLine%IDBase=8.6 !(inch)
IDChokeLine=IDChokeLineBase ChokeLine%ID=ChokeLine%IDBase
ODDrillpipe_inChokeLineBase=5 ChokeLine%ODDrillpipe_inBase=5
ODDrillpipe_inChokeLine=5 ChokeLine%ODDrillpipe_in=5


IDKillLineBase=8.6 !(inch) KillLine%IDBase=8.6 !(inch)
IDKillLine=IDKillLineBase KillLine%ID=KillLine%IDBase
ODDrillpipe_inKillLineBase=5 KillLine%ODDrillpipe_inBase=5
ODDrillpipe_inKillLine=5 KillLine%ODDrillpipe_in=5




!va=4 !(liter) !va=4 !(liter)
@@ -150,99 +150,99 @@ ODDrillpipe_inKillLine=5


!cv=2; !flow coefficinet of regulator !cv=2; !flow coefficinet of regulator


RAM_COURSE=320.2 !milimeter ShearRam%RAM_COURSE=320.2 !milimeter
H_REGRAM=0 !(m)<<<<<<<<<<<<<<<<<<<<<<<< ShearRam%H_REGRAM=0 !(m)<<<<<<<<<<<<<<<<<<<<<<<<
H_ShearRamBop=(BopStackSpecification%GroundLevel-BopStackSpecification%BlindRamHeight)*0.3048 ! foot to meter ShearRam%H_ShearRamBop=(BopStackSpecification%GroundLevel-BopStackSpecification%BlindRamHeight)*0.3048 ! foot to meter
H_PipeRam1Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%UpperRamHeight)*0.3048 ! foot to meter PipeRam1%H=(BopStackSpecification%GroundLevel-BopStackSpecification%UpperRamHeight)*0.3048 ! foot to meter
H_PipeRam2Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%LowerRamHeight)*0.3048 ! foot to meter PipeRam2%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%LowerRamHeight)*0.3048 ! foot to meter
H_AnnularBop=(BopStackSpecification%GroundLevel-BopStackSpecification%AnnularPreventerHeight)*0.3048 ! foot to meter Annular%H_AnnularBop=(BopStackSpecification%GroundLevel-BopStackSpecification%AnnularPreventerHeight)*0.3048 ! foot to meter
H_ChokeLineBop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter ChokeLine%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter
H_KillLineBop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter KillLine%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter




p_acc=acc_ChargedPressure RamLine%P_ACC=BopStackAcc%acc_ChargedPressure
RAM%vdis_bottles=0 !initial discharged volume RAM%vdis_bottles=0 !initial discharged volume
fvr=fvr_tot RamLine%FVR=BopStackAcc%FVR_TOT
RAMS%minloss=0. RAMS%minloss=0.


!======================AIRPUMP INPUTS(CONSTANTS)=========================== !======================AIRPUMP INPUTS(CONSTANTS)===========================


RAM%FVR_AIR=0 RAM%FVR_AIR=0
P_AIRP=0 Pumps%P_AIRP=0


ba1=1003; ba2=.03375; ba3=4.014; ba4=.2458 RamLine%BA1=1003; RamLine%BA2=.03375; RamLine%BA3=4.014; RamLine%BA4=.2458
bba1 =31.8; bba2 =-725.7 ; bba3 =4154 RamLine%BBA1 =31.8; RamLine%BBA2 =-725.7 ; RamLine%BBA3 =4154


Qiter=7 !(gpm) Pumps%Qiter=7 !(gpm)


! Q=0.0003585; true ! Q=0.0003585; true




DeltaT_BOP=0.1 !second RamLine%DeltaT_BOP=0.1 !second
tol_air=.08 Pumps%TOL_AIR=.08


alpha_Qair=0 Pumps%alpha_Qair=0
alpha_timeair=0 Pumps%alpha_timeair=0
alpha_paccair=p_acc Pumps%alpha_paccair=RamLine%P_ACC
alpha_pairp=p_acc Pumps%alpha_pairp=RamLine%P_ACC
alpha_diffpair=0 Pumps%alpha_diffpair=0
alpha_lossesair=0 Pumps%alpha_lossesair=0
alpha_fvrair=0 Pumps%alpha_fvrair=0


counter_airp=1 RamLine%counter_airp=1


!======================BOP INPUTS(CONSTANTS)=========================== !======================BOP INPUTS(CONSTANTS)===========================


if (Accumulator%PrechargePressure == 1400.) then if (Accumulator%PrechargePressure == 1400.) then
b1=1396; b2=0.17; b3=3.873; b4=1.101 RamLine%B1=1396; RamLine%B2=0.17; RamLine%B3=3.873; RamLine%B4=1.101
elseif (Accumulator%PrechargePressure == 2000.) then elseif (Accumulator%PrechargePressure == 2000.) then
b1=1980; b2=0.1237; b3=15.69; b4=1.029 RamLine%B1=1980; RamLine%B2=0.1237; RamLine%B3=15.69; RamLine%B4=1.029
elseif (Accumulator%PrechargePressure == 600.) then elseif (Accumulator%PrechargePressure == 600.) then
b1=591.9; b2=0.1968; b3=2.887; b4=0.9757 RamLine%B1=591.9; RamLine%B2=0.1968; RamLine%B3=2.887; RamLine%B4=0.9757
else !(PrechargePressure == 1000.) then ! this is for precharge=1000 psi else !(PrechargePressure == 1000.) then ! this is for precharge=1000 psi
b1=993.7; b2=0.164; b3=5.492; b4=0.9796 RamLine%B1=993.7; RamLine%B2=0.164; RamLine%B3=5.492; RamLine%B4=0.9796
endif endif
ByPassOld= 1.0 BopStackAcc%ByPassOld= 1.0


RAM%p_bop=pa RAM%p_bop=ShearRam%PA
p_annular=pa_annular AnnularComputational%p_annular=AnnularComputational%pa_annular
!Q=0.0055; !initial flow rate (m^3/s) !Q=0.0055; !initial flow rate (m^3/s)
RAM%flow=60 !(gpm) initial value RAM%flow=60 !(gpm) initial value
RAM%Qzero=70 !for DP code, increasing Q after shear RAM%Qzero=70 !for DP code, increasing Q after shear
RAM%vdis_tot=0 RAM%vdis_tot=0
airp_switch=0 !off position RamLine%AIRP_SWITCH=0 !off position
elecp_switch=0 !off position RamLine%ELECP_SWITCH=0 !off position
ShearBop_closed=1 RamLine%ShearBop_closed=1
PipeRam1_closed=1 PipeRam1%closed=1
PipeRam2_closed=1 PipeRam2%closed=1
ChokeLine_closed=1 ChokeLine%closed=1
KillLine_closed=1 KillLine%closed=1
Annular_closed=1 Annular%Annular_closed=1
finished_Shear=0 RamLine%FINISHED_shear=0
finished_pipe1=0 PipeRam1%finished=0
finished_pipe2=0 PipeRam2%finished=0
finished_ChokeLine=0 ChokeLine%finished=0
finished_KillLine=0 KillLine%finished=0
finished_Annular=0 Annular%finished_Annular=0
deltav_elecp=0 Pumps%DELTAV_ELECP=0
RAM%vdis_elecp=0 RAM%vdis_elecp=0
!================================================================== !==================================================================
RAM%timecounter_ram=0 RAM%timecounter_ram=0
RAM%Q=0 RAM%Q=0
pram_reg=prams_regset !psi !RamsReglatorSet BopStackAcc%pram_reg=BopStackAcc%PRAMS_REGSET !psi !RamsReglatorSet
Pannular_reg=min(BopControlPanel%AnnularRegulatorSetControl,1700.) Annular%Pannular_reg=min(BopControlPanel%AnnularRegulatorSetControl,1700.)








BopControlPanel%MiddleRamsStatus= IDshearBop BopControlPanel%MiddleRamsStatus= ShearRam%IDshearBop
BopControlPanel%UpperRamsStatus= IDPipeRam1 BopControlPanel%UpperRamsStatus= PipeRam1%ID
BopControlPanel%LowerRamsStatus= IDPipeRam2 BopControlPanel%LowerRamsStatus= PipeRam2%ID
BopControlPanel%AnnularStatus = IDAnnular BopControlPanel%AnnularStatus = Annular%IDAnnular




BopControlPanel%AccumulatorPressureGauge = p_acc BopControlPanel%AccumulatorPressureGauge = RamLine%P_ACC




RAM%time=0 RAM%time=0
@@ -260,62 +260,62 @@ RAM%time=0




BopControlPanel%MiddleRamsOpenLED = LedOn BopControlPanel%MiddleRamsOpenLED = LedOn
MiddleRamsOpenLEDMine = LedOn BopStackInput%MiddleRamsOpenLEDMine = LedOn
BopControlPanel%MiddleRamsCloseLED = LedOff BopControlPanel%MiddleRamsCloseLED = LedOff
MiddleRamsCloseLEDMine = LedOff BopStackInput%MiddleRamsCloseLEDMine = LedOff
ShearRamIsOpening = .false. RamLine%ShearRamIsOpening = .false.
ShearRamIsClosing = .false. RamLine%ShearRamIsClosing = .false.


BopControlPanel%UpperRamsOpenLED = LedOn BopControlPanel%UpperRamsOpenLED = LedOn
UpperRamsOpenLEDMine = LedOn BopStackInput%UpperRamsOpenLEDMine = LedOn
BopControlPanel%UpperRamsCloseLED = LedOff BopControlPanel%UpperRamsCloseLED = LedOff
UpperRamsCloseLEDMine = LedOff BopStackInput%UpperRamsCloseLEDMine = LedOff
PipeRam1IsOpening = .false. PipeRam1%IsOpening = .false.
PipeRam1IsClosing = .false. PipeRam1%IsClosing = .false.
BopControlPanel%LowerRamsOpenLED = LedOn BopControlPanel%LowerRamsOpenLED = LedOn
LowerRamsOpenLEDMine = LedOn BopStackInput%LowerRamsOpenLEDMine = LedOn
BopControlPanel%LowerRamsCloseLED = LedOff BopControlPanel%LowerRamsCloseLED = LedOff
LowerRamsCloseLEDMine = LedOff BopStackInput%LowerRamsCloseLEDMine = LedOff
PipeRam2IsOpening = .false. PipeRam2%IsOpening = .false.
PipeRam2IsClosing = .false. PipeRam2%IsClosing = .false.
BopControlPanel%ChokeLineOpenLED = LedOff BopControlPanel%ChokeLineOpenLED = LedOff
ChokeLineOpenLEDMine = LedOff BopStackInput%ChokeLineOpenLEDMine = LedOff
BopControlPanel%ChokeLineCloseLED = LedOn BopControlPanel%ChokeLineCloseLED = LedOn
ChokeLineCloseLEDMine = LedOn BopStackInput%ChokeLineCloseLEDMine = LedOn
ChokeLineIsOpening = .false. ChokeLine%IsOpening = .false.
ChokeLineIsClosing = .false. ChokeLine%IsClosing = .false.
BopControlPanel%KillLineOpenLED = LedOff BopControlPanel%KillLineOpenLED = LedOff
KillLineOpenLedMine = LedOff BopStackInput%KillLineOpenLedMine = LedOff
BopControlPanel%KillLineCloseLED = LedOn BopControlPanel%KillLineCloseLED = LedOn
KillLineCloseLedMine = LedOn BopStackInput%KillLineCloseLedMine = LedOn
KillLineIsOpening = .false. KillLine%IsOpening = .false.
KillLineIsClosing = .false. KillLine%IsClosing = .false.
BopControlPanel%AnnularOpenLED = LedOn BopControlPanel%AnnularOpenLED = LedOn
AnnularOpenLedMine = LedOn BopStackInput%AnnularOpenLedMine = LedOn
BopControlPanel%AnnularCloseLED = LedOff BopControlPanel%AnnularCloseLED = LedOff
AnnularCloseLedMine = LedOff BopStackInput%AnnularCloseLedMine = LedOff
AnnularIsOpening = .false. Annular%AnnularIsOpening = .false.
AnnularIsClosing = .false. Annular%AnnularIsClosing = .false.
FirstSet=1 Annular%FirstSet=1
RamsFirstSet=1 AnnularComputational%RamsFirstSet=1
BopControlPanel%ManifoldPressureGauge=prams_regset !RamsReglatorSet BopControlPanel%ManifoldPressureGauge=BopStackAcc%PRAMS_REGSET !RamsReglatorSet
BopControlPanel%AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) BopControlPanel%AnnularPressureGauge= (1 - Annular%AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.)
PannularTimeStepDelay = int(1./DeltaT_BOP) ! 1/0.1 : for 1 sec delay in AnnRegulator shot time AnnularComputational%PannularTimeStepDelay = int(1./RamLine%DeltaT_BOP) ! 1/0.1 : for 1 sec delay in AnnRegulator shot time


DO i = 1 , PannularTimeStepDelay DO i = 1 , AnnularComputational%PannularTimeStepDelay
CALL Pannular_regDelay%AddToFirst(BopControlPanel%AnnularPressureGauge) CALL AnnularComputational%Pannular_regDelay%AddToFirst(BopControlPanel%AnnularPressureGauge)
END DO END DO


+ 9
- 9
Equipments/BopStack/BlindRamsMain.f90 查看文件

@@ -20,22 +20,22 @@ module BlindRamsMain
subroutine BlindRams_Step subroutine BlindRams_Step
use VARIABLES use VARIABLES
implicit none implicit none
if (FINISHED_shear/=0) then if (RamLine%FINISHED_shear/=0) then
call SHEAR_RAMS call SHEAR_RAMS
if (ShearRamIsOpening .or. ShearRamIsClosing .or. RAM(4)%Bottles_Charged_MalfActive) then if (RamLine%ShearRamIsOpening .or. RamLine%ShearRamIsClosing .or. RAM(4)%Bottles_Charged_MalfActive) then
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
if(FINISHED_shear==0) then if(RamLine%FINISHED_shear==0) then
call SHEAR_RAMS_SUB !only body of loop2 call SHEAR_RAMS_SUB !only body of loop2
if (FINISHED_shear/=0 .and. finished_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then if (RamLine%FINISHED_shear/=0 .and. RamLine%FINISHED_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then
call bop_code(1,H_ShearRamBop,4) call bop_code(1,ShearRam%H_ShearRamBop,4)
endif endif
endif endif
endif endif
else else
call SHEAR_RAMS_SUB call SHEAR_RAMS_SUB
if (FINISHED_shear/=0 .and. finished_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then if (RamLine%FINISHED_shear/=0 .and. RamLine%FINISHED_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then
call bop_code(1,H_ShearRamBop,4) call bop_code(1,ShearRam%H_ShearRamBop,4)
endif endif
endif endif




+ 53
- 53
Equipments/BopStack/CHOKE_LINE.f90 查看文件

@@ -18,7 +18,7 @@ SUBROUTINE CHOKE_LINE
RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1 RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1
if (BopControlPanel%ChokeLineValve == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then if (BopControlPanel%ChokeLineValve == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then
RAM(5)%SuccessionCounter = 0 ! also in starup RAM(5)%SuccessionCounter = 0 ! also in starup
@@ -29,7 +29,7 @@ SUBROUTINE CHOKE_LINE
endif endif
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -38,36 +38,36 @@ SUBROUTINE CHOKE_LINE
if (ChokeLineOpenLEDMine == LedOn) then if (BopStackInput%ChokeLineOpenLEDMine == LedOn) then
RETURN RETURN
end if end if
ChokeLine_closed=0 ChokeLine%closed=0
RAM(5)%vdis_tot=0 RAM(5)%vdis_tot=0
RAM(5)%vdis_bottles=0. RAM(5)%vdis_bottles=0.
RAM(5)%fvr_air=0. RAM(5)%fvr_air=0.
RAM(5)%vdis_elecp=0. RAM(5)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(5)%Qzero=70 RAM(5)%Qzero=70
RAM(5)%Q=RAM(5)%Qzero RAM(5)%Q=RAM(5)%Qzero
RAM(5)%flow=70 RAM(5)%flow=70
RAM(5)%tol=0.0037 RAM(5)%tol=0.0037
if (finished_ChokeLine==1) then if (ChokeLine%finished==1) then
ChokeLineLeverOld= 1.0 ChokeLine%LeverOld= 1.0
else else
ChokeLineLeverOld=BopControlPanel%ChokeLineValve ChokeLine%LeverOld=BopControlPanel%ChokeLineValve
endif endif
finished_ChokeLine=0 ChokeLine%finished=0
ChokeLineIsOpening = .true. ChokeLine%IsOpening = .true.
BopControlPanel%ChokeLineCloseLED = LedOff BopControlPanel%ChokeLineCloseLED = LedOff
ChokeLineCloseLEDMine = LedOff BopStackInput%ChokeLineCloseLEDMine = LedOff
BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking
RAM(5)%bop_type = 3 RAM(5)%bop_type = 3
!AbopChokeLine=196.67 !AbopChokeLine=196.67
AbopChokeLine=(BopStackSpecification%ChokeClose*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) ChokeLine%Abop=(BopStackSpecification%ChokeClose*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.)
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) !1.5 galon for each BOP ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%IDBase-max(ChokeLine%ODDrillpipe_in,ChokeLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP
endif endif
if (BopControlPanel%ChokeLineValve == 1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then if (BopControlPanel%ChokeLineValve == 1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then
@@ -79,7 +79,7 @@ SUBROUTINE CHOKE_LINE
endif endif
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -87,15 +87,15 @@ SUBROUTINE CHOKE_LINE
if (ChokeLineCloseLEDMine == LedOn) then if (BopStackInput%ChokeLineCloseLEDMine == LedOn) then
RETURN RETURN
end if end if
ChokeLine_closed=0 ChokeLine%closed=0
RAM(5)%vdis_tot=0 RAM(5)%vdis_tot=0
RAM(5)%vdis_bottles=0. RAM(5)%vdis_bottles=0.
RAM(5)%fvr_air=0. RAM(5)%fvr_air=0.
RAM(5)%vdis_elecp=0. RAM(5)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(5)%Qzero=70 RAM(5)%Qzero=70
RAM(5)%Q=RAM(5)%Qzero RAM(5)%Q=RAM(5)%Qzero
RAM(5)%flow=70 RAM(5)%flow=70
@@ -103,13 +103,13 @@ SUBROUTINE CHOKE_LINE


if (finished_ChokeLine==1) then if (ChokeLine%finished==1) then
ChokeLineLeverOld= -1.0 ChokeLine%LeverOld= -1.0
else else
ChokeLineLeverOld=BopControlPanel%ChokeLineValve ChokeLine%LeverOld=BopControlPanel%ChokeLineValve
endif endif
finished_ChokeLine=0 ChokeLine%finished=0
ChokeLineIsClosing = .true. ChokeLine%IsClosing = .true.


!if (ChokeLineCloseLED == LedOn) then !if (ChokeLineCloseLED == LedOn) then
@@ -117,14 +117,14 @@ SUBROUTINE CHOKE_LINE
!end if !end if
BopControlPanel%ChokeLineCloseLED = LedOff !new BopControlPanel%ChokeLineCloseLED = LedOff !new
ChokeLineCloseLedMine = LedOff !new BopStackInput%ChokeLineCloseLEDMine = LedOff !new
BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking
RAM(5)%bop_type = 3 RAM(5)%bop_type = 3
!AbopChokeLine=196.67 !AbopChokeLine=196.67
AbopChokeLine=(BopStackSpecification%ChokeOpen*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) ChokeLine%Abop=(BopStackSpecification%ChokeOpen*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.)
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) !1.5 galon for each BOP ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%IDBase-max(ChokeLine%ODDrillpipe_in,ChokeLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP
endif endif


@@ -168,7 +168,7 @@ SUBROUTINE CHOKE_LINE_SUB
RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1 RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1
if (BopControlPanel%ChokeLineValve == 1.0 .and. ChokeLineLeverOld == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then if (BopControlPanel%ChokeLineValve == 1.0 .and. ChokeLine%LeverOld == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
if ( RAM(5)%First_CloseTimecheck == 0 ) then if ( RAM(5)%First_CloseTimecheck == 0 ) then
@@ -183,7 +183,7 @@ SUBROUTINE CHOKE_LINE_SUB


if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -191,26 +191,26 @@ SUBROUTINE CHOKE_LINE_SUB
ChokeLine_closed=0 ChokeLine%closed=0
RAM(5)%p_bop=pa RAM(5)%p_bop=ShearRam%PA
ChokeLineLeverOld = BopControlPanel%ChokeLineValve ChokeLine%LeverOld = BopControlPanel%ChokeLineValve
BopControlPanel%ChokeLineOpenLED = LedOff BopControlPanel%ChokeLineOpenLED = LedOff
ChokeLineOpenLEDMine = LedOff BopStackInput%ChokeLineOpenLEDMine = LedOff
BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking
CALL OpenChokeLine CALL OpenChokeLine
RAM(5)%bop_type = 3 RAM(5)%bop_type = 3
!AbopChokeLine=196.67 !AbopChokeLine=196.67
AbopChokeLine=(BopStackSpecification%ChokeClose*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) ChokeLine%Abop=(BopStackSpecification%ChokeClose*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.)
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLine-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%ID-max(ChokeLine%ODDrillpipe_in,ChokeLine%ODDrillpipe_inBase))/(2.*231)
RAM(5)%vdis_bottles=0. RAM(5)%vdis_bottles=0.
RAM(5)%fvr_air=0. RAM(5)%fvr_air=0.
RAM(5)%vdis_elecp=0. RAM(5)%vdis_elecp=0.
ChokeLineIsClosing = .true. ChokeLine%IsClosing = .true.
ChokeLineIsOpening = .false. ChokeLine%IsOpening = .false.
endif endif
if (BopControlPanel%ChokeLineValve == -1.0 .and. ChokeLineLeverOld == 1.0 .and. p_acc>acc_MinPressure .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%ChokeLineValve == -1.0 .and. ChokeLine%LeverOld == 1.0 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if ( RAM(5)%First_OpenTimecheck == 0 ) then if ( RAM(5)%First_OpenTimecheck == 0 ) then


@@ -222,7 +222,7 @@ SUBROUTINE CHOKE_LINE_SUB
RAM(5)%SuccessionCounterOld= RAM(5)%SuccessionCounter RAM(5)%SuccessionCounterOld= RAM(5)%SuccessionCounter
endif endif
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -230,23 +230,23 @@ SUBROUTINE CHOKE_LINE_SUB
ChokeLine_closed=0 ChokeLine%closed=0
RAM(5)%p_bop=pa RAM(5)%p_bop=ShearRam%PA
ChokeLineLeverOld = BopControlPanel%ChokeLineValve ChokeLine%LeverOld = BopControlPanel%ChokeLineValve
BopControlPanel%ChokeLineCloseLED = LedOff BopControlPanel%ChokeLineCloseLED = LedOff
ChokeLineCloseLEDMine = LedOff BopStackInput%ChokeLineCloseLEDMine = LedOff
BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking
CALL OpenChokeLine CALL OpenChokeLine
RAM(5)%bop_type = 3 RAM(5)%bop_type = 3
!AbopChokeLine=196.67 !AbopChokeLine=196.67
AbopChokeLine=(BopStackSpecification%ChokeOpen*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) ChokeLine%Abop=(BopStackSpecification%ChokeOpen*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.)
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-IDChokeLine)/(2.*231) ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%IDBase-ChokeLine%ID)/(2.*231)
RAM(5)%vdis_bottles=0. RAM(5)%vdis_bottles=0.
RAM(5)%fvr_air=0. RAM(5)%fvr_air=0.
RAM(5)%vdis_elecp=0. RAM(5)%vdis_elecp=0.


ChokeLineIsOpening = .true. ChokeLine%IsOpening = .true.
ChokeLineIsClosing = .false. ChokeLine%IsClosing = .false.
endif endif




@@ -254,21 +254,21 @@ SUBROUTINE CHOKE_LINE_SUB
RAM(5)%First_OpenTimecheck = 0 RAM(5)%First_OpenTimecheck = 0
RAM(5)%time=RAM(5)%time+DeltaT_BOP !overal time (s) RAM(5)%time=RAM(5)%time+RamLine%DeltaT_BOP !overal time (s)




!=================================================== !===================================================
! BOP ! BOP
!=================================================== !===================================================
if (ChokeLine_closed==0) then !bop closing if (ChokeLine%closed==0) then !bop closing
call bop_code(4,H_ChokeLineBop,5) !ramtype=4 5=RNUMBER call bop_code(4,ChokeLine%H_Bop,5) !ramtype=4 5=RNUMBER
endif !bop is closing endif !bop is closing
!================================================================ !================================================================
if (ChokeLine_closed==1) then if (ChokeLine%closed==1) then
RAM(5)%Q=0 RAM(5)%Q=0
!p_bop=pram_reg !p_bop=pram_reg
RAM(5)%p_bop=pa RAM(5)%p_bop=ShearRam%PA
RAMS%minloss(5,17)=0. !RNUMBER=5 RAMS%minloss(5,17)=0. !RNUMBER=5
endif endif


@@ -295,9 +295,9 @@ RAM(5)%timecounter_ram=RAM(5)%timecounter_ram+1
! call sleepqq(100) ! call sleepqq(100)
if (ChokeLine_closed==1) then if (ChokeLine%closed==1) then
! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. KillLineValve==1. .or. KillLineValve==-1.0) then ! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. KillLineValve==1. .or. KillLineValve==-1.0) then
finished_ChokeLine=1 ChokeLine%finished=1
! endif ! endif
endif endif


+ 5
- 5
Equipments/BopStack/ChokeLineMain.f90 查看文件

@@ -20,12 +20,12 @@ module ChokeLineMain
subroutine ChokeLine_Step subroutine ChokeLine_Step
use VARIABLES use VARIABLES
implicit none implicit none
if (finished_ChokeLine/=0) then if (ChokeLine%finished/=0) then
call CHOKE_LINE call CHOKE_LINE
if (ChokeLineIsOpening .or. ChokeLineIsClosing) then if (ChokeLine%IsOpening .or. ChokeLine%IsClosing) then
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
if(finished_ChokeLine==0) then if(ChokeLine%finished==0) then
call CHOKE_LINE_SUB !only body of loop2 call CHOKE_LINE_SUB !only body of loop2
endif endif
endif endif


+ 56
- 56
Equipments/BopStack/KILL_LINE.f90 查看文件

@@ -19,7 +19,7 @@ SUBROUTINE KILL_LINE
RAM(6)%SuccessionCounter = RAM(6)%SuccessionCounter + 1 RAM(6)%SuccessionCounter = RAM(6)%SuccessionCounter + 1
if (BopControlPanel%KillLineValve == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then if (BopControlPanel%KillLineValve == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then
RAM(6)%SuccessionCounter = 0 ! also in starup RAM(6)%SuccessionCounter = 0 ! also in starup
@@ -30,7 +30,7 @@ SUBROUTINE KILL_LINE
endif endif
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -38,36 +38,36 @@ SUBROUTINE KILL_LINE
if (KillLineOpenLedMine == LedOn) then if (BopStackInput%KillLineOpenLedMine == LedOn) then
RETURN RETURN
end if end if
KillLine_closed=0 KillLine%closed=0
RAM(6)%vdis_tot=0 RAM(6)%vdis_tot=0
RAM(6)%vdis_bottles=0. RAM(6)%vdis_bottles=0.
RAM(6)%fvr_air=0. RAM(6)%fvr_air=0.
RAM(6)%vdis_elecp=0. RAM(6)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(6)%Qzero=70 RAM(6)%Qzero=70
RAM(6)%Q=RAM(6)%Qzero RAM(6)%Q=RAM(6)%Qzero
RAM(6)%flow=70 RAM(6)%flow=70
RAM(6)%tol=0.0037 RAM(6)%tol=0.0037
if (finished_KillLine==1) then if (KillLine%finished==1) then
KillLineLeverOld= 1.0 KillLine%LeverOld= 1.0
else else
KillLineLeverOld=BopControlPanel%KillLineValve KillLine%LeverOld=BopControlPanel%KillLineValve
endif endif
finished_KillLine=0 KillLine%finished=0
KillLineIsOpening = .true. KillLine%IsOpening = .true.
BopControlPanel%KillLineCloseLED = LedOff BopControlPanel%KillLineCloseLED = LedOff
KillLineCloseLedMine = LedOff BopStackInput%KillLineCloseLedMine = LedOff
BopControlPanel%KillLineOpenLED = LedOn !LedBlinking BopControlPanel%KillLineOpenLED = LedOn !LedBlinking
RAM(6)%bop_type = 3 RAM(6)%bop_type = 3
!AbopKillLine=196.67 !AbopKillLine=196.67
AbopKillLine=(BopStackSpecification%KillClose*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) KillLine%Abop=(BopStackSpecification%KillClose*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.)
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) !1.5 galon for each BOP KillLine%NeededVolume=KillLine%Abop*(KillLine%IDBase-max(KillLine%ODDrillpipe_in,KillLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP
endif endif
if (BopControlPanel%KillLineValve == 1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then if (BopControlPanel%KillLineValve == 1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then
@@ -79,7 +79,7 @@ SUBROUTINE KILL_LINE
endif endif
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -87,15 +87,15 @@ SUBROUTINE KILL_LINE
if (KillLineCloseLedMine == LedOn) then if (BopStackInput%KillLineCloseLedMine == LedOn) then
RETURN RETURN
end if end if
KillLine_closed=0 KillLine%closed=0
RAM(6)%vdis_tot=0 RAM(6)%vdis_tot=0
RAM(6)%vdis_bottles=0. RAM(6)%vdis_bottles=0.
RAM(6)%fvr_air=0. RAM(6)%fvr_air=0.
RAM(6)%vdis_elecp=0. RAM(6)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(6)%Qzero=70 RAM(6)%Qzero=70
RAM(6)%Q=RAM(6)%Qzero RAM(6)%Q=RAM(6)%Qzero
RAM(6)%flow=70 RAM(6)%flow=70
@@ -103,13 +103,13 @@ SUBROUTINE KILL_LINE


if (finished_KillLine==1) then if (KillLine%finished==1) then
KillLineLeverOld= -1.0 KillLine%LeverOld= -1.0
else else
KillLineLeverOld=BopControlPanel%KillLineValve KillLine%LeverOld=BopControlPanel%KillLineValve
endif endif
finished_KillLine=0 KillLine%finished=0
KillLineIsClosing = .true. KillLine%IsClosing = .true.


!if (KillLineCloseLed == LedOn) then !if (KillLineCloseLed == LedOn) then
@@ -117,18 +117,18 @@ SUBROUTINE KILL_LINE
!end if !end if
BopControlPanel%KillLineCloseLED = LedOff !new BopControlPanel%KillLineCloseLED = LedOff !new
KillLineCloseLedMine = LedOff !new BopStackInput%KillLineCloseLedMine = LedOff !new
BopControlPanel%KillLineCloseLED = LedOn !LedBlinking BopControlPanel%KillLineCloseLED = LedOn !LedBlinking
RAM(6)%bop_type = 3 RAM(6)%bop_type = 3
!AbopKillLine=196.67 !AbopKillLine=196.67
AbopKillLine=(BopStackSpecification%KillOpen*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) KillLine%Abop=(BopStackSpecification%KillOpen*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.)
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) !1.5 galon for each BOP KillLine%NeededVolume=KillLine%Abop*(KillLine%IDBase-max(KillLine%ODDrillpipe_in,KillLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP
endif endif
!========================================================================== !==========================================================================
if (KillLineIsOpening .or. KillLineIsClosing) then if (KillLine%IsOpening .or. KillLine%IsClosing) then
CALL KILL_LINE_SUB CALL KILL_LINE_SUB
end if end if
@@ -157,8 +157,8 @@ SUBROUTINE KILL_LINE_SUB
implicit none implicit none
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
! loop6: do while (finished_KillLine==0) ! loop6: do while (finished_KillLine==0)
@@ -167,7 +167,7 @@ SUBROUTINE KILL_LINE_SUB
if (BopControlPanel%KillLineValve == 1.0 .and. KillLineLeverOld == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then if (BopControlPanel%KillLineValve == 1.0 .and. KillLine%LeverOld == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
if ( RAM(6)%First_CloseTimecheck == 0 ) then if ( RAM(6)%First_CloseTimecheck == 0 ) then
@@ -182,7 +182,7 @@ SUBROUTINE KILL_LINE_SUB


if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
@@ -190,26 +190,26 @@ SUBROUTINE KILL_LINE_SUB
KillLine_closed=0 KillLine%closed=0
RAM(6)%p_bop=pa RAM(6)%p_bop=ShearRam%PA
KillLineLeverOld = BopControlPanel%KillLineValve KillLine%LeverOld = BopControlPanel%KillLineValve
BopControlPanel%KillLineOpenLED = LedOff BopControlPanel%KillLineOpenLED = LedOff
KillLineOpenLedMine = LedOff BopStackInput%KillLineOpenLedMine = LedOff
BopControlPanel%KillLineCloseLED = LedOn !LedBlinking BopControlPanel%KillLineCloseLED = LedOn !LedBlinking
CALL OpenKillLine CALL OpenKillLine
RAM(6)%bop_type = 3 RAM(6)%bop_type = 3
!AbopKillLine=196.67 !AbopKillLine=196.67
AbopKillLine=(BopStackSpecification%KillClose*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) KillLine%Abop=(BopStackSpecification%KillClose*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.)
NeededVolumeKillLine=AbopKillLine*(IDKillLine-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) KillLine%NeededVolume=KillLine%Abop*(KillLine%ID-max(KillLine%ODDrillpipe_in,KillLine%ODDrillpipe_inBase))/(2.*231)
RAM(6)%vdis_bottles=0. RAM(6)%vdis_bottles=0.
RAM(6)%fvr_air=0. RAM(6)%fvr_air=0.
RAM(6)%vdis_elecp=0. RAM(6)%vdis_elecp=0.
KillLineIsClosing = .true. KillLine%IsClosing = .true.
KillLineIsOpening = .false. KillLine%IsOpening = .false.
endif endif
if (BopControlPanel%KillLineValve == -1.0 .and. KillLineLeverOld == 1.0 .and. p_acc>acc_MinPressure .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%KillLineValve == -1.0 .and. KillLine%LeverOld == 1.0 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if ( RAM(6)%First_OpenTimecheck == 0 ) then if ( RAM(6)%First_OpenTimecheck == 0 ) then
@@ -222,30 +222,30 @@ SUBROUTINE KILL_LINE_SUB
RAM(6)%SuccessionCounterOld= RAM(6)%SuccessionCounter RAM(6)%SuccessionCounterOld= RAM(6)%SuccessionCounter
endif endif
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then
return return
endif endif
endif endif
KillLine_closed=0 KillLine%closed=0
RAM(6)%p_bop=pa RAM(6)%p_bop=ShearRam%PA
KillLineLeverOld = BopControlPanel%KillLineValve KillLine%LeverOld = BopControlPanel%KillLineValve
BopControlPanel%KillLineCloseLED = LedOff BopControlPanel%KillLineCloseLED = LedOff
KillLineCloseLedMine = LedOff BopStackInput%KillLineCloseLedMine = LedOff
BopControlPanel%KillLineOpenLED = LedOn !LedBlinking BopControlPanel%KillLineOpenLED = LedOn !LedBlinking
CALL OpenKillLine CALL OpenKillLine
RAM(6)%bop_type = 3 RAM(6)%bop_type = 3
!AbopKillLine=196.67 !AbopKillLine=196.67
AbopKillLine=(BopStackSpecification%KillOpen*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) KillLine%Abop=(BopStackSpecification%KillOpen*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.)
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-IDKillLine)/(2.*231) KillLine%NeededVolume=KillLine%Abop*(KillLine%IDBase-KillLine%ID)/(2.*231)
RAM(6)%vdis_bottles=0. RAM(6)%vdis_bottles=0.
RAM(6)%fvr_air=0. RAM(6)%fvr_air=0.
RAM(6)%vdis_elecp=0. RAM(6)%vdis_elecp=0.


KillLineIsOpening = .true. KillLine%IsOpening = .true.
KillLineIsClosing = .false. KillLine%IsClosing = .false.
endif endif


@@ -253,21 +253,21 @@ SUBROUTINE KILL_LINE_SUB
RAM(6)%First_OpenTimecheck = 0 RAM(6)%First_OpenTimecheck = 0
RAM(6)%time=RAM(6)%time+DeltaT_BOP !overal time (s) RAM(6)%time=RAM(6)%time+RamLine%DeltaT_BOP !overal time (s)




!=================================================== !===================================================
! BOP ! BOP
!=================================================== !===================================================
if (KillLine_closed==0) then !bop closing if (KillLine%closed==0) then !bop closing
call bop_code(5,H_KillLineBop,6) !ramtype=5 6=RNUMBER call bop_code(5,KillLine%H_Bop,6) !ramtype=5 6=RNUMBER
endif !bop is closing endif !bop is closing
!================================================================ !================================================================
if (KillLine_closed==1) then if (KillLine%closed==1) then
RAM(6)%Q=0 RAM(6)%Q=0
!p_bop=pram_reg !p_bop=pram_reg
RAM(6)%p_bop=pa RAM(6)%p_bop=ShearRam%PA
RAMS%minloss(6,17)=0. !RNUMBER=6 RAMS%minloss(6,17)=0. !RNUMBER=6
endif endif


@@ -295,9 +295,9 @@ RAM(6)%timecounter_ram=RAM(6)%timecounter_ram+1
! call sleepqq(100) ! call sleepqq(100)
if (KillLine_closed==1) then if (KillLine%closed==1) then
! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0) then ! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0) then
finished_KillLine=1 KillLine%finished=1
! endif ! endif
endif endif


+ 3
- 3
Equipments/BopStack/KillLineMain.f90 查看文件

@@ -20,10 +20,10 @@ module KillLineMain
subroutine KillLine_Step subroutine KillLine_Step
use VARIABLES use VARIABLES
implicit none implicit none
if (finished_KillLine/=0) then if (KillLine%finished/=0) then
call KILL_LINE call KILL_LINE
if (KillLineIsOpening .or. KillLineIsClosing) then if (KillLine%IsOpening .or. KillLine%IsClosing) then
if(finished_KillLine==0) then if(KillLine%finished==0) then
call KILL_LINE_SUB !only body of loop2 call KILL_LINE_SUB !only body of loop2
endif endif
endif endif


+ 444
- 449
Equipments/BopStack/LOSS_INPUTS.f90
文件差異過大導致無法顯示
查看文件


+ 68
- 68
Equipments/BopStack/PIPE_RAM1.f90 查看文件

@@ -13,8 +13,8 @@ SUBROUTINE PIPE_RAMS1
! START CONDITIONS FOR PIPE RAMS 1 ! START CONDITIONS FOR PIPE RAMS 1
!===================================================================== !=====================================================================
RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1 RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1
if (BopControlPanel%UpperRamsValve == 1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if (UpperRamsCloseLEDMine == LedOn) then if (BopStackInput%UpperRamsCloseLEDMine == LedOn) then
RETURN RETURN
end if end if
if ( RAM(2)%SuccessionCounter /= RAM(2)%SuccessionCounterOld+1 ) then if ( RAM(2)%SuccessionCounter /= RAM(2)%SuccessionCounterOld+1 ) then
@@ -28,13 +28,13 @@ SUBROUTINE PIPE_RAMS1


if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(2)%First_CloseTimecheck= 1 RAM(2)%First_CloseTimecheck= 1
BopControlPanel%UpperRamsOpenLED = LedOff BopControlPanel%UpperRamsOpenLED = LedOff
UpperRamsOpenLEDMine = LedOff BopStackInput%UpperRamsOpenLEDMine = LedOff
BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking
RAM(2)%FourwayValve = 1 RAM(2)%FourwayValve = 1
@@ -43,42 +43,42 @@ SUBROUTINE PIPE_RAMS1
endif endif
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close
!write(*,*) 'close 2' !write(*,*) 'close 2'
RAM(2)%FourwayValve = 0 RAM(2)%FourwayValve = 0




PipeRam1_closed=0 PipeRam1%closed=0
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2)
RAM(2)%vdis_tot=0 RAM(2)%vdis_tot=0
RAM(2)%vdis_bottles=0. RAM(2)%vdis_bottles=0.
RAM(2)%fvr_air=0. RAM(2)%fvr_air=0.
RAM(2)%vdis_elecp=0. RAM(2)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(2)%Qzero=70 RAM(2)%Qzero=70
RAM(2)%Q=RAM(2)%Qzero RAM(2)%Q=RAM(2)%Qzero
RAM(2)%flow=70 RAM(2)%flow=70
RAM(2)%tol=0.0037 RAM(2)%tol=0.0037
if (finished_pipe1==1) then if (PipeRam1%finished==1) then
PipeRams1LeverOld=-1.0 PipeRam1%PipeRams1DotLeverOld=-1.0
else else
PipeRams1LeverOld=BopControlPanel%UpperRamsValve PipeRam1%PipeRams1DotLeverOld=BopControlPanel%UpperRamsValve
endif endif
finished_pipe1=0 PipeRam1%finished=0
PipeRam1IsClosing = .true. PipeRam1%IsClosing = .true.
PipeRam1IsOpening = .false. PipeRam1%IsOpening = .false.


RAM(2)%bop_type = 3 RAM(2)%bop_type = 3
!AbopPipeRam=196.67 !AbopPipeRam=196.67
AbopPipeRam=(BopStackSpecification%UpperRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%UpperRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) !3.67 galon for each BOP PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam1%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !3.67 galon for each BOP
endif endif
if (BopControlPanel%UpperRamsValve == -1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%UpperRamsValve == -1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if (UpperRamsOpenLEDMine == LedOn) then if (BopStackInput%UpperRamsOpenLEDMine == LedOn) then
RETURN RETURN
end if end if


@@ -91,13 +91,13 @@ SUBROUTINE PIPE_RAMS1
endif endif
if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(2)%First_OpenTimecheck= 1 RAM(2)%First_OpenTimecheck= 1
BopControlPanel%UpperRamsCloseLED = LedOff !new BopControlPanel%UpperRamsCloseLED = LedOff !new
UpperRamsCloseLedMine = LedOff !new BopStackInput%UpperRamsCloseLEDMine = LedOff !new
BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking


RAM(2)%FourwayValve = 1 RAM(2)%FourwayValve = 1
@@ -106,19 +106,19 @@ SUBROUTINE PIPE_RAMS1
endif endif
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close
!write(*,*) 'open 2' !write(*,*) 'open 2'
RAM(2)%FourwayValve = 0 RAM(2)%FourwayValve = 0


PipeRam1_closed=0 PipeRam1%closed=0
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2)
RAM(2)%vdis_tot=0 RAM(2)%vdis_tot=0
RAM(2)%vdis_bottles=0. RAM(2)%vdis_bottles=0.
RAM(2)%fvr_air=0. RAM(2)%fvr_air=0.
RAM(2)%vdis_elecp=0. RAM(2)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(2)%Qzero=70 RAM(2)%Qzero=70
RAM(2)%Q=RAM(2)%Qzero RAM(2)%Q=RAM(2)%Qzero
RAM(2)%flow=70 RAM(2)%flow=70
@@ -126,14 +126,14 @@ SUBROUTINE PIPE_RAMS1


if (finished_pipe1==1) then if (PipeRam1%finished==1) then
PipeRams1LeverOld=1.0 PipeRam1%PipeRams1DotLeverOld=1.0
else else
PipeRams1LeverOld=BopControlPanel%UpperRamsValve PipeRam1%PipeRams1DotLeverOld=BopControlPanel%UpperRamsValve
endif endif
finished_pipe1=0 PipeRam1%finished=0
PipeRam1IsOpening = .true. PipeRam1%IsOpening = .true.
PipeRam1IsClosing = .false. PipeRam1%IsClosing = .false.


!if (UpperRamsOpenLED == LedOn) then !if (UpperRamsOpenLED == LedOn) then
@@ -144,17 +144,17 @@ SUBROUTINE PIPE_RAMS1


RAM(2)%bop_type = 3 RAM(2)%bop_type = 3
!AbopPipeRam=186.5 !AbopPipeRam=186.5
AbopPipeRam=(BopStackSpecification%UpperRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%UpperRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) !3.48 galon for each BOP PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam1%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !3.48 galon for each BOP
endif endif
!===================================================================== !=====================================================================
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
if (PipeRam1IsOpening .or. PipeRam1IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then if (PipeRam1%IsOpening .or. PipeRam1%IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
CALL PIPE_RAMS1_SUB CALL PIPE_RAMS1_SUB
end if end if
@@ -190,7 +190,7 @@ SUBROUTINE PIPE_RAMS1_SUB
RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1 RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1
if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRams1LeverOld == -1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRam1%PipeRams1DotLeverOld == -1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then


@@ -207,11 +207,11 @@ SUBROUTINE PIPE_RAMS1_SUB


if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
BopControlPanel%UpperRamsOpenLED = LedOff BopControlPanel%UpperRamsOpenLED = LedOff
UpperRamsOpenLEDMine = LedOff BopStackInput%UpperRamsOpenLEDMine = LedOff
BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking
RAM(2)%FourwayValve = 1 RAM(2)%FourwayValve = 1
@@ -222,35 +222,35 @@ SUBROUTINE PIPE_RAMS1_SUB
endif endif
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
!write(*,*) 'close 4' !write(*,*) 'close 4'
RAM(2)%FourwayValve = 0 RAM(2)%FourwayValve = 0
PipeRam1_closed=0 PipeRam1%closed=0
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) ! for TD code !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) ! for TD code
CALL OpenUpperRams ! for C code CALL OpenUpperRams ! for C code
PipeRam1_Situation_forTD= 0 ! open - for TD code PipeRam1%Situation_forTD= 0 ! open - for TD code
RAM(2)%p_bop=pa RAM(2)%p_bop=ShearRam%PA
PipeRams1LeverOld = BopControlPanel%UpperRamsValve PipeRam1%PipeRams1DotLeverOld = BopControlPanel%UpperRamsValve


RAM(2)%bop_type = 3 RAM(2)%bop_type = 3
!AbopPipeRam=196.67 !AbopPipeRam=196.67
AbopPipeRam=(BopStackSpecification%UpperRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%UpperRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
!write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams !write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRam1-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%ID-max(PipeRam1%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231)
! write(*,*) 'NeededVolumeShearRams2=',NeededVolumeShearRams ! write(*,*) 'NeededVolumeShearRams2=',NeededVolumeShearRams
RAM(2)%vdis_bottles=0. RAM(2)%vdis_bottles=0.
RAM(2)%fvr_air=0. RAM(2)%fvr_air=0.
RAM(2)%vdis_elecp=0. RAM(2)%vdis_elecp=0.
PipeRam1IsClosing = .true. PipeRam1%IsClosing = .true.
PipeRam1IsOpening = .false. PipeRam1%IsOpening = .false.
endif endif
if (BopControlPanel%UpperRamsValve == -1.0 .and. PipeRams1LeverOld == 1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%UpperRamsValve == -1.0 .and. PipeRam1%PipeRams1DotLeverOld == 1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if ( RAM(2)%First_OpenTimecheck == 0 ) then if ( RAM(2)%First_OpenTimecheck == 0 ) then
@@ -263,11 +263,11 @@ SUBROUTINE PIPE_RAMS1_SUB
RAM(2)%SuccessionCounterOld= RAM(2)%SuccessionCounter RAM(2)%SuccessionCounterOld= RAM(2)%SuccessionCounter
endif endif
if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
BopControlPanel%UpperRamsCloseLED = LedOff BopControlPanel%UpperRamsCloseLED = LedOff
UpperRamsCloseLEDMine = LedOff BopStackInput%UpperRamsCloseLEDMine = LedOff
BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking
RAM(2)%FourwayValve = 1 RAM(2)%FourwayValve = 1
@@ -279,30 +279,30 @@ SUBROUTINE PIPE_RAMS1_SUB
endif endif
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
!write(*,*) 'open 4' !write(*,*) 'open 4'
RAM(2)%FourwayValve = 0 RAM(2)%FourwayValve = 0
PipeRam1_closed=0 PipeRam1%closed=0
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2)
CALL OpenUpperRams CALL OpenUpperRams
PipeRam1_Situation_forTD= 0 ! open - for TD code PipeRam1%Situation_forTD= 0 ! open - for TD code
RAM(2)%p_bop=pa RAM(2)%p_bop=ShearRam%PA
PipeRams1LeverOld = BopControlPanel%UpperRamsValve PipeRam1%PipeRams1DotLeverOld = BopControlPanel%UpperRamsValve


RAM(2)%bop_type = 3 RAM(2)%bop_type = 3
!AbopPipeRam=186.5 !AbopPipeRam=186.5
AbopPipeRam=(BopStackSpecification%UpperRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%UpperRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-IDPipeRam1)/(2.*231) PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-PipeRam1%ID)/(2.*231)
RAM(2)%vdis_bottles=0. RAM(2)%vdis_bottles=0.
RAM(2)%fvr_air=0. RAM(2)%fvr_air=0.
RAM(2)%vdis_elecp=0. RAM(2)%vdis_elecp=0.


PipeRam1IsOpening = .true. PipeRam1%IsOpening = .true.
PipeRam1IsClosing = .false. PipeRam1%IsClosing = .false.
endif endif


@@ -310,21 +310,21 @@ SUBROUTINE PIPE_RAMS1_SUB
RAM(2)%First_OpenTimecheck = 0 RAM(2)%First_OpenTimecheck = 0
RAM(2)%time=RAM(2)%time+DeltaT_BOP !overal time (s) RAM(2)%time=RAM(2)%time+RamLine%DeltaT_BOP !overal time (s)




!=================================================== !===================================================
! BOP ! BOP
!=================================================== !===================================================
if (PipeRam1_closed==0) then !bop closing if (PipeRam1%closed==0) then !bop closing
call bop_code(2,H_PipeRam1Bop,2) !ramtype=2 2=RNUMBER call bop_code(2,PipeRam1%H,2) !ramtype=2 2=RNUMBER
endif !bop is closing endif !bop is closing
!================================================================ !================================================================
if (PipeRam1_closed==1) then if (PipeRam1%closed==1) then
RAM(2)%Q=0 RAM(2)%Q=0
!p_bop=pram_reg !p_bop=pram_reg
RAM(2)%p_bop=pa RAM(2)%p_bop=ShearRam%PA
RAMS%minloss(2,17)=0. !RNUMBER=2 RAMS%minloss(2,17)=0. !RNUMBER=2
endif endif


@@ -352,9 +352,9 @@ RAM(2)%timecounter_ram=RAM(2)%timecounter_ram+1
! call sleepqq(100) ! call sleepqq(100)
if (PipeRam1_closed==1) then if (PipeRam1%closed==1) then
! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then ! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then
finished_pipe1=1 PipeRam1%finished=1
! endif ! endif
endif endif
@@ -367,8 +367,8 @@ endif
if ( finished_pipe1==1 .and. RAM(2)%Bottles_Charged_MalfActive==.true.) then if ( PipeRam1%finished==1 .and. RAM(2)%Bottles_Charged_MalfActive==.true.) then
call bop_code(2,H_PipeRam1Bop,2) !ramtype=2 2=RNUMBER call bop_code(2,PipeRam1%H,2) !ramtype=2 2=RNUMBER
! call sleepqq(100) ! call sleepqq(100)
endif endif


+ 66
- 66
Equipments/BopStack/PIPE_RAM2.f90 查看文件

@@ -18,11 +18,11 @@ SUBROUTINE PIPE_RAMS2
RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1 RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1
if (BopControlPanel%LowerRamsValve == 1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%LowerRamsValve == 1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
!write(*,*) 'close 1' !write(*,*) 'close 1'
if (LowerRamsCloseLEDMine == LedOn) then if (BopStackInput%LowerRamsCloseLEDMine == LedOn) then
RETURN RETURN
end if end if
@@ -36,13 +36,13 @@ SUBROUTINE PIPE_RAMS2
endif endif
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(3)%First_CloseTimecheck= 1 RAM(3)%First_CloseTimecheck= 1
BopControlPanel%LowerRamsOpenLED = LedOff BopControlPanel%LowerRamsOpenLED = LedOff
LowerRamsOpenLEDMine = LedOff BopStackInput%LowerRamsOpenLEDMine = LedOff
BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking
RAM(3)%FourwayValve = 1 RAM(3)%FourwayValve = 1
@@ -54,45 +54,45 @@ SUBROUTINE PIPE_RAMS2
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close
!write(*,*) 'close 2' !write(*,*) 'close 2'
RAM(3)%FourwayValve = 0 RAM(3)%FourwayValve = 0
PipeRam2_closed=0 PipeRam2%closed=0
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4)
RAM(3)%vdis_tot=0 RAM(3)%vdis_tot=0
RAM(3)%vdis_bottles=0. RAM(3)%vdis_bottles=0.
RAM(3)%fvr_air=0. RAM(3)%fvr_air=0.
RAM(3)%vdis_elecp=0. RAM(3)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(3)%Qzero=70 RAM(3)%Qzero=70
RAM(3)%Q=RAM(3)%Qzero RAM(3)%Q=RAM(3)%Qzero
RAM(3)%flow=70 RAM(3)%flow=70
RAM(3)%tol=0.0037 RAM(3)%tol=0.0037
if (finished_pipe2==1) then if (PipeRam2%finished==1) then
PipeRams2LeverOld=-1.0 PipeRam2%LeverOld=-1.0
else else
PipeRams2LeverOld=BopControlPanel%LowerRamsValve PipeRam2%LeverOld=BopControlPanel%LowerRamsValve
endif endif
finished_pipe2=0 PipeRam2%finished=0
PipeRam2IsClosing = .true. PipeRam2%IsClosing = .true.
PipeRam2IsOpening = .false. PipeRam2%IsOpening = .false.


RAM(3)%bop_type = 3 RAM(3)%bop_type = 3
!AbopPipeRam=196.67 !AbopPipeRam=196.67
AbopPipeRam=(BopStackSpecification%LowerRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%LowerRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) !galon for each BOP PipeRam2%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam2%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !galon for each BOP
!write(*,*) 'close 1' !write(*,*) 'close 1'
endif endif
if (BopControlPanel%LowerRamsValve == -1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%LowerRamsValve == -1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
!write(*,*) 'open 1' !write(*,*) 'open 1'
if (LowerRamsOpenLEDMine == LedOn) then if (BopStackInput%LowerRamsOpenLEDMine == LedOn) then
RETURN RETURN
end if end if
@@ -106,13 +106,13 @@ SUBROUTINE PIPE_RAMS2
endif endif
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(3)%First_OpenTimecheck= 1 RAM(3)%First_OpenTimecheck= 1
BopControlPanel%LowerRamsCloseLED = LedOff !new BopControlPanel%LowerRamsCloseLED = LedOff !new
LowerRamsCloseLedMine = LedOff !new BopStackInput%LowerRamsCloseLEDMine = LedOff !new
BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking
RAM(3)%FourwayValve = 1 RAM(3)%FourwayValve = 1
@@ -123,31 +123,31 @@ SUBROUTINE PIPE_RAMS2
endif endif
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close
!write(*,*) 'open 2' !write(*,*) 'open 2'
RAM(3)%FourwayValve = 0 RAM(3)%FourwayValve = 0
PipeRam2_closed=0 PipeRam2%closed=0
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4)
RAM(3)%vdis_tot=0 RAM(3)%vdis_tot=0
RAM(3)%vdis_bottles=0. RAM(3)%vdis_bottles=0.
RAM(3)%fvr_air=0. RAM(3)%fvr_air=0.
RAM(3)%vdis_elecp=0. RAM(3)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(3)%Qzero=70 RAM(3)%Qzero=70
RAM(3)%Q=RAM(3)%Qzero RAM(3)%Q=RAM(3)%Qzero
RAM(3)%flow=70 RAM(3)%flow=70
RAM(3)%tol=0.0037 RAM(3)%tol=0.0037


if (finished_pipe2==1) then if (PipeRam2%finished==1) then
PipeRams2LeverOld=1.0 PipeRam2%LeverOld=1.0
else else
PipeRams2LeverOld=BopControlPanel%LowerRamsValve PipeRam2%LeverOld=BopControlPanel%LowerRamsValve
endif endif
finished_pipe2=0 PipeRam2%finished=0
PipeRam2IsOpening = .true. PipeRam2%IsOpening = .true.
PipeRam2IsClosing = .false. PipeRam2%IsClosing = .false.


!if (LowerRamsOpenLED == LedOn) then !if (LowerRamsOpenLED == LedOn) then
@@ -157,8 +157,8 @@ SUBROUTINE PIPE_RAMS2


RAM(3)%bop_type = 3 RAM(3)%bop_type = 3
!AbopPipeRam=186.5 !AbopPipeRam=186.5
AbopPipeRam=(BopStackSpecification%LowerRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%LowerRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) !galon for each BOP PipeRam2%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam2%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !galon for each BOP
!write(*,*) 'open 1' !write(*,*) 'open 1'
endif endif
@@ -166,9 +166,9 @@ SUBROUTINE PIPE_RAMS2
!===================================================================== !=====================================================================


if (PipeRam2IsOpening .or. PipeRam2IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then if (PipeRam2%IsOpening .or. PipeRam2%IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then
FirstSet= 0 Annular%FirstSet= 0
RamsFirstSet= 0 AnnularComputational%RamsFirstSet= 0
CALL PIPE_RAMS2_SUB CALL PIPE_RAMS2_SUB
end if end if


@@ -206,7 +206,7 @@ SUBROUTINE PIPE_RAMS2_SUB
RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1 RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1
if (BopControlPanel%LowerRamsValve == 1.0 .and. PipeRams2LeverOld == -1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%LowerRamsValve == 1.0 .and. PipeRam2%LeverOld == -1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
!write(*,*) 'close 3' !write(*,*) 'close 3'
@@ -223,11 +223,11 @@ SUBROUTINE PIPE_RAMS2_SUB


if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
BopControlPanel%LowerRamsOpenLED = LedOff BopControlPanel%LowerRamsOpenLED = LedOff
LowerRamsOpenLEDMine = LedOff BopStackInput%LowerRamsOpenLEDMine = LedOff
BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking
RAM(3)%FourwayValve = 1 RAM(3)%FourwayValve = 1
@@ -241,34 +241,34 @@ SUBROUTINE PIPE_RAMS2_SUB
endif endif
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
!write(*,*) 'close 4' !write(*,*) 'close 4'
RAM(3)%FourwayValve = 0 RAM(3)%FourwayValve = 0


PipeRam2_closed=0 PipeRam2%closed=0
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4)
RAM(3)%p_bop=pa RAM(3)%p_bop=ShearRam%PA
PipeRams2LeverOld = BopControlPanel%LowerRamsValve PipeRam2%LeverOld = BopControlPanel%LowerRamsValve


CALL OpenLowerRams CALL OpenLowerRams
PipeRam2_Situation_forTD= 0 ! open - for TD code PipeRam2%Situation_forTD= 0 ! open - for TD code
RAM(3)%bop_type = 3 RAM(3)%bop_type = 3
!AbopPipeRam=196.67 !AbopPipeRam=196.67
AbopPipeRam=(BopStackSpecification%LowerRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%LowerRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRam2-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) PipeRam2%NeededVolume=PipeRam1%A*(PipeRam2%ID-max(PipeRam2%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231)
RAM(3)%vdis_bottles=0. RAM(3)%vdis_bottles=0.
RAM(3)%fvr_air=0. RAM(3)%fvr_air=0.
RAM(3)%vdis_elecp=0. RAM(3)%vdis_elecp=0.
PipeRam2IsClosing = .true. PipeRam2%IsClosing = .true.
PipeRam2IsOpening = .false. PipeRam2%IsOpening = .false.
!write(*,*) 'close 2' !write(*,*) 'close 2'
endif endif
if (BopControlPanel%LowerRamsValve == -1.0 .and. PipeRams2LeverOld == 1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%LowerRamsValve == -1.0 .and. PipeRam2%LeverOld == 1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
!write(*,*) 'open 3' !write(*,*) 'open 3'
@@ -282,11 +282,11 @@ SUBROUTINE PIPE_RAMS2_SUB
RAM(3)%SuccessionCounterOld= RAM(3)%SuccessionCounter RAM(3)%SuccessionCounterOld= RAM(3)%SuccessionCounter
endif endif
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
BopControlPanel%LowerRamsCloseLED = LedOff BopControlPanel%LowerRamsCloseLED = LedOff
LowerRamsCloseLEDMine = LedOff BopStackInput%LowerRamsCloseLEDMine = LedOff
BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking
RAM(3)%FourwayValve = 1 RAM(3)%FourwayValve = 1
@@ -299,28 +299,28 @@ SUBROUTINE PIPE_RAMS2_SUB
endif endif
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
!write(*,*) 'open 4' !write(*,*) 'open 4'
RAM(3)%FourwayValve = 0 RAM(3)%FourwayValve = 0
PipeRam2_closed=0 PipeRam2%closed=0
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4)
RAM(3)%p_bop=pa RAM(3)%p_bop=ShearRam%PA
PipeRams2LeverOld = BopControlPanel%LowerRamsValve PipeRam2%LeverOld = BopControlPanel%LowerRamsValve


CALL OpenLowerRams CALL OpenLowerRams
PipeRam2_Situation_forTD= 0 ! open - for TD code PipeRam2%Situation_forTD= 0 ! open - for TD code
RAM(3)%bop_type = 3 RAM(3)%bop_type = 3
!AbopPipeRam=186.5 !AbopPipeRam=186.5
AbopPipeRam=(BopStackSpecification%LowerRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) PipeRam1%A=(BopStackSpecification%LowerRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.)
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-IDPipeRam2)/(2.*231) PipeRam2%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-PipeRam2%ID)/(2.*231)
RAM(3)%vdis_bottles=0. RAM(3)%vdis_bottles=0.
RAM(3)%fvr_air=0. RAM(3)%fvr_air=0.
RAM(3)%vdis_elecp=0. RAM(3)%vdis_elecp=0.


PipeRam2IsOpening = .true. PipeRam2%IsOpening = .true.
PipeRam2IsClosing = .false. PipeRam2%IsClosing = .false.
!write(*,*) 'open 2' !write(*,*) 'open 2'
endif endif
@@ -330,22 +330,22 @@ SUBROUTINE PIPE_RAMS2_SUB
RAM(3)%First_OpenTimecheck = 0 RAM(3)%First_OpenTimecheck = 0
RAM(3)%time=RAM(3)%time+DeltaT_BOP !overal time (s) RAM(3)%time=RAM(3)%time+RamLine%DeltaT_BOP !overal time (s)




!=================================================== !===================================================
! BOP ! BOP
!=================================================== !===================================================
if (PipeRam2_closed==0) then !bop closing if (PipeRam2%closed==0) then !bop closing
!write(*,*) 'BOP code is called' !write(*,*) 'BOP code is called'
call bop_code(3,H_PipeRam2Bop,3) !ramtype=3 3=RNUMBER call bop_code(3,PipeRam2%H_Bop,3) !ramtype=3 3=RNUMBER
endif !bop is closing endif !bop is closing
!================================================================ !================================================================
if (PipeRam2_closed==1) then if (PipeRam2%closed==1) then
RAM(3)%Q=0 RAM(3)%Q=0
!p_bop=pram_reg !p_bop=pram_reg
RAM(3)%p_bop=pa RAM(3)%p_bop=ShearRam%PA
RAMS%minloss(3,17)=0. !RNUMBER=3 RAMS%minloss(3,17)=0. !RNUMBER=3
endif endif


@@ -373,10 +373,10 @@ RAM(3)%timecounter_ram=RAM(3)%timecounter_ram+1
! call sleepqq(100) ! call sleepqq(100)
if (PipeRam2_closed==1) then if (PipeRam2%closed==1) then
! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then ! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then
finished_pipe2=1 PipeRam2%finished=1
! endif ! endif
endif endif
@@ -385,8 +385,8 @@ endif
! end do loop4 !while finished_pipe2==0 ! end do loop4 !while finished_pipe2==0
if ( finished_pipe2==1 .and. RAM(3)%Bottles_Charged_MalfActive==.true.) then if ( PipeRam2%finished==1 .and. RAM(3)%Bottles_Charged_MalfActive==.true.) then
call bop_code(3,H_PipeRam2Bop,3) !ramtype=3 3=RNUMBER call bop_code(3,PipeRam2%H_Bop,3) !ramtype=3 3=RNUMBER
! call sleepqq(100) ! call sleepqq(100)
endif endif


+ 3
- 3
Equipments/BopStack/PipeRams1Main.f90 查看文件

@@ -20,10 +20,10 @@ module PipeRams1Main
subroutine PipeRams1_Step subroutine PipeRams1_Step
use VARIABLES use VARIABLES
implicit none implicit none
if (finished_pipe1/=0) then if (PipeRam1%finished/=0) then
call PIPE_RAMS1 call PIPE_RAMS1
if (PipeRam1IsOpening .or. PipeRam1IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then if (PipeRam1%IsOpening .or. PipeRam1%IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then
if(finished_pipe1==0) then if(PipeRam1%finished==0) then
call PIPE_RAMS1_SUB !only body of loop2 call PIPE_RAMS1_SUB !only body of loop2
endif endif
endif endif


+ 3
- 3
Equipments/BopStack/PipeRams2Main.f90 查看文件

@@ -21,10 +21,10 @@
subroutine PipeRams2_Step subroutine PipeRams2_Step
use VARIABLES use VARIABLES
implicit none implicit none
if (finished_pipe2/=0) then if (PipeRam2%finished/=0) then
call PIPE_RAMS2 call PIPE_RAMS2
if (PipeRam2IsOpening .or. PipeRam2IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then if (PipeRam2%IsOpening .or. PipeRam2%IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then
if(finished_pipe2==0) then if(PipeRam2%finished==0) then
call PIPE_RAMS2_SUB !only body of loop2 call PIPE_RAMS2_SUB !only body of loop2
endif endif
endif endif


+ 62
- 62
Equipments/BopStack/SHEAR_RAM.f90 查看文件

@@ -16,9 +16,9 @@ SUBROUTINE SHEAR_RAMS
RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1 RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1
if (BopControlPanel%MiddleRamsValve == 1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%MiddleRamsValve == 1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if (MiddleRamsCloseLEDMine == LedOn) then if (BopStackInput%MiddleRamsCloseLEDMine == LedOn) then
RETURN RETURN
end if end if
@@ -32,13 +32,13 @@ SUBROUTINE SHEAR_RAMS
endif endif
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(4)%First_CloseTimecheck= 1 RAM(4)%First_CloseTimecheck= 1
BopControlPanel%MiddleRamsOpenLED = LedOff BopControlPanel%MiddleRamsOpenLED = LedOff
MiddleRamsOpenLEDMine = LedOff BopStackInput%MiddleRamsOpenLEDMine = LedOff
BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking
RAM(4)%FourwayValve = 1 RAM(4)%FourwayValve = 1
@@ -48,46 +48,46 @@ SUBROUTINE SHEAR_RAMS
endif endif
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close
!write(*,*) 'close 2' !write(*,*) 'close 2'
RAM(4)%FourwayValve = 0 RAM(4)%FourwayValve = 0


ShearBop_closed=0 RamLine%ShearBop_closed=0
!ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) !ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3)
RAM(4)%vdis_tot=0 RAM(4)%vdis_tot=0
RAM(4)%vdis_bottles=0. RAM(4)%vdis_bottles=0.
RAM(4)%fvr_air=0. RAM(4)%fvr_air=0.
RAM(4)%vdis_elecp=0. RAM(4)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(4)%Qzero=70 RAM(4)%Qzero=70
RAM(4)%Q=RAM(4)%Qzero RAM(4)%Q=RAM(4)%Qzero
RAM(4)%flow=70 RAM(4)%flow=70
RAM(4)%tol=0.0037 RAM(4)%tol=0.0037
if (finished_shear==1) then if (RamLine%FINISHED_shear==1) then
ShearRamsLeverOld=-1.0 RamLine%ShearRamsLeverOld=-1.0
else else
ShearRamsLeverOld=BopControlPanel%MiddleRamsValve RamLine%ShearRamsLeverOld=BopControlPanel%MiddleRamsValve
endif endif
finished_shear=0 RamLine%FINISHED_shear=0
ShearRamIsClosing = .true. RamLine%ShearRamIsClosing = .true.
ShearRamIsOpening = .false. RamLine%ShearRamIsOpening = .false.


RAM(4)%bop_type = 2 RAM(4)%bop_type = 2
!NeededVolumeShearRams=5.8 !galon for each BOP !NeededVolumeShearRams=5.8 !galon for each BOP
!AbopShearRam=196.67 !(in^2) !AbopShearRam=196.67 !(in^2)
AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(IDshearBopBase/2.) ShearRam%AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(ShearRam%IDshearBopBase/2.)
!NeededVolumeShearRams=BlindRamClose !galon for each BOP **changed !NeededVolumeShearRams=BlindRamClose !galon for each BOP **changed
NeededVolumeShearRams=AbopShearRam*(IDshearBopBase-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed
va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231) ShearRam%VA=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ODDrillpipe_inShearRam)/(2.*231)
vb=NeededVolumeShearRams ShearRam%VB=ShearRam%NeededVolumeShearRams
endif endif
if (BopControlPanel%MiddleRamsValve == -1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then if (BopControlPanel%MiddleRamsValve == -1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then
if (MiddleRamsOpenLEDMine == LedOn) then if (BopStackInput%MiddleRamsOpenLEDMine == LedOn) then
RETURN RETURN
end if end if
@@ -100,13 +100,13 @@ SUBROUTINE SHEAR_RAMS
endif endif
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
!return !return
RAM(4)%First_OpenTimecheck= 1 RAM(4)%First_OpenTimecheck= 1
BopControlPanel%MiddleRamsCloseLED = LedOff !new BopControlPanel%MiddleRamsCloseLED = LedOff !new
MiddleRamsCloseLedMine = LedOff !new BopStackInput%MiddleRamsCloseLEDMine = LedOff !new
BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking
endif endif
@@ -114,40 +114,40 @@ SUBROUTINE SHEAR_RAMS
endif endif
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close
!write(*,*) 'open 2' !write(*,*) 'open 2'
RAM(4)%FourwayValve = 0 RAM(4)%FourwayValve = 0


ShearBop_closed=0 RamLine%ShearBop_closed=0
!ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) !ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3)
RAM(4)%vdis_tot=0 RAM(4)%vdis_tot=0
RAM(4)%vdis_bottles=0. RAM(4)%vdis_bottles=0.
RAM(4)%fvr_air=0. RAM(4)%fvr_air=0.
RAM(4)%vdis_elecp=0. RAM(4)%vdis_elecp=0.
Qiter=7 Pumps%Qiter=7
RAM(4)%Qzero=70 RAM(4)%Qzero=70
RAM(4)%Q=RAM(4)%Qzero RAM(4)%Q=RAM(4)%Qzero
RAM(4)%flow=70 RAM(4)%flow=70
RAM(4)%tol=0.0037 RAM(4)%tol=0.0037


if (finished_shear==1) then if (RamLine%FINISHED_shear==1) then
ShearRamsLeverOld=1.0 RamLine%ShearRamsLeverOld=1.0
else else
ShearRamsLeverOld=BopControlPanel%MiddleRamsValve RamLine%ShearRamsLeverOld=BopControlPanel%MiddleRamsValve
endif endif
finished_shear=0 RamLine%FINISHED_shear=0
ShearRamIsOpening = .true. RamLine%ShearRamIsOpening = .true.
ShearRamIsClosing = .false. RamLine%ShearRamIsClosing = .false.


RAM(4)%bop_type = 3 RAM(4)%bop_type = 3
!AbopShearRam=186.5 !(in^2) !AbopShearRam=186.5 !(in^2)
AbopShearRam=(BopStackSpecification%BlindRamOpen*231)/(IDshearBopBase/2.) ShearRam%AbopShearRam=(BopStackSpecification%BlindRamOpen*231)/(ShearRam%IDshearBopBase/2.)
!NeededVolumeShearRams=5.5 !galon for each BOP !NeededVolumeShearRams=5.5 !galon for each BOP
!NeededVolumeShearRams=BlindRamOpen ! **changed !NeededVolumeShearRams=BlindRamOpen ! **changed
NeededVolumeShearRams=AbopShearRam*(IDshearBopBase-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed
!va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231) !va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231)
!vb=NeededVolumeShearRams !vb=NeededVolumeShearRams
endif endif
@@ -175,39 +175,39 @@ SUBROUTINE SHEAR_RAMS_SUB


! loop2: do while (finished_shear==0) ! loop2: do while (finished_shear==0)
RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1 RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1
if (BopControlPanel%MiddleRamsValve == 1.0 .and. ShearRamsLeverOld == -1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_CloseTimecheck == 0) then if (BopControlPanel%MiddleRamsValve == 1.0 .and. RamLine%ShearRamsLeverOld == -1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_CloseTimecheck == 0) then
if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then
RAM(4)%SuccessionCounter = 0 ! also in starup RAM(4)%SuccessionCounter = 0 ! also in starup
RAM(4)%SuccessionCounterOld = 0 ! also in starup RAM(4)%SuccessionCounterOld = 0 ! also in starup
else else
RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter
endif endif
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
BopControlPanel%MiddleRamsOpenLED = LedOff BopControlPanel%MiddleRamsOpenLED = LedOff
MiddleRamsOpenLEDMine = LedOff BopStackInput%MiddleRamsOpenLEDMine = LedOff
BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking
RAM(4)%FourwayValve = 1 RAM(4)%FourwayValve = 1
endif endif
endif endif
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
RAM(4)%FourwayValve = 0 RAM(4)%FourwayValve = 0
ShearBop_closed=0 RamLine%ShearBop_closed=0
RAM(4)%p_bop=pa RAM(4)%p_bop=ShearRam%PA
ShearRamsLeverOld = BopControlPanel%MiddleRamsValve RamLine%ShearRamsLeverOld = BopControlPanel%MiddleRamsValve
CALL OpenMiddleRams ! for C code CALL OpenMiddleRams ! for C code
ShearBop_Situation_forTD= 0 ! open - for TD code RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code
RAM(4)%bop_type = 2 RAM(4)%bop_type = 2
AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(IDshearBopBase/2.) ShearRam%AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(ShearRam%IDshearBopBase/2.)
NeededVolumeShearRams=AbopShearRam*(IDshearBop-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) ! **changed ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBop-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) ! **changed
RAM(4)%vdis_bottles=0. RAM(4)%vdis_bottles=0.
RAM(4)%fvr_air=0. RAM(4)%fvr_air=0.
RAM(4)%vdis_elecp=0. RAM(4)%vdis_elecp=0.
ShearRamIsClosing = .true. RamLine%ShearRamIsClosing = .true.
ShearRamIsOpening = .false. RamLine%ShearRamIsOpening = .false.
endif endif


if (BopControlPanel%MiddleRamsValve == -1.0 .and. ShearRamsLeverOld == 1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_OpenTimecheck == 0) then if (BopControlPanel%MiddleRamsValve == -1.0 .and. RamLine%ShearRamsLeverOld == 1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_OpenTimecheck == 0) then
if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then
RAM(4)%SuccessionCounter = 0 ! also in starup RAM(4)%SuccessionCounter = 0 ! also in starup
RAM(4)%SuccessionCounterOld = 0 ! also in starup RAM(4)%SuccessionCounterOld = 0 ! also in starup
@@ -216,52 +216,52 @@ SUBROUTINE SHEAR_RAMS_SUB
RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter
endif endif


if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then
BopControlPanel%MiddleRamsCloseLED = LedOff BopControlPanel%MiddleRamsCloseLED = LedOff
MiddleRamsCloseLEDMine = LedOff BopStackInput%MiddleRamsCloseLEDMine = LedOff
BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking
RAM(4)%FourwayValve = 1 RAM(4)%FourwayValve = 1
endif endif
endif endif


if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then
RAM(4)%FourwayValve = 0 RAM(4)%FourwayValve = 0
ShearBop_closed=0 RamLine%ShearBop_closed=0
RAM(4)%p_bop=pa RAM(4)%p_bop=ShearRam%PA
ShearRamsLeverOld = BopControlPanel%MiddleRamsValve RamLine%ShearRamsLeverOld = BopControlPanel%MiddleRamsValve
CALL OpenMiddleRams CALL OpenMiddleRams
ShearBop_Situation_forTD= 0 ! open - for TD code RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code
RAM(4)%bop_type = 3 RAM(4)%bop_type = 3
NeededVolumeShearRams=AbopShearRam*(IDshearBopBase-IDshearBop)/(2.*231) ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%IDshearBop)/(2.*231)
RAM(4)%vdis_bottles=0. RAM(4)%vdis_bottles=0.
RAM(4)%fvr_air=0. RAM(4)%fvr_air=0.
RAM(4)%vdis_elecp=0. RAM(4)%vdis_elecp=0.
ShearRamIsOpening = .true. RamLine%ShearRamIsOpening = .true.
ShearRamIsClosing = .false. RamLine%ShearRamIsClosing = .false.
endif endif


RAM(4)%First_CloseTimecheck = 0 RAM(4)%First_CloseTimecheck = 0
RAM(4)%First_OpenTimecheck = 0 RAM(4)%First_OpenTimecheck = 0
RAM(4)%time=RAM(4)%time+DeltaT_BOP !overal time (s) RAM(4)%time=RAM(4)%time+RamLine%DeltaT_BOP !overal time (s)


!=================================================== !===================================================
! BOP ! BOP
!=================================================== !===================================================
if (ShearBop_closed==0) then !bop closing if (RamLine%ShearBop_closed==0) then !bop closing
call bop_code(1,H_ShearRamBop,4) !ramtype=1 4=RNUMBER call bop_code(1,ShearRam%H_ShearRamBop,4) !ramtype=1 4=RNUMBER
endif !bop is closing endif !bop is closing
!================================================================ !================================================================
if (ShearBop_closed==1) then if (RamLine%ShearBop_closed==1) then
RAM(4)%Q=0 RAM(4)%Q=0
RAM(4)%p_bop=pa RAM(4)%p_bop=ShearRam%PA
RAMS%minloss(4,17)=0. !RNUMBER=4 RAMS%minloss(4,17)=0. !RNUMBER=4
endif endif


RAM(4)%timecounter_ram=RAM(4)%timecounter_ram+1 RAM(4)%timecounter_ram=RAM(4)%timecounter_ram+1
call sleepqq(100) call sleepqq(100)


if (ShearBop_closed==1) then if (RamLine%ShearBop_closed==1) then
finished_shear=1 RamLine%FINISHED_shear=1
endif endif
! if (IsStopped == .true.) return ! if (IsStopped == .true.) return
! end do loop2 !while finished_shear==0 ! end do loop2 !while finished_shear==0


+ 121
- 98
Equipments/BopStack/VARIABLES.f90 查看文件

@@ -8,124 +8,146 @@ MODULE VARIABLES
!=========================================================================== !===========================================================================
! INPUT VARIABLES ! INPUT VARIABLES
!=========================================================================== !===========================================================================
REAL,ALLOCATABLE:: MINORS1(:,:),PIPINGS_RAMLINE(:,:),MINORS_ANNULAR(:,:),PIPINGS_ANNULAR(:,:),PIPINGS_AIRPUMP(:,:),MINORS_AIRPUMP(:,:) type :: BopStackInputType

REAL,ALLOCATABLE:: MINORS1(:,:),PIPINGS_RAMLINE(:,:),MINORS_ANNULAR(:,:),PIPINGS_ANNULAR(:,:),PIPINGS_AIRPUMP(:,:),MINORS_AIRPUMP(:,:)
integer AnnularOpenLedMine,AnnularCloseLedMine,UpperRamsCloseLEDMine,UpperRamsOpenLEDMine,LowerRamsOpenLEDMine,LowerRamsCloseLEDMine integer AnnularOpenLedMine,AnnularCloseLedMine,UpperRamsCloseLEDMine,UpperRamsOpenLEDMine,LowerRamsOpenLEDMine,LowerRamsCloseLEDMine
integer MiddleRamsOpenLEDMine,MiddleRamsCloseLEDMine,KillLineOpenLedMine,KillLineCloseLedMine,ChokeLineOpenLEDMine,ChokeLineCloseLEDMine integer MiddleRamsOpenLEDMine,MiddleRamsCloseLEDMine,KillLineOpenLedMine,KillLineCloseLedMine,ChokeLineOpenLEDMine,ChokeLineCloseLEDMine
integer BOP_timeCounter integer BOP_timeCounter
end type BopStackInputType
type(BopStackInputType)::BopStackInput
!=========================================================================== !===========================================================================
! ACC. VARIABLES ! ACC. VARIABLES
!=========================================================================== !===========================================================================
REAL,PARAMETER :: PI=3.141593 ,PressureDifferenceSteps = 20. ,BaseDifferenceP= 200. ! psi REAL,PARAMETER :: PI=3.141593 ,PressureDifferenceSteps = 20. ,BaseDifferenceP= 200. ! psi
REAL FVR_TOT,BOTTLE_CAPACITY,PRAMS_REGSET,acc_ChargedPressure,acc_MinPressure,ACC_PRECHARGE,ByPassOld type::BopStackAccType
REAL pram_reg,test1,test2,test3,test4,test5,test6,test7,test8,test9,ax,bx REAL FVR_TOT,BOTTLE_CAPACITY,PRAMS_REGSET,acc_ChargedPressure,acc_MinPressure,ACC_PRECHARGE,ByPassOld
integer NOBOTTLES,AccPupmsFailMalf,AirSupplyPressureGaugeMalf,ManifoldPressureGaugeMalf,AccumulatorPressureGaugeMalf,RigAirMalf REAL pram_reg,test1,test2,test3,test4,test5,test6,test7,test8,test9,ax,bx
real Cumulative_AirVolume, PressureDifference integer NOBOTTLES,AccPupmsFailMalf,AirSupplyPressureGaugeMalf,ManifoldPressureGaugeMalf,AccumulatorPressureGaugeMalf,RigAirMalf
integer SoundKoomeyAirPump real Cumulative_AirVolume, PressureDifference
integer SoundKoomeyAirPump
end type BopStackAccType
type(BopStackAccType)::BopStackAcc
!=========================================================================== !===========================================================================

! RAM LINE COMPUTATIONAL VARIABLES ! RAM LINE COMPUTATIONAL VARIABLES
!=========================================================================== !===========================================================================
logical ShearRamIsClosing,ShearRamIsOpening type:: RamLineType
REAL ShearRamsLeverOld,NoActiveRmas logical ShearRamIsClosing,ShearRamIsOpening
!REAL checkp,p_acccheck REAL ShearRamsLeverOld,NoActiveRmas
REAL P_ACC,FVR,DeltaT_BOP !REAL checkp,p_acccheck
REAL diffp_air,losses_air,Qup,kinetic_air,pipe_loss1air,minor_loss1air,static_loss1air!,pipe_loss1_before,minor_loss1,static_loss1,kinetic_loss1,pipe_loss1 REAL P_ACC,FVR,DeltaT_BOP
!REAL loss_before,pipe_loss2,minor_loss2,deltah,static_loss2,kinetic_loss2,loss_after REAL diffp_air,losses_air,Qup,kinetic_air,pipe_loss1air,minor_loss1air,static_loss1air!,pipe_loss1_before,minor_loss1,static_loss1,kinetic_loss1,pipe_loss1
integer AIRP_SWITCH,ELECP_SWITCH,ShearBop_closed,FINISHED_shear,EOF,NO_MINORSRAMLINE,NO_PIPINGSRAMLINE,NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE !REAL loss_before,pipe_loss2,minor_loss2,deltah,static_loss2,kinetic_loss2,loss_after
integer counter,iteration,ShearBop_Situation_forTD integer AIRP_SWITCH,ELECP_SWITCH,ShearBop_closed,FINISHED_shear,EOF,NO_MINORSRAMLINE,NO_PIPINGSRAMLINE,NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE
real BA1,BA2,BA3,BA4,BBA1,BBA2,BBA3,BBA4 integer counter,iteration,ShearBop_Situation_forTD
REAL B1,B2,B3,B4 real BA1,BA2,BA3,BA4,BBA1,BBA2,BBA3,BBA4
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) REAL B1,B2,B3,B4
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:) REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:)
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:)
REAL,ALLOCATABLE:: DIAM_RAMLINE_INCH(:),DIAM_RAMLINE_MM(:),AREA_RAMLINE(:),ROUGHNESS_AIRPLINE(:),ROUGHNESS_RAMLINE(:),RELROUGH_RAMLINE(:),LENGT_RAMLINE(:),LF_RAMLINE(:),CV_RAMLINE(:),NOTE_RAMLINE(:),AREAMINOR_RAMLINE(:) REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:)
!REAL,ALLOCATABLE:: Re_ramline(:),fric(:),fricloss(:) REAL,ALLOCATABLE:: DIAM_RAMLINE_INCH(:),DIAM_RAMLINE_MM(:),AREA_RAMLINE(:),ROUGHNESS_AIRPLINE(:),ROUGHNESS_RAMLINE(:),RELROUGH_RAMLINE(:),LENGT_RAMLINE(:),LF_RAMLINE(:),CV_RAMLINE(:),NOTE_RAMLINE(:),AREAMINOR_RAMLINE(:)
REAL,ALLOCATABLE:: MINORDIAMETER_RAMLINE(:) !REAL,ALLOCATABLE:: Re_ramline(:),fric(:),fricloss(:)
INTEGER,ALLOCATABLE:: ITEM(:),ITEM_PIPING(:),ITEM_PIPINGAIR(:),ITEM_MINORAIR(:) REAL,ALLOCATABLE:: MINORDIAMETER_RAMLINE(:)
CHARACTER,ALLOCATABLE:: DECRIPTION(:),DECRIPTION2(:),DECRIPTION_RAM(:),DESCRIPTION_AIR1(:),DESCRIPTION_AIR2(:) INTEGER,ALLOCATABLE:: ITEM(:),ITEM_PIPING(:),ITEM_PIPINGAIR(:),ITEM_MINORAIR(:)
real:: counter_airp,pacc_before CHARACTER,ALLOCATABLE:: DECRIPTION(:),DECRIPTION2(:),DECRIPTION_RAM(:),DESCRIPTION_AIR1(:),DESCRIPTION_AIR2(:)
integer Annular_active,ShearBop_active,PipeRam1_active,PipeRam2_active,ChokeLine_active,KillLine_active real:: counter_airp,pacc_before
!=========================================================================== integer Annular_active,ShearBop_active,PipeRam1_active,PipeRam2_active,ChokeLine_active,KillLine_active
end type RamLineType
type(RamLineType)::RamLine
!===========================================================================
! ANNULAR PREVENTER COMPUTATIONAL VARIABLES ! ANNULAR PREVENTER COMPUTATIONAL VARIABLES
!=========================================================================== !===========================================================================

type::AnnularComputationalType
integer PannularTimeStepDelay integer PannularTimeStepDelay
type(DynamicDoubleArrayType) :: Pannular_regDelay type(DynamicDoubleArrayType) :: Pannular_regDelay
logical AnnPressureRise
integer NO_MinorsAnnularLine,NO_PipingsAnnularLine,RamsFirstSet
logical AnnPressureRise REAL pa_annular,p_annular
integer NO_MinorsAnnularLine,NO_PipingsAnnularLine,RamsFirstSet REAL,ALLOCATABLE:: MINORDIAMETER_ANNULARLINE(:),AREAMINOR_ANNULARLINE(:)
REAL pa_annular,p_annular !REAL,ALLOCATABLE:: REAL_PregAnnular(:),real_IDAnnular(:),real_pAnnular(:)
REAL,ALLOCATABLE:: MINORDIAMETER_ANNULARLINE(:),AREAMINOR_ANNULARLINE(:) REAL REAL_PregAnnular,real_IDAnnular,real_pAnnular
!REAL,ALLOCATABLE:: REAL_PregAnnular(:),real_IDAnnular(:),real_pAnnular(:) REAL,ALLOCATABLE:: LF_ANNULARLINE(:),CV_ANNULARLINE(:),NOTE_ANNULARLINE(:),minlosspa_ANNULAR(:),minloss_ANNULAR(:)
REAL REAL_PregAnnular,real_IDAnnular,real_pAnnular REAL,ALLOCATABLE:: DIAM_ANNULARLINE_INCH(:),DIAM_ANNULARLINE_MM(:),AREA_ANNULARLINE(:)
REAL,ALLOCATABLE:: LF_ANNULARLINE(:),CV_ANNULARLINE(:),NOTE_ANNULARLINE(:),minlosspa_ANNULAR(:),minloss_ANNULAR(:) REAL,ALLOCATABLE:: LENGT_ANNULARLINE(:),ROUGHNESS_ANNULARLINE(:),RELROUGH_ANNULARLINE(:),Re_ANNULARline(:),fricANNULAR(:),friclossANNULAR(:)
REAL,ALLOCATABLE:: DIAM_ANNULARLINE_INCH(:),DIAM_ANNULARLINE_MM(:),AREA_ANNULARLINE(:) INTEGER,ALLOCATABLE:: ITEMANNULAR(:),ITEM_PIPINGANNULAR(:)
REAL,ALLOCATABLE:: LENGT_ANNULARLINE(:),ROUGHNESS_ANNULARLINE(:),RELROUGH_ANNULARLINE(:),Re_ANNULARline(:),fricANNULAR(:),friclossANNULAR(:) CHARACTER,ALLOCATABLE:: DECRIPTIONANNULAR(:),DECRIPTION2ANNULAR(:),DECRIPTION_ANNULAR(:)
INTEGER,ALLOCATABLE:: ITEMANNULAR(:),ITEM_PIPINGANNULAR(:) REAL WellBorePressure,acoef,Bcoef,const,AnnularSealingPressure,AnnularMovingPressure
CHARACTER,ALLOCATABLE:: DECRIPTIONANNULAR(:),DECRIPTION2ANNULAR(:),DECRIPTION_ANNULAR(:) end type AnnularComputationalType
REAL WellBorePressure,acoef,Bcoef,const,AnnularSealingPressure,AnnularMovingPressure type(AnnularComputationalType)::AnnularComputational
!=========================================================================== !===========================================================================
! ANNULAR PREVENTER VARIABLES ! ANNULAR PREVENTER VARIABLES
!=========================================================================== !===========================================================================
REAL (8) Pannular_reg type :: AnnularType
real Pannular_regset REAL (8) Pannular_reg
logical AnnularIsClosing,AnnularIsOpening real Pannular_regset
REAL tolAnnular,tolzeroAnnular logical AnnularIsClosing,AnnularIsOpening
integer Annular_closed,finished_Annular,FirstSet,AnnularFailureMalf,AnnularLeakMalf,AnnularPressureGaugeMalf,Annular_Situation_forTD REAL tolAnnular,tolzeroAnnular
REAL AnnularLeverOld,H_AnnularBop,IDAnnular,AbopAnnular,ODDrillpipe_inAnnular,IDAnnularBase,ODDrillpipe_inAnnularBase integer Annular_closed,finished_Annular,FirstSet,AnnularFailureMalf,AnnularLeakMalf,AnnularPressureGaugeMalf,Annular_Situation_forTD
REAL NeededVolumeAnnular REAL AnnularLeverOld,H_AnnularBop,IDAnnular,AbopAnnular,ODDrillpipe_inAnnular,IDAnnularBase,ODDrillpipe_inAnnularBase
REAL NeededVolumeAnnular
end type AnnularType
type(AnnularType)::Annular
!=========================================================================== !===========================================================================
! PIPE RAMS 1 VARIABLES ! PIPE RAMS 1 VARIABLES
!=========================================================================== !===========================================================================
logical PipeRam1IsClosing,PipeRam1IsOpening type::PipeRams1Type
REAL PipeRams1LeverOld,H_PipeRam1Bop logical IsClosing,IsOpening
REAL NeededVolumePipeRams1,AbopPipeRam,IDPipeRamBase,IDPipeRam1,ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base REAL PipeRams1DotLeverOld,H
integer PipeRam1_closed,finished_pipe1,UpperRamsFailureMalf,UpperRamsLeakMalf,PipeRam1_Situation_forTD REAL NeededVolume,A,IDBase,ID,ODDrillpipe_in,ODDrillpipe_inBase
REAL real_IDPipeRam1 integer closed,finished,UpperRamsFailureMalf,UpperRamsLeakMalf,Situation_forTD

REAL real_ID
end type PipeRams1Type
type(PipeRams1Type)::PipeRam1
!============================================================================ !============================================================================
! SHEAR RAM BOP VARIABLES ! SHEAR RAM BOP VARIABLES
!============================================================================ !============================================================================
REAL PA,PB,P_SHEAR,VA,VB,RAM_COURSE,H_REGRAM,H_ShearRamBop type:: ShearRamType
REAL,ALLOCATABLE:: ALPHA_QRAM(:),ALPHA_VDISRAM(:),ALPHA_PACC(:),ALPHA_PREGRAM(:),ALPHA_PBOP(:) REAL PA,PB,P_SHEAR,VA,VB,RAM_COURSE,H_REGRAM,H_ShearRamBop
!REAL,ALLOCATABLE:: REAL_TIME(:),REAL_QRAM(:),REAL_VDISRAM(:),REAL_PACC(:),REAL_PREGRAM(:),REAL_PBOP(:),real_IDshearBop(:) REAL,ALLOCATABLE:: ALPHA_QRAM(:),ALPHA_VDISRAM(:),ALPHA_PACC(:),ALPHA_PREGRAM(:),ALPHA_PBOP(:)
REAL REAL_TIME,REAL_QRAM,REAL_VDISRAM,REAL_PACC,REAL_PREGRAM,REAL_PBOP,real_IDshearBop !REAL,ALLOCATABLE:: REAL_TIME(:),REAL_QRAM(:),REAL_VDISRAM(:),REAL_PACC(:),REAL_PREGRAM(:),REAL_PBOP(:),real_IDshearBop(:)
REAL IDshearBopBase,IDshearBop,ODDrillpipe_inShearRam,AbopShearRam,NeededVolumeShearRams,ODDrillpipe_inShearRamBase REAL REAL_TIME,REAL_QRAM,REAL_VDISRAM,REAL_PACC,REAL_PREGRAM,REAL_PBOP,real_IDshearBop
Real IDshearBopFinal,IDPipeRam1Final,IDPipeRam2Final,IDAnnularFinal,OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular REAL IDshearBopBase,IDshearBop,ODDrillpipe_inShearRam,AbopShearRam,NeededVolumeShearRams,ODDrillpipe_inShearRamBase
Real MinimumOpenArea_InBOP Real IDshearBopFinal,IDPipeRam1Final,IDPipeRam2Final,IDAnnularFinal,OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular
integer MiddleRamsFailureMalf,MiddleRamsLeakMalf,ShearIsNotAllowed Real MinimumOpenArea_InBOP

integer MiddleRamsFailureMalf,MiddleRamsLeakMalf,ShearIsNotAllowed
end type ShearRamType
type(ShearRamType)::ShearRam
!=========================================================================== !===========================================================================
! PIPE RAMS 2 VARIABLES ! PIPE RAMS 2 VARIABLES
!=========================================================================== !===========================================================================
logical PipeRam2IsClosing,PipeRam2IsOpening type::PipeRam2Type
REAL PipeRams2LeverOld,H_PipeRam2Bop logical IsClosing,IsOpening
REAL NeededVolumePipeRams2,IDPipeRam2,ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam2Base REAL LeverOld,H_Bop
integer PipeRam2_closed,finished_pipe2,LowerRamsFailureMalf,LowerRamsLeakMalf,PipeRam2_Situation_forTD REAL NeededVolume,ID,ODDrillpipe_in,ODDrillpipe_inBase
!REAL,ALLOCATABLE:: real_IDPipeRam2(:) integer closed,finished,LowerRamsFailureMalf,LowerRamsLeakMalf,Situation_forTD
REAL real_IDPipeRam2 !REAL,ALLOCATABLE:: real_IDPipeRam2(:)

REAL real_ID
end type PipeRam2Type
type(PipeRam2Type)::PipeRam2
!=========================================================================== !===========================================================================
! CHOKE LINE VARIABLES ! CHOKE LINE VARIABLES
!=========================================================================== !===========================================================================
logical ChokeLineIsClosing,ChokeLineIsOpening type::ChokeLineType
REAL ChokeLineLeverOld,H_ChokeLineBop logical IsClosing,IsOpening
REAL NeededVolumeChokeLine,AbopChokeLine,IDChokeLine,ODDrillpipe_inChokeLine,IDChokeLineBase,ODDrillpipe_inChokeLineBase REAL LeverOld,H_Bop
integer ChokeLine_closed,finished_ChokeLine REAL NeededVolume,Abop,ID,ODDrillpipe_in,IDBase,ODDrillpipe_inBase
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) integer closed,finished
REAL real_IDChokeLine !REAL,ALLOCATABLE:: real_IDPipeRam1(:)

REAL real_ID
end type ChokeLineType
type(ChokeLineType)::ChokeLine
!=========================================================================== !===========================================================================
! KILL LINE VARIABLES ! KILL LINE VARIABLES
!=========================================================================== !===========================================================================
logical KillLineIsClosing,KillLineIsOpening type::KillLineType
REAL KillLineLeverOld,H_KillLineBop logical IsClosing,IsOpening
REAL NeededVolumeKillLine,AbopKillLine,IDKillLine,ODDrillpipe_inKillLine,IDKillLineBase,ODDrillpipe_inKillLineBase REAL LeverOld,H_Bop
integer KillLine_closed,finished_KillLine REAL NeededVolume,Abop,ID,ODDrillpipe_in,IDBase,ODDrillpipe_inBase
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) integer closed,finished
REAL real_IDKillLine !REAL,ALLOCATABLE:: real_IDPipeRam1(:)

REAL real_ID
end type KillLineType
type(KillLineType)::KillLine
!============================================================================ !============================================================================
! OIL & ENVIRONMENT VARIABLES ! OIL & ENVIRONMENT VARIABLES
!============================================================================ !============================================================================
@@ -135,13 +157,14 @@ REAL:: SG=1.12,WDENS=1000,GRAVITY=9.81,RE_CR=2000,NU=9e-6
!============================================================================ !============================================================================
! PUMP VARIABLES ! PUMP VARIABLES
!============================================================================ !============================================================================
REAL P_AIRP,DELTAV_AIR,TOL_AIR,DELTAV_ELECP,Qiter type::PumpsType
REAL ELECTRIC_PUMPON,ELECTRIC_PUMPOFF,AIR_PUMPON,AIR_PUMPOFF,QAIR_PUMP,QELECTRIC_PUMP REAL P_AIRP,DELTAV_AIR,TOL_AIR,DELTAV_ELECP,Qiter
!REAL,ALLOCATABLE:: alpha_Qair(:),alpha_timeair(:),alpha_paccair(:),alpha_pairp(:),alpha_diffpair(:),alpha_lossesair(:),alpha_fvrair(:) REAL ELECTRIC_ON,ELECTRIC_OFF,AIR_ON,AIR_OFF,QAIR,QELECTRIC
REAL alpha_Qair,alpha_timeair,alpha_paccair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_fvrair !REAL,ALLOCATABLE:: alpha_Qair(:),alpha_timeair(:),alpha_paccair(:),alpha_pairp(:),alpha_diffpair(:),alpha_lossesair(:),alpha_fvrair(:)
logical SoundKoomeyElectricPump REAL alpha_Qair,alpha_timeair,alpha_paccair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_fvrair

logical SoundKoomeyElectric

end type PumpsType
type(PumpsType)::Pumps


!================================================================================= !=================================================================================




+ 122
- 122
Equipments/ChokeControl/AirPump_Choke_Subs.f90 查看文件

@@ -9,13 +9,13 @@ write(*,*) 'deallocateeeeeeeeeeeee'
!=========================================================================== !===========================================================================
!if(allocated(PIPINGS_AIRPUMP)) deallocate(PIPINGS_AIRPUMP) !if(allocated(PIPINGS_AIRPUMP)) deallocate(PIPINGS_AIRPUMP)


DEALLOCATE (PIPINGS_AIRPUMP,DIAM_AIR_INCH, & DEALLOCATE (AirPumpLine%PIPINGS_AIRPUMP,AirPumpLine%DIAM_AIR_INCH, &
Re_air,AREA_AIR,LENGT_AIR,ROUGHNESS_AIRPLINE,REL_ROUGHAIR, & AirPumpLine%Re_air,AirPumpLine%AREA_AIR,AirPumpLine%LENGT_AIR,AirPumpLine%ROUGHNESS_AIRPLINE,AirPumpLine%REL_ROUGHAIR, &
fric_air,fricloss_air) AirPumpLine%fric_air,AirPumpLine%fricloss_air)
!================================================================ !================================================================
DEALLOCATE (MINORS_AIRPUMP,MINORDIAM_AIR_INCH, & DEALLOCATE (AirPumpLine%MINORS_AIRPUMP,AirPumpLine%MINORDIAM_AIR_INCH, &
MINORAREA_AIR,LF_AIR,CV_AIR,NOTE_AIR & AirPumpLine%MINORAREA_AIR,AirPumpLine%LF_AIR,AirPumpLine%CV_AIR,AirPumpLine%NOTE_AIR &
,minlosspa_air,minloss_air) ,AirPumpLine%minlosspa_air,AirPumpLine%minloss_air)


END END
@@ -33,63 +33,63 @@ implicit none
!=========================================================================== !===========================================================================
! AIR PUMP LOSSES INPUT ! AIR PUMP LOSSES INPUT
!=========================================================================== !===========================================================================
NO_PIPINGS_AIRPLINE=1 AirPumpLine%NO_PIPINGS_AIRPLINE=1


ALLOCATE (PIPINGS_AIRPUMP(NO_PIPINGS_AIRPLINE,3)) ALLOCATE (AirPumpLine%PIPINGS_AIRPUMP(AirPumpLine%NO_PIPINGS_AIRPLINE,3))
! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION ! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION
PIPINGS_AIRPUMP(1,1:3)= (/0.5, 60960., 0.03/) !Avg.acc.distance AirPumpLine%PIPINGS_AIRPUMP(1,1:3)= (/0.5, 60960., 0.03/) !Avg.acc.distance
!60960= 200 ft !60960= 200 ft


ALLOCATE (DIAM_AIR_INCH(NO_PIPINGS_AIRPLINE),Re_air(NO_PIPINGS_AIRPLINE),AREA_AIR(NO_PIPINGS_AIRPLINE), & ALLOCATE (AirPumpLine%DIAM_AIR_INCH(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%Re_air(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%AREA_AIR(AirPumpLine%NO_PIPINGS_AIRPLINE), &
LENGT_AIR(NO_PIPINGS_AIRPLINE),ROUGHNESS_AIRPLINE(NO_PIPINGS_AIRPLINE),REL_ROUGHAIR(NO_PIPINGS_AIRPLINE), & AirPumpLine%LENGT_AIR(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%ROUGHNESS_AIRPLINE(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%REL_ROUGHAIR(AirPumpLine%NO_PIPINGS_AIRPLINE), &
fric_air(NO_PIPINGS_AIRPLINE),fricloss_air(NO_PIPINGS_AIRPLINE)) AirPumpLine%fric_air(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%fricloss_air(AirPumpLine%NO_PIPINGS_AIRPLINE))






DO I=1,NO_PIPINGS_AIRPLINE DO I=1,AirPumpLine%NO_PIPINGS_AIRPLINE
DIAM_AIR_INCH(I)=PIPINGS_AIRPUMP(I,1) AirPumpLine%DIAM_AIR_INCH(I)=AirPumpLine%PIPINGS_AIRPUMP(I,1)
LENGT_AIR(I)=PIPINGS_AIRPUMP(I,2) AirPumpLine%LENGT_AIR(I)=AirPumpLine%PIPINGS_AIRPUMP(I,2)
ROUGHNESS_AIRPLINE(I)=PIPINGS_AIRPUMP(I,3) AirPumpLine%ROUGHNESS_AIRPLINE(I)=AirPumpLine%PIPINGS_AIRPUMP(I,3)
AREA_AIR(I)=PI*(DIAM_AIR_INCH(I)*0.0254)**2/4 !D(in), AREA(m) AirPumpLine%AREA_AIR(I)=PI*(AirPumpLine%DIAM_AIR_INCH(I)*0.0254)**2/4 !D(in), AREA(m)
REL_ROUGHAIR(I)=ROUGHNESS_AIRPLINE(I)/(DIAM_AIR_INCH(I)*25.4) AirPumpLine%REL_ROUGHAIR(I)=AirPumpLine%ROUGHNESS_AIRPLINE(I)/(AirPumpLine%DIAM_AIR_INCH(I)*25.4)
!DIAM_RAMLINE_MM(I)=DIAM_RAMLINE_MM(I)*.001 ! (m) !DIAM_RAMLINE_MM(I)=DIAM_RAMLINE_MM(I)*.001 ! (m)
LENGT_AIR(I)=LENGT_AIR(I)*.001 ! (m) AirPumpLine%LENGT_AIR(I)=AirPumpLine%LENGT_AIR(I)*.001 ! (m)
ENDDO ENDDO


!================================================================ !================================================================
NO_MINORS_AIRPLINE=6 AirPumpLine%NO_MINORS_AIRPLINE=6


ALLOCATE (MINORS_AIRPUMP(NO_MINORS_AIRPLINE,4)) ALLOCATE (AirPumpLine%MINORS_AIRPUMP(AirPumpLine%NO_MINORS_AIRPLINE,4))


! ID(INCH) LF CV NOTE(BAR) DESCRIPTION ! ID(INCH) LF CV NOTE(BAR) DESCRIPTION
MINORS_AIRPUMP(1,1:4)= (/2., 10., 0., 0./) !Acc.tee AirPumpLine%MINORS_AIRPUMP(1,1:4)= (/2., 10., 0., 0./) !Acc.tee
MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow AirPumpLine%MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow
MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter AirPumpLine%MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter
MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve AirPumpLine%MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve
MINORS_AIRPUMP(5,1:4)= (/1., 0., 9.2, 0./) !valve AirPumpLine%MINORS_AIRPUMP(5,1:4)= (/1., 0., 9.2, 0./) !valve
MINORS_AIRPUMP(6,1:4)= (/2., 6.4, 0., 0./) !unionA AirPumpLine%MINORS_AIRPUMP(6,1:4)= (/2., 6.4, 0., 0./) !unionA


ALLOCATE (MINORDIAM_AIR_INCH(NO_MINORS_AIRPLINE),MINORAREA_AIR(NO_MINORS_AIRPLINE), & ALLOCATE (AirPumpLine%MINORDIAM_AIR_INCH(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%MINORAREA_AIR(AirPumpLine%NO_MINORS_AIRPLINE), &
LF_AIR(NO_MINORS_AIRPLINE),CV_AIR(NO_MINORS_AIRPLINE),NOTE_AIR(NO_MINORS_AIRPLINE) & AirPumpLine%LF_AIR(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%CV_AIR(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%NOTE_AIR(AirPumpLine%NO_MINORS_AIRPLINE) &
,minlosspa_air(NO_MINORS_AIRPLINE),minloss_air(NO_MINORS_AIRPLINE)) ,AirPumpLine%minlosspa_air(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%minloss_air(AirPumpLine%NO_MINORS_AIRPLINE))


DO I=1,NO_MINORS_AIRPLINE DO I=1,AirPumpLine%NO_MINORS_AIRPLINE
MINORDIAM_AIR_INCH(I)=MINORS_AIRPUMP(I,1) AirPumpLine%MINORDIAM_AIR_INCH(I)=AirPumpLine%MINORS_AIRPUMP(I,1)
LF_AIR(I)=MINORS_AIRPUMP(I,2) AirPumpLine%LF_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,2)
CV_AIR(I)=MINORS_AIRPUMP(I,3) AirPumpLine%CV_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,3)
NOTE_AIR(I)=MINORS_AIRPUMP(I,4) AirPumpLine%NOTE_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,4)
MINORAREA_AIR(I)=PI*(MINORDIAM_AIR_INCH(I)*0.0254)**2/4. !D(in), AREA(m) AirPumpLine%MINORAREA_AIR(I)=PI*(AirPumpLine%MINORDIAM_AIR_INCH(I)*0.0254)**2/4. !D(in), AREA(m)
ENDDO ENDDO
@@ -107,7 +107,7 @@ SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER)
Integer I Integer I


loop3: do while (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. ChokeAirFail==0) 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 if (ChokeControlPanel%ChokeControlLever == 1.0) then
CHOOKE(CHNUMBER)%ChokeIsClosing = .true. CHOOKE(CHNUMBER)%ChokeIsClosing = .true.
CHOOKE(CHNUMBER)%ChokeIsOpening = .false. CHOOKE(CHNUMBER)%ChokeIsOpening = .false.
@@ -120,7 +120,7 @@ SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER)


time=time+DeltaT_Choke !overal time (s) AirPumpLine%TIME=AirPumpLine%TIME+AirPumpLine%DeltaT_Choke !overal time (s)






@@ -155,33 +155,33 @@ implicit none
INTEGER CHNUMBER INTEGER CHNUMBER




QAIR_PUMP=Qiter+.1 !(gpm) maximum flow for the start AirDrivenPump%QAIR_PUMP=AirPumpLine%QITER+.1 !(gpm) maximum flow for the start
diffp_air=-10 AirPumpLine%diffp_air=-10
losses_air=10 AirPumpLine%losses_air=10


!=================================================================== !===================================================================
! AIR OPERATED PUMP ! AIR OPERATED PUMP
! MODEL 10-6000W030 RATIO 55:1 ! MODEL 10-6000W030 RATIO 55:1
!=================for air consumption at 100 psig=================== !=================for air consumption at 100 psig===================
do while (diffp_air<0) do while (AirPumpLine%diffp_air<0)
QAIR_PUMP=QAIR_PUMP-.1 AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP-.1
! Qup=QAIR_PUMP; ! Qup=AirDrivenPump%QAIR_PUMP;
!cc1 = 1354; cc2 = -2066; cc3 = -2109; cc4 = -513.6; cc5 = 5935 FOR OUTPUT IN GPM !cc1 = 1354; cc2 = -2066; cc3 = -2109; cc4 = -513.6; cc5 = 5935 FOR OUTPUT IN GPM
p_airp=cc1*(QAIR_PUMP**4) + cc2*(QAIR_PUMP**3) + cc3*(QAIR_PUMP**2) + cc4*QAIR_PUMP + cc5 !(psig) AirPumpLine%P_AIRP=AirDrivenPump%cc1*(AirDrivenPump%QAIR_PUMP**4) + AirDrivenPump%cc2*(AirDrivenPump%QAIR_PUMP**3) + AirDrivenPump%cc3*(AirDrivenPump%QAIR_PUMP**2) + AirDrivenPump%cc4*AirDrivenPump%QAIR_PUMP + AirDrivenPump%cc5 !(psig)
! kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-5/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) ! kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-5/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi)


diffp_air= p_airp - Pdownstrem AirPumpLine%diffp_air= AirPumpLine%P_AIRP - AirPumpLine%Pdownstrem


end do !returns Qup end do !returns Qup






do while (abs((diffp_air-losses_air)/diffp_air)>tol_air) !finding correct QAIR_pump for 1 timecounter_ram do while (abs((AirPumpLine%diffp_air-AirPumpLine%losses_air)/AirPumpLine%diffp_air)>AirPumpLine%TOL_AIR) !finding correct QAIR_pump for 1 timecounter_ram


if (diffp_air-losses_air>0) then if (AirPumpLine%diffp_air-AirPumpLine%losses_air>0) then
QAIR_PUMP=QAIR_PUMP+.005 AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP+.005
else else
QAIR_PUMP=QAIR_PUMP-.005 AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP-.005
endif endif


!=================================================================== !===================================================================
@@ -189,53 +189,53 @@ endif
! MODEL 10-6000W030 RATIO 55:1 ! MODEL 10-6000W030 RATIO 55:1
!=================for air consumption at 100 psig=================== !=================for air consumption at 100 psig===================


p_airp=cc1*(QAIR_PUMP**4) + cc2*(QAIR_PUMP**3) + cc3*(QAIR_PUMP**2) + cc4*QAIR_PUMP + cc5 !(psig) AirPumpLine%P_AIRP=AirDrivenPump%cc1*(AirDrivenPump%QAIR_PUMP**4) + AirDrivenPump%cc2*(AirDrivenPump%QAIR_PUMP**3) + AirDrivenPump%cc3*(AirDrivenPump%QAIR_PUMP**2) + AirDrivenPump%cc4*AirDrivenPump%QAIR_PUMP + AirDrivenPump%cc5 !(psig)
!kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-005/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) !kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-005/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi)


diffp_air= p_airp - Pdownstrem AirPumpLine%diffp_air= AirPumpLine%P_AIRP - AirPumpLine%Pdownstrem




!===========================LOSSES==================================== !===========================LOSSES====================================
do i=1,NO_PIPINGS_AIRPLINE do i=1,AirPumpLine%NO_PIPINGS_AIRPLINE
Re_air(i)=QAIR_PUMP*6.30902e-005*DIAM_AIR_INCH(I)*0.0254/(area_air(i)*nu) AirPumpLine%Re_air(i)=AirDrivenPump%QAIR_PUMP*6.30902e-005*AirPumpLine%DIAM_AIR_INCH(I)*0.0254/(AirPumpLine%AREA_AIR(i)*nu)
enddo enddo




do i=1,NO_PIPINGS_AIRPLINE do i=1,AirPumpLine%NO_PIPINGS_AIRPLINE
if (Re_air(i)<Re_cr) then if (AirPumpLine%Re_air(i)<Re_cr) then
fric_air(i)=64/Re_air(i) AirPumpLine%fric_air(i)=64/AirPumpLine%Re_air(i)
else else
fric_air(i)=1/(-1.8*log10((rel_roughair(i)/3.7)**1.11+6.9/Re_air(i)))**2 AirPumpLine%fric_air(i)=1/(-1.8*log10((AirPumpLine%REL_ROUGHAIR(i)/3.7)**1.11+6.9/AirPumpLine%Re_air(i)))**2
endif endif
fricloss_air(i)=((fric_air(i)*(wdens*sg*lengt_air(i)*(QAIR_PUMP*6.30902e-005/area_air(i))**2))/(2*DIAM_AIR_INCH(I)*0.0254))/6895 AirPumpLine%fricloss_air(i)=((AirPumpLine%fric_air(i)*(wdens*sg*AirPumpLine%LENGT_AIR(i)*(AirDrivenPump%QAIR_PUMP*6.30902e-005/AirPumpLine%AREA_AIR(i))**2))/(2*AirPumpLine%DIAM_AIR_INCH(I)*0.0254))/6895


enddo enddo








pipe_loss1air=sum(fricloss_air) !loss before regulator(psi) AirPumpLine%pipe_loss1air=sum(AirPumpLine%fricloss_air) !loss before regulator(psi)


do i=1,NO_MINORS_AIRPLINE do i=1,AirPumpLine%NO_MINORS_AIRPLINE
if (LF_air(i)/=0) then if (AirPumpLine%LF_AIR(i)/=0) then
minlosspa_air(i)=LF_air(i)*wdens*sg*(QAIR_PUMP*6.30902e-005/MINORAREA_AIR(i))**2/2 !(Pa) AirPumpLine%minlosspa_air(i)=AirPumpLine%LF_AIR(i)*wdens*sg*(AirDrivenPump%QAIR_PUMP*6.30902e-005/AirPumpLine%MINORAREA_AIR(i))**2/2 !(Pa)
minloss_air(i)=minlosspa_air(i)/6895 !(psi) AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi)
elseif (CV_air(i)/=0) then elseif (AirPumpLine%CV_AIR(i)/=0) then
minlosspa_air(i)=1000*sg*((11.7*QAIR_PUMP*6.30902e-005*3600)/(CV_air(i)))**2 !(pa) AirPumpLine%minlosspa_air(i)=1000*sg*((11.7*AirDrivenPump%QAIR_PUMP*6.30902e-005*3600)/(AirPumpLine%CV_AIR(i)))**2 !(pa)
minloss_air(i)=minlosspa_air(i)/6895 !(psi) AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi)
else else
minlosspa_air(i)=NOTE_air(i)*1e5 !(pa) AirPumpLine%minlosspa_air(i)=AirPumpLine%NOTE_AIR(i)*1e5 !(pa)
minloss_air(i)=minlosspa_air(i)/6895 !(psi) AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi)
endif endif
enddo enddo


minor_loss1air=sum(minloss_air) !loss before regulator(psi) AirPumpLine%minor_loss1air=sum(AirPumpLine%minloss_air) !loss before regulator(psi)


static_loss1air=0 AirPumpLine%static_loss1air=0


losses_air=pipe_loss1air+minor_loss1air+static_loss1air !(psi) AirPumpLine%losses_air=AirPumpLine%pipe_loss1air+AirPumpLine%minor_loss1air+AirPumpLine%static_loss1air !(psi)
!========================================================================= !=========================================================================




@@ -244,29 +244,29 @@ losses_air=pipe_loss1air+minor_loss1air+static_loss1air !(psi)






Qiter=QAIR_PUMP AirPumpLine%QITER=AirDrivenPump%QAIR_PUMP
QAIR_PUMP=QAIR_PUMP*(ChokeControlPanel%ChokeRateControlKnob/10.) ! final Q (gpm) AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP*(ChokeControlPanel%ChokeRateControlKnob/10.) ! final Q (gpm)
Cumulative_AirVolume_Choke= Cumulative_AirVolume_Choke + ((QAIR_PUMP * DeltaT_Choke / 60.0 ) / (1.5*0.004329004) ) ! =strokes Choke%Cumulative_AirVolume_Choke= Choke%Cumulative_AirVolume_Choke + ((AirDrivenPump%QAIR_PUMP * AirPumpLine%DeltaT_Choke / 60.0 ) / (1.5*0.004329004) ) ! =strokes


if ( Cumulative_AirVolume_Choke > 1.0 ) then if ( Choke%Cumulative_AirVolume_Choke > 1.0 ) then
SoundChokePump= 60 Choke%SoundChokePump= 60
Cumulative_AirVolume_Choke= Cumulative_AirVolume_Choke - 1.0 Choke%Cumulative_AirVolume_Choke= Choke%Cumulative_AirVolume_Choke - 1.0
else else
SoundChokePump= 0.0 Choke%SoundChokePump= 0.0
endif endif
!SoundChokePump= int (QAIR_PUMP/ (1.5*0.004329004)*DeltaT_Choke/60.0) ! 1.5: Volume per stroke (in^3) , 0.004329004: in^3 to gal , 60:seconds !SoundChokePump= int (QAIR_PUMP/ (1.5*0.004329004)*DeltaT_Choke/60.0) ! 1.5: Volume per stroke (in^3) , 0.004329004: in^3 to gal , 60:seconds


deltav_air=QAIR_PUMP*DeltaT_Choke/60 !(galon) delta_t=1sec , Q(gpm) AirPumpLine%DELTAV_AIR=AirDrivenPump%QAIR_PUMP*AirPumpLine%DeltaT_Choke/60 !(galon) delta_t=1sec , Q(gpm)


if (CHOOKE(CHNUMBER)%ChokeIsClosing) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse + (deltav_air*3785.412/Acylinder)!*(ChokeRateControlKnob/10.) ! 3785.412 : GALON TO CM^3 if (CHOOKE(CHNUMBER)%ChokeIsClosing) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse + (AirPumpLine%DELTAV_AIR*3785.412/AirPumpLine%Acylinder)!*(ChokeRateControlKnob/10.) ! 3785.412 : GALON TO CM^3
if (CHOOKE(CHNUMBER)%ChokeIsOpening) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse - (deltav_air*3785.412/Acylinder)!*(ChokeRateControlKnob/10.) if (CHOOKE(CHNUMBER)%ChokeIsOpening) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse - (AirPumpLine%DELTAV_AIR*3785.412/AirPumpLine%Acylinder)!*(ChokeRateControlKnob/10.)




@@ -276,39 +276,39 @@ if (CHOOKE(CHNUMBER)%ChokeIsOpening) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUM
!((((((((IN OUTER LOOP)))))) !((((((((IN OUTER LOOP))))))


!===============AIR PUMP OUTPUTS========================= !===============AIR PUMP OUTPUTS=========================
alpha_timeair=time ! overal time (s) AirPumpLine%alpha_timeair=AirPumpLine%TIME ! overal time (s)
alpha_Pdownstrem=Pdownstrem AirPumpLine%alpha_Pdownstrem=AirPumpLine%Pdownstrem
alpha_pairp=p_airp AirPumpLine%alpha_pairp=AirPumpLine%P_AIRP
alpha_Qair=QAIR_PUMP AirPumpLine%alpha_Qair=AirDrivenPump%QAIR_PUMP
!write(*,*) 'diffp_air=',diffp_air !write(*,*) 'diffp_air=',diffp_air
!pause !pause
alpha_diffpair=diffp_air AirPumpLine%alpha_diffpair=AirPumpLine%diffp_air


alpha_lossesair=losses_air AirPumpLine%alpha_lossesair=AirPumpLine%losses_air
!======================================================== !========================================================
!OPEN(150,FILE='CHOKE_AIRPUMP_OUTPUTS.DAT') !OPEN(150,FILE='CHOKE_AIRPUMP_OUTPUTS.DAT')




if (CHOOKE(CHNUMBER)%ChokeIsClosing .AND. CHOOKE(CHNUMBER)%PassedCourse>CourseBase) then if (CHOOKE(CHNUMBER)%ChokeIsClosing .AND. CHOOKE(CHNUMBER)%PassedCourse>AirPumpLine%CourseBase) then
CHOOKE(CHNUMBER)%PassedCourse=CourseBase CHOOKE(CHNUMBER)%PassedCourse=AirPumpLine%CourseBase
SoundChokePump= 0.0 Choke%SoundChokePump= 0.0
endif endif
if (CHOOKE(CHNUMBER)%ChokeIsOpening .AND. CHOOKE(CHNUMBER)%PassedCourse<0.) then if (CHOOKE(CHNUMBER)%ChokeIsOpening .AND. CHOOKE(CHNUMBER)%PassedCourse<0.) then
CHOOKE(CHNUMBER)%PassedCourse=0. CHOOKE(CHNUMBER)%PassedCourse=0.
SoundChokePump= 0.0 Choke%SoundChokePump= 0.0
endif endif
call SetSoundChokePump(SoundChokePump) call SetSoundChokePump(Choke%SoundChokePump)


CHOOKE(CHNUMBER)%PercentClose= CHOOKE(CHNUMBER)%PassedCourse/CourseBase CHOOKE(CHNUMBER)%PercentClose= CHOOKE(CHNUMBER)%PassedCourse/AirPumpLine%CourseBase
IF (ChokeControlPanel%Choke1LED==1) THEN IF (ChokeControlPanel%Choke1LED==1) THEN
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10
ELSE ! Choke2LED==1 ELSE ! Choke2LED==1
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10
ENDIF ENDIF
!CALL SetHydraulicChock1(nint(MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)*100)) !CALL SetHydraulicChock1(nint(MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)*100))
@@ -329,37 +329,37 @@ alpha_lossesair=losses_air


HydraulicChoke1WashoutCoef= HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf Choke%HydraulicChoke1WashoutCoef= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf
HydraulicChoke1WashoutCoef= MIN( 0.5 , HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(60.0/DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time 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
HydraulicChoke2WashoutCoef= HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf Choke%HydraulicChoke2WashoutCoef= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf
HydraulicChoke2WashoutCoef= MIN( 0.5 , HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(60.0/DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time 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 !write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef
IF (CHOOKE(1)%PlugMalf == 1) THEN IF (CHOOKE(1)%PlugMalf == 1) THEN
Present_HydraulicChoke1Plug= Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf Choke%Present_HydraulicChoke1Plug= Choke%Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf
! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay ! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay
! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent ! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent
!write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent !write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - HydraulicChoke1PluggedPercent_Old) /= 0) then if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then
DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Present_HydraulicChoke1Plug Choke%DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Choke%Present_HydraulicChoke1Plug
Plug1TimeCounter = 0 Choke%Plug1TimeCounter = 0
!write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug !write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug
endif endif
Plug1TimeCounter= Plug1TimeCounter + 1 Choke%Plug1TimeCounter= Choke%Plug1TimeCounter + 1


HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent
if (Plug1TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=600 if (Choke%Plug1TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=600
Present_HydraulicChoke1Plug = Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((DeltaPlug1Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 Choke%Present_HydraulicChoke1Plug = Choke%Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((Choke%DeltaPlug1Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0
endif endif
@@ -374,23 +374,23 @@ alpha_lossesair=losses_air
IF (CHOOKE(2)%PlugMalf == 1) THEN IF (CHOOKE(2)%PlugMalf == 1) THEN


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


HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent
if (Plug2TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=600 if (Choke%Plug2TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=600
Present_HydraulicChoke2Plug = Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((DeltaPlug2Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 Choke%Present_HydraulicChoke2Plug = Choke%Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((Choke%DeltaPlug2Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0
endif endif
@@ -403,14 +403,14 @@ alpha_lossesair=losses_air
! fully open area is 123/64 in^2 = 0.01334635 ft^2 ! fully open area is 123/64 in^2 = 0.01334635 ft^2
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*HydraulicChoke1WashoutCoef*ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup 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 !write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup 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*HydraulicChoke2WashoutCoef*ChokeAreaFullyOpen/144.0) ! 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* Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! 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 !write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke
@@ -418,8 +418,8 @@ alpha_lossesair=losses_air
CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke
! 144: ft^2 to in^2 ! 144: ft^2 to in^2
CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100)) ! for manifold valve CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve
CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(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(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100


+ 30
- 30
Equipments/ChokeControl/CHOKE.f90 查看文件

@@ -1,6 +1,6 @@
module choke module ChokeModule
USE CHOKEVARIABLES USE CHOKEVARIABLES
!USE CDataDisplayConsoleVariables, CasingPressureDataDisplay=>CasingPressure!, StandPipePressureDataDisplay=>StandPipePressure !USE CDataDisplayConsoleVariables, CasingPressureDataDisplay=>CasingPressure!, StandPipePressureDataDisplay=>StandPipePressure
USE CChokeProblemsVariables USE CChokeProblemsVariables
@@ -42,9 +42,9 @@ module choke




IF (ChokeControlPanel%Choke1LED==1) THEN IF (ChokeControlPanel%Choke1LED==1) THEN
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 ! display monitor ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 ! display monitor
ELSE ! Choke2LED==1 ELSE ! Choke2LED==1
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 ! display monitor ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 ! display monitor
ENDIF ENDIF




@@ -62,37 +62,37 @@ module choke


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


!write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef !write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef
IF (CHOOKE(1)%PlugMalf == 1) THEN IF (CHOOKE(1)%PlugMalf == 1) THEN
Present_HydraulicChoke1Plug= Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf Choke%Present_HydraulicChoke1Plug= Choke%Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf
! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay ! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay
! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent ! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent
!write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent !write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - HydraulicChoke1PluggedPercent_Old) /= 0) then if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then
DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Present_HydraulicChoke1Plug Choke%DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Choke%Present_HydraulicChoke1Plug
Plug1TimeCounter = 0 Choke%Plug1TimeCounter = 0
!write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug !write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug
endif endif
Plug1TimeCounter= Plug1TimeCounter + 1 Choke%Plug1TimeCounter= Choke%Plug1TimeCounter + 1


HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent
if (Plug1TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800 if (Choke%Plug1TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800
Present_HydraulicChoke1Plug = Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((DeltaPlug1Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 Choke%Present_HydraulicChoke1Plug = Choke%Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((Choke%DeltaPlug1Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0
endif endif
@@ -107,23 +107,23 @@ module choke
IF (CHOOKE(2)%PlugMalf == 1) THEN IF (CHOOKE(2)%PlugMalf == 1) THEN


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


HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent
if (Plug2TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800 if (Choke%Plug2TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800
Present_HydraulicChoke2Plug = Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((DeltaPlug2Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 1800.0 Choke%Present_HydraulicChoke2Plug = Choke%Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((Choke%DeltaPlug2Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 1800.0
endif endif
@@ -136,14 +136,14 @@ module choke
! fully open area is 123/64 in^2 = 0.01334635 ft^2 ! fully open area is 123/64 in^2 = 0.01334635 ft^2
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*HydraulicChoke1WashoutCoef*ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup 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 !write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup 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*HydraulicChoke2WashoutCoef*ChokeAreaFullyOpen/144.0) ! 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* Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! 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 !write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke
@@ -151,8 +151,8 @@ module choke
CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke
! 144: ft^2 to in^2 ! 144: ft^2 to in^2
CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100)) ! for manifold valve CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve
CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(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(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100
@@ -180,4 +180,4 @@ module choke
!************************* IN MUD SYSTEM MODULE************************* !************************* IN MUD SYSTEM MODULE*************************
end subroutine CHOKE_MainBody end subroutine CHOKE_MainBody


end module CHOKE end module ChokeModule

+ 41
- 62
Equipments/ChokeControl/CHOKE_VARIABLES.f90 查看文件

@@ -12,28 +12,35 @@ IMPLICIT NONE
!=========================================================================== !===========================================================================
! CHOKE VARIABLES ! CHOKE VARIABLES
!=========================================================================== !===========================================================================
REAL Ycritical,Cp,Cv,CL,kRatio,nPolytripic,x1,SGliquid,WaterDensity,LiquidDensity,VL,VG1 type::ChokeType
REAL epsilon_step,epsilon_abs,step_size,Ycritical_a,Ycritical_b,Ycritical_c REAL Ycritical,Cp,Cv,CL,kRatio,nPolytripic,x1,SGliquid,WaterDensity,LiquidDensity,VL,VG1
REAL G2,Cdrag,Pwh,MixDens2,Yratio_a,Yratio_b,Yratio_c,Yratio,Yratio_low,Yratio_high REAL epsilon_step,epsilon_abs,step_size,Ycritical_a,Ycritical_b,Ycritical_c
REAL FlowRate,Patm,MassFlux,LiquidPPG,time2,AreaChoke REAL G2,Cdrag,Pwh,MixDens2,Yratio_a,Yratio_b,Yratio_c,Yratio,Yratio_low,Yratio_high
REAL eps_step,eps_abs,Yratiomat(100),Yrario_actual,Yrario REAL FlowRate,Patm,MassFlux,LiquidPPG,time2,AreaChoke
REAL :: DegreeOpen,GRAVITY1=9.81!,PercentClose REAL eps_step,eps_abs,Yratiomat(100),Yrario_actual,Yrario
REAL ChokedMassFlux,ChokedFlowRate,PwhChoked REAL :: DegreeOpen,GRAVITY1=9.81!,PercentClose
REAL TotalStrokes1,TotalStrokes2 REAL ChokedMassFlux,ChokedFlowRate,PwhChoked
!INTEGER WashoutMalf,PlugMalf,failMalf REAL TotalStrokes1,TotalStrokes2
INTEGER GaugeChokePositionMailf,SoundChokePump !INTEGER WashoutMalf,PlugMalf,failMalf
Real Cumulative_AirVolume_Choke INTEGER GaugeChokePositionMailf,SoundChokePump
Real HydraulicChoke1WashoutCoef,HydraulicChoke2WashoutCoef Real Cumulative_AirVolume_Choke

Real HydraulicChoke1WashoutCoef,HydraulicChoke2WashoutCoef
Real Present_HydraulicChoke1Plug, Present_HydraulicChoke2Plug,DeltaPlug1Percent,DeltaPlug2Percent Real Present_HydraulicChoke1Plug, Present_HydraulicChoke2Plug,DeltaPlug1Percent,DeltaPlug2Percent
Integer HydraulicChoke1PluggedPercent_Old,HydraulicChoke2PluggedPercent_Old,Plug1TimeCounter,Plug2TimeCounter,ChokePlugTimeDelay Integer HydraulicChoke1PluggedPercent_Old,HydraulicChoke2PluggedPercent_Old,Plug1TimeCounter,Plug2TimeCounter,ChokePlugTimeDelay
Real ChokeAreaFullyOpen Real ChokeAreaFullyOpen
end type ChokeType
type(ChokeType)::Choke
!=========================================================================== !===========================================================================
! AIR DRIVEN PUMP VARIABLES ! AIR DRIVEN PUMP VARIABLES
!=========================================================================== !===========================================================================
REAL QAIR_PUMP,cc1,cc2,cc3,cc4,cc5 type::AirDrivenPumpType
REAL QAIR_PUMP,cc1,cc2,cc3,cc4,cc5
INTEGER ChokeAirFail
end type AirDrivenPumpType
type(AirDrivenPumpType)::AirDrivenPump

PARAMETER PI=3.141593 PARAMETER PI=3.141593
INTEGER ChokeAirFail
!============================================================================ !============================================================================
! OIL & ENVIRONMENT VARIABLES ! OIL & ENVIRONMENT VARIABLES
!============================================================================ !============================================================================
@@ -46,57 +53,29 @@ REAL:: SG=1.12,WDENS=1000,GRAVITY=9.81,RE_CR=2000,NU=9e-6
! AIR PUMP LINE COMPUTATIONAL VARIABLES ! AIR PUMP LINE COMPUTATIONAL VARIABLES
!=========================================================================== !===========================================================================
!logical ChokeIsClosing,ChokeIsOpening !logical ChokeIsClosing,ChokeIsOpening
REAL ChokeControlLeverOld type::AirPumpLineType
REAL P_AIRP,QITER,DELTAV_AIR,TIME,DeltaT_Choke,TOL_AIR REAL ChokeControlLeverOld
REAL diffp_air,losses_air,pipe_loss1air,minor_loss1air,static_loss1air REAL P_AIRP,QITER,DELTAV_AIR,TIME,DeltaT_Choke,TOL_AIR
integer NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE REAL diffp_air,losses_air,pipe_loss1air,minor_loss1air,static_loss1air
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) integer NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:),MINORS_AIRPUMP(:,:) REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:)
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:),MINORS_AIRPUMP(:,:)
REAL,ALLOCATABLE:: ROUGHNESS_AIRPLINE(:),PIPINGS_AIRPUMP(:,:) REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:)
REAL Acylinder,CourseBase!,PassedCourse REAL,ALLOCATABLE:: ROUGHNESS_AIRPLINE(:),PIPINGS_AIRPUMP(:,:)
REAL alpha_Qair,alpha_timeair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_Pdownstrem,Pdownstrem REAL Acylinder,CourseBase!,PassedCourse

REAL alpha_Qair,alpha_timeair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_Pdownstrem,Pdownstrem

end type AirPumpLineType
type(AirPumpLineType)::AirPumpLine


!================================================================================= !=================================================================================


TYPE, PUBLIC :: CHOKE_TypeVars TYPE, PUBLIC :: CHOKE_TypeVars
INTEGER WashoutMalf,PlugMalf,failMalf

REAL PercentClose,PassedCourse,AreaChoke,AreaChokeFinal

logical ChokeIsClosing,ChokeIsOpening

INTEGER WashoutMalf,PlugMalf,failMalf
REAL PercentClose,PassedCourse,AreaChoke,AreaChokeFinal
logical ChokeIsClosing,ChokeIsOpening

END TYPE CHOKE_TypeVars END TYPE CHOKE_TypeVars


TYPE(CHOKE_TypeVars), DIMENSION(1:2) :: CHOOKE TYPE(CHOKE_TypeVars), DIMENSION(1:2) :: CHOOKE
!TYPE, PUBLIC :: BOP_TypeVars2D
!REAL, ALLOCATABLE:: minlosspa(:,:),minloss(:,:)
!REAL,ALLOCATABLE:: Re_ramline(:,:),fric(:,:),fricloss(:,:)
!
!
!END TYPE BOP_TypeVars2D
!
!TYPE(BOP_TypeVars2D) :: RAMS

! 1 : CHOKE1
! 2 : CHOKE2





END MODULE END MODULE




+ 1
- 1
Equipments/ChokeControl/ChokeControlMain.f90 查看文件

@@ -18,7 +18,7 @@ module ChokeControlMain
! end subroutine ChokeControl_Init ! end subroutine ChokeControl_Init
subroutine ChokeControl_Step subroutine ChokeControl_Step
use CHOKE use ChokeModule
implicit none implicit none
CALL CHOKE_MainBody CALL CHOKE_MainBody
end subroutine ChokeControl_Step end subroutine ChokeControl_Step


+ 42
- 42
Equipments/ChokeControl/ChokeStartup.f90 查看文件

@@ -28,34 +28,34 @@
kRatio=1.4 Choke%kRatio=1.4
Cp=0.24 Choke%Cp=0.24
CL=0.8 Choke%CL=0.8


x1=0.5 Choke%x1=0.5
LiquidPPG=9. Choke%LiquidPPG=9.
LiquidDensity=LiquidPPG*7.48 !lbm/ft**3 Choke%LiquidDensity=Choke%LiquidPPG*7.48 !lbm/ft**3


VL=1.0/LiquidDensity !SpecificVolume of Liquid Choke%VL=1.0/Choke%LiquidDensity !SpecificVolume of Liquid


Cv=Cp/kRatio Choke%Cv=Choke%Cp/Choke%kRatio


nPolytripic=1+(x1*(Cp-Cv)/(x1*Cv+(1-x1)*CL)) Choke%nPolytripic=1+(Choke%x1*(Choke%Cp-Choke%Cv)/(Choke%x1*Choke%Cv+(1-Choke%x1)*Choke%CL))
VG1=1./0.748 !lbm/ft**3 Specific Volume of Air, Upstream Choke%VG1=1./0.748 !lbm/ft**3 Specific Volume of Air, Upstream


Cdrag=0.8 Choke%Cdrag=0.8
Pwh=1400. !psi Choke%Pwh=1400. !psi




Patm=14.7 Choke%Patm=14.7
MixDens2=x1*VG1 !lbm/ft**3 Choke%MixDens2=Choke%x1*Choke%VG1 !lbm/ft**3






epsilon_abs= 1e-5 Choke%epsilon_abs= 1e-5
epsilon_step= 1e-5 Choke%epsilon_step= 1e-5




!ChokeDiameter= 32/64. !in !ChokeDiameter= 32/64. !in
@@ -66,26 +66,26 @@ CHOOKE%PercentClose= 0.0
! CHOOKE(1)%AreaChoke=0.01334635 ! CHOOKE(1)%AreaChoke=0.01334635
!ChokeAreaFullyOpen = 123.d0 / 64.d0 ! fully open area is 123/64 in^2 = 0.01334635 ft^2 !ChokeAreaFullyOpen = 123.d0 / 64.d0 ! fully open area is 123/64 in^2 = 0.01334635 ft^2


DeltaT_Choke=0.1 AirPumpLine%DeltaT_Choke=0.1
!TotalStrokes1=0. !TotalStrokes1=0.
!TotalStrokes2=0. !TotalStrokes2=0.


HydraulicChoke1WashoutCoef= 0.0 Choke%HydraulicChoke1WashoutCoef= 0.0
HydraulicChoke2WashoutCoef= 0.0 Choke%HydraulicChoke2WashoutCoef= 0.0






ChokePlugTimeDelay = int(180./DeltaT_Choke) ! =1800 = 180/0.1 : for 3 min delay Choke%ChokePlugTimeDelay = int(180./AirPumpLine%DeltaT_Choke) ! =1800 = 180/0.1 : for 3 min delay


Present_HydraulicChoke1Plug = REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100. Choke%Present_HydraulicChoke1Plug = REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.
HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent
Plug1TimeCounter= 0 Choke%Plug1TimeCounter= 0
DeltaPlug1Percent = 0.0 Choke%DeltaPlug1Percent = 0.0


Present_HydraulicChoke2Plug = REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100. Choke%Present_HydraulicChoke2Plug = REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.
HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent
Plug2TimeCounter= 0 Choke%Plug2TimeCounter= 0
DeltaPlug2Percent = 0.0 Choke%DeltaPlug2Percent = 0.0






@@ -93,35 +93,35 @@ DeltaPlug2Percent = 0.0


!======================AIRPUMP INPUTS(CONSTANTS)=========================== !======================AIRPUMP INPUTS(CONSTANTS)===========================
CourseBase= 24. !cm AirPumpLine%CourseBase= 24. !cm
CHOOKE%PassedCourse= 0. CHOOKE%PassedCourse= 0.
ChokeControlPanel%ChokePosition=0. ChokeControlPanel%ChokePosition=0.


Acylinder= PI*(8.**2)/4. ! (CM^2), 8=DIAMETER, 24=course , 3785.412: cm^3 to galon AirPumpLine%Acylinder= PI*(8.**2)/4. ! (CM^2), 8=DIAMETER, 24=course , 3785.412: cm^3 to galon




CHOOKE%ChokeIsOpening = .false. CHOOKE%ChokeIsOpening = .false.
CHOOKE%ChokeIsClosing = .false. CHOOKE%ChokeIsClosing = .false.
P_AIRP=0 AirPumpLine%P_AIRP=0


cc1 = 0.1354; cc2 = -2.066; cc3 = -21.09; cc4 = -51.36; cc5 = 5935 ! FOR OUTPUT IN GPM AirDrivenPump%cc1 = 0.1354; AirDrivenPump%cc2 = -2.066; AirDrivenPump%cc3 = -21.09; AirDrivenPump%cc4 = -51.36; AirDrivenPump%cc5 = 5935 ! FOR OUTPUT IN GPM
! cc1 = 4.754e-07; cc2 = -0.0001676; cc3 = -0.03953; cc4 = -2.223; cc5 = 5935 FOR OUTPUT IN IN^3/MIN ! cc1 = 4.754e-07; cc2 = -0.0001676; cc3 = -0.03953; cc4 = -2.223; cc5 = 5935 FOR OUTPUT IN IN^3/MIN




Pdownstrem= 4950 !+0.01*Pchoke (psi) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< AirPumpLine%Pdownstrem= 4950 !+0.01*Pchoke (psi) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Qiter=5. !(gpm) AirPumpLine%QITER=5. !(gpm)


! Q=0.0003585; true ! Q=0.0003585; true
time=0 AirPumpLine%TIME=0
tol_air=0.05 AirPumpLine%TOL_AIR=0.05
AirPumpLine%alpha_Qair=0
alpha_Qair=0 AirPumpLine%alpha_timeair=0
alpha_timeair=0 AirPumpLine%alpha_Pdownstrem=AirPumpLine%Pdownstrem
alpha_Pdownstrem=Pdownstrem AirPumpLine%alpha_diffpair=0
alpha_diffpair=0 AirPumpLine%alpha_lossesair=0
alpha_lossesair=0








+ 1
- 1
Equipments/Drawworks/Drawworks_INPUTS.f90 查看文件

@@ -229,7 +229,7 @@ subroutine Drawworks_INPUTS
!===> Closed BOP Rams , No Motion !===> Closed BOP Rams , No Motion
!if ( PipeRam1_Situation_forTD==1 .or. PipeRam2_Situation_forTD==1 .or. ShearBop_Situation_forTD==1 ) then !if ( PipeRam1_Situation_forTD==1 .or. PipeRam2_Situation_forTD==1 .or. ShearBop_Situation_forTD==1 ) then
if ( ShearBop_Situation_forTD==1 .and. (any(DW_DrillModeCond==(/3,10,19,20,24/))) ) then if ( RamLine%ShearBop_Situation_forTD==1 .and. (any(DW_DrillModeCond==(/3,10,19,20,24/))) ) then
Drawworks%ManualBreak = 100.d0 Drawworks%ManualBreak = 100.d0
Drawworks%N_ref = 0.d0 Drawworks%N_ref = 0.d0
end if end if


+ 9
- 9
Equipments/MudSystem/MudSystem.f90 查看文件

@@ -2203,35 +2203,35 @@ module MudSystem
if (ChokeControlPanel%ChokePanelStrokeResetSwitch == 1) then if (ChokeControlPanel%ChokePanelStrokeResetSwitch == 1) then
IF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 1) THEN IF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 1) THEN
!write(*,*) '1 reset' !write(*,*) '1 reset'
TotalStrokes1 =0. Choke%TotalStrokes1 =0.
elseif (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 2) THEN elseif (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 2) THEN
!write(*,*) '2 reset' !write(*,*) '2 reset'
TotalStrokes2 =0. Choke%TotalStrokes2 =0.
else else
!write(*,*) 'both reset' !write(*,*) 'both reset'
TotalStrokes1 =0. Choke%TotalStrokes1 =0.
TotalStrokes2 =0. Choke%TotalStrokes2 =0.
endif endif
endif endif
!write(*,*) 'b)))' , ChokePanelStrokeResetSwitch !write(*,*) 'b)))' , ChokePanelStrokeResetSwitch
TotalStrokes1= TotalStrokes1+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline Choke%TotalStrokes1= Choke%TotalStrokes1+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline
TotalStrokes2= TotalStrokes2+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline Choke%TotalStrokes2= Choke%TotalStrokes2+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline
IF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 1) THEN IF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 1) THEN
ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP1SPMGauge)) ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP1SPMGauge))
ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(TotalStrokes1)) ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(Choke%TotalStrokes1))
ELSEIF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 2) THEN ELSEIF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 2) THEN
ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP2SPMGauge)) ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP2SPMGauge))
ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(TotalStrokes2)) ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(Choke%TotalStrokes2))
ELSE ELSE
ChokeControlPanel%ChokePanelSPMCounter= real(nint(DataDisplayConsole%MP1SPMGauge+DataDisplayConsole%MP2SPMGauge)) ChokeControlPanel%ChokePanelSPMCounter= real(nint(DataDisplayConsole%MP1SPMGauge+DataDisplayConsole%MP2SPMGauge))
ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(TotalStrokes1+TotalStrokes2)) ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(Choke%TotalStrokes1+Choke%TotalStrokes2))
ENDIF ENDIF
! ChokePanelStrokeResetSwitch = 0 ! ChokePanelStrokeResetSwitch = 0


+ 2
- 2
Equipments/MudSystem/MudSystemStartup.f90 查看文件

@@ -251,8 +251,8 @@ ReturnFlowRate=0.
GraphTotalStrokes=0. GraphTotalStrokes=0.
TotalStrokes1 =0. Choke%TotalStrokes1 =0.
TotalStrokes2 =0. Choke%TotalStrokes2 =0.


+ 5
- 5
FluidFlow/Annulus_and_Openhole_Pressure_Distribution.f90 查看文件

@@ -68,9 +68,9 @@ IF (WellHeadOpen .OR. NoGasPocket == 0) THEN !! (mud circulation is normal we
!!!!!!!!!!!!!!!!!!!!!!!!! initial guess flowrates for opening BOP or choke line !!!!!!!!!!!!!!!!!!!!!!!!! initial guess flowrates for opening BOP or choke line
IF (WellHeadWasOpen == .FALSE. .AND. NoGasPocket > 0 .AND. KickIteration == 1) THEN IF (WellHeadWasOpen == .FALSE. .AND. NoGasPocket > 0 .AND. KickIteration == 1) THEN
IF (ChokeKroneckerDelta == 1) THEN ! flow on choke line IF (ChokeKroneckerDelta == 1) THEN ! flow on choke line
IF (TotalOpenChokeArea < 0.01 * ChokeAreaFullyOpen) THEN IF (TotalOpenChokeArea < 0.01 * Choke%ChokeAreaFullyOpen) THEN
WRITE (*,*) 'density , TotalOpenChokeArea' , DownHole%Density, TotalOpenChokeArea WRITE (*,*) 'density , TotalOpenChokeArea' , DownHole%Density, TotalOpenChokeArea
TotalOpenChokeArea = 0.01 * ChokeAreaFullyOpen TotalOpenChokeArea = 0.01 * Choke%ChokeAreaFullyOpen
END IF END IF
Kchoke = (ChokeDensity / ((2.0 * 89158.0) * (0.26 * 0.61 * TotalOpenChokeArea)**2)) * 4.0 ! *4.d0: seyyed gofte Kchoke = (ChokeDensity / ((2.0 * 89158.0) * (0.26 * 0.61 * TotalOpenChokeArea)**2)) * 4.0 ! *4.d0: seyyed gofte
GasPocketFlowInduced%Array(:) = MIN((0.6 / NoGasPocket * SQRT(PressureGauges(2) / Kchoke)) , (0.05 * GasPocketNewVol%Array(:) * ConvFt3toUSgal / 60 / dt)) GasPocketFlowInduced%Array(:) = MIN((0.6 / NoGasPocket * SQRT(PressureGauges(2) / Kchoke)) , (0.05 * GasPocketNewVol%Array(:) * ConvFt3toUSgal / 60 / dt))
@@ -91,7 +91,7 @@ IF (WellHeadOpen .OR. NoGasPocket == 0) THEN !! (mud circulation is normal we
ELSE ! flow through bell nipple ELSE ! flow through bell nipple
k = NoHorizontalEl + NoStringEl + NoAnnulusEl k = NoHorizontalEl + NoStringEl + NoAnnulusEl
KBOP = FlowEl(AnnulusLastEl)%Density / ((2.0 * 89158.0) * (0.26 * 0.61 * MinimumOpenArea_InBOP)**2) KBOP = FlowEl(AnnulusLastEl)%Density / ((2.0 * 89158.0) * (0.26 * 0.61 * ShearRam%MinimumOpenArea_InBOP)**2)
GasPocketFlowInduced%Array(:) = MIN((0.1 / NoGasPocket * SQRT(PressureGauges(6) / KBOP)) , (0.05 * GasPocketNewVol%Array(:) * ConvFt3toUSgal / 60 / dt)) GasPocketFlowInduced%Array(:) = MIN((0.1 / NoGasPocket * SQRT(PressureGauges(6) / KBOP)) , (0.05 * GasPocketNewVol%Array(:) * ConvFt3toUSgal / 60 / dt))
WRITE (*,*) 'PressureGauges(6), KBOP', PressureGauges(6), KBOP WRITE (*,*) 'PressureGauges(6), KBOP', PressureGauges(6), KBOP
WRITE (*,*) 'Initial guess after opening BOP =', GasPocketFlowInduced%Array(1) WRITE (*,*) 'Initial guess after opening BOP =', GasPocketFlowInduced%Array(1)
@@ -161,9 +161,9 @@ IF (WellHeadOpen .OR. NoGasPocket == 0) THEN !! (mud circulation is normal we
!!!!!!!!!!!!!!!!!!!!!!!!! when flow passes through choke manifold, solution process may be unstable !!!!!!!!!!!!!!!!!!!!!!!!! when flow passes through choke manifold, solution process may be unstable
IF (ChokeKroneckerDelta == 1) THEN ! thus we should stabilize solution IF (ChokeKroneckerDelta == 1) THEN ! thus we should stabilize solution
IF (TotalOpenChokeArea > 0.5 * ChokeAreaFullyOpen) THEN IF (TotalOpenChokeArea > 0.5 * Choke%ChokeAreaFullyOpen) THEN
KickCorrectionUnderRelaxation = 0.6 KickCorrectionUnderRelaxation = 0.6
ELSE IF (TotalOpenChokeArea > 0.1 * ChokeAreaFullyOpen) THEN ELSE IF (TotalOpenChokeArea > 0.1 * Choke%ChokeAreaFullyOpen) THEN
KickCorrectionUnderRelaxation = 0.5 KickCorrectionUnderRelaxation = 0.5
ELSE ! TotalOpenChokeArea < 0.1 * ChokeAreaFullyOpen ELSE ! TotalOpenChokeArea < 0.1 * ChokeAreaFullyOpen
KickCorrectionUnderRelaxation = 0.4 KickCorrectionUnderRelaxation = 0.4


+ 1
- 1
FluidFlow/Flow_Startup.f90 查看文件

@@ -53,7 +53,7 @@ SUBROUTINE FlowStartup
KickWasExitingThroughChoke = .FALSE. KickWasExitingThroughChoke = .FALSE.
FloatValveOpen = .TRUE. FloatValveOpen = .TRUE.
ChokeAreaFullyOpen = 123.0 / 64.0 ! fully open area is 123/64 in^2 = 0.01334635 ft^2 Choke%ChokeAreaFullyOpen = 123.0 / 64.0 ! fully open area is 123/64 in^2 = 0.01334635 ft^2
ChokeBypassArea = PI / 4.0 * BopStackSpecification%ChokeLineId**2 ChokeBypassArea = PI / 4.0 * BopStackSpecification%ChokeLineId**2
BHPSafetyMargin = 150.0 BHPSafetyMargin = 150.0
AChBHPTol = 15.0 AChBHPTol = 15.0


+ 1
- 1
FluidFlow/Horizontal_and_String_Pressure_Distribution.f90 查看文件

@@ -308,7 +308,7 @@ SUBROUTINE PressureHorizAndStringDistribution
!!!!!!!!!!!!!!!!!!!!! Pressure distribution in string and horizontal pump to string line !!!!!!!!!!!!!!!!!!!!! Pressure distribution in string and horizontal pump to string line
IF (ShearBop_Situation_forTD == 1) THEN IF (RamLine%ShearBop_Situation_forTD == 1) THEN
FlowEl(1 : NoHorizontalEl)%EndPress = 0.0 FlowEl(1 : NoHorizontalEl)%EndPress = 0.0
FlowEl(1 : NoHorizontalEl)%StartPress = 0.0 FlowEl(1 : NoHorizontalEl)%StartPress = 0.0
FlowEl(1 : NoHorizontalEl)%FricPressLoss = 0.0 FlowEl(1 : NoHorizontalEl)%FricPressLoss = 0.0


+ 6
- 6
FluidFlow/Well_Pressure_Data_Transfer.f90 查看文件

@@ -341,10 +341,10 @@ SUBROUTINE WellPressureDataTransfer
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
OpenArea32 = ((ChokeManifold%LeftManualChoke * (1.0 - ManChoke1Plug * REAL(ChokeProblems%ManualChoke1PluggedPercent)) / 100.0) + 0.5 * ManChoke1Washout) * ChokeAreaFullyOpen OpenArea32 = ((ChokeManifold%LeftManualChoke * (1.0 - ManChoke1Plug * REAL(ChokeProblems%ManualChoke1PluggedPercent)) / 100.0) + 0.5 * ManChoke1Washout) * Choke%ChokeAreaFullyOpen
OpenArea33 = CHOOKE(1)%AreaChokeFinal * Convfttoinch**2 ! (1.d0 - CHOOKE(1)%PercentClose) * ChokeAreaFullyOpen OpenArea33 = CHOOKE(1)%AreaChokeFinal * Convfttoinch**2 ! (1.d0 - CHOOKE(1)%PercentClose) * ChokeAreaFullyOpen
OpenArea34 = CHOOKE(2)%AreaChokeFinal * Convfttoinch**2 ! (1.d0 - CHOOKE(2)%PercentClose) * ChokeAreaFullyOpen OpenArea34 = CHOOKE(2)%AreaChokeFinal * Convfttoinch**2 ! (1.d0 - CHOOKE(2)%PercentClose) * ChokeAreaFullyOpen
OpenArea35 = ((ChokeManifold%RightManualChoke * (1.0 - ManChoke2Plug * REAL(ChokeProblems%ManualChoke2PluggedPercent)) / 100.0) + 0.5 * ManChoke2Washout) * ChokeAreaFullyOpen OpenArea35 = ((ChokeManifold%RightManualChoke * (1.0 - ManChoke2Plug * REAL(ChokeProblems%ManualChoke2PluggedPercent)) / 100.0) + 0.5 * ManChoke2Washout) * Choke%ChokeAreaFullyOpen
!write(*,*) 'OpenArea32=' , OpenArea32, active32, ManChoke1Plug, ManualChoke1PluggedPercent, ManChoke1Washout !write(*,*) 'OpenArea32=' , OpenArea32, active32, ManChoke1Plug, ManualChoke1PluggedPercent, ManChoke1Washout
!write(*,*) 'OpenArea33=' , OpenArea33, active33 !write(*,*) 'OpenArea33=' , OpenArea33, active33
!write(*,*) 'OpenArea34=' , OpenArea34, active34, !HydraulicChoke2PluggedPercent !write(*,*) 'OpenArea34=' , OpenArea34, active34, !HydraulicChoke2PluggedPercent
@@ -352,13 +352,13 @@ SUBROUTINE WellPressureDataTransfer
InstantaneousTotalOpenChokeArea = OpenArea32 * active32 + OpenArea33 * active33 + OpenArea34 * active34 + OpenArea35 * active35 + ChokeBypassArea * active29 InstantaneousTotalOpenChokeArea = OpenArea32 * active32 + OpenArea33 * active33 + OpenArea34 * active34 + OpenArea35 * active35 + ChokeBypassArea * active29
OldTotalOpenChokeArea = TotalOpenChokeArea OldTotalOpenChokeArea = TotalOpenChokeArea
!WRITE (*,*) 'Instantaneous / Old TotalOpenChokeArea', InstantaneousTotalOpenChokeArea, OldTotalOpenChokeArea !WRITE (*,*) 'Instantaneous / Old TotalOpenChokeArea', InstantaneousTotalOpenChokeArea, OldTotalOpenChokeArea
IF (OldTotalOpenChokeArea <= 0.01 * ChokeAreaFullyOpen) OldTotalOpenChokeArea = 0.01 * ChokeAreaFullyOpen IF (OldTotalOpenChokeArea <= 0.01 * Choke%ChokeAreaFullyOpen) OldTotalOpenChokeArea = 0.01 * Choke%ChokeAreaFullyOpen
IF (InstantaneousTotalOpenChokeArea <= 0.01 * ChokeAreaFullyOpen) THEN IF (InstantaneousTotalOpenChokeArea <= 0.01 * Choke%ChokeAreaFullyOpen) THEN
WellToChokeManifoldOpen = .FALSE. WellToChokeManifoldOpen = .FALSE.
OldTotalOpenChokeArea = 0.01 * ChokeAreaFullyOpen OldTotalOpenChokeArea = 0.01 * Choke%ChokeAreaFullyOpen
!WRITE (*,*) ' Choke Controler Here 2' !WRITE (*,*) ' Choke Controler Here 2'
ELSE IF (InstantaneousTotalOpenChokeArea > 0.5 * ChokeAreaFullyOpen .OR. WelltoPitsOpen) THEN ELSE IF (InstantaneousTotalOpenChokeArea > 0.5 * Choke%ChokeAreaFullyOpen .OR. WelltoPitsOpen) THEN
! mud flows through well to bell nipple, or choke is rather open ! mud flows through well to bell nipple, or choke is rather open
TotalOpenChokeArea = InstantaneousTotalOpenChokeArea TotalOpenChokeArea = InstantaneousTotalOpenChokeArea
!WRITE (*,*) ' Choke Controler Here 1' !WRITE (*,*) ' Choke Controler Here 1'


+ 4
- 4
TorqueDrag/TD_DrillingSubs/TD_BOPDiamCalculation.f90 查看文件

@@ -31,10 +31,10 @@ subroutine TD_BOPDiamCalculation
TD_BOPHeight(4) = BopStackSpecification%LowerRamHeight TD_BOPHeight(4) = BopStackSpecification%LowerRamHeight
TD_BOPRamDiam(1) = IDAnnularfinal TD_BOPRamDiam(1) = ShearRam%IDAnnularFinal
TD_BOPRamDiam(2) = IDPipeRam1final TD_BOPRamDiam(2) = ShearRam%IDPipeRam1Final
TD_BOPRamDiam(3) = IDshearBopfinal TD_BOPRamDiam(3) = ShearRam%IDshearBopFinal
TD_BOPRamDiam(4) = IDPipeRam2final TD_BOPRamDiam(4) = ShearRam%IDPipeRam2Final


+ 10
- 10
TorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 查看文件

@@ -32,30 +32,30 @@ subroutine TD_HookLoadCalculation
!print* , 'TD_HookLoad1=' , TD_HookLoad !print* , 'TD_HookLoad1=' , TD_HookLoad
if ( Drawworks%motion==1 ) then if ( Drawworks%motion==1 ) then
if ( PipeRam1_Situation_forTD==1 ) then !Upper Ram if ( PipeRam1%Situation_forTD==1 ) then !Upper Ram
TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag
end if end if
if ( PipeRam2_Situation_forTD==1 ) then !Lower Ram if ( PipeRam2%Situation_forTD==1 ) then !Lower Ram
TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag
end if end if
if ( ShearBop_Situation_forTD==1 ) then !Blind Ram if ( RamLine%ShearBop_Situation_forTD==1 ) then !Blind Ram
TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag !???????????????????? TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag !????????????????????
end if end if
if ( Annular_Situation_forTD==1 ) then !Annular Preventer if ( Annular%Annular_Situation_forTD==1 ) then !Annular Preventer
TD_HookLoad = TD_HookLoad+(p_annular*BopStackSpecification%AnnularStringDrag) TD_HookLoad = TD_HookLoad+(AnnularComputational%p_annular*BopStackSpecification%AnnularStringDrag)
end if end if
else if ( Drawworks%motion==-1 ) then else if ( Drawworks%motion==-1 ) then
if ( PipeRam1_Situation_forTD==1 ) then !Upper Ram if ( PipeRam1%Situation_forTD==1 ) then !Upper Ram
TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag
end if end if
if ( PipeRam2_Situation_forTD==1 ) then !Lower Ram if ( PipeRam2%Situation_forTD==1 ) then !Lower Ram
TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag
end if end if
if ( ShearBop_Situation_forTD==1 ) then !Blind Ram if ( RamLine%ShearBop_Situation_forTD==1 ) then !Blind Ram
TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag !???????????????????? TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag !????????????????????
end if end if
if ( Annular_Situation_forTD==1 ) then !Annular Preventer if ( Annular%Annular_Situation_forTD==1 ) then !Annular Preventer
TD_HookLoad = TD_HookLoad-(p_annular*BopStackSpecification%AnnularStringDrag) TD_HookLoad = TD_HookLoad-(AnnularComputational%p_annular*BopStackSpecification%AnnularStringDrag)
end if end if
end if end if


||||||
x
 
000:0
Loading…
取消
儲存