@@ -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 == Executed_StatusType) AnnularFailureMalf = 1 | |||||
if(status == Clear_StatusType) Annular%AnnularFailureMalf = 0 | |||||
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 == Executed_StatusType) AnnularLeakMalf = 1 | |||||
if(status == Clear_StatusType) Annular%AnnularLeakMalf = 0 | |||||
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 == Executed_StatusType) UpperRamsFailureMalf = 1 | |||||
if(status == Clear_StatusType) PipeRam1%UpperRamsFailureMalf = 0 | |||||
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 == Executed_StatusType) UpperRamsLeakMalf = 1 | |||||
if(status == Clear_StatusType) PipeRam1%UpperRamsLeakMalf = 0 | |||||
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 == Executed_StatusType) MiddleRamsFailureMalf = 1 | |||||
if(status == Clear_StatusType) ShearRam%MiddleRamsFailureMalf = 0 | |||||
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 == Executed_StatusType) MiddleRamsLeakMalf = 1 | |||||
if(status == Clear_StatusType) ShearRam%MiddleRamsLeakMalf = 0 | |||||
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 == Executed_StatusType) LowerRamsFailureMalf = 1 | |||||
if(status == Clear_StatusType) PipeRam2%LowerRamsFailureMalf = 0 | |||||
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 == Executed_StatusType) LowerRamsLeakMalf = 1 | |||||
if(status == Clear_StatusType) PipeRam2%LowerRamsLeakMalf = 0 | |||||
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 == Executed_StatusType) AccPupmsFailMalf = 1 | |||||
if(status == Clear_StatusType) BopStackAcc%AccPupmsFailMalf = 0 | |||||
if(status == Executed_StatusType) BopStackAcc%AccPupmsFailMalf = 1 | |||||
endsubroutine | endsubroutine | ||||
subroutine ChangeAccumulatorPumpLeak(status) | subroutine ChangeAccumulatorPumpLeak(status) | ||||
@@ -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 == Executed_StatusType) ChokeAirFail = 1 | |||||
if(status == Clear_StatusType) AirDrivenPump%ChokeAirFail = 0 | |||||
if(status == Executed_StatusType) AirDrivenPump%ChokeAirFail = 1 | |||||
endsubroutine | endsubroutine | ||||
@@ -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 == Executed_StatusType) AccumulatorPressureGaugeMalf = 1 | |||||
if(status == Clear_StatusType) BopStackAcc%AccumulatorPressureGaugeMalf = 0 | |||||
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 == Executed_StatusType) ManifoldPressureGaugeMalf = 1 | |||||
if(status == Clear_StatusType) BopStackAcc%ManifoldPressureGaugeMalf = 0 | |||||
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 == Executed_StatusType) AnnularPressureGaugeMalf = 1 | |||||
if(status == Clear_StatusType) Annular%AnnularPressureGaugeMalf = 0 | |||||
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 == Executed_StatusType) AirSupplyPressureGaugeMalf = 1 | |||||
if(status == Clear_StatusType) BopStackAcc%AirSupplyPressureGaugeMalf = 0 | |||||
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 == Executed_StatusType) GaugeChokePositionMailf = 1 | |||||
if(status == Clear_StatusType) Choke%GaugeChokePositionMailf = 0 | |||||
if(status == Executed_StatusType) Choke%GaugeChokePositionMailf = 1 | |||||
endsubroutine | endsubroutine | ||||
subroutine ChangeCasingPressure2(status) | subroutine ChangeCasingPressure2(status) | ||||
@@ -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 == Executed_StatusType) RigAirMalf = 1 | |||||
if(status == Clear_StatusType) BopStackAcc%RigAirMalf = 0 | |||||
if(status == Executed_StatusType) BopStackAcc%RigAirMalf = 1 | |||||
endsubroutine | endsubroutine | ||||
subroutine ChangeGen1(status) | subroutine ChangeGen1(status) | ||||
@@ -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:......... | |||||
@@ -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 | |||||
if (finished_Annular==1) then | |||||
AnnularLeverOld=-1.0 | |||||
Annular%tolAnnular=0.0018 | |||||
if (Annular%finished_Annular==1) then | |||||
Annular%AnnularLeverOld=-1.0 | |||||
else | else | ||||
AnnularLeverOld=BopControlPanel%AnnularValve | |||||
Annular%AnnularLeverOld=BopControlPanel%AnnularValve | |||||
endif | endif | ||||
finished_Annular=0 | |||||
AnnularIsClosing = .true. | |||||
AnnularIsOpening = .false. | |||||
Annular%finished_Annular=0 | |||||
Annular%AnnularIsClosing = .true. | |||||
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 | |||||
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/(2.*231) !=17.98 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnularBase=5 | |||||
Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231.)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.) ! 231 in^3 = 1 gal | |||||
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 & | |||||
.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 | |||||
if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure & | |||||
.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 | |||||
AnnularLeverOld=1.0 | |||||
if (Annular%finished_Annular==1) then | |||||
Annular%AnnularLeverOld=1.0 | |||||
else | else | ||||
AnnularLeverOld=BopControlPanel%AnnularValve | |||||
Annular%AnnularLeverOld=BopControlPanel%AnnularValve | |||||
endif | endif | ||||
finished_Annular=0 | |||||
AnnularIsOpening = .true. | |||||
AnnularIsClosing = .false. | |||||
Annular%finished_Annular=0 | |||||
Annular%AnnularIsOpening = .true. | |||||
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.) | |||||
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-ODDrillpipe_inAnnular)/(2.*231) !=14.16 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnular=5 | |||||
Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((Annular%IDAnnularBase-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/2.) | |||||
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 | |||||
CALL ANNULAR_SUB | |||||
if (Annular%AnnularIsOpening .or. Annular%AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | |||||
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 | |||||
RamsFirstSet= 0 | |||||
Annular%FirstSet= 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 | |||||
AnnularLeverOld = BopControlPanel%AnnularValve | |||||
AnnularComputational%p_annular=AnnularComputational%pa_annular | |||||
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. | |||||
AnnularIsOpening = .false. | |||||
Annular%AnnularIsClosing = .true. | |||||
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 & | |||||
.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 | |||||
if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure & | |||||
.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 | |||||
AnnularLeverOld = BopControlPanel%AnnularValve | |||||
AnnularComputational%p_annular=AnnularComputational%pa_annular | |||||
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.) | |||||
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-IDAnnular)/(2*231.) | |||||
Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.) | |||||
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. | |||||
AnnularIsClosing = .false. | |||||
Annular%AnnularIsOpening = .true. | |||||
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 |
@@ -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 | |||||
call ANNULAR | |||||
if (AnnularIsOpening .or. AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | |||||
if(finished_Annular==0) then | |||||
call ANNULAR_SUB !only body of loop2 | |||||
if (Annular%finished_Annular/=0) then | |||||
call ANNULAR_SUB1 | |||||
if (Annular%AnnularIsOpening .or. Annular%AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | |||||
if(Annular%finished_Annular==0) then | |||||
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 | ||||
@@ -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 | |||||
ShearIsNotAllowed= 1 | |||||
if (BopStackAcc%pram_reg < 2300.) then | |||||
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 | |||||
ODDrillpipe_inPipeRam1= TD_UpperRamDiam * 12.0 | |||||
ODDrillpipe_inShearRam= TD_BlindRamDiam * 12.0 | |||||
ODDrillpipe_inPipeRam2= TD_LowerRamDiam * 12.0 | |||||
Annular%ODDrillpipe_inAnnular= TD_AnnularPreventerDiam * 12.0 ! ft to inch | |||||
PipeRam1%ODDrillpipe_in= TD_UpperRamDiam * 12.0 | |||||
ShearRam%ODDrillpipe_inShearRam= TD_BlindRamDiam * 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) | |||||
OpenArea_PipeRam1= PI*(IDPipeRam1Final**2-ODDrillpipe_inPipeRam1**2)/4.0d0 !D(in), AREA(in^2) | |||||
OpenArea_PipeRam2= PI*(IDPipeRam2Final**2-ODDrillpipe_inPipeRam2**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_shearBop= PI*(ShearRam%IDshearBopFinal**2-ShearRam%ODDrillpipe_inShearRam**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) | |||||
ShearRam%OpenArea_PipeRam2= PI*(ShearRam%IDPipeRam2Final**2-PipeRam2%ODDrillpipe_in**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. | |||||
if (ODDrillpipe_inAnnular>0.) then | |||||
if (ODDrillpipe_inAnnular>0. .and. ODDrillpipe_inAnnular<=1.99) then | |||||
acoef=-0.2673 | |||||
bcoef=994.3 | |||||
const=77 | |||||
elseif (ODDrillpipe_inAnnular>1.99 .and. ODDrillpipe_inAnnular<=2.375) then | |||||
acoef=-0.2539 | |||||
bcoef=994.3 | |||||
const=73.15 | |||||
elseif (ODDrillpipe_inAnnular>2.375 .and. ODDrillpipe_inAnnular<=2.875) then | |||||
acoef=-0.2005 | |||||
bcoef=745.9 | |||||
const=57.75 | |||||
elseif (ODDrillpipe_inAnnular>2.875 .and. ODDrillpipe_inAnnular<=3.5) then | |||||
acoef=-0.1871 | |||||
bcoef=696.1 | |||||
const=53.9 | |||||
elseif (ODDrillpipe_inAnnular>3.5 .and. ODDrillpipe_inAnnular<=5) then | |||||
acoef=-0.1733 | |||||
bcoef=647 | |||||
const=50 | |||||
elseif (ODDrillpipe_inAnnular>5 .and. ODDrillpipe_inAnnular<=10) then | |||||
acoef=-0.1604 | |||||
bcoef=596.7 | |||||
const=46.2 | |||||
AnnularComputational%WellBorePressure=5000. | |||||
if (Annular%ODDrillpipe_inAnnular>0.) then | |||||
if (Annular%ODDrillpipe_inAnnular>0. .and. Annular%ODDrillpipe_inAnnular<=1.99) then | |||||
AnnularComputational%acoef=-0.2673 | |||||
AnnularComputational%Bcoef=994.3 | |||||
AnnularComputational%const=77 | |||||
elseif (Annular%ODDrillpipe_inAnnular>1.99 .and. Annular%ODDrillpipe_inAnnular<=2.375) then | |||||
AnnularComputational%acoef=-0.2539 | |||||
AnnularComputational%Bcoef=994.3 | |||||
AnnularComputational%const=73.15 | |||||
elseif (Annular%ODDrillpipe_inAnnular>2.375 .and. Annular%ODDrillpipe_inAnnular<=2.875) then | |||||
AnnularComputational%acoef=-0.2005 | |||||
AnnularComputational%Bcoef=745.9 | |||||
AnnularComputational%const=57.75 | |||||
elseif (Annular%ODDrillpipe_inAnnular>2.875 .and. Annular%ODDrillpipe_inAnnular<=3.5) then | |||||
AnnularComputational%acoef=-0.1871 | |||||
AnnularComputational%Bcoef=696.1 | |||||
AnnularComputational%const=53.9 | |||||
elseif (Annular%ODDrillpipe_inAnnular>3.5 .and. Annular%ODDrillpipe_inAnnular<=5) then | |||||
AnnularComputational%acoef=-0.1733 | |||||
AnnularComputational%Bcoef=647 | |||||
AnnularComputational%const=50 | |||||
elseif (Annular%ODDrillpipe_inAnnular>5 .and. Annular%ODDrillpipe_inAnnular<=10) then | |||||
AnnularComputational%acoef=-0.1604 | |||||
AnnularComputational%Bcoef=596.7 | |||||
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 | |||||
if (Annular_closed==1) then | |||||
if (FirstSet==1) then ! code start | |||||
Pannular_reg= Pannular_regset | |||||
Annular%Pannular_regset=min(BopControlPanel%AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously | |||||
if (Annular%Annular_closed==1) then | |||||
if (Annular%FirstSet==1) then ! code start | |||||
Annular%Pannular_reg= Annular%Pannular_regset | |||||
endif | endif | ||||
if (FirstSet==0) then ! durig run, but annular is not closing or opening | |||||
Pannular_reg= min(p_acc,Pannular_regset) | |||||
if (Annular%FirstSet==0) then ! durig run, but annular is not closing or opening | |||||
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 | |||||
AnnPressureRise= .true. | |||||
elseif ( Annular_Situation_forTD == 0 ) then | |||||
AnnPressureRise= .false. | |||||
if ( Annular%Annular_Situation_forTD == 1 .and. TD_AnnularFillingFinal==0.0 ) then ! Annular_Situation_forTD= 1 ! closed - for TD code | |||||
AnnularComputational%AnnPressureRise= .true. | |||||
elseif ( Annular%Annular_Situation_forTD == 0 ) then | |||||
AnnularComputational%AnnPressureRise= .false. | |||||
endif | endif | ||||
if (AnnPressureRise == .true.) then | |||||
Pannular_reg= Pannular_reg + 200. * TD_AnnularFillingFinal ! 200 psi pressure rise when 100% of AnnPreventer is filled by tool joint | |||||
if (AnnularComputational%AnnPressureRise == .true.) then | |||||
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 Pannular_regDelay%Remove(Pannular_regDelay%Length()) | |||||
BopControlPanel%AnnularPressureGauge= Pannular_regDelay%Last() | |||||
CALL AnnularComputational%Pannular_regDelay%AddToFirst( (1 - Annular%AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) ) | |||||
CALL AnnularComputational%Pannular_regDelay%Remove(AnnularComputational%Pannular_regDelay%Length()) | |||||
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 Pannular_regDelay%Remove(Pannular_regDelay%Length()) | |||||
BopControlPanel%AnnularPressureGauge= Pannular_regDelay%Last() | |||||
CALL AnnularComputational%Pannular_regDelay%AddToFirst( (1 - Annular%AnnularPressureGaugeMalf) * Annular%Pannular_reg) | |||||
CALL AnnularComputational%Pannular_regDelay%Remove(AnnularComputational%Pannular_regDelay%Length()) | |||||
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 | |||||
airp_switch=1 | |||||
if (RamLine%P_ACC<Pumps%AIR_ON .and. RamLine%AIRP_SWITCH==0) then | |||||
RamLine%AIRP_SWITCH=1 | |||||
endif | endif | ||||
if (p_acc>AIR_PUMPOFF .and. airp_switch==1) then | |||||
airp_switch=0 | |||||
call SetSoundKoomeyAirPump(airp_switch) | |||||
if (RamLine%P_ACC>Pumps%AIR_OFF .and. RamLine%AIRP_SWITCH==1) then | |||||
RamLine%AIRP_SWITCH=0 | |||||
call SetSoundKoomeyAirPump(RamLine%AIRP_SWITCH) | |||||
endif | endif | ||||
if (p_acc<ELECTRIC_PUMPON .and. elecp_switch==0) then | |||||
elecp_switch=1 | |||||
if (RamLine%P_ACC<Pumps%ELECTRIC_ON .and. RamLine%ELECP_SWITCH==0) then | |||||
RamLine%ELECP_SWITCH=1 | |||||
endif | endif | ||||
if (p_acc>ELECTRIC_PUMPOFF .and. elecp_switch==1) then | |||||
elecp_switch=0 | |||||
if (RamLine%P_ACC>Pumps%ELECTRIC_OFF .and. RamLine%ELECP_SWITCH==1) then | |||||
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 (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 (RamLine%AIRP_SWITCH==1 .or. RamLine%ELECP_SWITCH==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 | |||||
p_acc=acc_ChargedPressure | |||||
if (AnnularLeakMalf== 0) then | |||||
if (RamLine%P_ACC>BopStackAcc%acc_ChargedPressure) then | |||||
RamLine%P_ACC=BopStackAcc%acc_ChargedPressure | |||||
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 | |||||
finished_ChokeLine=1 | |||||
KillLine%finished=1 | |||||
ChokeLine%finished=1 | |||||
if (AnnularLeakMalf== 0 .and. UpperRamsLeakMalf== 0 .and. LowerRamsLeakMalf== 0 .and. MiddleRamsLeakMalf== 0) then | |||||
elecp_switch=0 | |||||
airp_switch=0 | |||||
if (Annular%AnnularLeakMalf== 0 .and. PipeRam1%UpperRamsLeakMalf== 0 .and. PipeRam2%LowerRamsLeakMalf== 0 .and. ShearRam%MiddleRamsLeakMalf== 0) then | |||||
RamLine%ELECP_SWITCH=0 | |||||
RamLine%AIRP_SWITCH=0 | |||||
endif | endif | ||||
endif | endif | ||||
endif | endif | ||||
endif | endif | ||||
!======================================================= | !======================================================= | ||||
if (elecp_switch==1 .and. AccPupmsFailMalf==0) then !on position | |||||
deltav_elecp=QELECTRIC_PUMP*DeltaT_BOP/60. !QELECTRIC_PUMP(gpm), deltav_elecp(gal), DeltaT_BOP(0.1 sec) | |||||
SoundKoomeyElectricPump= .True. | |||||
if (RamLine%ELECP_SWITCH==1 .and. BopStackAcc%AccPupmsFailMalf==0) then !on position | |||||
Pumps%DELTAV_ELECP=Pumps%QELECTRIC*RamLine%DeltaT_BOP/60. !QELECTRIC_PUMP(gpm), deltav_elecp(gal), DeltaT_BOP(0.1 sec) | |||||
Pumps%SoundKoomeyElectric= .True. | |||||
else | else | ||||
deltav_elecp=0 | |||||
SoundKoomeyElectricPump= .false. | |||||
Pumps%DELTAV_ELECP=0 | |||||
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 | |||||
if (ABS(PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 300. psi | |||||
pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. | |||||
BopStackAcc%PressureDifference= RamLine%P_ACC- MAXVAL(RAM%loss_before) - BopStackAcc%pram_reg | |||||
if (ABS(BopStackAcc%PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 300. psi | |||||
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 | |||||
pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. in startup | |||||
if (ABS(BopStackAcc%PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 200. ! psi in starup | |||||
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%UpperRamsStatus = IDPipeRam1 | |||||
BopControlPanel%LowerRamsStatus = IDPipeRam2 | |||||
BopControlPanel%AnnularStatus = IDAnnular | |||||
BopControlPanel%AccumulatorPressureGauge = (1 - AccumulatorPressureGaugeMalf) * p_acc | |||||
BopControlPanel%ManifoldPressureGauge= (1 - ManifoldPressureGaugeMalf) * pram_reg | |||||
BopControlPanel%MiddleRamsStatus = ShearRam%IDshearBop | |||||
BopControlPanel%UpperRamsStatus = PipeRam1%ID | |||||
BopControlPanel%LowerRamsStatus = PipeRam2%ID | |||||
BopControlPanel%AnnularStatus = Annular%IDAnnular | |||||
BopControlPanel%AccumulatorPressureGauge = (1 - BopStackAcc%AccumulatorPressureGaugeMalf) * RamLine%P_ACC | |||||
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, & | ||||
@@ -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 | |||||
ShearBop_Situation_forTD= 0 ! open - for TD code | |||||
PipeRam1_Situation_forTD= 0 ! open - for TD code | |||||
PipeRam2_Situation_forTD= 0 ! open - for TD code | |||||
Annular%Annular_Situation_forTD= 0 ! open - for TD code | |||||
RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code | |||||
PipeRam1%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) | |||||
nobottles=Accumulator%NumberOfBottels | |||||
BopStackAcc%BOTTLE_CAPACITY=10 !(GALON) | |||||
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) | |||||
acc_ChargedPressure=3000 !charged(PSI) | |||||
acc_MinPressure=Accumulator%AccumulatorMinimumOperatingPressure !1200 !discharged(PSI) | |||||
BopStackAcc%PRAMS_REGSET=1500 !RamsReglatorSet !=1500 DEFAULT regulator set pressure (PSI) | |||||
BopStackAcc%acc_ChargedPressure=3000 !charged(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 | |||||
tolzeroAnnular=tolAnnular | |||||
Annular%tolAnnular=0.0018 !=(2900-2895)/2900 | |||||
Annular%tolzeroAnnular=Annular%tolAnnular | |||||
!======================OTHER INPUTS(CONSTANTS)=========================== | !======================OTHER INPUTS(CONSTANTS)=========================== | ||||
pa=300 !(PSI) | |||||
p_shear=1200 !(PSI) | |||||
ShearRam%PA=300 !(PSI) | |||||
ShearRam%P_SHEAR=1200 !(PSI) | |||||
!p_shear=2423.1 !(PSI) | !p_shear=2423.1 !(PSI) | ||||
pb=p_shear-pa | |||||
pa_annular=100 !(psi) | |||||
ShearRam%PB=ShearRam%P_SHEAR-ShearRam%PA | |||||
AnnularComputational%pa_annular=100 !(psi) | |||||
IDAnnularBase=13.625 !(inch) | |||||
IDAnnular=IDAnnularBase | |||||
ODDrillpipe_inAnnularBase=5. ! so 18 gal is for complete closing of annular | |||||
ODDrillpipe_inAnnular=5. ! initial | |||||
AnnularMovingPressure=360. !(psi) | |||||
IDAnnularFinal= IDAnnular | |||||
Annular%IDAnnularBase=13.625 !(inch) | |||||
Annular%IDAnnular=Annular%IDAnnularBase | |||||
Annular%ODDrillpipe_inAnnularBase=5. ! so 18 gal is for complete closing of annular | |||||
Annular%ODDrillpipe_inAnnular=5. ! initial | |||||
AnnularComputational%AnnularMovingPressure=360. !(psi) | |||||
ShearRam%IDAnnularFinal= Annular%IDAnnular | |||||
IDshearBopBase=13.625 !(inch) | |||||
IDshearBop=IDshearBopBase | |||||
ODDrillpipe_inShearRamBase=5 !initial | |||||
ODDrillpipe_inShearRam=5 !initial | |||||
IDshearBopFinal= IDshearBop | |||||
ShearRam%IDshearBopBase=13.625 !(inch) | |||||
ShearRam%IDshearBop=ShearRam%IDshearBopBase | |||||
ShearRam%ODDrillpipe_inShearRamBase=5 !initial | |||||
ShearRam%ODDrillpipe_inShearRam=5 !initial | |||||
ShearRam%IDshearBopFinal= ShearRam%IDshearBop | |||||
IDPipeRamBase=13.625 !(inch) | |||||
IDPipeRam1=IDPipeRamBase | |||||
ODDrillpipe_inPipeRam1Base=5 !initial | |||||
ODDrillpipe_inPipeRam1=5 !initial | |||||
IDPipeRam1Final= IDPipeRam1 | |||||
PipeRam1%IDBase=13.625 !(inch) | |||||
PipeRam1%ID=PipeRam1%IDBase | |||||
PipeRam1%ODDrillpipe_inBase=5 !initial | |||||
PipeRam1%ODDrillpipe_in=5 !initial | |||||
ShearRam%IDPipeRam1Final= PipeRam1%ID | |||||
IDPipeRam2=IDPipeRamBase !(inch) | |||||
ODDrillpipe_inPipeRam2Base=5 !initial | |||||
ODDrillpipe_inPipeRam2=5 !initial | |||||
IDPipeRam2Final= IDPipeRam2 | |||||
PipeRam2%ID=PipeRam1%IDBase !(inch) | |||||
PipeRam2%ODDrillpipe_inBase=5 !initial | |||||
PipeRam2%ODDrillpipe_in=5 !initial | |||||
ShearRam%IDPipeRam2Final= PipeRam2%ID | |||||
IDChokeLineBase=8.6 !(inch) | |||||
IDChokeLine=IDChokeLineBase | |||||
ODDrillpipe_inChokeLineBase=5 | |||||
ODDrillpipe_inChokeLine=5 | |||||
ChokeLine%IDBase=8.6 !(inch) | |||||
ChokeLine%ID=ChokeLine%IDBase | |||||
ChokeLine%ODDrillpipe_inBase=5 | |||||
ChokeLine%ODDrillpipe_in=5 | |||||
IDKillLineBase=8.6 !(inch) | |||||
IDKillLine=IDKillLineBase | |||||
ODDrillpipe_inKillLineBase=5 | |||||
ODDrillpipe_inKillLine=5 | |||||
KillLine%IDBase=8.6 !(inch) | |||||
KillLine%ID=KillLine%IDBase | |||||
KillLine%ODDrillpipe_inBase=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 | |||||
H_REGRAM=0 !(m)<<<<<<<<<<<<<<<<<<<<<<<< | |||||
H_ShearRamBop=(BopStackSpecification%GroundLevel-BopStackSpecification%BlindRamHeight)*0.3048 ! foot to meter | |||||
H_PipeRam1Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%UpperRamHeight)*0.3048 ! foot to meter | |||||
H_PipeRam2Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%LowerRamHeight)*0.3048 ! foot to meter | |||||
H_AnnularBop=(BopStackSpecification%GroundLevel-BopStackSpecification%AnnularPreventerHeight)*0.3048 ! foot to meter | |||||
H_ChokeLineBop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter | |||||
H_KillLineBop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter | |||||
ShearRam%RAM_COURSE=320.2 !milimeter | |||||
ShearRam%H_REGRAM=0 !(m)<<<<<<<<<<<<<<<<<<<<<<<< | |||||
ShearRam%H_ShearRamBop=(BopStackSpecification%GroundLevel-BopStackSpecification%BlindRamHeight)*0.3048 ! foot to meter | |||||
PipeRam1%H=(BopStackSpecification%GroundLevel-BopStackSpecification%UpperRamHeight)*0.3048 ! foot to meter | |||||
PipeRam2%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%LowerRamHeight)*0.3048 ! foot to meter | |||||
Annular%H_AnnularBop=(BopStackSpecification%GroundLevel-BopStackSpecification%AnnularPreventerHeight)*0.3048 ! foot to meter | |||||
ChokeLine%H_Bop=(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 | |||||
bba1 =31.8; bba2 =-725.7 ; bba3 =4154 | |||||
RamLine%BA1=1003; RamLine%BA2=.03375; RamLine%BA3=4.014; RamLine%BA4=.2458 | |||||
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 | |||||
tol_air=.08 | |||||
RamLine%DeltaT_BOP=0.1 !second | |||||
Pumps%TOL_AIR=.08 | |||||
alpha_Qair=0 | |||||
alpha_timeair=0 | |||||
alpha_paccair=p_acc | |||||
alpha_pairp=p_acc | |||||
alpha_diffpair=0 | |||||
alpha_lossesair=0 | |||||
alpha_fvrair=0 | |||||
Pumps%alpha_Qair=0 | |||||
Pumps%alpha_timeair=0 | |||||
Pumps%alpha_paccair=RamLine%P_ACC | |||||
Pumps%alpha_pairp=RamLine%P_ACC | |||||
Pumps%alpha_diffpair=0 | |||||
Pumps%alpha_lossesair=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 | |||||
p_annular=pa_annular | |||||
RAM%p_bop=ShearRam%PA | |||||
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 | |||||
elecp_switch=0 !off position | |||||
ShearBop_closed=1 | |||||
PipeRam1_closed=1 | |||||
PipeRam2_closed=1 | |||||
ChokeLine_closed=1 | |||||
KillLine_closed=1 | |||||
Annular_closed=1 | |||||
finished_Shear=0 | |||||
finished_pipe1=0 | |||||
finished_pipe2=0 | |||||
finished_ChokeLine=0 | |||||
finished_KillLine=0 | |||||
finished_Annular=0 | |||||
deltav_elecp=0 | |||||
RamLine%AIRP_SWITCH=0 !off position | |||||
RamLine%ELECP_SWITCH=0 !off position | |||||
RamLine%ShearBop_closed=1 | |||||
PipeRam1%closed=1 | |||||
PipeRam2%closed=1 | |||||
ChokeLine%closed=1 | |||||
KillLine%closed=1 | |||||
Annular%Annular_closed=1 | |||||
RamLine%FINISHED_shear=0 | |||||
PipeRam1%finished=0 | |||||
PipeRam2%finished=0 | |||||
ChokeLine%finished=0 | |||||
KillLine%finished=0 | |||||
Annular%finished_Annular=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 | |||||
Pannular_reg=min(BopControlPanel%AnnularRegulatorSetControl,1700.) | |||||
BopStackAcc%pram_reg=BopStackAcc%PRAMS_REGSET !psi !RamsReglatorSet | |||||
Annular%Pannular_reg=min(BopControlPanel%AnnularRegulatorSetControl,1700.) | |||||
BopControlPanel%MiddleRamsStatus= IDshearBop | |||||
BopControlPanel%UpperRamsStatus= IDPipeRam1 | |||||
BopControlPanel%LowerRamsStatus= IDPipeRam2 | |||||
BopControlPanel%AnnularStatus = IDAnnular | |||||
BopControlPanel%MiddleRamsStatus= ShearRam%IDshearBop | |||||
BopControlPanel%UpperRamsStatus= PipeRam1%ID | |||||
BopControlPanel%LowerRamsStatus= PipeRam2%ID | |||||
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 | |||||
ShearRamIsOpening = .false. | |||||
ShearRamIsClosing = .false. | |||||
BopStackInput%MiddleRamsCloseLEDMine = LedOff | |||||
RamLine%ShearRamIsOpening = .false. | |||||
RamLine%ShearRamIsClosing = .false. | |||||
BopControlPanel%UpperRamsOpenLED = LedOn | BopControlPanel%UpperRamsOpenLED = LedOn | ||||
UpperRamsOpenLEDMine = LedOn | |||||
BopStackInput%UpperRamsOpenLEDMine = LedOn | |||||
BopControlPanel%UpperRamsCloseLED = LedOff | BopControlPanel%UpperRamsCloseLED = LedOff | ||||
UpperRamsCloseLEDMine = LedOff | |||||
PipeRam1IsOpening = .false. | |||||
PipeRam1IsClosing = .false. | |||||
BopStackInput%UpperRamsCloseLEDMine = LedOff | |||||
PipeRam1%IsOpening = .false. | |||||
PipeRam1%IsClosing = .false. | |||||
BopControlPanel%LowerRamsOpenLED = LedOn | BopControlPanel%LowerRamsOpenLED = LedOn | ||||
LowerRamsOpenLEDMine = LedOn | |||||
BopStackInput%LowerRamsOpenLEDMine = LedOn | |||||
BopControlPanel%LowerRamsCloseLED = LedOff | BopControlPanel%LowerRamsCloseLED = LedOff | ||||
LowerRamsCloseLEDMine = LedOff | |||||
PipeRam2IsOpening = .false. | |||||
PipeRam2IsClosing = .false. | |||||
BopStackInput%LowerRamsCloseLEDMine = LedOff | |||||
PipeRam2%IsOpening = .false. | |||||
PipeRam2%IsClosing = .false. | |||||
BopControlPanel%ChokeLineOpenLED = LedOff | BopControlPanel%ChokeLineOpenLED = LedOff | ||||
ChokeLineOpenLEDMine = LedOff | |||||
BopStackInput%ChokeLineOpenLEDMine = LedOff | |||||
BopControlPanel%ChokeLineCloseLED = LedOn | BopControlPanel%ChokeLineCloseLED = LedOn | ||||
ChokeLineCloseLEDMine = LedOn | |||||
ChokeLineIsOpening = .false. | |||||
ChokeLineIsClosing = .false. | |||||
BopStackInput%ChokeLineCloseLEDMine = LedOn | |||||
ChokeLine%IsOpening = .false. | |||||
ChokeLine%IsClosing = .false. | |||||
BopControlPanel%KillLineOpenLED = LedOff | BopControlPanel%KillLineOpenLED = LedOff | ||||
KillLineOpenLedMine = LedOff | |||||
BopStackInput%KillLineOpenLedMine = LedOff | |||||
BopControlPanel%KillLineCloseLED = LedOn | BopControlPanel%KillLineCloseLED = LedOn | ||||
KillLineCloseLedMine = LedOn | |||||
KillLineIsOpening = .false. | |||||
KillLineIsClosing = .false. | |||||
BopStackInput%KillLineCloseLedMine = LedOn | |||||
KillLine%IsOpening = .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. | |||||
AnnularIsClosing = .false. | |||||
Annular%AnnularIsOpening = .false. | |||||
Annular%AnnularIsClosing = .false. | |||||
FirstSet=1 | |||||
RamsFirstSet=1 | |||||
BopControlPanel%ManifoldPressureGauge=prams_regset !RamsReglatorSet | |||||
BopControlPanel%AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) | |||||
Annular%FirstSet=1 | |||||
AnnularComputational%RamsFirstSet=1 | |||||
BopControlPanel%ManifoldPressureGauge=BopStackAcc%PRAMS_REGSET !RamsReglatorSet | |||||
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 | |||||
CALL Pannular_regDelay%AddToFirst(BopControlPanel%AnnularPressureGauge) | |||||
DO i = 1 , AnnularComputational%PannularTimeStepDelay | |||||
CALL AnnularComputational%Pannular_regDelay%AddToFirst(BopControlPanel%AnnularPressureGauge) | |||||
END DO | END DO | ||||
@@ -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 | |||||
FirstSet= 0 | |||||
RamsFirstSet= 0 | |||||
if(FINISHED_shear==0) then | |||||
if (RamLine%ShearRamIsOpening .or. RamLine%ShearRamIsClosing .or. RAM(4)%Bottles_Charged_MalfActive) then | |||||
Annular%FirstSet= 0 | |||||
AnnularComputational%RamsFirstSet= 0 | |||||
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 | |||||
call bop_code(1,H_ShearRamBop,4) | |||||
if (RamLine%FINISHED_shear/=0 .and. RamLine%FINISHED_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then | |||||
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 | |||||
call bop_code(1,H_ShearRamBop,4) | |||||
if (RamLine%FINISHED_shear/=0 .and. RamLine%FINISHED_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then | |||||
call bop_code(1,ShearRam%H_ShearRamBop,4) | |||||
endif | endif | ||||
endif | endif | ||||
@@ -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 | |||||
ChokeLineLeverOld= 1.0 | |||||
if (ChokeLine%finished==1) then | |||||
ChokeLine%LeverOld= 1.0 | |||||
else | else | ||||
ChokeLineLeverOld=BopControlPanel%ChokeLineValve | |||||
ChokeLine%LeverOld=BopControlPanel%ChokeLineValve | |||||
endif | endif | ||||
finished_ChokeLine=0 | |||||
ChokeLineIsOpening = .true. | |||||
ChokeLine%finished=0 | |||||
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.) | |||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) !1.5 galon for each BOP | |||||
ChokeLine%Abop=(BopStackSpecification%ChokeClose*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
ChokeLineLeverOld= -1.0 | |||||
if (ChokeLine%finished==1) then | |||||
ChokeLine%LeverOld= -1.0 | |||||
else | else | ||||
ChokeLineLeverOld=BopControlPanel%ChokeLineValve | |||||
ChokeLine%LeverOld=BopControlPanel%ChokeLineValve | |||||
endif | endif | ||||
finished_ChokeLine=0 | |||||
ChokeLineIsClosing = .true. | |||||
ChokeLine%finished=0 | |||||
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.) | |||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) !1.5 galon for each BOP | |||||
ChokeLine%Abop=(BopStackSpecification%ChokeOpen*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
RAM(5)%p_bop=pa | |||||
ChokeLineLeverOld = BopControlPanel%ChokeLineValve | |||||
ChokeLine%closed=0 | |||||
RAM(5)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLine-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) | |||||
ChokeLine%Abop=(BopStackSpecification%ChokeClose*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
ChokeLineIsOpening = .false. | |||||
ChokeLine%IsClosing = .true. | |||||
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 | |||||
RAM(5)%p_bop=pa | |||||
ChokeLineLeverOld = BopControlPanel%ChokeLineValve | |||||
ChokeLine%closed=0 | |||||
RAM(5)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-IDChokeLine)/(2.*231) | |||||
ChokeLine%Abop=(BopStackSpecification%ChokeOpen*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
ChokeLineIsClosing = .false. | |||||
ChokeLine%IsOpening = .true. | |||||
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 | |||||
call bop_code(4,H_ChokeLineBop,5) !ramtype=4 5=RNUMBER | |||||
if (ChokeLine%closed==0) then !bop closing | |||||
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 | ||||
@@ -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 | |||||
FirstSet= 0 | |||||
RamsFirstSet= 0 | |||||
if(finished_ChokeLine==0) then | |||||
if (ChokeLine%IsOpening .or. ChokeLine%IsClosing) then | |||||
Annular%FirstSet= 0 | |||||
AnnularComputational%RamsFirstSet= 0 | |||||
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 | ||||
@@ -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 | |||||
KillLineLeverOld= 1.0 | |||||
if (KillLine%finished==1) then | |||||
KillLine%LeverOld= 1.0 | |||||
else | else | ||||
KillLineLeverOld=BopControlPanel%KillLineValve | |||||
KillLine%LeverOld=BopControlPanel%KillLineValve | |||||
endif | endif | ||||
finished_KillLine=0 | |||||
KillLineIsOpening = .true. | |||||
KillLine%finished=0 | |||||
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.) | |||||
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) !1.5 galon for each BOP | |||||
KillLine%Abop=(BopStackSpecification%KillClose*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
KillLineLeverOld= -1.0 | |||||
if (KillLine%finished==1) then | |||||
KillLine%LeverOld= -1.0 | |||||
else | else | ||||
KillLineLeverOld=BopControlPanel%KillLineValve | |||||
KillLine%LeverOld=BopControlPanel%KillLineValve | |||||
endif | endif | ||||
finished_KillLine=0 | |||||
KillLineIsClosing = .true. | |||||
KillLine%finished=0 | |||||
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.) | |||||
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) !1.5 galon for each BOP | |||||
KillLine%Abop=(BopStackSpecification%KillOpen*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
RamsFirstSet= 0 | |||||
Annular%FirstSet= 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 | |||||
RAM(6)%p_bop=pa | |||||
KillLineLeverOld = BopControlPanel%KillLineValve | |||||
KillLine%closed=0 | |||||
RAM(6)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumeKillLine=AbopKillLine*(IDKillLine-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) | |||||
KillLine%Abop=(BopStackSpecification%KillClose*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
KillLineIsOpening = .false. | |||||
KillLine%IsClosing = .true. | |||||
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 | |||||
RAM(6)%p_bop=pa | |||||
KillLineLeverOld = BopControlPanel%KillLineValve | |||||
KillLine%closed=0 | |||||
RAM(6)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-IDKillLine)/(2.*231) | |||||
KillLine%Abop=(BopStackSpecification%KillOpen*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
KillLineIsClosing = .false. | |||||
KillLine%IsOpening = .true. | |||||
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 | |||||
call bop_code(5,H_KillLineBop,6) !ramtype=5 6=RNUMBER | |||||
if (KillLine%closed==0) then !bop closing | |||||
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 | ||||
@@ -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(finished_KillLine==0) then | |||||
if (KillLine%IsOpening .or. KillLine%IsClosing) 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 | ||||
@@ -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 (UpperRamsCloseLEDMine == LedOn) then | |||||
if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) 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 | |||||
PipeRams1LeverOld=-1.0 | |||||
if (PipeRam1%finished==1) then | |||||
PipeRam1%PipeRams1DotLeverOld=-1.0 | |||||
else | else | ||||
PipeRams1LeverOld=BopControlPanel%UpperRamsValve | |||||
PipeRam1%PipeRams1DotLeverOld=BopControlPanel%UpperRamsValve | |||||
endif | endif | ||||
finished_pipe1=0 | |||||
PipeRam1IsClosing = .true. | |||||
PipeRam1IsOpening = .false. | |||||
PipeRam1%finished=0 | |||||
PipeRam1%IsClosing = .true. | |||||
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.) | |||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) !3.67 galon for each BOP | |||||
PipeRam1%A=(BopStackSpecification%UpperRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
PipeRams1LeverOld=1.0 | |||||
if (PipeRam1%finished==1) then | |||||
PipeRam1%PipeRams1DotLeverOld=1.0 | |||||
else | else | ||||
PipeRams1LeverOld=BopControlPanel%UpperRamsValve | |||||
PipeRam1%PipeRams1DotLeverOld=BopControlPanel%UpperRamsValve | |||||
endif | endif | ||||
finished_pipe1=0 | |||||
PipeRam1IsOpening = .true. | |||||
PipeRam1IsClosing = .false. | |||||
PipeRam1%finished=0 | |||||
PipeRam1%IsOpening = .true. | |||||
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.) | |||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) !3.48 galon for each BOP | |||||
PipeRam1%A=(BopStackSpecification%UpperRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
RamsFirstSet= 0 | |||||
if (PipeRam1IsOpening .or. PipeRam1IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then | |||||
FirstSet= 0 | |||||
RamsFirstSet= 0 | |||||
Annular%FirstSet= 0 | |||||
AnnularComputational%RamsFirstSet= 0 | |||||
if (PipeRam1%IsOpening .or. PipeRam1%IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then | |||||
Annular%FirstSet= 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 | |||||
RAM(2)%p_bop=pa | |||||
PipeRams1LeverOld = BopControlPanel%UpperRamsValve | |||||
PipeRam1%Situation_forTD= 0 ! open - for TD code | |||||
RAM(2)%p_bop=ShearRam%PA | |||||
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. | |||||
PipeRam1IsOpening = .false. | |||||
PipeRam1%IsClosing = .true. | |||||
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 | |||||
RAM(2)%p_bop=pa | |||||
PipeRams1LeverOld = BopControlPanel%UpperRamsValve | |||||
PipeRam1%Situation_forTD= 0 ! open - for TD code | |||||
RAM(2)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-IDPipeRam1)/(2.*231) | |||||
PipeRam1%A=(BopStackSpecification%UpperRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
PipeRam1IsClosing = .false. | |||||
PipeRam1%IsOpening = .true. | |||||
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 | |||||
call bop_code(2,H_PipeRam1Bop,2) !ramtype=2 2=RNUMBER | |||||
if (PipeRam1%closed==0) then !bop closing | |||||
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 | |||||
call bop_code(2,H_PipeRam1Bop,2) !ramtype=2 2=RNUMBER | |||||
if ( PipeRam1%finished==1 .and. RAM(2)%Bottles_Charged_MalfActive==.true.) then | |||||
call bop_code(2,PipeRam1%H,2) !ramtype=2 2=RNUMBER | |||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
endif | endif | ||||
@@ -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 | |||||
PipeRams2LeverOld=-1.0 | |||||
if (PipeRam2%finished==1) then | |||||
PipeRam2%LeverOld=-1.0 | |||||
else | else | ||||
PipeRams2LeverOld=BopControlPanel%LowerRamsValve | |||||
PipeRam2%LeverOld=BopControlPanel%LowerRamsValve | |||||
endif | endif | ||||
finished_pipe2=0 | |||||
PipeRam2IsClosing = .true. | |||||
PipeRam2IsOpening = .false. | |||||
PipeRam2%finished=0 | |||||
PipeRam2%IsClosing = .true. | |||||
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.) | |||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) !galon for each BOP | |||||
PipeRam1%A=(BopStackSpecification%LowerRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
PipeRams2LeverOld=1.0 | |||||
if (PipeRam2%finished==1) then | |||||
PipeRam2%LeverOld=1.0 | |||||
else | else | ||||
PipeRams2LeverOld=BopControlPanel%LowerRamsValve | |||||
PipeRam2%LeverOld=BopControlPanel%LowerRamsValve | |||||
endif | endif | ||||
finished_pipe2=0 | |||||
PipeRam2IsOpening = .true. | |||||
PipeRam2IsClosing = .false. | |||||
PipeRam2%finished=0 | |||||
PipeRam2%IsOpening = .true. | |||||
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.) | |||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) !galon for each BOP | |||||
PipeRam1%A=(BopStackSpecification%LowerRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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 | |||||
FirstSet= 0 | |||||
RamsFirstSet= 0 | |||||
if (PipeRam2%IsOpening .or. PipeRam2%IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then | |||||
Annular%FirstSet= 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 | |||||
PipeRams2LeverOld = BopControlPanel%LowerRamsValve | |||||
RAM(3)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRam2-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) | |||||
PipeRam1%A=(BopStackSpecification%LowerRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
PipeRam2IsOpening = .false. | |||||
PipeRam2%IsClosing = .true. | |||||
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 | |||||
PipeRams2LeverOld = BopControlPanel%LowerRamsValve | |||||
RAM(3)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-IDPipeRam2)/(2.*231) | |||||
PipeRam1%A=(BopStackSpecification%LowerRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | |||||
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. | |||||
PipeRam2IsClosing = .false. | |||||
PipeRam2%IsOpening = .true. | |||||
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 | |||||
call bop_code(3,H_PipeRam2Bop,3) !ramtype=3 3=RNUMBER | |||||
if ( PipeRam2%finished==1 .and. RAM(3)%Bottles_Charged_MalfActive==.true.) then | |||||
call bop_code(3,PipeRam2%H_Bop,3) !ramtype=3 3=RNUMBER | |||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
endif | endif | ||||
@@ -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(finished_pipe1==0) then | |||||
if (PipeRam1%IsOpening .or. PipeRam1%IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) 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 | ||||
@@ -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(finished_pipe2==0) then | |||||
if (PipeRam2%IsOpening .or. PipeRam2%IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) 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 | ||||
@@ -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 | |||||
ShearRamsLeverOld=-1.0 | |||||
if (RamLine%FINISHED_shear==1) then | |||||
RamLine%ShearRamsLeverOld=-1.0 | |||||
else | else | ||||
ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | |||||
RamLine%ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | |||||
endif | endif | ||||
finished_shear=0 | |||||
ShearRamIsClosing = .true. | |||||
ShearRamIsOpening = .false. | |||||
RamLine%FINISHED_shear=0 | |||||
RamLine%ShearRamIsClosing = .true. | |||||
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 | |||||
va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231) | |||||
vb=NeededVolumeShearRams | |||||
ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed | |||||
ShearRam%VA=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ODDrillpipe_inShearRam)/(2.*231) | |||||
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 | |||||
ShearRamsLeverOld=1.0 | |||||
if (RamLine%FINISHED_shear==1) then | |||||
RamLine%ShearRamsLeverOld=1.0 | |||||
else | else | ||||
ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | |||||
RamLine%ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | |||||
endif | endif | ||||
finished_shear=0 | |||||
ShearRamIsOpening = .true. | |||||
ShearRamIsClosing = .false. | |||||
RamLine%FINISHED_shear=0 | |||||
RamLine%ShearRamIsOpening = .true. | |||||
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 | |||||
RAM(4)%p_bop=pa | |||||
ShearRamsLeverOld = BopControlPanel%MiddleRamsValve | |||||
RamLine%ShearBop_closed=0 | |||||
RAM(4)%p_bop=ShearRam%PA | |||||
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.) | |||||
NeededVolumeShearRams=AbopShearRam*(IDshearBop-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) ! **changed | |||||
ShearRam%AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(ShearRam%IDshearBopBase/2.) | |||||
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. | |||||
ShearRamIsOpening = .false. | |||||
RamLine%ShearRamIsClosing = .true. | |||||
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 | |||||
RAM(4)%p_bop=pa | |||||
ShearRamsLeverOld = BopControlPanel%MiddleRamsValve | |||||
RamLine%ShearBop_closed=0 | |||||
RAM(4)%p_bop=ShearRam%PA | |||||
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. | |||||
ShearRamIsClosing = .false. | |||||
RamLine%ShearRamIsOpening = .true. | |||||
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 | |||||
call bop_code(1,H_ShearRamBop,4) !ramtype=1 4=RNUMBER | |||||
if (RamLine%ShearBop_closed==0) then !bop closing | |||||
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 | |||||
finished_shear=1 | |||||
if (RamLine%ShearBop_closed==1) then | |||||
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 | ||||
@@ -8,124 +8,146 @@ MODULE VARIABLES | |||||
!=========================================================================== | !=========================================================================== | ||||
! INPUT VARIABLES | ! INPUT VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL,ALLOCATABLE:: MINORS1(:,:),PIPINGS_RAMLINE(:,:),MINORS_ANNULAR(:,:),PIPINGS_ANNULAR(:,:),PIPINGS_AIRPUMP(:,:),MINORS_AIRPUMP(:,:) | |||||
integer AnnularOpenLedMine,AnnularCloseLedMine,UpperRamsCloseLEDMine,UpperRamsOpenLEDMine,LowerRamsOpenLEDMine,LowerRamsCloseLEDMine | |||||
integer MiddleRamsOpenLEDMine,MiddleRamsCloseLEDMine,KillLineOpenLedMine,KillLineCloseLedMine,ChokeLineOpenLEDMine,ChokeLineCloseLEDMine | |||||
integer BOP_timeCounter | |||||
type :: BopStackInputType | |||||
REAL,ALLOCATABLE:: MINORS1(:,:),PIPINGS_RAMLINE(:,:),MINORS_ANNULAR(:,:),PIPINGS_ANNULAR(:,:),PIPINGS_AIRPUMP(:,:),MINORS_AIRPUMP(:,:) | |||||
integer AnnularOpenLedMine,AnnularCloseLedMine,UpperRamsCloseLEDMine,UpperRamsOpenLEDMine,LowerRamsOpenLEDMine,LowerRamsCloseLEDMine | |||||
integer MiddleRamsOpenLEDMine,MiddleRamsCloseLEDMine,KillLineOpenLedMine,KillLineCloseLedMine,ChokeLineOpenLEDMine,ChokeLineCloseLEDMine | |||||
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 | |||||
REAL pram_reg,test1,test2,test3,test4,test5,test6,test7,test8,test9,ax,bx | |||||
integer NOBOTTLES,AccPupmsFailMalf,AirSupplyPressureGaugeMalf,ManifoldPressureGaugeMalf,AccumulatorPressureGaugeMalf,RigAirMalf | |||||
real Cumulative_AirVolume, PressureDifference | |||||
integer SoundKoomeyAirPump | |||||
type::BopStackAccType | |||||
REAL FVR_TOT,BOTTLE_CAPACITY,PRAMS_REGSET,acc_ChargedPressure,acc_MinPressure,ACC_PRECHARGE,ByPassOld | |||||
REAL pram_reg,test1,test2,test3,test4,test5,test6,test7,test8,test9,ax,bx | |||||
integer NOBOTTLES,AccPupmsFailMalf,AirSupplyPressureGaugeMalf,ManifoldPressureGaugeMalf,AccumulatorPressureGaugeMalf,RigAirMalf | |||||
real Cumulative_AirVolume, PressureDifference | |||||
integer SoundKoomeyAirPump | |||||
end type BopStackAccType | |||||
type(BopStackAccType)::BopStackAcc | |||||
!=========================================================================== | !=========================================================================== | ||||
! RAM LINE COMPUTATIONAL VARIABLES | ! RAM LINE COMPUTATIONAL VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical ShearRamIsClosing,ShearRamIsOpening | |||||
REAL ShearRamsLeverOld,NoActiveRmas | |||||
!REAL checkp,p_acccheck | |||||
REAL P_ACC,FVR,DeltaT_BOP | |||||
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 loss_before,pipe_loss2,minor_loss2,deltah,static_loss2,kinetic_loss2,loss_after | |||||
integer AIRP_SWITCH,ELECP_SWITCH,ShearBop_closed,FINISHED_shear,EOF,NO_MINORSRAMLINE,NO_PIPINGSRAMLINE,NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | |||||
integer counter,iteration,ShearBop_Situation_forTD | |||||
real BA1,BA2,BA3,BA4,BBA1,BBA2,BBA3,BBA4 | |||||
REAL B1,B2,B3,B4 | |||||
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | |||||
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:) | |||||
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_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:: Re_ramline(:),fric(:),fricloss(:) | |||||
REAL,ALLOCATABLE:: MINORDIAMETER_RAMLINE(:) | |||||
INTEGER,ALLOCATABLE:: ITEM(:),ITEM_PIPING(:),ITEM_PIPINGAIR(:),ITEM_MINORAIR(:) | |||||
CHARACTER,ALLOCATABLE:: DECRIPTION(:),DECRIPTION2(:),DECRIPTION_RAM(:),DESCRIPTION_AIR1(:),DESCRIPTION_AIR2(:) | |||||
real:: counter_airp,pacc_before | |||||
integer Annular_active,ShearBop_active,PipeRam1_active,PipeRam2_active,ChokeLine_active,KillLine_active | |||||
!=========================================================================== | |||||
type:: RamLineType | |||||
logical ShearRamIsClosing,ShearRamIsOpening | |||||
REAL ShearRamsLeverOld,NoActiveRmas | |||||
!REAL checkp,p_acccheck | |||||
REAL P_ACC,FVR,DeltaT_BOP | |||||
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 loss_before,pipe_loss2,minor_loss2,deltah,static_loss2,kinetic_loss2,loss_after | |||||
integer AIRP_SWITCH,ELECP_SWITCH,ShearBop_closed,FINISHED_shear,EOF,NO_MINORSRAMLINE,NO_PIPINGSRAMLINE,NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | |||||
integer counter,iteration,ShearBop_Situation_forTD | |||||
real BA1,BA2,BA3,BA4,BBA1,BBA2,BBA3,BBA4 | |||||
REAL B1,B2,B3,B4 | |||||
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | |||||
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:) | |||||
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_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:: Re_ramline(:),fric(:),fricloss(:) | |||||
REAL,ALLOCATABLE:: MINORDIAMETER_RAMLINE(:) | |||||
INTEGER,ALLOCATABLE:: ITEM(:),ITEM_PIPING(:),ITEM_PIPINGAIR(:),ITEM_MINORAIR(:) | |||||
CHARACTER,ALLOCATABLE:: DECRIPTION(:),DECRIPTION2(:),DECRIPTION_RAM(:),DESCRIPTION_AIR1(:),DESCRIPTION_AIR2(:) | |||||
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 | ||||
!=========================================================================== | !=========================================================================== | ||||
integer PannularTimeStepDelay | |||||
type(DynamicDoubleArrayType) :: Pannular_regDelay | |||||
logical AnnPressureRise | |||||
integer NO_MinorsAnnularLine,NO_PipingsAnnularLine,RamsFirstSet | |||||
REAL pa_annular,p_annular | |||||
REAL,ALLOCATABLE:: MINORDIAMETER_ANNULARLINE(:),AREAMINOR_ANNULARLINE(:) | |||||
!REAL,ALLOCATABLE:: REAL_PregAnnular(:),real_IDAnnular(:),real_pAnnular(:) | |||||
REAL REAL_PregAnnular,real_IDAnnular,real_pAnnular | |||||
REAL,ALLOCATABLE:: LF_ANNULARLINE(:),CV_ANNULARLINE(:),NOTE_ANNULARLINE(:),minlosspa_ANNULAR(:),minloss_ANNULAR(:) | |||||
REAL,ALLOCATABLE:: DIAM_ANNULARLINE_INCH(:),DIAM_ANNULARLINE_MM(:),AREA_ANNULARLINE(:) | |||||
REAL,ALLOCATABLE:: LENGT_ANNULARLINE(:),ROUGHNESS_ANNULARLINE(:),RELROUGH_ANNULARLINE(:),Re_ANNULARline(:),fricANNULAR(:),friclossANNULAR(:) | |||||
INTEGER,ALLOCATABLE:: ITEMANNULAR(:),ITEM_PIPINGANNULAR(:) | |||||
CHARACTER,ALLOCATABLE:: DECRIPTIONANNULAR(:),DECRIPTION2ANNULAR(:),DECRIPTION_ANNULAR(:) | |||||
REAL WellBorePressure,acoef,Bcoef,const,AnnularSealingPressure,AnnularMovingPressure | |||||
type::AnnularComputationalType | |||||
integer PannularTimeStepDelay | |||||
type(DynamicDoubleArrayType) :: Pannular_regDelay | |||||
logical AnnPressureRise | |||||
integer NO_MinorsAnnularLine,NO_PipingsAnnularLine,RamsFirstSet | |||||
REAL pa_annular,p_annular | |||||
REAL,ALLOCATABLE:: MINORDIAMETER_ANNULARLINE(:),AREAMINOR_ANNULARLINE(:) | |||||
!REAL,ALLOCATABLE:: REAL_PregAnnular(:),real_IDAnnular(:),real_pAnnular(:) | |||||
REAL REAL_PregAnnular,real_IDAnnular,real_pAnnular | |||||
REAL,ALLOCATABLE:: LF_ANNULARLINE(:),CV_ANNULARLINE(:),NOTE_ANNULARLINE(:),minlosspa_ANNULAR(:),minloss_ANNULAR(:) | |||||
REAL,ALLOCATABLE:: DIAM_ANNULARLINE_INCH(:),DIAM_ANNULARLINE_MM(:),AREA_ANNULARLINE(:) | |||||
REAL,ALLOCATABLE:: LENGT_ANNULARLINE(:),ROUGHNESS_ANNULARLINE(:),RELROUGH_ANNULARLINE(:),Re_ANNULARline(:),fricANNULAR(:),friclossANNULAR(:) | |||||
INTEGER,ALLOCATABLE:: ITEMANNULAR(:),ITEM_PIPINGANNULAR(:) | |||||
CHARACTER,ALLOCATABLE:: DECRIPTIONANNULAR(:),DECRIPTION2ANNULAR(:),DECRIPTION_ANNULAR(:) | |||||
REAL WellBorePressure,acoef,Bcoef,const,AnnularSealingPressure,AnnularMovingPressure | |||||
end type AnnularComputationalType | |||||
type(AnnularComputationalType)::AnnularComputational | |||||
!=========================================================================== | !=========================================================================== | ||||
! ANNULAR PREVENTER VARIABLES | ! ANNULAR PREVENTER VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL (8) Pannular_reg | |||||
real Pannular_regset | |||||
logical AnnularIsClosing,AnnularIsOpening | |||||
REAL tolAnnular,tolzeroAnnular | |||||
integer Annular_closed,finished_Annular,FirstSet,AnnularFailureMalf,AnnularLeakMalf,AnnularPressureGaugeMalf,Annular_Situation_forTD | |||||
REAL AnnularLeverOld,H_AnnularBop,IDAnnular,AbopAnnular,ODDrillpipe_inAnnular,IDAnnularBase,ODDrillpipe_inAnnularBase | |||||
REAL NeededVolumeAnnular | |||||
type :: AnnularType | |||||
REAL (8) Pannular_reg | |||||
real Pannular_regset | |||||
logical AnnularIsClosing,AnnularIsOpening | |||||
REAL tolAnnular,tolzeroAnnular | |||||
integer Annular_closed,finished_Annular,FirstSet,AnnularFailureMalf,AnnularLeakMalf,AnnularPressureGaugeMalf,Annular_Situation_forTD | |||||
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 | |||||
REAL PipeRams1LeverOld,H_PipeRam1Bop | |||||
REAL NeededVolumePipeRams1,AbopPipeRam,IDPipeRamBase,IDPipeRam1,ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base | |||||
integer PipeRam1_closed,finished_pipe1,UpperRamsFailureMalf,UpperRamsLeakMalf,PipeRam1_Situation_forTD | |||||
REAL real_IDPipeRam1 | |||||
type::PipeRams1Type | |||||
logical IsClosing,IsOpening | |||||
REAL PipeRams1DotLeverOld,H | |||||
REAL NeededVolume,A,IDBase,ID,ODDrillpipe_in,ODDrillpipe_inBase | |||||
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 | |||||
REAL,ALLOCATABLE:: ALPHA_QRAM(:),ALPHA_VDISRAM(:),ALPHA_PACC(:),ALPHA_PREGRAM(:),ALPHA_PBOP(:) | |||||
!REAL,ALLOCATABLE:: REAL_TIME(:),REAL_QRAM(:),REAL_VDISRAM(:),REAL_PACC(:),REAL_PREGRAM(:),REAL_PBOP(:),real_IDshearBop(:) | |||||
REAL REAL_TIME,REAL_QRAM,REAL_VDISRAM,REAL_PACC,REAL_PREGRAM,REAL_PBOP,real_IDshearBop | |||||
REAL IDshearBopBase,IDshearBop,ODDrillpipe_inShearRam,AbopShearRam,NeededVolumeShearRams,ODDrillpipe_inShearRamBase | |||||
Real IDshearBopFinal,IDPipeRam1Final,IDPipeRam2Final,IDAnnularFinal,OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular | |||||
Real MinimumOpenArea_InBOP | |||||
integer MiddleRamsFailureMalf,MiddleRamsLeakMalf,ShearIsNotAllowed | |||||
type:: ShearRamType | |||||
REAL PA,PB,P_SHEAR,VA,VB,RAM_COURSE,H_REGRAM,H_ShearRamBop | |||||
REAL,ALLOCATABLE:: ALPHA_QRAM(:),ALPHA_VDISRAM(:),ALPHA_PACC(:),ALPHA_PREGRAM(:),ALPHA_PBOP(:) | |||||
!REAL,ALLOCATABLE:: REAL_TIME(:),REAL_QRAM(:),REAL_VDISRAM(:),REAL_PACC(:),REAL_PREGRAM(:),REAL_PBOP(:),real_IDshearBop(:) | |||||
REAL REAL_TIME,REAL_QRAM,REAL_VDISRAM,REAL_PACC,REAL_PREGRAM,REAL_PBOP,real_IDshearBop | |||||
REAL IDshearBopBase,IDshearBop,ODDrillpipe_inShearRam,AbopShearRam,NeededVolumeShearRams,ODDrillpipe_inShearRamBase | |||||
Real IDshearBopFinal,IDPipeRam1Final,IDPipeRam2Final,IDAnnularFinal,OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular | |||||
Real MinimumOpenArea_InBOP | |||||
integer MiddleRamsFailureMalf,MiddleRamsLeakMalf,ShearIsNotAllowed | |||||
end type ShearRamType | |||||
type(ShearRamType)::ShearRam | |||||
!=========================================================================== | !=========================================================================== | ||||
! PIPE RAMS 2 VARIABLES | ! PIPE RAMS 2 VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical PipeRam2IsClosing,PipeRam2IsOpening | |||||
REAL PipeRams2LeverOld,H_PipeRam2Bop | |||||
REAL NeededVolumePipeRams2,IDPipeRam2,ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam2Base | |||||
integer PipeRam2_closed,finished_pipe2,LowerRamsFailureMalf,LowerRamsLeakMalf,PipeRam2_Situation_forTD | |||||
!REAL,ALLOCATABLE:: real_IDPipeRam2(:) | |||||
REAL real_IDPipeRam2 | |||||
type::PipeRam2Type | |||||
logical IsClosing,IsOpening | |||||
REAL LeverOld,H_Bop | |||||
REAL NeededVolume,ID,ODDrillpipe_in,ODDrillpipe_inBase | |||||
integer closed,finished,LowerRamsFailureMalf,LowerRamsLeakMalf,Situation_forTD | |||||
!REAL,ALLOCATABLE:: real_IDPipeRam2(:) | |||||
REAL real_ID | |||||
end type PipeRam2Type | |||||
type(PipeRam2Type)::PipeRam2 | |||||
!=========================================================================== | !=========================================================================== | ||||
! CHOKE LINE VARIABLES | ! CHOKE LINE VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical ChokeLineIsClosing,ChokeLineIsOpening | |||||
REAL ChokeLineLeverOld,H_ChokeLineBop | |||||
REAL NeededVolumeChokeLine,AbopChokeLine,IDChokeLine,ODDrillpipe_inChokeLine,IDChokeLineBase,ODDrillpipe_inChokeLineBase | |||||
integer ChokeLine_closed,finished_ChokeLine | |||||
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) | |||||
REAL real_IDChokeLine | |||||
type::ChokeLineType | |||||
logical IsClosing,IsOpening | |||||
REAL LeverOld,H_Bop | |||||
REAL NeededVolume,Abop,ID,ODDrillpipe_in,IDBase,ODDrillpipe_inBase | |||||
integer closed,finished | |||||
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) | |||||
REAL real_ID | |||||
end type ChokeLineType | |||||
type(ChokeLineType)::ChokeLine | |||||
!=========================================================================== | !=========================================================================== | ||||
! KILL LINE VARIABLES | ! KILL LINE VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical KillLineIsClosing,KillLineIsOpening | |||||
REAL KillLineLeverOld,H_KillLineBop | |||||
REAL NeededVolumeKillLine,AbopKillLine,IDKillLine,ODDrillpipe_inKillLine,IDKillLineBase,ODDrillpipe_inKillLineBase | |||||
integer KillLine_closed,finished_KillLine | |||||
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) | |||||
REAL real_IDKillLine | |||||
type::KillLineType | |||||
logical IsClosing,IsOpening | |||||
REAL LeverOld,H_Bop | |||||
REAL NeededVolume,Abop,ID,ODDrillpipe_in,IDBase,ODDrillpipe_inBase | |||||
integer closed,finished | |||||
!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 | |||||
REAL ELECTRIC_PUMPON,ELECTRIC_PUMPOFF,AIR_PUMPON,AIR_PUMPOFF,QAIR_PUMP,QELECTRIC_PUMP | |||||
!REAL,ALLOCATABLE:: alpha_Qair(:),alpha_timeair(:),alpha_paccair(:),alpha_pairp(:),alpha_diffpair(:),alpha_lossesair(:),alpha_fvrair(:) | |||||
REAL alpha_Qair,alpha_timeair,alpha_paccair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_fvrair | |||||
logical SoundKoomeyElectricPump | |||||
type::PumpsType | |||||
REAL P_AIRP,DELTAV_AIR,TOL_AIR,DELTAV_ELECP,Qiter | |||||
REAL ELECTRIC_ON,ELECTRIC_OFF,AIR_ON,AIR_OFF,QAIR,QELECTRIC | |||||
!REAL,ALLOCATABLE:: alpha_Qair(:),alpha_timeair(:),alpha_paccair(:),alpha_pairp(:),alpha_diffpair(:),alpha_lossesair(:),alpha_fvrair(:) | |||||
REAL alpha_Qair,alpha_timeair,alpha_paccair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_fvrair | |||||
logical SoundKoomeyElectric | |||||
end type PumpsType | |||||
type(PumpsType)::Pumps | |||||
!================================================================================= | !================================================================================= | ||||
@@ -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, & | |||||
Re_air,AREA_AIR,LENGT_AIR,ROUGHNESS_AIRPLINE,REL_ROUGHAIR, & | |||||
fric_air,fricloss_air) | |||||
DEALLOCATE (AirPumpLine%PIPINGS_AIRPUMP,AirPumpLine%DIAM_AIR_INCH, & | |||||
AirPumpLine%Re_air,AirPumpLine%AREA_AIR,AirPumpLine%LENGT_AIR,AirPumpLine%ROUGHNESS_AIRPLINE,AirPumpLine%REL_ROUGHAIR, & | |||||
AirPumpLine%fric_air,AirPumpLine%fricloss_air) | |||||
!================================================================ | !================================================================ | ||||
DEALLOCATE (MINORS_AIRPUMP,MINORDIAM_AIR_INCH, & | |||||
MINORAREA_AIR,LF_AIR,CV_AIR,NOTE_AIR & | |||||
,minlosspa_air,minloss_air) | |||||
DEALLOCATE (AirPumpLine%MINORS_AIRPUMP,AirPumpLine%MINORDIAM_AIR_INCH, & | |||||
AirPumpLine%MINORAREA_AIR,AirPumpLine%LF_AIR,AirPumpLine%CV_AIR,AirPumpLine%NOTE_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), & | |||||
LENGT_AIR(NO_PIPINGS_AIRPLINE),ROUGHNESS_AIRPLINE(NO_PIPINGS_AIRPLINE),REL_ROUGHAIR(NO_PIPINGS_AIRPLINE), & | |||||
fric_air(NO_PIPINGS_AIRPLINE),fricloss_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), & | |||||
AirPumpLine%LENGT_AIR(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%ROUGHNESS_AIRPLINE(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%REL_ROUGHAIR(AirPumpLine%NO_PIPINGS_AIRPLINE), & | |||||
AirPumpLine%fric_air(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%fricloss_air(AirPumpLine%NO_PIPINGS_AIRPLINE)) | |||||
DO I=1,NO_PIPINGS_AIRPLINE | |||||
DIAM_AIR_INCH(I)=PIPINGS_AIRPUMP(I,1) | |||||
LENGT_AIR(I)=PIPINGS_AIRPUMP(I,2) | |||||
ROUGHNESS_AIRPLINE(I)=PIPINGS_AIRPUMP(I,3) | |||||
DO I=1,AirPumpLine%NO_PIPINGS_AIRPLINE | |||||
AirPumpLine%DIAM_AIR_INCH(I)=AirPumpLine%PIPINGS_AIRPUMP(I,1) | |||||
AirPumpLine%LENGT_AIR(I)=AirPumpLine%PIPINGS_AIRPUMP(I,2) | |||||
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) | |||||
REL_ROUGHAIR(I)=ROUGHNESS_AIRPLINE(I)/(DIAM_AIR_INCH(I)*25.4) | |||||
AirPumpLine%AREA_AIR(I)=PI*(AirPumpLine%DIAM_AIR_INCH(I)*0.0254)**2/4 !D(in), AREA(m) | |||||
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 | |||||
MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow | |||||
MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter | |||||
MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve | |||||
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(1,1:4)= (/2., 10., 0., 0./) !Acc.tee | |||||
AirPumpLine%MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow | |||||
AirPumpLine%MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter | |||||
AirPumpLine%MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve | |||||
AirPumpLine%MINORS_AIRPUMP(5,1:4)= (/1., 0., 9.2, 0./) !valve | |||||
AirPumpLine%MINORS_AIRPUMP(6,1:4)= (/2., 6.4, 0., 0./) !unionA | |||||
ALLOCATE (MINORDIAM_AIR_INCH(NO_MINORS_AIRPLINE),MINORAREA_AIR(NO_MINORS_AIRPLINE), & | |||||
LF_AIR(NO_MINORS_AIRPLINE),CV_AIR(NO_MINORS_AIRPLINE),NOTE_AIR(NO_MINORS_AIRPLINE) & | |||||
,minlosspa_air(NO_MINORS_AIRPLINE),minloss_air(NO_MINORS_AIRPLINE)) | |||||
ALLOCATE (AirPumpLine%MINORDIAM_AIR_INCH(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%MINORAREA_AIR(AirPumpLine%NO_MINORS_AIRPLINE), & | |||||
AirPumpLine%LF_AIR(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%CV_AIR(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%NOTE_AIR(AirPumpLine%NO_MINORS_AIRPLINE) & | |||||
,AirPumpLine%minlosspa_air(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%minloss_air(AirPumpLine%NO_MINORS_AIRPLINE)) | |||||
DO I=1,NO_MINORS_AIRPLINE | |||||
MINORDIAM_AIR_INCH(I)=MINORS_AIRPUMP(I,1) | |||||
LF_AIR(I)=MINORS_AIRPUMP(I,2) | |||||
CV_AIR(I)=MINORS_AIRPUMP(I,3) | |||||
NOTE_AIR(I)=MINORS_AIRPUMP(I,4) | |||||
DO I=1,AirPumpLine%NO_MINORS_AIRPLINE | |||||
AirPumpLine%MINORDIAM_AIR_INCH(I)=AirPumpLine%MINORS_AIRPUMP(I,1) | |||||
AirPumpLine%LF_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,2) | |||||
AirPumpLine%CV_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,3) | |||||
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 | |||||
diffp_air=-10 | |||||
losses_air=10 | |||||
AirDrivenPump%QAIR_PUMP=AirPumpLine%QITER+.1 !(gpm) maximum flow for the start | |||||
AirPumpLine%diffp_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) | |||||
QAIR_PUMP=QAIR_PUMP-.1 | |||||
! Qup=QAIR_PUMP; | |||||
do while (AirPumpLine%diffp_air<0) | |||||
AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP-.1 | |||||
! 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 | |||||
QAIR_PUMP=QAIR_PUMP+.005 | |||||
if (AirPumpLine%diffp_air-AirPumpLine%losses_air>0) then | |||||
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 | |||||
Re_air(i)=QAIR_PUMP*6.30902e-005*DIAM_AIR_INCH(I)*0.0254/(area_air(i)*nu) | |||||
do i=1,AirPumpLine%NO_PIPINGS_AIRPLINE | |||||
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 | |||||
if (Re_air(i)<Re_cr) then | |||||
fric_air(i)=64/Re_air(i) | |||||
do i=1,AirPumpLine%NO_PIPINGS_AIRPLINE | |||||
if (AirPumpLine%Re_air(i)<Re_cr) then | |||||
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 | |||||
if (LF_air(i)/=0) then | |||||
minlosspa_air(i)=LF_air(i)*wdens*sg*(QAIR_PUMP*6.30902e-005/MINORAREA_AIR(i))**2/2 !(Pa) | |||||
minloss_air(i)=minlosspa_air(i)/6895 !(psi) | |||||
elseif (CV_air(i)/=0) then | |||||
minlosspa_air(i)=1000*sg*((11.7*QAIR_PUMP*6.30902e-005*3600)/(CV_air(i)))**2 !(pa) | |||||
minloss_air(i)=minlosspa_air(i)/6895 !(psi) | |||||
do i=1,AirPumpLine%NO_MINORS_AIRPLINE | |||||
if (AirPumpLine%LF_AIR(i)/=0) then | |||||
AirPumpLine%minlosspa_air(i)=AirPumpLine%LF_AIR(i)*wdens*sg*(AirDrivenPump%QAIR_PUMP*6.30902e-005/AirPumpLine%MINORAREA_AIR(i))**2/2 !(Pa) | |||||
AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi) | |||||
elseif (AirPumpLine%CV_AIR(i)/=0) then | |||||
AirPumpLine%minlosspa_air(i)=1000*sg*((11.7*AirDrivenPump%QAIR_PUMP*6.30902e-005*3600)/(AirPumpLine%CV_AIR(i)))**2 !(pa) | |||||
AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi) | |||||
else | else | ||||
minlosspa_air(i)=NOTE_air(i)*1e5 !(pa) | |||||
minloss_air(i)=minlosspa_air(i)/6895 !(psi) | |||||
AirPumpLine%minlosspa_air(i)=AirPumpLine%NOTE_AIR(i)*1e5 !(pa) | |||||
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 | |||||
QAIR_PUMP=QAIR_PUMP*(ChokeControlPanel%ChokeRateControlKnob/10.) ! final Q (gpm) | |||||
AirPumpLine%QITER=AirDrivenPump%QAIR_PUMP | |||||
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 | |||||
SoundChokePump= 60 | |||||
Cumulative_AirVolume_Choke= Cumulative_AirVolume_Choke - 1.0 | |||||
if ( Choke%Cumulative_AirVolume_Choke > 1.0 ) then | |||||
Choke%SoundChokePump= 60 | |||||
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) | |||||
alpha_Pdownstrem=Pdownstrem | |||||
alpha_pairp=p_airp | |||||
alpha_Qair=QAIR_PUMP | |||||
AirPumpLine%alpha_timeair=AirPumpLine%TIME ! overal time (s) | |||||
AirPumpLine%alpha_Pdownstrem=AirPumpLine%Pdownstrem | |||||
AirPumpLine%alpha_pairp=AirPumpLine%P_AIRP | |||||
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 | |||||
CHOOKE(CHNUMBER)%PassedCourse=CourseBase | |||||
SoundChokePump= 0.0 | |||||
if (CHOOKE(CHNUMBER)%ChokeIsClosing .AND. CHOOKE(CHNUMBER)%PassedCourse>AirPumpLine%CourseBase) then | |||||
CHOOKE(CHNUMBER)%PassedCourse=AirPumpLine%CourseBase | |||||
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 | |||||
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= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf | |||||
Choke%HydraulicChoke1WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time | |||||
HydraulicChoke2WashoutCoef= 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= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf | |||||
Choke%HydraulicChoke2WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time | |||||
!write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef | !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 | |||||
DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Present_HydraulicChoke1Plug | |||||
Plug1TimeCounter = 0 | |||||
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then | |||||
Choke%DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Choke%Present_HydraulicChoke1Plug | |||||
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 | |||||
DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Present_HydraulicChoke2Plug | |||||
Plug2TimeCounter = 0 | |||||
if ( (ChokeProblems%HydraulicChoke2PluggedPercent - Choke%HydraulicChoke2PluggedPercent_Old) /= 0 ) then | |||||
Choke%DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Choke%Present_HydraulicChoke2Plug | |||||
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)%PlugMalf* Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | |||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*Choke%HydraulicChoke2WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | |||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Choke%Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | |||||
!write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke | !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 SetHydraulicChock2(100 - nint((CHOOKE(2)%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/(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 | ||||
@@ -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 | |||||
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= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf | |||||
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 | |||||
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= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf | |||||
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 | |||||
DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Present_HydraulicChoke1Plug | |||||
Plug1TimeCounter = 0 | |||||
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then | |||||
Choke%DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Choke%Present_HydraulicChoke1Plug | |||||
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 | |||||
DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Present_HydraulicChoke2Plug | |||||
Plug2TimeCounter = 0 | |||||
if ( (ChokeProblems%HydraulicChoke2PluggedPercent - Choke%HydraulicChoke2PluggedPercent_Old) /= 0 ) then | |||||
Choke%DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Choke%Present_HydraulicChoke2Plug | |||||
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)%PlugMalf* Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | |||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*Choke%HydraulicChoke2WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | |||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Choke%Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | |||||
!write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke | !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 SetHydraulicChock2(100 - nint((CHOOKE(2)%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/(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 |
@@ -12,28 +12,35 @@ IMPLICIT NONE | |||||
!=========================================================================== | !=========================================================================== | ||||
! CHOKE VARIABLES | ! CHOKE VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL Ycritical,Cp,Cv,CL,kRatio,nPolytripic,x1,SGliquid,WaterDensity,LiquidDensity,VL,VG1 | |||||
REAL epsilon_step,epsilon_abs,step_size,Ycritical_a,Ycritical_b,Ycritical_c | |||||
REAL G2,Cdrag,Pwh,MixDens2,Yratio_a,Yratio_b,Yratio_c,Yratio,Yratio_low,Yratio_high | |||||
REAL FlowRate,Patm,MassFlux,LiquidPPG,time2,AreaChoke | |||||
REAL eps_step,eps_abs,Yratiomat(100),Yrario_actual,Yrario | |||||
REAL :: DegreeOpen,GRAVITY1=9.81!,PercentClose | |||||
REAL ChokedMassFlux,ChokedFlowRate,PwhChoked | |||||
REAL TotalStrokes1,TotalStrokes2 | |||||
!INTEGER WashoutMalf,PlugMalf,failMalf | |||||
INTEGER GaugeChokePositionMailf,SoundChokePump | |||||
Real Cumulative_AirVolume_Choke | |||||
Real HydraulicChoke1WashoutCoef,HydraulicChoke2WashoutCoef | |||||
Real Present_HydraulicChoke1Plug, Present_HydraulicChoke2Plug,DeltaPlug1Percent,DeltaPlug2Percent | |||||
Integer HydraulicChoke1PluggedPercent_Old,HydraulicChoke2PluggedPercent_Old,Plug1TimeCounter,Plug2TimeCounter,ChokePlugTimeDelay | |||||
Real ChokeAreaFullyOpen | |||||
type::ChokeType | |||||
REAL Ycritical,Cp,Cv,CL,kRatio,nPolytripic,x1,SGliquid,WaterDensity,LiquidDensity,VL,VG1 | |||||
REAL epsilon_step,epsilon_abs,step_size,Ycritical_a,Ycritical_b,Ycritical_c | |||||
REAL G2,Cdrag,Pwh,MixDens2,Yratio_a,Yratio_b,Yratio_c,Yratio,Yratio_low,Yratio_high | |||||
REAL FlowRate,Patm,MassFlux,LiquidPPG,time2,AreaChoke | |||||
REAL eps_step,eps_abs,Yratiomat(100),Yrario_actual,Yrario | |||||
REAL :: DegreeOpen,GRAVITY1=9.81!,PercentClose | |||||
REAL ChokedMassFlux,ChokedFlowRate,PwhChoked | |||||
REAL TotalStrokes1,TotalStrokes2 | |||||
!INTEGER WashoutMalf,PlugMalf,failMalf | |||||
INTEGER GaugeChokePositionMailf,SoundChokePump | |||||
Real Cumulative_AirVolume_Choke | |||||
Real HydraulicChoke1WashoutCoef,HydraulicChoke2WashoutCoef | |||||
Real Present_HydraulicChoke1Plug, Present_HydraulicChoke2Plug,DeltaPlug1Percent,DeltaPlug2Percent | |||||
Integer HydraulicChoke1PluggedPercent_Old,HydraulicChoke2PluggedPercent_Old,Plug1TimeCounter,Plug2TimeCounter,ChokePlugTimeDelay | |||||
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 | |||||
REAL P_AIRP,QITER,DELTAV_AIR,TIME,DeltaT_Choke,TOL_AIR | |||||
REAL diffp_air,losses_air,pipe_loss1air,minor_loss1air,static_loss1air | |||||
integer NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | |||||
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | |||||
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:),MINORS_AIRPUMP(:,:) | |||||
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) | |||||
REAL,ALLOCATABLE:: ROUGHNESS_AIRPLINE(:),PIPINGS_AIRPUMP(:,:) | |||||
REAL Acylinder,CourseBase!,PassedCourse | |||||
REAL alpha_Qair,alpha_timeair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_Pdownstrem,Pdownstrem | |||||
type::AirPumpLineType | |||||
REAL ChokeControlLeverOld | |||||
REAL P_AIRP,QITER,DELTAV_AIR,TIME,DeltaT_Choke,TOL_AIR | |||||
REAL diffp_air,losses_air,pipe_loss1air,minor_loss1air,static_loss1air | |||||
integer NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | |||||
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | |||||
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:),MINORS_AIRPUMP(:,:) | |||||
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) | |||||
REAL,ALLOCATABLE:: ROUGHNESS_AIRPLINE(:),PIPINGS_AIRPUMP(:,:) | |||||
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 | ||||
@@ -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 | ||||
@@ -28,34 +28,34 @@ | |||||
kRatio=1.4 | |||||
Cp=0.24 | |||||
CL=0.8 | |||||
Choke%kRatio=1.4 | |||||
Choke%Cp=0.24 | |||||
Choke%CL=0.8 | |||||
x1=0.5 | |||||
Choke%x1=0.5 | |||||
LiquidPPG=9. | |||||
LiquidDensity=LiquidPPG*7.48 !lbm/ft**3 | |||||
Choke%LiquidPPG=9. | |||||
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 | |||||
Pwh=1400. !psi | |||||
Choke%Cdrag=0.8 | |||||
Choke%Pwh=1400. !psi | |||||
Patm=14.7 | |||||
MixDens2=x1*VG1 !lbm/ft**3 | |||||
Choke%Patm=14.7 | |||||
Choke%MixDens2=Choke%x1*Choke%VG1 !lbm/ft**3 | |||||
epsilon_abs= 1e-5 | |||||
epsilon_step= 1e-5 | |||||
Choke%epsilon_abs= 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 | |||||
HydraulicChoke2WashoutCoef= 0.0 | |||||
Choke%HydraulicChoke1WashoutCoef= 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. | |||||
HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | |||||
Plug1TimeCounter= 0 | |||||
DeltaPlug1Percent = 0.0 | |||||
Choke%Present_HydraulicChoke1Plug = REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100. | |||||
Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | |||||
Choke%Plug1TimeCounter= 0 | |||||
Choke%DeltaPlug1Percent = 0.0 | |||||
Present_HydraulicChoke2Plug = REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100. | |||||
HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | |||||
Plug2TimeCounter= 0 | |||||
DeltaPlug2Percent = 0.0 | |||||
Choke%Present_HydraulicChoke2Plug = REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100. | |||||
Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | |||||
Choke%Plug2TimeCounter= 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) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
Qiter=5. !(gpm) | |||||
AirPumpLine%Pdownstrem= 4950 !+0.01*Pchoke (psi) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
AirPumpLine%QITER=5. !(gpm) | |||||
! Q=0.0003585; true | ! Q=0.0003585; true | ||||
time=0 | |||||
tol_air=0.05 | |||||
alpha_Qair=0 | |||||
alpha_timeair=0 | |||||
alpha_Pdownstrem=Pdownstrem | |||||
alpha_diffpair=0 | |||||
alpha_lossesair=0 | |||||
AirPumpLine%TIME=0 | |||||
AirPumpLine%TOL_AIR=0.05 | |||||
AirPumpLine%alpha_Qair=0 | |||||
AirPumpLine%alpha_timeair=0 | |||||
AirPumpLine%alpha_Pdownstrem=AirPumpLine%Pdownstrem | |||||
AirPumpLine%alpha_diffpair=0 | |||||
AirPumpLine%alpha_lossesair=0 | |||||
@@ -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 | ||||
@@ -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. | |||||
TotalStrokes2 =0. | |||||
Choke%TotalStrokes1 =0. | |||||
Choke%TotalStrokes2 =0. | |||||
endif | endif | ||||
endif | endif | ||||
!write(*,*) 'b)))' , ChokePanelStrokeResetSwitch | !write(*,*) 'b)))' , ChokePanelStrokeResetSwitch | ||||
TotalStrokes1= TotalStrokes1+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline | |||||
TotalStrokes2= TotalStrokes2+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline | |||||
Choke%TotalStrokes1= Choke%TotalStrokes1+((DataDisplayConsole%MP1SPMGauge)/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 | ||||
@@ -251,8 +251,8 @@ ReturnFlowRate=0. | |||||
GraphTotalStrokes=0. | GraphTotalStrokes=0. | ||||
TotalStrokes1 =0. | |||||
TotalStrokes2 =0. | |||||
Choke%TotalStrokes1 =0. | |||||
Choke%TotalStrokes2 =0. | |||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 (InstantaneousTotalOpenChokeArea <= 0.01 * ChokeAreaFullyOpen) THEN | |||||
IF (OldTotalOpenChokeArea <= 0.01 * Choke%ChokeAreaFullyOpen) OldTotalOpenChokeArea = 0.01 * Choke%ChokeAreaFullyOpen | |||||
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' | ||||
@@ -31,10 +31,10 @@ subroutine TD_BOPDiamCalculation | |||||
TD_BOPHeight(4) = BopStackSpecification%LowerRamHeight | TD_BOPHeight(4) = BopStackSpecification%LowerRamHeight | ||||
TD_BOPRamDiam(1) = IDAnnularfinal | |||||
TD_BOPRamDiam(2) = IDPipeRam1final | |||||
TD_BOPRamDiam(3) = IDshearBopfinal | |||||
TD_BOPRamDiam(4) = IDPipeRam2final | |||||
TD_BOPRamDiam(1) = ShearRam%IDAnnularFinal | |||||
TD_BOPRamDiam(2) = ShearRam%IDPipeRam1Final | |||||
TD_BOPRamDiam(3) = ShearRam%IDshearBopFinal | |||||
TD_BOPRamDiam(4) = ShearRam%IDPipeRam2Final | |||||
@@ -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 | |||||
TD_HookLoad = TD_HookLoad+(p_annular*BopStackSpecification%AnnularStringDrag) | |||||
if ( Annular%Annular_Situation_forTD==1 ) then !Annular Preventer | |||||
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 | |||||
TD_HookLoad = TD_HookLoad-(p_annular*BopStackSpecification%AnnularStringDrag) | |||||
if ( Annular%Annular_Situation_forTD==1 ) then !Annular Preventer | |||||
TD_HookLoad = TD_HookLoad-(AnnularComputational%p_annular*BopStackSpecification%AnnularStringDrag) | |||||
end if | end if | ||||
end if | end if | ||||