@@ -141,8 +141,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! ! if(associated(AnnularFailPtr)) call AnnularFailPtr(status) | ! ! if(associated(AnnularFailPtr)) call AnnularFailPtr(status) | ||||
if(status == Clear_StatusType) AnnularFailureMalf = 0 | if(status == Clear_StatusType) Annular%AnnularFailureMalf = 0 | ||||
if(status == Executed_StatusType) AnnularFailureMalf = 1 | if(status == Executed_StatusType) Annular%AnnularFailureMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeAnnularLeak(status) | subroutine ChangeAnnularLeak(status) | ||||
@@ -150,8 +150,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! ! if(associated(AnnularLeakPtr)) call AnnularLeakPtr(status) | ! ! if(associated(AnnularLeakPtr)) call AnnularLeakPtr(status) | ||||
if(status == Clear_StatusType) AnnularLeakMalf = 0 | if(status == Clear_StatusType) Annular%AnnularLeakMalf = 0 | ||||
if(status == Executed_StatusType) AnnularLeakMalf = 1 | if(status == Executed_StatusType) Annular%AnnularLeakMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
@@ -169,8 +169,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! ! if(associated(UpperRamFailPtr)) call UpperRamFailPtr(status) | ! ! if(associated(UpperRamFailPtr)) call UpperRamFailPtr(status) | ||||
if(status == Clear_StatusType) UpperRamsFailureMalf = 0 | if(status == Clear_StatusType) PipeRam1%UpperRamsFailureMalf = 0 | ||||
if(status == Executed_StatusType) UpperRamsFailureMalf = 1 | if(status == Executed_StatusType) PipeRam1%UpperRamsFailureMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeUpperRamLeak(status) | subroutine ChangeUpperRamLeak(status) | ||||
@@ -178,8 +178,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! ! if(associated(UpperRamLeakPtr)) call UpperRamLeakPtr(status) | ! ! if(associated(UpperRamLeakPtr)) call UpperRamLeakPtr(status) | ||||
if(status == Clear_StatusType) UpperRamsLeakMalf = 0 | if(status == Clear_StatusType) PipeRam1%UpperRamsLeakMalf = 0 | ||||
if(status == Executed_StatusType) UpperRamsLeakMalf = 1 | if(status == Executed_StatusType) PipeRam1%UpperRamsLeakMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
@@ -196,8 +196,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(MiddleRamFailPtr)) call MiddleRamFailPtr(status) | ! if(associated(MiddleRamFailPtr)) call MiddleRamFailPtr(status) | ||||
if(status == Clear_StatusType) MiddleRamsFailureMalf = 0 | if(status == Clear_StatusType) ShearRam%MiddleRamsFailureMalf = 0 | ||||
if(status == Executed_StatusType) MiddleRamsFailureMalf = 1 | if(status == Executed_StatusType) ShearRam%MiddleRamsFailureMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeMiddleRamLeak(status) | subroutine ChangeMiddleRamLeak(status) | ||||
@@ -205,8 +205,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! ! if(associated(MiddleRamLeakPtr)) call MiddleRamLeakPtr(status) | ! ! if(associated(MiddleRamLeakPtr)) call MiddleRamLeakPtr(status) | ||||
if(status == Clear_StatusType) MiddleRamsLeakMalf = 0 | if(status == Clear_StatusType) ShearRam%MiddleRamsLeakMalf = 0 | ||||
if(status == Executed_StatusType) MiddleRamsLeakMalf = 1 | if(status == Executed_StatusType) ShearRam%MiddleRamsLeakMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
@@ -224,8 +224,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! ! if(associated(LowerRamFailPtr)) call LowerRamFailPtr(status) | ! ! if(associated(LowerRamFailPtr)) call LowerRamFailPtr(status) | ||||
if(status == Clear_StatusType) LowerRamsFailureMalf = 0 | if(status == Clear_StatusType) PipeRam2%LowerRamsFailureMalf = 0 | ||||
if(status == Executed_StatusType) LowerRamsFailureMalf = 1 | if(status == Executed_StatusType) PipeRam2%LowerRamsFailureMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeLowerRamLeak(status) | subroutine ChangeLowerRamLeak(status) | ||||
@@ -233,8 +233,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(LowerRamLeakPtr)) call LowerRamLeakPtr(status) | ! if(associated(LowerRamLeakPtr)) call LowerRamLeakPtr(status) | ||||
if(status == Clear_StatusType) LowerRamsLeakMalf = 0 | if(status == Clear_StatusType) PipeRam2%LowerRamsLeakMalf = 0 | ||||
if(status == Executed_StatusType) LowerRamsLeakMalf = 1 | if(status == Executed_StatusType) PipeRam2%LowerRamsLeakMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeAccumulatorPumpFail(status) | subroutine ChangeAccumulatorPumpFail(status) | ||||
@@ -242,8 +242,8 @@ module CBopProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(AccumulatorPumpFailPtr)) call AccumulatorPumpFailPtr(status) | ! if(associated(AccumulatorPumpFailPtr)) call AccumulatorPumpFailPtr(status) | ||||
if(status == Clear_StatusType) AccPupmsFailMalf = 0 | if(status == Clear_StatusType) BopStackAcc%AccPupmsFailMalf = 0 | ||||
if(status == Executed_StatusType) AccPupmsFailMalf = 1 | if(status == Executed_StatusType) BopStackAcc%AccPupmsFailMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeAccumulatorPumpLeak(status) | subroutine ChangeAccumulatorPumpLeak(status) | ||||
@@ -243,8 +243,8 @@ module CChokeProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(ChokePanelAirFailPtr)) call ChokePanelAirFailPtr(status) | ! if(associated(ChokePanelAirFailPtr)) call ChokePanelAirFailPtr(status) | ||||
if(status == Clear_StatusType) ChokeAirFail = 0 | if(status == Clear_StatusType) AirDrivenPump%ChokeAirFail = 0 | ||||
if(status == Executed_StatusType) ChokeAirFail = 1 | if(status == Executed_StatusType) AirDrivenPump%ChokeAirFail = 1 | ||||
endsubroutine | endsubroutine | ||||
@@ -305,8 +305,8 @@ module CGaugesProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(AccumulatorPressurePtr)) call AccumulatorPressurePtr(status) | ! if(associated(AccumulatorPressurePtr)) call AccumulatorPressurePtr(status) | ||||
if(status == Clear_StatusType) AccumulatorPressureGaugeMalf = 0 | if(status == Clear_StatusType) BopStackAcc%AccumulatorPressureGaugeMalf = 0 | ||||
if(status == Executed_StatusType) AccumulatorPressureGaugeMalf = 1 | if(status == Executed_StatusType) BopStackAcc%AccumulatorPressureGaugeMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeManifoldPressure(status) | subroutine ChangeManifoldPressure(status) | ||||
@@ -314,8 +314,8 @@ module CGaugesProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(ManifoldPressurePtr)) call ManifoldPressurePtr(status) | ! if(associated(ManifoldPressurePtr)) call ManifoldPressurePtr(status) | ||||
if(status == Clear_StatusType) ManifoldPressureGaugeMalf = 0 | if(status == Clear_StatusType) BopStackAcc%ManifoldPressureGaugeMalf = 0 | ||||
if(status == Executed_StatusType) ManifoldPressureGaugeMalf = 1 | if(status == Executed_StatusType) BopStackAcc%ManifoldPressureGaugeMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeAnnularPressure(status) | subroutine ChangeAnnularPressure(status) | ||||
@@ -323,8 +323,8 @@ module CGaugesProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(AnnularPressurePtr)) call AnnularPressurePtr(status) | ! if(associated(AnnularPressurePtr)) call AnnularPressurePtr(status) | ||||
if(status == Clear_StatusType) AnnularPressureGaugeMalf = 0 | if(status == Clear_StatusType) Annular%AnnularPressureGaugeMalf = 0 | ||||
if(status == Executed_StatusType) AnnularPressureGaugeMalf = 1 | if(status == Executed_StatusType) Annular%AnnularPressureGaugeMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeRigAirPressure(status) | subroutine ChangeRigAirPressure(status) | ||||
@@ -332,8 +332,8 @@ module CGaugesProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(RigAirPressurePtr)) call RigAirPressurePtr(status) | ! if(associated(RigAirPressurePtr)) call RigAirPressurePtr(status) | ||||
if(status == Clear_StatusType) AirSupplyPressureGaugeMalf = 0 | if(status == Clear_StatusType) BopStackAcc%AirSupplyPressureGaugeMalf = 0 | ||||
if(status == Executed_StatusType) AirSupplyPressureGaugeMalf = 1 | if(status == Executed_StatusType) BopStackAcc%AirSupplyPressureGaugeMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeStandPipe1(status) | subroutine ChangeStandPipe1(status) | ||||
@@ -368,8 +368,8 @@ module CGaugesProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
! if(associated(ChokePositionPtr)) call ChokePositionPtr(status) | ! if(associated(ChokePositionPtr)) call ChokePositionPtr(status) | ||||
if(status == Clear_StatusType) GaugeChokePositionMailf = 0 | if(status == Clear_StatusType) Choke%GaugeChokePositionMailf = 0 | ||||
if(status == Executed_StatusType) GaugeChokePositionMailf = 1 | if(status == Executed_StatusType) Choke%GaugeChokePositionMailf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeCasingPressure2(status) | subroutine ChangeCasingPressure2(status) | ||||
@@ -126,8 +126,8 @@ module COtherProblemsVariables | |||||
implicit none | implicit none | ||||
integer, intent (in) :: status | integer, intent (in) :: status | ||||
!if(associated(RigAirPtr)) call RigAirPtr(status) | !if(associated(RigAirPtr)) call RigAirPtr(status) | ||||
if(status == Clear_StatusType) RigAirMalf = 0 | if(status == Clear_StatusType) BopStackAcc%RigAirMalf = 0 | ||||
if(status == Executed_StatusType) RigAirMalf = 1 | if(status == Executed_StatusType) BopStackAcc%RigAirMalf = 1 | ||||
endsubroutine | endsubroutine | ||||
subroutine ChangeGen1(status) | subroutine ChangeGen1(status) | ||||
@@ -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 | Annular%tolAnnular=0.0018 | ||||
if (finished_Annular==1) then | if (Annular%finished_Annular==1) then | ||||
AnnularLeverOld=-1.0 | Annular%AnnularLeverOld=-1.0 | ||||
else | else | ||||
AnnularLeverOld=BopControlPanel%AnnularValve | Annular%AnnularLeverOld=BopControlPanel%AnnularValve | ||||
endif | endif | ||||
finished_Annular=0 | Annular%finished_Annular=0 | ||||
AnnularIsClosing = .true. | Annular%AnnularIsClosing = .true. | ||||
AnnularIsOpening = .false. | Annular%AnnularIsOpening = .false. | ||||
RAM(2)%bop_type = 3 | RAM(2)%bop_type = 3 | ||||
!AbopAnnular=963.1 !(in^2) | !AbopAnnular=963.1 !(in^2) | ||||
AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231.)/((IDAnnularBase-ODDrillpipe_inAnnularBase)/2.) ! 231 in^3 = 1 gal | Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231.)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.) ! 231 in^3 = 1 gal | ||||
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/(2.*231) !=17.98 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnularBase=5 | Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnularBase-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/(2.*231) !=17.98 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnularBase=5 | ||||
!WRITE(*,*) 'a)NeededVolumeAnnular=' , NeededVolumeAnnular | !WRITE(*,*) 'a)NeededVolumeAnnular=' , NeededVolumeAnnular | ||||
!write(*,*) 'close 1' | !write(*,*) 'close 1' | ||||
endif | endif | ||||
if (BopControlPanel%AnnularValve == -1.0 .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then | if (BopControlPanel%AnnularValve == -1.0 .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then | ||||
if (AnnularOpenLedMine == LedOn) then | if (BopStackInput%AnnularOpenLedMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
@@ -105,13 +105,13 @@ SUBROUTINE ANNULAR | |||||
if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(1)%First_OpenTimecheck= 1 | RAM(1)%First_OpenTimecheck= 1 | ||||
BopControlPanel%AnnularCloseLED = LedOff !new | BopControlPanel%AnnularCloseLED = LedOff !new | ||||
AnnularCloseLedMine = LedOff !new | BopStackInput%AnnularCloseLedMine = LedOff !new | ||||
BopControlPanel%AnnularOpenLED = LedOn !LedBlinking | BopControlPanel%AnnularOpenLED = LedOn !LedBlinking | ||||
RAM(1)%FourwayValve = 1 | RAM(1)%FourwayValve = 1 | ||||
@@ -124,36 +124,36 @@ SUBROUTINE ANNULAR | |||||
if (RAM(1)%FourwayValve == 1 .and. Pannular_reg>AnnularMovingPressure .and. p_acc>acc_MinPressure & | if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure & | ||||
.and. (Annular_closed==0 .or. (Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Pannular_reg>=AnnularSealingPressure))) then ! 1: Open , 0: Close | .and. (Annular%Annular_closed==0 .or. (Annular%Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular%Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Annular%Pannular_reg>=AnnularComputational%AnnularSealingPressure))) then ! 1: Open , 0: Close | ||||
!write(*,*) 'open 2' | !write(*,*) 'open 2' | ||||
RAM(1)%FourwayValve = 0 | RAM(1)%FourwayValve = 0 | ||||
Annular_closed=0 | Annular%Annular_closed=0 | ||||
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) | !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) | ||||
RAM(1)%vdis_tot=0 | RAM(1)%vdis_tot=0 | ||||
RAM(1)%vdis_bottles=0. | RAM(1)%vdis_bottles=0. | ||||
RAM(1)%fvr_air=0. | RAM(1)%fvr_air=0. | ||||
RAM(1)%vdis_elecp=0. | RAM(1)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(1)%Qzero=70 | RAM(1)%Qzero=70 | ||||
RAM(1)%Q=RAM(1)%Qzero | RAM(1)%Q=RAM(1)%Qzero | ||||
RAM(1)%flow=70 | RAM(1)%flow=70 | ||||
tolAnnular=0.0018 | Annular%tolAnnular=0.0018 | ||||
if (finished_Annular==1) then | if (Annular%finished_Annular==1) then | ||||
AnnularLeverOld=1.0 | Annular%AnnularLeverOld=1.0 | ||||
else | else | ||||
AnnularLeverOld=BopControlPanel%AnnularValve | Annular%AnnularLeverOld=BopControlPanel%AnnularValve | ||||
endif | endif | ||||
finished_Annular=0 | Annular%finished_Annular=0 | ||||
AnnularIsOpening = .true. | Annular%AnnularIsOpening = .true. | ||||
AnnularIsClosing = .false. | Annular%AnnularIsClosing = .false. | ||||
!if (AnnularOpenLed == LedOn) then | !if (AnnularOpenLed == LedOn) then | ||||
@@ -164,22 +164,22 @@ SUBROUTINE ANNULAR | |||||
RAM(1)%bop_type = 3 | RAM(1)%bop_type = 3 | ||||
!AbopAnnular=758.48 !(in^2) | !AbopAnnular=758.48 !(in^2) | ||||
AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((IDAnnularBase-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/2.) | Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((Annular%IDAnnularBase-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/2.) | ||||
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-ODDrillpipe_inAnnular)/(2.*231) !=14.16 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnular=5 | Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnular)/(2.*231) !=14.16 galon for IDAnnularBase=13 5/8 , ODDrillpipe_inAnnular=5 | ||||
!write(*,*) 'open 1' | !write(*,*) 'open 1' | ||||
endif | endif | ||||
!===================================================================== | !===================================================================== | ||||
if (AnnularIsOpening .or. AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | if (Annular%AnnularIsOpening .or. Annular%AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | ||||
CALL ANNULAR_SUB | CALL ANNULAR_SUB2 | ||||
end if | end if | ||||
END SUBROUTINE ANNULAR | END SUBROUTINE ANNULAR_SUB1 | ||||
@@ -194,7 +194,7 @@ end if | |||||
SUBROUTINE ANNULAR_SUB | SUBROUTINE ANNULAR_SUB2 | ||||
USE VARIABLES | USE VARIABLES | ||||
USE PressureDisplayVARIABLES | USE PressureDisplayVARIABLES | ||||
USE CBopControlPanelVariables | USE CBopControlPanelVariables | ||||
@@ -205,8 +205,8 @@ SUBROUTINE ANNULAR_SUB | |||||
implicit none | implicit none | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
! loop5: do while (finished_Annular==0) | ! loop5: do while (finished_Annular==0) | ||||
@@ -218,7 +218,7 @@ SUBROUTINE ANNULAR_SUB | |||||
! CALL CPU_TIME(Annular_StartTime) | ! CALL CPU_TIME(Annular_StartTime) | ||||
if (BopControlPanel%AnnularValve == 1.0 .and. AnnularLeverOld == -1.0 .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%AnnularValve == 1.0 .and. Annular%AnnularLeverOld == -1.0 .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if ( RAM(1)%First_CloseTimecheck == 0 ) then | if ( RAM(1)%First_CloseTimecheck == 0 ) then | ||||
@@ -233,11 +233,11 @@ SUBROUTINE ANNULAR_SUB | |||||
if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
BopControlPanel%AnnularOpenLED = LedOff | BopControlPanel%AnnularOpenLED = LedOff | ||||
AnnularOpenLedMine = LedOff | BopStackInput%AnnularOpenLedMine = LedOff | ||||
BopControlPanel%AnnularCloseLED = LedOn !LedBlinking | BopControlPanel%AnnularCloseLED = LedOn !LedBlinking | ||||
RAM(1)%FourwayValve = 1 | RAM(1)%FourwayValve = 1 | ||||
@@ -250,36 +250,36 @@ SUBROUTINE ANNULAR_SUB | |||||
endif | endif | ||||
if (RAM(1)%FourwayValve == 1 .and. Pannular_reg>AnnularMovingPressure .and. p_acc>acc_MinPressure) then | if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
!write(*,*) 'close 4' | !write(*,*) 'close 4' | ||||
RAM(1)%FourwayValve = 0 | RAM(1)%FourwayValve = 0 | ||||
Annular_closed=0 | Annular%Annular_closed=0 | ||||
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) | !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) | ||||
p_annular=pa_annular | AnnularComputational%p_annular=AnnularComputational%pa_annular | ||||
AnnularLeverOld = BopControlPanel%AnnularValve | Annular%AnnularLeverOld = BopControlPanel%AnnularValve | ||||
CALL OpenAnnular | CALL OpenAnnular | ||||
Annular_Situation_forTD= 0 ! open - for TD code | Annular%Annular_Situation_forTD= 0 ! open - for TD code | ||||
RAM(1)%bop_type = 3 | RAM(1)%bop_type = 3 | ||||
!AbopAnnular=963.1 !(in^2) | !AbopAnnular=963.1 !(in^2) | ||||
AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231)/((IDAnnularBase-ODDrillpipe_inAnnularBase)/2.) | Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerClose*231)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.) | ||||
!write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams | !write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams | ||||
NeededVolumeAnnular=AbopAnnular*(IDAnnular-max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase))/(2*231.) | Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnular-max(Annular%ODDrillpipe_inAnnular,Annular%ODDrillpipe_inAnnularBase))/(2*231.) | ||||
! write(*,*) 'NeededVolumeAnnular=',NeededVolumeAnnular | ! write(*,*) 'NeededVolumeAnnular=',NeededVolumeAnnular | ||||
RAM(1)%vdis_bottles=0. | RAM(1)%vdis_bottles=0. | ||||
RAM(1)%fvr_air=0. | RAM(1)%fvr_air=0. | ||||
RAM(1)%vdis_elecp=0. | RAM(1)%vdis_elecp=0. | ||||
AnnularIsClosing = .true. | Annular%AnnularIsClosing = .true. | ||||
AnnularIsOpening = .false. | Annular%AnnularIsOpening = .false. | ||||
!write(*,*) 'close 2' | !write(*,*) 'close 2' | ||||
endif | endif | ||||
if (BopControlPanel%AnnularValve == -1.0 .and. AnnularLeverOld == 1.0 .and. p_acc>acc_MinPressure .and. AnnularFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then | if (BopControlPanel%AnnularValve == -1.0 .and. Annular%AnnularLeverOld == 1.0 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. Annular%AnnularFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 ) then | ||||
!CasingPressure : PressureGauges(2) *****temp conditionssssss | !CasingPressure : PressureGauges(2) *****temp conditionssssss | ||||
@@ -295,11 +295,11 @@ SUBROUTINE ANNULAR_SUB | |||||
RAM(1)%SuccessionCounterOld= RAM(1)%SuccessionCounter | RAM(1)%SuccessionCounterOld= RAM(1)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(1)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(1)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
BopControlPanel%AnnularCloseLED = LedOff | BopControlPanel%AnnularCloseLED = LedOff | ||||
AnnularCloseLedMine= LedOff | BopStackInput%AnnularCloseLedMine= LedOff | ||||
BopControlPanel%AnnularOpenLED = LedOn !LedBlinking | BopControlPanel%AnnularOpenLED = LedOn !LedBlinking | ||||
RAM(1)%FourwayValve = 1 | RAM(1)%FourwayValve = 1 | ||||
@@ -313,30 +313,30 @@ SUBROUTINE ANNULAR_SUB | |||||
if (RAM(1)%FourwayValve == 1 .and. Pannular_reg>AnnularMovingPressure & | if (RAM(1)%FourwayValve == 1 .and. Annular%Pannular_reg>AnnularComputational%AnnularMovingPressure & | ||||
.and. (Annular_closed==0 .or. (Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Pannular_reg>=AnnularSealingPressure))) then | .and. (Annular%Annular_closed==0 .or. (Annular%Annular_closed==1 .and.PressureGauges(2) <=100.0) .or. (Annular%Annular_closed==1 .and.PressureGauges(2)>100.0 .and. Annular%Pannular_reg>=AnnularComputational%AnnularSealingPressure))) then | ||||
!write(*,*) 'open 4' | !write(*,*) 'open 4' | ||||
RAM(1)%FourwayValve = 0 | RAM(1)%FourwayValve = 0 | ||||
Annular_closed=0 | Annular%Annular_closed=0 | ||||
!Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) | !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) | ||||
p_annular=pa_annular | AnnularComputational%p_annular=AnnularComputational%pa_annular | ||||
AnnularLeverOld = BopControlPanel%AnnularValve | Annular%AnnularLeverOld = BopControlPanel%AnnularValve | ||||
CALL OpenAnnular | CALL OpenAnnular | ||||
Annular_Situation_forTD= 0 ! open - for TD code | Annular%Annular_Situation_forTD= 0 ! open - for TD code | ||||
RAM(1)%bop_type = 3 | RAM(1)%bop_type = 3 | ||||
!AbopAnnular=758.48 !(in^2) | !AbopAnnular=758.48 !(in^2) | ||||
AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((IDAnnularBase-ODDrillpipe_inAnnularBase)/2.) | Annular%AbopAnnular=(BopStackSpecification%AnnularPreventerOpen*231)/((Annular%IDAnnularBase-Annular%ODDrillpipe_inAnnularBase)/2.) | ||||
NeededVolumeAnnular=AbopAnnular*(IDAnnularBase-IDAnnular)/(2*231.) | Annular%NeededVolumeAnnular=Annular%AbopAnnular*(Annular%IDAnnularBase-Annular%IDAnnular)/(2*231.) | ||||
RAM(1)%vdis_bottles=0. | RAM(1)%vdis_bottles=0. | ||||
RAM(1)%fvr_air=0. | RAM(1)%fvr_air=0. | ||||
RAM(1)%vdis_elecp=0. | RAM(1)%vdis_elecp=0. | ||||
AnnularIsOpening = .true. | Annular%AnnularIsOpening = .true. | ||||
AnnularIsClosing = .false. | Annular%AnnularIsClosing = .false. | ||||
!write(*,*) 'open 2' | !write(*,*) 'open 2' | ||||
@@ -347,7 +347,7 @@ SUBROUTINE ANNULAR_SUB | |||||
RAM(1)%First_CloseTimecheck = 0 | RAM(1)%First_CloseTimecheck = 0 | ||||
RAM(1)%First_OpenTimecheck = 0 | RAM(1)%First_OpenTimecheck = 0 | ||||
RAM(1)%time=RAM(1)%time+DeltaT_BOP !overal time (s) | RAM(1)%time=RAM(1)%time+RamLine%DeltaT_BOP !overal time (s) | ||||
@@ -356,15 +356,15 @@ SUBROUTINE ANNULAR_SUB | |||||
!=================================================== | !=================================================== | ||||
! BOP | ! BOP | ||||
!=================================================== | !=================================================== | ||||
if (Annular_closed==0) then !bop closing | if (Annular%Annular_closed==0) then !bop closing | ||||
!write(*,*) 'AnnularIsClosing,AnnularIsOpening' , AnnularIsClosing,AnnularIsOpening | !write(*,*) 'AnnularIsClosing,AnnularIsOpening' , AnnularIsClosing,AnnularIsOpening | ||||
call bop_codeAnnular(1) !ramtype=4 1=RNUMBER | call bop_codeAnnular(1) !ramtype=4 1=RNUMBER | ||||
endif !bop is closing | endif !bop is closing | ||||
!================================================================ | !================================================================ | ||||
if (Annular_closed==1) then | if (Annular%Annular_closed==1) then | ||||
RAM(1)%Q=0 | RAM(1)%Q=0 | ||||
!p_bop=pram_reg | !p_bop=pram_reg | ||||
p_annular=pa_annular | AnnularComputational%p_annular=AnnularComputational%pa_annular | ||||
endif | endif | ||||
RAM(1)%timecounter_ram=RAM(1)%timecounter_ram+1 | RAM(1)%timecounter_ram=RAM(1)%timecounter_ram+1 | ||||
@@ -404,9 +404,9 @@ RAM(1)%timecounter_ram=RAM(1)%timecounter_ram+1 | |||||
if (Annular_closed==1) then | if (Annular%Annular_closed==1) then | ||||
! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ||||
finished_Annular=1 | Annular%finished_Annular=1 | ||||
! endif | ! endif | ||||
endif | endif | ||||
@@ -419,9 +419,9 @@ endif | |||||
if ( finished_Annular==1 .and. RAM(1)%Bottles_Charged_MalfActive==.true.) then | if ( Annular%finished_Annular==1 .and. RAM(1)%Bottles_Charged_MalfActive==.true.) then | ||||
call bop_codeAnnular(1) !ramtype=4 1=RNUMBER | call bop_codeAnnular(1) !ramtype=4 1=RNUMBER | ||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
endif | endif | ||||
END SUBROUTINE ANNULAR_SUB | END SUBROUTINE ANNULAR_SUB2 |
@@ -20,15 +20,15 @@ module AnnularMain | |||||
subroutine Annular_Step | subroutine Annular_Step | ||||
use VARIABLES | use VARIABLES | ||||
implicit none | implicit none | ||||
if (finished_Annular/=0) then | if (Annular%finished_Annular/=0) then | ||||
call ANNULAR | call ANNULAR_SUB1 | ||||
if (AnnularIsOpening .or. AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | if (Annular%AnnularIsOpening .or. Annular%AnnularIsClosing .or. RAM(1)%Bottles_Charged_MalfActive) then | ||||
if(finished_Annular==0) then | if(Annular%finished_Annular==0) then | ||||
call ANNULAR_SUB !only body of loop2 | call ANNULAR_SUB2 !only body of loop2 | ||||
endif | endif | ||||
endif | endif | ||||
else | else | ||||
call ANNULAR_SUB | call ANNULAR_SUB2 | ||||
endif | endif | ||||
end subroutine Annular_Step | end subroutine Annular_Step | ||||
@@ -10,17 +10,17 @@ module BOP | |||||
implicit none | implicit none | ||||
BOP_timeCounter= BOP_timeCounter + 1 | BopStackInput%BOP_timeCounter= BopStackInput%BOP_timeCounter + 1 | ||||
write(*,*) 'BOP_timeCounter=' , BOP_timeCounter | write(*,*) 'BOP_timeCounter=' , BopStackInput%BOP_timeCounter | ||||
BopControlPanel%AirSupplyPressureGauge= (1 - AirSupplyPressureGaugeMalf)* (1 - RigAirMalf) *120. !psi | BopControlPanel%AirSupplyPressureGauge= (1 - BopStackAcc%AirSupplyPressureGaugeMalf)* (1 - BopStackAcc%RigAirMalf) *120. !psi | ||||
if (pram_reg < 2300.) then | if (BopStackAcc%pram_reg < 2300.) then | ||||
ShearIsNotAllowed= 1 | ShearRam%ShearIsNotAllowed= 1 | ||||
else | else | ||||
ShearIsNotAllowed= 0 | ShearRam%ShearIsNotAllowed= 0 | ||||
endif | endif | ||||
!write(*,*) 'ShearIsNotAllowed=' , ShearIsNotAllowed | !write(*,*) 'ShearIsNotAllowed=' , ShearIsNotAllowed | ||||
@@ -36,10 +36,10 @@ module BOP | |||||
!=== Instantaneous Pipe Diameters in Each Ram (Input from TD Module):== | !=== Instantaneous Pipe Diameters in Each Ram (Input from TD Module):== | ||||
ODDrillpipe_inAnnular= TD_AnnularPreventerDiam * 12.0 ! ft to inch | Annular%ODDrillpipe_inAnnular= TD_AnnularPreventerDiam * 12.0 ! ft to inch | ||||
ODDrillpipe_inPipeRam1= TD_UpperRamDiam * 12.0 | PipeRam1%ODDrillpipe_in= TD_UpperRamDiam * 12.0 | ||||
ODDrillpipe_inShearRam= TD_BlindRamDiam * 12.0 | ShearRam%ODDrillpipe_inShearRam= TD_BlindRamDiam * 12.0 | ||||
ODDrillpipe_inPipeRam2= TD_LowerRamDiam * 12.0 | PipeRam2%ODDrillpipe_in= TD_LowerRamDiam * 12.0 | ||||
@@ -48,12 +48,12 @@ module BOP | |||||
!IDPipeRam2Final | !IDPipeRam2Final | ||||
!IDAnnularFinal | !IDAnnularFinal | ||||
OpenArea_shearBop= PI*(IDshearBopFinal**2-ODDrillpipe_inShearRam**2)/4.0d0 !D(in), AREA(in^2) | ShearRam%OpenArea_shearBop= PI*(ShearRam%IDshearBopFinal**2-ShearRam%ODDrillpipe_inShearRam**2)/4.0d0 !D(in), AREA(in^2) | ||||
OpenArea_PipeRam1= PI*(IDPipeRam1Final**2-ODDrillpipe_inPipeRam1**2)/4.0d0 !D(in), AREA(in^2) | ShearRam%OpenArea_PipeRam1= PI*(ShearRam%IDPipeRam1Final**2-PipeRam1%ODDrillpipe_in**2)/4.0d0 !D(in), AREA(in^2) | ||||
OpenArea_PipeRam2= PI*(IDPipeRam2Final**2-ODDrillpipe_inPipeRam2**2)/4.0d0 !D(in), AREA(in^2) | ShearRam%OpenArea_PipeRam2= PI*(ShearRam%IDPipeRam2Final**2-PipeRam2%ODDrillpipe_in**2)/4.0d0 !D(in), AREA(in^2) | ||||
OpenArea_Annular= PI*(IDAnnularFinal**2-ODDrillpipe_inAnnular**2)/4.0d0 !D(in), AREA(in^2) | ShearRam%OpenArea_Annular= PI*(ShearRam%IDAnnularFinal**2-Annular%ODDrillpipe_inAnnular**2)/4.0d0 !D(in), AREA(in^2) | ||||
MinimumOpenArea_InBOP= min(OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular) | ShearRam%MinimumOpenArea_InBOP= min(ShearRam%OpenArea_shearBop,ShearRam%OpenArea_PipeRam1,ShearRam%OpenArea_PipeRam2,ShearRam%OpenArea_Annular) | ||||
!TD_BOPConnectionPossibility(j) = 0 or 1 | !TD_BOPConnectionPossibility(j) = 0 or 1 | ||||
@@ -64,89 +64,89 @@ module BOP | |||||
!===================================================================== | !===================================================================== | ||||
!============SEALING PRESSURES TO BE SET IN ANNULAR REGULATOR========== | !============SEALING PRESSURES TO BE SET IN ANNULAR REGULATOR========== | ||||
WellBorePressure=5000. | AnnularComputational%WellBorePressure=5000. | ||||
if (ODDrillpipe_inAnnular>0.) then | if (Annular%ODDrillpipe_inAnnular>0.) then | ||||
if (ODDrillpipe_inAnnular>0. .and. ODDrillpipe_inAnnular<=1.99) then | if (Annular%ODDrillpipe_inAnnular>0. .and. Annular%ODDrillpipe_inAnnular<=1.99) then | ||||
acoef=-0.2673 | AnnularComputational%acoef=-0.2673 | ||||
bcoef=994.3 | AnnularComputational%Bcoef=994.3 | ||||
const=77 | AnnularComputational%const=77 | ||||
elseif (ODDrillpipe_inAnnular>1.99 .and. ODDrillpipe_inAnnular<=2.375) then | elseif (Annular%ODDrillpipe_inAnnular>1.99 .and. Annular%ODDrillpipe_inAnnular<=2.375) then | ||||
acoef=-0.2539 | AnnularComputational%acoef=-0.2539 | ||||
bcoef=994.3 | AnnularComputational%Bcoef=994.3 | ||||
const=73.15 | AnnularComputational%const=73.15 | ||||
elseif (ODDrillpipe_inAnnular>2.375 .and. ODDrillpipe_inAnnular<=2.875) then | elseif (Annular%ODDrillpipe_inAnnular>2.375 .and. Annular%ODDrillpipe_inAnnular<=2.875) then | ||||
acoef=-0.2005 | AnnularComputational%acoef=-0.2005 | ||||
bcoef=745.9 | AnnularComputational%Bcoef=745.9 | ||||
const=57.75 | AnnularComputational%const=57.75 | ||||
elseif (ODDrillpipe_inAnnular>2.875 .and. ODDrillpipe_inAnnular<=3.5) then | elseif (Annular%ODDrillpipe_inAnnular>2.875 .and. Annular%ODDrillpipe_inAnnular<=3.5) then | ||||
acoef=-0.1871 | AnnularComputational%acoef=-0.1871 | ||||
bcoef=696.1 | AnnularComputational%Bcoef=696.1 | ||||
const=53.9 | AnnularComputational%const=53.9 | ||||
elseif (ODDrillpipe_inAnnular>3.5 .and. ODDrillpipe_inAnnular<=5) then | elseif (Annular%ODDrillpipe_inAnnular>3.5 .and. Annular%ODDrillpipe_inAnnular<=5) then | ||||
acoef=-0.1733 | AnnularComputational%acoef=-0.1733 | ||||
bcoef=647 | AnnularComputational%Bcoef=647 | ||||
const=50 | AnnularComputational%const=50 | ||||
elseif (ODDrillpipe_inAnnular>5 .and. ODDrillpipe_inAnnular<=10) then | elseif (Annular%ODDrillpipe_inAnnular>5 .and. Annular%ODDrillpipe_inAnnular<=10) then | ||||
acoef=-0.1604 | AnnularComputational%acoef=-0.1604 | ||||
bcoef=596.7 | AnnularComputational%Bcoef=596.7 | ||||
const=46.2 | AnnularComputational%const=46.2 | ||||
endif | endif | ||||
AnnularSealingPressure= max((acoef*WellBorePressure+bcoef), const) !(psi) | AnnularComputational%AnnularSealingPressure= max((AnnularComputational%acoef*AnnularComputational%WellBorePressure+AnnularComputational%Bcoef), AnnularComputational%const) !(psi) | ||||
else !CSO(COMPLETE SHUT OFF) ODDrillpipe_inAnnular=0 | else !CSO(COMPLETE SHUT OFF) ODDrillpipe_inAnnular=0 | ||||
AnnularSealingPressure= 1150. !(psi) | AnnularComputational%AnnularSealingPressure= 1150. !(psi) | ||||
endif | endif | ||||
!===================================================================== | !===================================================================== | ||||
! BYPASS POSITION | ! BYPASS POSITION | ||||
!===================================================================== | !===================================================================== | ||||
if(BopControlPanel%ByePassValve == -1.0 .and. BopControlPanel%AirMasterValve==1) then | if(BopControlPanel%ByePassValve == -1.0 .and. BopControlPanel%AirMasterValve==1) then | ||||
ByPassOld= -1.0 | BopStackAcc%ByPassOld= -1.0 | ||||
!write(*,*) 'ByePassValve to -1' ,ByePassValve | !write(*,*) 'ByePassValve to -1' ,ByePassValve | ||||
elseif(BopControlPanel%ByePassValve == 1.0 .and. BopControlPanel%AirMasterValve==1) then | elseif(BopControlPanel%ByePassValve == 1.0 .and. BopControlPanel%AirMasterValve==1) then | ||||
ByPassOld= 1.0 | BopStackAcc%ByPassOld= 1.0 | ||||
!write(*,*) 'ByePassValve to 1=' ,ByePassValve | !write(*,*) 'ByePassValve to 1=' ,ByePassValve | ||||
endif | endif | ||||
!write(*,*) 'ByePassValve,ByPassOld=' ,ByePassValve,ByPassOld | !write(*,*) 'ByePassValve,ByPassOld=' ,ByePassValve,ByPassOld | ||||
!===================================================================== | !===================================================================== | ||||
!WRITE(*,*) 'AnnularRegulatorSetControl====' , AnnularRegulatorSetControl | !WRITE(*,*) 'AnnularRegulatorSetControl====' , AnnularRegulatorSetControl | ||||
Pannular_regset=min(BopControlPanel%AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously | Annular%Pannular_regset=min(BopControlPanel%AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously | ||||
if (Annular_closed==1) then | if (Annular%Annular_closed==1) then | ||||
if (FirstSet==1) then ! code start | if (Annular%FirstSet==1) then ! code start | ||||
Pannular_reg= Pannular_regset | Annular%Pannular_reg= Annular%Pannular_regset | ||||
endif | endif | ||||
if (FirstSet==0) then ! durig run, but annular is not closing or opening | if (Annular%FirstSet==0) then ! durig run, but annular is not closing or opening | ||||
Pannular_reg= min(p_acc,Pannular_regset) | Annular%Pannular_reg= min(RamLine%P_ACC,Annular%Pannular_regset) | ||||
endif | endif | ||||
endif | endif | ||||
!=================================================================== | !=================================================================== | ||||
! Annular Preventer Pressure Rise On Tooljoint | ! Annular Preventer Pressure Rise On Tooljoint | ||||
!=================================================================== | !=================================================================== | ||||
if ( Annular_Situation_forTD == 1 .and. TD_AnnularFillingFinal==0.0 ) then ! Annular_Situation_forTD= 1 ! closed - for TD code | if ( Annular%Annular_Situation_forTD == 1 .and. TD_AnnularFillingFinal==0.0 ) then ! Annular_Situation_forTD= 1 ! closed - for TD code | ||||
AnnPressureRise= .true. | AnnularComputational%AnnPressureRise= .true. | ||||
elseif ( Annular_Situation_forTD == 0 ) then | elseif ( Annular%Annular_Situation_forTD == 0 ) then | ||||
AnnPressureRise= .false. | AnnularComputational%AnnPressureRise= .false. | ||||
endif | endif | ||||
if (AnnPressureRise == .true.) then | if (AnnularComputational%AnnPressureRise == .true.) then | ||||
Pannular_reg= Pannular_reg + 200. * TD_AnnularFillingFinal ! 200 psi pressure rise when 100% of AnnPreventer is filled by tool joint | Annular%Pannular_reg= Annular%Pannular_reg + 200. * TD_AnnularFillingFinal ! 200 psi pressure rise when 100% of AnnPreventer is filled by tool joint | ||||
!TD_AnnularFillingFinal ! (0.0 to 1.0) percentage filled by tool joint | !TD_AnnularFillingFinal ! (0.0 to 1.0) percentage filled by tool joint | ||||
endif | endif | ||||
!=================================================================== | !=================================================================== | ||||
if (FirstSet== 1) then | if (Annular%FirstSet== 1) then | ||||
!new= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.) | !new= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.) | ||||
CALL Pannular_regDelay%AddToFirst( (1 - AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) ) | CALL AnnularComputational%Pannular_regDelay%AddToFirst( (1 - Annular%AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) ) | ||||
CALL Pannular_regDelay%Remove(Pannular_regDelay%Length()) | CALL AnnularComputational%Pannular_regDelay%Remove(AnnularComputational%Pannular_regDelay%Length()) | ||||
BopControlPanel%AnnularPressureGauge= Pannular_regDelay%Last() | BopControlPanel%AnnularPressureGauge= AnnularComputational%Pannular_regDelay%Last() | ||||
!AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.) | !AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(AnnularRegulatorSetControl,1700.) | ||||
!write(*,*) 'set 1' , AnnularPressureGauge | !write(*,*) 'set 1' , AnnularPressureGauge | ||||
else !FirstSet== 0 | else !FirstSet== 0 | ||||
!new= (1 - AnnularPressureGaugeMalf) * Pannular_reg | !new= (1 - AnnularPressureGaugeMalf) * Pannular_reg | ||||
CALL Pannular_regDelay%AddToFirst( (1 - AnnularPressureGaugeMalf) * Pannular_reg) | CALL AnnularComputational%Pannular_regDelay%AddToFirst( (1 - Annular%AnnularPressureGaugeMalf) * Annular%Pannular_reg) | ||||
CALL Pannular_regDelay%Remove(Pannular_regDelay%Length()) | CALL AnnularComputational%Pannular_regDelay%Remove(AnnularComputational%Pannular_regDelay%Length()) | ||||
BopControlPanel%AnnularPressureGauge= Pannular_regDelay%Last() | BopControlPanel%AnnularPressureGauge= AnnularComputational%Pannular_regDelay%Last() | ||||
!AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * Pannular_reg | !AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * Pannular_reg | ||||
!write(*,*) 'set 0' , AnnularPressureGauge | !write(*,*) 'set 0' , AnnularPressureGauge | ||||
endif | endif | ||||
@@ -154,122 +154,122 @@ module BOP | |||||
!=================================================== | !=================================================== | ||||
! AIR OPERATED PUMP CODE- START | ! AIR OPERATED PUMP CODE- START | ||||
!=================================================== | !=================================================== | ||||
if (p_acc<AIR_PUMPON .and. airp_switch==0) then | if (RamLine%P_ACC<Pumps%AIR_ON .and. RamLine%AIRP_SWITCH==0) then | ||||
airp_switch=1 | RamLine%AIRP_SWITCH=1 | ||||
endif | endif | ||||
if (p_acc>AIR_PUMPOFF .and. airp_switch==1) then | if (RamLine%P_ACC>Pumps%AIR_OFF .and. RamLine%AIRP_SWITCH==1) then | ||||
airp_switch=0 | RamLine%AIRP_SWITCH=0 | ||||
call SetSoundKoomeyAirPump(airp_switch) | call SetSoundKoomeyAirPump(RamLine%AIRP_SWITCH) | ||||
endif | endif | ||||
if (p_acc<ELECTRIC_PUMPON .and. elecp_switch==0) then | if (RamLine%P_ACC<Pumps%ELECTRIC_ON .and. RamLine%ELECP_SWITCH==0) then | ||||
elecp_switch=1 | RamLine%ELECP_SWITCH=1 | ||||
endif | endif | ||||
if (p_acc>ELECTRIC_PUMPOFF .and. elecp_switch==1) then | if (RamLine%P_ACC>Pumps%ELECTRIC_OFF .and. RamLine%ELECP_SWITCH==1) then | ||||
elecp_switch=0 | RamLine%ELECP_SWITCH=0 | ||||
endif | endif | ||||
!write(*,*) 'airp_switch,elecp_switch=' , airp_switch,elecp_switch | !write(*,*) 'airp_switch,elecp_switch=' , airp_switch,elecp_switch | ||||
!================CHARGING BOTTLES======================= | !================CHARGING BOTTLES======================= | ||||
if (airp_switch==1 .or. elecp_switch==1) then | if (RamLine%AIRP_SWITCH==1 .or. RamLine%ELECP_SWITCH==1) then | ||||
if (Annular_closed==1 .and. ShearBop_closed==1 .and. PipeRam1_closed==1 .and. PipeRam2_closed==1 .and. ChokeLine_closed==1 .and. KillLine_closed==1) then | if (Annular%Annular_closed==1 .and. RamLine%ShearBop_closed==1 .and. PipeRam1%closed==1 .and. PipeRam2%closed==1 .and. ChokeLine%closed==1 .and. KillLine%closed==1) then | ||||
call pumps_charge_bottle() | call pumps_charge_bottle() | ||||
! increases volume and pressure in the bottles | ! increases volume and pressure in the bottles | ||||
if (p_acc>acc_ChargedPressure) then | if (RamLine%P_ACC>BopStackAcc%acc_ChargedPressure) then | ||||
p_acc=acc_ChargedPressure | RamLine%P_ACC=BopStackAcc%acc_ChargedPressure | ||||
if (AnnularLeakMalf== 0) then | if (Annular%AnnularLeakMalf== 0) then | ||||
!finished_Annular=1 | !finished_Annular=1 | ||||
RAM(1)%Bottles_Charged_MalfActive= .false. | RAM(1)%Bottles_Charged_MalfActive= .false. | ||||
else | else | ||||
finished_Annular=0 | Annular%finished_Annular=0 | ||||
RAM(1)%Bottles_Charged_MalfActive= .true. | RAM(1)%Bottles_Charged_MalfActive= .true. | ||||
!fvr=fvr-2.5 | !fvr=fvr-2.5 | ||||
endif | endif | ||||
if (UpperRamsLeakMalf== 0) then | if (PipeRam1%UpperRamsLeakMalf== 0) then | ||||
!finished_pipe1=1 | !finished_pipe1=1 | ||||
RAM(2)%Bottles_Charged_MalfActive= .false. | RAM(2)%Bottles_Charged_MalfActive= .false. | ||||
else | else | ||||
finished_pipe1=0 | PipeRam1%finished=0 | ||||
RAM(2)%Bottles_Charged_MalfActive= .true. | RAM(2)%Bottles_Charged_MalfActive= .true. | ||||
!fvr=fvr-2.5 | !fvr=fvr-2.5 | ||||
endif | endif | ||||
if (LowerRamsLeakMalf== 0) then | if (PipeRam2%LowerRamsLeakMalf== 0) then | ||||
!finished_pipe2=1 | !finished_pipe2=1 | ||||
RAM(3)%Bottles_Charged_MalfActive= .false. | RAM(3)%Bottles_Charged_MalfActive= .false. | ||||
else | else | ||||
finished_pipe2=0 | PipeRam2%finished=0 | ||||
RAM(3)%Bottles_Charged_MalfActive= .true. | RAM(3)%Bottles_Charged_MalfActive= .true. | ||||
!fvr=fvr-2.5 | !fvr=fvr-2.5 | ||||
endif | endif | ||||
if (MiddleRamsLeakMalf== 0) then | if (ShearRam%MiddleRamsLeakMalf== 0) then | ||||
!finished_shear=1 | !finished_shear=1 | ||||
RAM(4)%Bottles_Charged_MalfActive= .false. | RAM(4)%Bottles_Charged_MalfActive= .false. | ||||
else | else | ||||
finished_shear=0 | RamLine%FINISHED_shear=0 | ||||
RAM(4)%Bottles_Charged_MalfActive= .true. | RAM(4)%Bottles_Charged_MalfActive= .true. | ||||
!fvr=fvr-2.5 | !fvr=fvr-2.5 | ||||
endif | endif | ||||
finished_KillLine=1 | KillLine%finished=1 | ||||
finished_ChokeLine=1 | ChokeLine%finished=1 | ||||
if (AnnularLeakMalf== 0 .and. UpperRamsLeakMalf== 0 .and. LowerRamsLeakMalf== 0 .and. MiddleRamsLeakMalf== 0) then | if (Annular%AnnularLeakMalf== 0 .and. PipeRam1%UpperRamsLeakMalf== 0 .and. PipeRam2%LowerRamsLeakMalf== 0 .and. ShearRam%MiddleRamsLeakMalf== 0) then | ||||
elecp_switch=0 | RamLine%ELECP_SWITCH=0 | ||||
airp_switch=0 | RamLine%AIRP_SWITCH=0 | ||||
endif | endif | ||||
endif | endif | ||||
endif | endif | ||||
endif | endif | ||||
!======================================================= | !======================================================= | ||||
if (elecp_switch==1 .and. AccPupmsFailMalf==0) then !on position | if (RamLine%ELECP_SWITCH==1 .and. BopStackAcc%AccPupmsFailMalf==0) then !on position | ||||
deltav_elecp=QELECTRIC_PUMP*DeltaT_BOP/60. !QELECTRIC_PUMP(gpm), deltav_elecp(gal), DeltaT_BOP(0.1 sec) | Pumps%DELTAV_ELECP=Pumps%QELECTRIC*RamLine%DeltaT_BOP/60. !QELECTRIC_PUMP(gpm), deltav_elecp(gal), DeltaT_BOP(0.1 sec) | ||||
SoundKoomeyElectricPump= .True. | Pumps%SoundKoomeyElectric= .True. | ||||
else | else | ||||
deltav_elecp=0 | Pumps%DELTAV_ELECP=0 | ||||
SoundKoomeyElectricPump= .false. | Pumps%SoundKoomeyElectric= .false. | ||||
endif | endif | ||||
!call SetSoundKoomeyElectricPump(SoundKoomeyElectricPump) | !call SetSoundKoomeyElectricPump(SoundKoomeyElectricPump) | ||||
if (airp_switch==1 .and. AccPupmsFailMalf==0) then !on position | if (RamLine%AIRP_SWITCH==1 .and. BopStackAcc%AccPupmsFailMalf==0) then !on position | ||||
call airpump_code() !ramtype=2 | call airpump_code() !ramtype=2 | ||||
end if ! if (airp_switch==1) then !on position | end if ! if (airp_switch==1) then !on position | ||||
!===============AIR OPERATED PUMP CODE- END================ | !===============AIR OPERATED PUMP CODE- END================ | ||||
if (ShearBop_closed==1 .and. PipeRam1_closed==1 .and. PipeRam2_closed==1 .and. ChokeLine_closed==1 .and. KillLine_closed==1) then | if (RamLine%ShearBop_closed==1 .and. PipeRam1%closed==1 .and. PipeRam2%closed==1 .and. ChokeLine%closed==1 .and. KillLine%closed==1) then | ||||
!write(*,*) ' All Rams are closed' | !write(*,*) ' All Rams are closed' | ||||
if(ByPassOld== -1.0) then ! (OPEN POSITION) | if(BopStackAcc%ByPassOld== -1.0) then ! (OPEN POSITION) | ||||
!old=pram_reg | !old=pram_reg | ||||
!new=p_acc- MAXVAL(RAM%loss_before) | !new=p_acc- MAXVAL(RAM%loss_before) | ||||
!difference= new-old | !difference= new-old | ||||
PressureDifference= p_acc- MAXVAL(RAM%loss_before) - pram_reg | BopStackAcc%PressureDifference= RamLine%P_ACC- MAXVAL(RAM%loss_before) - BopStackAcc%pram_reg | ||||
if (ABS(PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 300. psi | if (ABS(BopStackAcc%PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 300. psi | ||||
pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. | BopStackAcc%pram_reg= BopStackAcc%pram_reg + (BopStackAcc%PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. | ||||
else | else | ||||
pram_reg= p_acc- MAXVAL(RAM%loss_before) ! mishe khate paeen ye shart gozasht ke pacc=3000 shod, in adad dige kam nashe | BopStackAcc%pram_reg= RamLine%P_ACC- MAXVAL(RAM%loss_before) ! mishe khate paeen ye shart gozasht ke pacc=3000 shod, in adad dige kam nashe | ||||
endif | endif | ||||
elseif (ByPassOld== 1.0) then ! (CLOSE POSITION) | elseif (BopStackAcc%ByPassOld== 1.0) then ! (CLOSE POSITION) | ||||
!pram_reg= prams_regset | !pram_reg= prams_regset | ||||
!if (RamsFirstSet==1) then | !if (RamsFirstSet==1) then | ||||
!write(*,*) 'bypass CLOSE POSITION' | !write(*,*) 'bypass CLOSE POSITION' | ||||
!old=pram_reg | !old=pram_reg | ||||
!new=prams_regset | !new=prams_regset | ||||
!difference= new-old | !difference= new-old | ||||
PressureDifference= prams_regset - pram_reg | BopStackAcc%PressureDifference= BopStackAcc%PRAMS_REGSET - BopStackAcc%pram_reg | ||||
!write(*,*) 'PressureDifference, prams_regset , pram_reg=' , PressureDifference, prams_regset , pram_reg | !write(*,*) 'PressureDifference, prams_regset , pram_reg=' , PressureDifference, prams_regset , pram_reg | ||||
if (ABS(PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 200. ! psi in starup | if (ABS(BopStackAcc%PressureDifference) > BaseDifferenceP) then !BaseDifferenceP= 200. ! psi in starup | ||||
pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. in startup | BopStackAcc%pram_reg= BopStackAcc%pram_reg + (BopStackAcc%PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. in startup | ||||
else | else | ||||
pram_reg= prams_regset | BopStackAcc%pram_reg= BopStackAcc%PRAMS_REGSET | ||||
endif | endif | ||||
!write(*,*) 'pram_reg=' , pram_reg | !write(*,*) 'pram_reg=' , pram_reg | ||||
@@ -279,12 +279,12 @@ module BOP | |||||
endif | endif | ||||
BopControlPanel%MiddleRamsStatus = IDshearBop | BopControlPanel%MiddleRamsStatus = ShearRam%IDshearBop | ||||
BopControlPanel%UpperRamsStatus = IDPipeRam1 | BopControlPanel%UpperRamsStatus = PipeRam1%ID | ||||
BopControlPanel%LowerRamsStatus = IDPipeRam2 | BopControlPanel%LowerRamsStatus = PipeRam2%ID | ||||
BopControlPanel%AnnularStatus = IDAnnular | BopControlPanel%AnnularStatus = Annular%IDAnnular | ||||
BopControlPanel%AccumulatorPressureGauge = (1 - AccumulatorPressureGaugeMalf) * p_acc | BopControlPanel%AccumulatorPressureGauge = (1 - BopStackAcc%AccumulatorPressureGaugeMalf) * RamLine%P_ACC | ||||
BopControlPanel%ManifoldPressureGauge= (1 - ManifoldPressureGaugeMalf) * pram_reg | BopControlPanel%ManifoldPressureGauge= (1 - BopStackAcc%ManifoldPressureGaugeMalf) * BopStackAcc%pram_reg | ||||
!AnnularPressureGauge=Pannular_reg | !AnnularPressureGauge=Pannular_reg | ||||
! | ! | ||||
! WRITE(60,60) RAM(2)%time,RAM(2)%Q,RAM(2)%vdis_tot,p_acc, & | ! WRITE(60,60) RAM(2)%time,RAM(2)%Q,RAM(2)%vdis_tot,p_acc, & | ||||
@@ -22,7 +22,7 @@ integer i | |||||
!AirSupplyPressureGauge=0 | !AirSupplyPressureGauge=0 | ||||
!======================= SETTING VARIABLES | !======================= SETTING VARIABLES | ||||
BOP_timeCounter= 0 | BopStackInput%BOP_timeCounter= 0 | ||||
!============== FOR MANIFOLD VALVES CODE===================== | !============== FOR MANIFOLD VALVES CODE===================== | ||||
CALL OpenAnnular | CALL OpenAnnular | ||||
@@ -32,10 +32,10 @@ CALL CloseKillLine | |||||
CALL CloseChokeLine | CALL CloseChokeLine | ||||
CALL OpenLowerRams | CALL OpenLowerRams | ||||
Annular_Situation_forTD= 0 ! open - for TD code | Annular%Annular_Situation_forTD= 0 ! open - for TD code | ||||
ShearBop_Situation_forTD= 0 ! open - for TD code | RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code | ||||
PipeRam1_Situation_forTD= 0 ! open - for TD code | PipeRam1%Situation_forTD= 0 ! open - for TD code | ||||
PipeRam2_Situation_forTD= 0 ! open - for TD code | PipeRam2%Situation_forTD= 0 ! open - for TD code | ||||
!====================================================================== | !====================================================================== | ||||
CALL LOSS_INPUTS() | CALL LOSS_INPUTS() | ||||
@@ -54,11 +54,11 @@ RAM%First_OpenTimecheck= 0 | |||||
Cumulative_AirVolume= 0.0 | BopStackAcc%Cumulative_AirVolume= 0.0 | ||||
bottle_capacity=10 !(GALON) | BopStackAcc%BOTTLE_CAPACITY=10 !(GALON) | ||||
nobottles=Accumulator%NumberOfBottels | BopStackAcc%NOBOTTLES=Accumulator%NumberOfBottels | ||||
@@ -67,82 +67,82 @@ nobottles=Accumulator%NumberOfBottels | |||||
!fvr_tot=40 !(GALON) IN CHARGED POSITION | !fvr_tot=40 !(GALON) IN CHARGED POSITION | ||||
prams_regset=1500 !RamsReglatorSet !=1500 DEFAULT regulator set pressure (PSI) | BopStackAcc%PRAMS_REGSET=1500 !RamsReglatorSet !=1500 DEFAULT regulator set pressure (PSI) | ||||
acc_ChargedPressure=3000 !charged(PSI) | BopStackAcc%acc_ChargedPressure=3000 !charged(PSI) | ||||
acc_MinPressure=Accumulator%AccumulatorMinimumOperatingPressure !1200 !discharged(PSI) | BopStackAcc%acc_MinPressure=Accumulator%AccumulatorMinimumOperatingPressure !1200 !discharged(PSI) | ||||
!acc_precharge=1000 | !acc_precharge=1000 | ||||
fvr_tot=(-2451*(acc_ChargedPressure**(-0.8202))+8.435)*nobottles ! IT IS WRRITEN FOR PRECHARGE 1000 PSI FROM ITS CURVE | BopStackAcc%FVR_TOT=(-2451*(BopStackAcc%acc_ChargedPressure**(-0.8202))+8.435)*BopStackAcc%NOBOTTLES ! IT IS WRRITEN FOR PRECHARGE 1000 PSI FROM ITS CURVE | ||||
!write(*,*) 'fvr_tot=',fvr_tot | !write(*,*) 'fvr_tot=',fvr_tot | ||||
!ELECTRIC_PUMPON=2800 | !ELECTRIC_PUMPON=2800 | ||||
ELECTRIC_PUMPON=Accumulator%StartPressure | Pumps%ELECTRIC_ON=Accumulator%StartPressure | ||||
!ELECTRIC_PUMPOFF=acc_ChargedPressure !=3000 psi | !ELECTRIC_PUMPOFF=acc_ChargedPressure !=3000 psi | ||||
ELECTRIC_PUMPOFF=Accumulator%StopPressure | Pumps%ELECTRIC_OFF=Accumulator%StopPressure | ||||
!QELECTRIC_PUMP=12 !(gpm) | !QELECTRIC_PUMP=12 !(gpm) | ||||
QELECTRIC_PUMP=Accumulator%ElectricPumpOutput | Pumps%QELECTRIC=Accumulator%ElectricPumpOutput | ||||
!AIR_PUMPON=2600 | !AIR_PUMPON=2600 | ||||
AIR_PUMPON=Accumulator%StartPressure2 | Pumps%AIR_ON=Accumulator%StartPressure2 | ||||
!AIR_PUMPOFF=2900 | !AIR_PUMPOFF=2900 | ||||
AIR_PUMPOFF=Accumulator%StopPressure2 | Pumps%AIR_OFF=Accumulator%StopPressure2 | ||||
RAM%tol=0.0037 !%=(2700-2600)/2700 | RAM%tol=0.0037 !%=(2700-2600)/2700 | ||||
RAM%tolzero=RAM%tol | RAM%tolzero=RAM%tol | ||||
tolAnnular=0.0018 !=(2900-2895)/2900 | Annular%tolAnnular=0.0018 !=(2900-2895)/2900 | ||||
tolzeroAnnular=tolAnnular | Annular%tolzeroAnnular=Annular%tolAnnular | ||||
!======================OTHER INPUTS(CONSTANTS)=========================== | !======================OTHER INPUTS(CONSTANTS)=========================== | ||||
pa=300 !(PSI) | ShearRam%PA=300 !(PSI) | ||||
p_shear=1200 !(PSI) | ShearRam%P_SHEAR=1200 !(PSI) | ||||
!p_shear=2423.1 !(PSI) | !p_shear=2423.1 !(PSI) | ||||
pb=p_shear-pa | ShearRam%PB=ShearRam%P_SHEAR-ShearRam%PA | ||||
pa_annular=100 !(psi) | AnnularComputational%pa_annular=100 !(psi) | ||||
IDAnnularBase=13.625 !(inch) | Annular%IDAnnularBase=13.625 !(inch) | ||||
IDAnnular=IDAnnularBase | Annular%IDAnnular=Annular%IDAnnularBase | ||||
ODDrillpipe_inAnnularBase=5. ! so 18 gal is for complete closing of annular | Annular%ODDrillpipe_inAnnularBase=5. ! so 18 gal is for complete closing of annular | ||||
ODDrillpipe_inAnnular=5. ! initial | Annular%ODDrillpipe_inAnnular=5. ! initial | ||||
AnnularMovingPressure=360. !(psi) | AnnularComputational%AnnularMovingPressure=360. !(psi) | ||||
IDAnnularFinal= IDAnnular | ShearRam%IDAnnularFinal= Annular%IDAnnular | ||||
IDshearBopBase=13.625 !(inch) | ShearRam%IDshearBopBase=13.625 !(inch) | ||||
IDshearBop=IDshearBopBase | ShearRam%IDshearBop=ShearRam%IDshearBopBase | ||||
ODDrillpipe_inShearRamBase=5 !initial | ShearRam%ODDrillpipe_inShearRamBase=5 !initial | ||||
ODDrillpipe_inShearRam=5 !initial | ShearRam%ODDrillpipe_inShearRam=5 !initial | ||||
IDshearBopFinal= IDshearBop | ShearRam%IDshearBopFinal= ShearRam%IDshearBop | ||||
IDPipeRamBase=13.625 !(inch) | PipeRam1%IDBase=13.625 !(inch) | ||||
IDPipeRam1=IDPipeRamBase | PipeRam1%ID=PipeRam1%IDBase | ||||
ODDrillpipe_inPipeRam1Base=5 !initial | PipeRam1%ODDrillpipe_inBase=5 !initial | ||||
ODDrillpipe_inPipeRam1=5 !initial | PipeRam1%ODDrillpipe_in=5 !initial | ||||
IDPipeRam1Final= IDPipeRam1 | ShearRam%IDPipeRam1Final= PipeRam1%ID | ||||
IDPipeRam2=IDPipeRamBase !(inch) | PipeRam2%ID=PipeRam1%IDBase !(inch) | ||||
ODDrillpipe_inPipeRam2Base=5 !initial | PipeRam2%ODDrillpipe_inBase=5 !initial | ||||
ODDrillpipe_inPipeRam2=5 !initial | PipeRam2%ODDrillpipe_in=5 !initial | ||||
IDPipeRam2Final= IDPipeRam2 | ShearRam%IDPipeRam2Final= PipeRam2%ID | ||||
IDChokeLineBase=8.6 !(inch) | ChokeLine%IDBase=8.6 !(inch) | ||||
IDChokeLine=IDChokeLineBase | ChokeLine%ID=ChokeLine%IDBase | ||||
ODDrillpipe_inChokeLineBase=5 | ChokeLine%ODDrillpipe_inBase=5 | ||||
ODDrillpipe_inChokeLine=5 | ChokeLine%ODDrillpipe_in=5 | ||||
IDKillLineBase=8.6 !(inch) | KillLine%IDBase=8.6 !(inch) | ||||
IDKillLine=IDKillLineBase | KillLine%ID=KillLine%IDBase | ||||
ODDrillpipe_inKillLineBase=5 | KillLine%ODDrillpipe_inBase=5 | ||||
ODDrillpipe_inKillLine=5 | KillLine%ODDrillpipe_in=5 | ||||
!va=4 !(liter) | !va=4 !(liter) | ||||
@@ -150,99 +150,99 @@ ODDrillpipe_inKillLine=5 | |||||
!cv=2; !flow coefficinet of regulator | !cv=2; !flow coefficinet of regulator | ||||
RAM_COURSE=320.2 !milimeter | ShearRam%RAM_COURSE=320.2 !milimeter | ||||
H_REGRAM=0 !(m)<<<<<<<<<<<<<<<<<<<<<<<< | ShearRam%H_REGRAM=0 !(m)<<<<<<<<<<<<<<<<<<<<<<<< | ||||
H_ShearRamBop=(BopStackSpecification%GroundLevel-BopStackSpecification%BlindRamHeight)*0.3048 ! foot to meter | ShearRam%H_ShearRamBop=(BopStackSpecification%GroundLevel-BopStackSpecification%BlindRamHeight)*0.3048 ! foot to meter | ||||
H_PipeRam1Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%UpperRamHeight)*0.3048 ! foot to meter | PipeRam1%H=(BopStackSpecification%GroundLevel-BopStackSpecification%UpperRamHeight)*0.3048 ! foot to meter | ||||
H_PipeRam2Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%LowerRamHeight)*0.3048 ! foot to meter | PipeRam2%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%LowerRamHeight)*0.3048 ! foot to meter | ||||
H_AnnularBop=(BopStackSpecification%GroundLevel-BopStackSpecification%AnnularPreventerHeight)*0.3048 ! foot to meter | Annular%H_AnnularBop=(BopStackSpecification%GroundLevel-BopStackSpecification%AnnularPreventerHeight)*0.3048 ! foot to meter | ||||
H_ChokeLineBop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter | ChokeLine%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter | ||||
H_KillLineBop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter | KillLine%H_Bop=(BopStackSpecification%GroundLevel-BopStackSpecification%KillHeight)*0.3048 ! foot to meter | ||||
p_acc=acc_ChargedPressure | RamLine%P_ACC=BopStackAcc%acc_ChargedPressure | ||||
RAM%vdis_bottles=0 !initial discharged volume | RAM%vdis_bottles=0 !initial discharged volume | ||||
fvr=fvr_tot | RamLine%FVR=BopStackAcc%FVR_TOT | ||||
RAMS%minloss=0. | RAMS%minloss=0. | ||||
!======================AIRPUMP INPUTS(CONSTANTS)=========================== | !======================AIRPUMP INPUTS(CONSTANTS)=========================== | ||||
RAM%FVR_AIR=0 | RAM%FVR_AIR=0 | ||||
P_AIRP=0 | Pumps%P_AIRP=0 | ||||
ba1=1003; ba2=.03375; ba3=4.014; ba4=.2458 | RamLine%BA1=1003; RamLine%BA2=.03375; RamLine%BA3=4.014; RamLine%BA4=.2458 | ||||
bba1 =31.8; bba2 =-725.7 ; bba3 =4154 | RamLine%BBA1 =31.8; RamLine%BBA2 =-725.7 ; RamLine%BBA3 =4154 | ||||
Qiter=7 !(gpm) | Pumps%Qiter=7 !(gpm) | ||||
! Q=0.0003585; true | ! Q=0.0003585; true | ||||
DeltaT_BOP=0.1 !second | RamLine%DeltaT_BOP=0.1 !second | ||||
tol_air=.08 | Pumps%TOL_AIR=.08 | ||||
alpha_Qair=0 | Pumps%alpha_Qair=0 | ||||
alpha_timeair=0 | Pumps%alpha_timeair=0 | ||||
alpha_paccair=p_acc | Pumps%alpha_paccair=RamLine%P_ACC | ||||
alpha_pairp=p_acc | Pumps%alpha_pairp=RamLine%P_ACC | ||||
alpha_diffpair=0 | Pumps%alpha_diffpair=0 | ||||
alpha_lossesair=0 | Pumps%alpha_lossesair=0 | ||||
alpha_fvrair=0 | Pumps%alpha_fvrair=0 | ||||
counter_airp=1 | RamLine%counter_airp=1 | ||||
!======================BOP INPUTS(CONSTANTS)=========================== | !======================BOP INPUTS(CONSTANTS)=========================== | ||||
if (Accumulator%PrechargePressure == 1400.) then | if (Accumulator%PrechargePressure == 1400.) then | ||||
b1=1396; b2=0.17; b3=3.873; b4=1.101 | RamLine%B1=1396; RamLine%B2=0.17; RamLine%B3=3.873; RamLine%B4=1.101 | ||||
elseif (Accumulator%PrechargePressure == 2000.) then | elseif (Accumulator%PrechargePressure == 2000.) then | ||||
b1=1980; b2=0.1237; b3=15.69; b4=1.029 | RamLine%B1=1980; RamLine%B2=0.1237; RamLine%B3=15.69; RamLine%B4=1.029 | ||||
elseif (Accumulator%PrechargePressure == 600.) then | elseif (Accumulator%PrechargePressure == 600.) then | ||||
b1=591.9; b2=0.1968; b3=2.887; b4=0.9757 | RamLine%B1=591.9; RamLine%B2=0.1968; RamLine%B3=2.887; RamLine%B4=0.9757 | ||||
else !(PrechargePressure == 1000.) then ! this is for precharge=1000 psi | else !(PrechargePressure == 1000.) then ! this is for precharge=1000 psi | ||||
b1=993.7; b2=0.164; b3=5.492; b4=0.9796 | RamLine%B1=993.7; RamLine%B2=0.164; RamLine%B3=5.492; RamLine%B4=0.9796 | ||||
endif | endif | ||||
ByPassOld= 1.0 | BopStackAcc%ByPassOld= 1.0 | ||||
RAM%p_bop=pa | RAM%p_bop=ShearRam%PA | ||||
p_annular=pa_annular | AnnularComputational%p_annular=AnnularComputational%pa_annular | ||||
!Q=0.0055; !initial flow rate (m^3/s) | !Q=0.0055; !initial flow rate (m^3/s) | ||||
RAM%flow=60 !(gpm) initial value | RAM%flow=60 !(gpm) initial value | ||||
RAM%Qzero=70 !for DP code, increasing Q after shear | RAM%Qzero=70 !for DP code, increasing Q after shear | ||||
RAM%vdis_tot=0 | RAM%vdis_tot=0 | ||||
airp_switch=0 !off position | RamLine%AIRP_SWITCH=0 !off position | ||||
elecp_switch=0 !off position | RamLine%ELECP_SWITCH=0 !off position | ||||
ShearBop_closed=1 | RamLine%ShearBop_closed=1 | ||||
PipeRam1_closed=1 | PipeRam1%closed=1 | ||||
PipeRam2_closed=1 | PipeRam2%closed=1 | ||||
ChokeLine_closed=1 | ChokeLine%closed=1 | ||||
KillLine_closed=1 | KillLine%closed=1 | ||||
Annular_closed=1 | Annular%Annular_closed=1 | ||||
finished_Shear=0 | RamLine%FINISHED_shear=0 | ||||
finished_pipe1=0 | PipeRam1%finished=0 | ||||
finished_pipe2=0 | PipeRam2%finished=0 | ||||
finished_ChokeLine=0 | ChokeLine%finished=0 | ||||
finished_KillLine=0 | KillLine%finished=0 | ||||
finished_Annular=0 | Annular%finished_Annular=0 | ||||
deltav_elecp=0 | Pumps%DELTAV_ELECP=0 | ||||
RAM%vdis_elecp=0 | RAM%vdis_elecp=0 | ||||
!================================================================== | !================================================================== | ||||
RAM%timecounter_ram=0 | RAM%timecounter_ram=0 | ||||
RAM%Q=0 | RAM%Q=0 | ||||
pram_reg=prams_regset !psi !RamsReglatorSet | BopStackAcc%pram_reg=BopStackAcc%PRAMS_REGSET !psi !RamsReglatorSet | ||||
Pannular_reg=min(BopControlPanel%AnnularRegulatorSetControl,1700.) | Annular%Pannular_reg=min(BopControlPanel%AnnularRegulatorSetControl,1700.) | ||||
BopControlPanel%MiddleRamsStatus= IDshearBop | BopControlPanel%MiddleRamsStatus= ShearRam%IDshearBop | ||||
BopControlPanel%UpperRamsStatus= IDPipeRam1 | BopControlPanel%UpperRamsStatus= PipeRam1%ID | ||||
BopControlPanel%LowerRamsStatus= IDPipeRam2 | BopControlPanel%LowerRamsStatus= PipeRam2%ID | ||||
BopControlPanel%AnnularStatus = IDAnnular | BopControlPanel%AnnularStatus = Annular%IDAnnular | ||||
BopControlPanel%AccumulatorPressureGauge = p_acc | BopControlPanel%AccumulatorPressureGauge = RamLine%P_ACC | ||||
RAM%time=0 | RAM%time=0 | ||||
@@ -260,62 +260,62 @@ RAM%time=0 | |||||
BopControlPanel%MiddleRamsOpenLED = LedOn | BopControlPanel%MiddleRamsOpenLED = LedOn | ||||
MiddleRamsOpenLEDMine = LedOn | BopStackInput%MiddleRamsOpenLEDMine = LedOn | ||||
BopControlPanel%MiddleRamsCloseLED = LedOff | BopControlPanel%MiddleRamsCloseLED = LedOff | ||||
MiddleRamsCloseLEDMine = LedOff | BopStackInput%MiddleRamsCloseLEDMine = LedOff | ||||
ShearRamIsOpening = .false. | RamLine%ShearRamIsOpening = .false. | ||||
ShearRamIsClosing = .false. | RamLine%ShearRamIsClosing = .false. | ||||
BopControlPanel%UpperRamsOpenLED = LedOn | BopControlPanel%UpperRamsOpenLED = LedOn | ||||
UpperRamsOpenLEDMine = LedOn | BopStackInput%UpperRamsOpenLEDMine = LedOn | ||||
BopControlPanel%UpperRamsCloseLED = LedOff | BopControlPanel%UpperRamsCloseLED = LedOff | ||||
UpperRamsCloseLEDMine = LedOff | BopStackInput%UpperRamsCloseLEDMine = LedOff | ||||
PipeRam1IsOpening = .false. | PipeRam1%IsOpening = .false. | ||||
PipeRam1IsClosing = .false. | PipeRam1%IsClosing = .false. | ||||
BopControlPanel%LowerRamsOpenLED = LedOn | BopControlPanel%LowerRamsOpenLED = LedOn | ||||
LowerRamsOpenLEDMine = LedOn | BopStackInput%LowerRamsOpenLEDMine = LedOn | ||||
BopControlPanel%LowerRamsCloseLED = LedOff | BopControlPanel%LowerRamsCloseLED = LedOff | ||||
LowerRamsCloseLEDMine = LedOff | BopStackInput%LowerRamsCloseLEDMine = LedOff | ||||
PipeRam2IsOpening = .false. | PipeRam2%IsOpening = .false. | ||||
PipeRam2IsClosing = .false. | PipeRam2%IsClosing = .false. | ||||
BopControlPanel%ChokeLineOpenLED = LedOff | BopControlPanel%ChokeLineOpenLED = LedOff | ||||
ChokeLineOpenLEDMine = LedOff | BopStackInput%ChokeLineOpenLEDMine = LedOff | ||||
BopControlPanel%ChokeLineCloseLED = LedOn | BopControlPanel%ChokeLineCloseLED = LedOn | ||||
ChokeLineCloseLEDMine = LedOn | BopStackInput%ChokeLineCloseLEDMine = LedOn | ||||
ChokeLineIsOpening = .false. | ChokeLine%IsOpening = .false. | ||||
ChokeLineIsClosing = .false. | ChokeLine%IsClosing = .false. | ||||
BopControlPanel%KillLineOpenLED = LedOff | BopControlPanel%KillLineOpenLED = LedOff | ||||
KillLineOpenLedMine = LedOff | BopStackInput%KillLineOpenLedMine = LedOff | ||||
BopControlPanel%KillLineCloseLED = LedOn | BopControlPanel%KillLineCloseLED = LedOn | ||||
KillLineCloseLedMine = LedOn | BopStackInput%KillLineCloseLedMine = LedOn | ||||
KillLineIsOpening = .false. | KillLine%IsOpening = .false. | ||||
KillLineIsClosing = .false. | KillLine%IsClosing = .false. | ||||
BopControlPanel%AnnularOpenLED = LedOn | BopControlPanel%AnnularOpenLED = LedOn | ||||
AnnularOpenLedMine = LedOn | BopStackInput%AnnularOpenLedMine = LedOn | ||||
BopControlPanel%AnnularCloseLED = LedOff | BopControlPanel%AnnularCloseLED = LedOff | ||||
AnnularCloseLedMine = LedOff | BopStackInput%AnnularCloseLedMine = LedOff | ||||
AnnularIsOpening = .false. | Annular%AnnularIsOpening = .false. | ||||
AnnularIsClosing = .false. | Annular%AnnularIsClosing = .false. | ||||
FirstSet=1 | Annular%FirstSet=1 | ||||
RamsFirstSet=1 | AnnularComputational%RamsFirstSet=1 | ||||
BopControlPanel%ManifoldPressureGauge=prams_regset !RamsReglatorSet | BopControlPanel%ManifoldPressureGauge=BopStackAcc%PRAMS_REGSET !RamsReglatorSet | ||||
BopControlPanel%AnnularPressureGauge= (1 - AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) | BopControlPanel%AnnularPressureGauge= (1 - Annular%AnnularPressureGaugeMalf) * min(BopControlPanel%AnnularRegulatorSetControl,1700.) | ||||
PannularTimeStepDelay = int(1./DeltaT_BOP) ! 1/0.1 : for 1 sec delay in AnnRegulator shot time | AnnularComputational%PannularTimeStepDelay = int(1./RamLine%DeltaT_BOP) ! 1/0.1 : for 1 sec delay in AnnRegulator shot time | ||||
DO i = 1 , PannularTimeStepDelay | DO i = 1 , AnnularComputational%PannularTimeStepDelay | ||||
CALL Pannular_regDelay%AddToFirst(BopControlPanel%AnnularPressureGauge) | CALL AnnularComputational%Pannular_regDelay%AddToFirst(BopControlPanel%AnnularPressureGauge) | ||||
END DO | END DO | ||||
@@ -20,22 +20,22 @@ module BlindRamsMain | |||||
subroutine BlindRams_Step | subroutine BlindRams_Step | ||||
use VARIABLES | use VARIABLES | ||||
implicit none | implicit none | ||||
if (FINISHED_shear/=0) then | if (RamLine%FINISHED_shear/=0) then | ||||
call SHEAR_RAMS | call SHEAR_RAMS | ||||
if (ShearRamIsOpening .or. ShearRamIsClosing .or. RAM(4)%Bottles_Charged_MalfActive) then | if (RamLine%ShearRamIsOpening .or. RamLine%ShearRamIsClosing .or. RAM(4)%Bottles_Charged_MalfActive) then | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
if(FINISHED_shear==0) then | if(RamLine%FINISHED_shear==0) then | ||||
call SHEAR_RAMS_SUB !only body of loop2 | call SHEAR_RAMS_SUB !only body of loop2 | ||||
if (FINISHED_shear/=0 .and. finished_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then | if (RamLine%FINISHED_shear/=0 .and. RamLine%FINISHED_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then | ||||
call bop_code(1,H_ShearRamBop,4) | call bop_code(1,ShearRam%H_ShearRamBop,4) | ||||
endif | endif | ||||
endif | endif | ||||
endif | endif | ||||
else | else | ||||
call SHEAR_RAMS_SUB | call SHEAR_RAMS_SUB | ||||
if (FINISHED_shear/=0 .and. finished_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then | if (RamLine%FINISHED_shear/=0 .and. RamLine%FINISHED_shear==1 .and. RAM(4)%Bottles_Charged_MalfActive==.true.) then | ||||
call bop_code(1,H_ShearRamBop,4) | call bop_code(1,ShearRam%H_ShearRamBop,4) | ||||
endif | endif | ||||
endif | endif | ||||
@@ -18,7 +18,7 @@ SUBROUTINE CHOKE_LINE | |||||
RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1 | RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1 | ||||
if (BopControlPanel%ChokeLineValve == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then | if (BopControlPanel%ChokeLineValve == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then | if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then | ||||
RAM(5)%SuccessionCounter = 0 ! also in starup | RAM(5)%SuccessionCounter = 0 ! also in starup | ||||
@@ -29,7 +29,7 @@ SUBROUTINE CHOKE_LINE | |||||
endif | endif | ||||
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -38,36 +38,36 @@ SUBROUTINE CHOKE_LINE | |||||
if (ChokeLineOpenLEDMine == LedOn) then | if (BopStackInput%ChokeLineOpenLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
ChokeLine_closed=0 | ChokeLine%closed=0 | ||||
RAM(5)%vdis_tot=0 | RAM(5)%vdis_tot=0 | ||||
RAM(5)%vdis_bottles=0. | RAM(5)%vdis_bottles=0. | ||||
RAM(5)%fvr_air=0. | RAM(5)%fvr_air=0. | ||||
RAM(5)%vdis_elecp=0. | RAM(5)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(5)%Qzero=70 | RAM(5)%Qzero=70 | ||||
RAM(5)%Q=RAM(5)%Qzero | RAM(5)%Q=RAM(5)%Qzero | ||||
RAM(5)%flow=70 | RAM(5)%flow=70 | ||||
RAM(5)%tol=0.0037 | RAM(5)%tol=0.0037 | ||||
if (finished_ChokeLine==1) then | if (ChokeLine%finished==1) then | ||||
ChokeLineLeverOld= 1.0 | ChokeLine%LeverOld= 1.0 | ||||
else | else | ||||
ChokeLineLeverOld=BopControlPanel%ChokeLineValve | ChokeLine%LeverOld=BopControlPanel%ChokeLineValve | ||||
endif | endif | ||||
finished_ChokeLine=0 | ChokeLine%finished=0 | ||||
ChokeLineIsOpening = .true. | ChokeLine%IsOpening = .true. | ||||
BopControlPanel%ChokeLineCloseLED = LedOff | BopControlPanel%ChokeLineCloseLED = LedOff | ||||
ChokeLineCloseLEDMine = LedOff | BopStackInput%ChokeLineCloseLEDMine = LedOff | ||||
BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking | BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking | ||||
RAM(5)%bop_type = 3 | RAM(5)%bop_type = 3 | ||||
!AbopChokeLine=196.67 | !AbopChokeLine=196.67 | ||||
AbopChokeLine=(BopStackSpecification%ChokeClose*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) | ChokeLine%Abop=(BopStackSpecification%ChokeClose*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) !1.5 galon for each BOP | ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%IDBase-max(ChokeLine%ODDrillpipe_in,ChokeLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP | ||||
endif | endif | ||||
if (BopControlPanel%ChokeLineValve == 1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then | if (BopControlPanel%ChokeLineValve == 1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then | if ( RAM(5)%SuccessionCounter /= RAM(5)%SuccessionCounterOld+1 ) then | ||||
@@ -79,7 +79,7 @@ SUBROUTINE CHOKE_LINE | |||||
endif | endif | ||||
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -87,15 +87,15 @@ SUBROUTINE CHOKE_LINE | |||||
if (ChokeLineCloseLEDMine == LedOn) then | if (BopStackInput%ChokeLineCloseLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
ChokeLine_closed=0 | ChokeLine%closed=0 | ||||
RAM(5)%vdis_tot=0 | RAM(5)%vdis_tot=0 | ||||
RAM(5)%vdis_bottles=0. | RAM(5)%vdis_bottles=0. | ||||
RAM(5)%fvr_air=0. | RAM(5)%fvr_air=0. | ||||
RAM(5)%vdis_elecp=0. | RAM(5)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(5)%Qzero=70 | RAM(5)%Qzero=70 | ||||
RAM(5)%Q=RAM(5)%Qzero | RAM(5)%Q=RAM(5)%Qzero | ||||
RAM(5)%flow=70 | RAM(5)%flow=70 | ||||
@@ -103,13 +103,13 @@ SUBROUTINE CHOKE_LINE | |||||
if (finished_ChokeLine==1) then | if (ChokeLine%finished==1) then | ||||
ChokeLineLeverOld= -1.0 | ChokeLine%LeverOld= -1.0 | ||||
else | else | ||||
ChokeLineLeverOld=BopControlPanel%ChokeLineValve | ChokeLine%LeverOld=BopControlPanel%ChokeLineValve | ||||
endif | endif | ||||
finished_ChokeLine=0 | ChokeLine%finished=0 | ||||
ChokeLineIsClosing = .true. | ChokeLine%IsClosing = .true. | ||||
!if (ChokeLineCloseLED == LedOn) then | !if (ChokeLineCloseLED == LedOn) then | ||||
@@ -117,14 +117,14 @@ SUBROUTINE CHOKE_LINE | |||||
!end if | !end if | ||||
BopControlPanel%ChokeLineCloseLED = LedOff !new | BopControlPanel%ChokeLineCloseLED = LedOff !new | ||||
ChokeLineCloseLedMine = LedOff !new | BopStackInput%ChokeLineCloseLEDMine = LedOff !new | ||||
BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking | BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking | ||||
RAM(5)%bop_type = 3 | RAM(5)%bop_type = 3 | ||||
!AbopChokeLine=196.67 | !AbopChokeLine=196.67 | ||||
AbopChokeLine=(BopStackSpecification%ChokeOpen*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) | ChokeLine%Abop=(BopStackSpecification%ChokeOpen*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) !1.5 galon for each BOP | ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%IDBase-max(ChokeLine%ODDrillpipe_in,ChokeLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP | ||||
endif | endif | ||||
@@ -168,7 +168,7 @@ SUBROUTINE CHOKE_LINE_SUB | |||||
RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1 | RAM(5)%SuccessionCounter = RAM(5)%SuccessionCounter + 1 | ||||
if (BopControlPanel%ChokeLineValve == 1.0 .and. ChokeLineLeverOld == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then | if (BopControlPanel%ChokeLineValve == 1.0 .and. ChokeLine%LeverOld == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
if ( RAM(5)%First_CloseTimecheck == 0 ) then | if ( RAM(5)%First_CloseTimecheck == 0 ) then | ||||
@@ -183,7 +183,7 @@ SUBROUTINE CHOKE_LINE_SUB | |||||
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -191,26 +191,26 @@ SUBROUTINE CHOKE_LINE_SUB | |||||
ChokeLine_closed=0 | ChokeLine%closed=0 | ||||
RAM(5)%p_bop=pa | RAM(5)%p_bop=ShearRam%PA | ||||
ChokeLineLeverOld = BopControlPanel%ChokeLineValve | ChokeLine%LeverOld = BopControlPanel%ChokeLineValve | ||||
BopControlPanel%ChokeLineOpenLED = LedOff | BopControlPanel%ChokeLineOpenLED = LedOff | ||||
ChokeLineOpenLEDMine = LedOff | BopStackInput%ChokeLineOpenLEDMine = LedOff | ||||
BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking | BopControlPanel%ChokeLineCloseLED = LedOn !LedBlinking | ||||
CALL OpenChokeLine | CALL OpenChokeLine | ||||
RAM(5)%bop_type = 3 | RAM(5)%bop_type = 3 | ||||
!AbopChokeLine=196.67 | !AbopChokeLine=196.67 | ||||
AbopChokeLine=(BopStackSpecification%ChokeClose*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) | ChokeLine%Abop=(BopStackSpecification%ChokeClose*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLine-max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase))/(2.*231) | ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%ID-max(ChokeLine%ODDrillpipe_in,ChokeLine%ODDrillpipe_inBase))/(2.*231) | ||||
RAM(5)%vdis_bottles=0. | RAM(5)%vdis_bottles=0. | ||||
RAM(5)%fvr_air=0. | RAM(5)%fvr_air=0. | ||||
RAM(5)%vdis_elecp=0. | RAM(5)%vdis_elecp=0. | ||||
ChokeLineIsClosing = .true. | ChokeLine%IsClosing = .true. | ||||
ChokeLineIsOpening = .false. | ChokeLine%IsOpening = .false. | ||||
endif | endif | ||||
if (BopControlPanel%ChokeLineValve == -1.0 .and. ChokeLineLeverOld == 1.0 .and. p_acc>acc_MinPressure .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%ChokeLineValve == -1.0 .and. ChokeLine%LeverOld == 1.0 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if ( RAM(5)%First_OpenTimecheck == 0 ) then | if ( RAM(5)%First_OpenTimecheck == 0 ) then | ||||
@@ -222,7 +222,7 @@ SUBROUTINE CHOKE_LINE_SUB | |||||
RAM(5)%SuccessionCounterOld= RAM(5)%SuccessionCounter | RAM(5)%SuccessionCounterOld= RAM(5)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(5)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(5)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -230,23 +230,23 @@ SUBROUTINE CHOKE_LINE_SUB | |||||
ChokeLine_closed=0 | ChokeLine%closed=0 | ||||
RAM(5)%p_bop=pa | RAM(5)%p_bop=ShearRam%PA | ||||
ChokeLineLeverOld = BopControlPanel%ChokeLineValve | ChokeLine%LeverOld = BopControlPanel%ChokeLineValve | ||||
BopControlPanel%ChokeLineCloseLED = LedOff | BopControlPanel%ChokeLineCloseLED = LedOff | ||||
ChokeLineCloseLEDMine = LedOff | BopStackInput%ChokeLineCloseLEDMine = LedOff | ||||
BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking | BopControlPanel%ChokeLineOpenLED = LedOn !LedBlinking | ||||
CALL OpenChokeLine | CALL OpenChokeLine | ||||
RAM(5)%bop_type = 3 | RAM(5)%bop_type = 3 | ||||
!AbopChokeLine=196.67 | !AbopChokeLine=196.67 | ||||
AbopChokeLine=(BopStackSpecification%ChokeOpen*231)/((IDChokeLineBase-ODDrillpipe_inChokeLineBase)/2.) | ChokeLine%Abop=(BopStackSpecification%ChokeOpen*231)/((ChokeLine%IDBase-ChokeLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeChokeLine=AbopChokeLine*(IDChokeLineBase-IDChokeLine)/(2.*231) | ChokeLine%NeededVolume=ChokeLine%Abop*(ChokeLine%IDBase-ChokeLine%ID)/(2.*231) | ||||
RAM(5)%vdis_bottles=0. | RAM(5)%vdis_bottles=0. | ||||
RAM(5)%fvr_air=0. | RAM(5)%fvr_air=0. | ||||
RAM(5)%vdis_elecp=0. | RAM(5)%vdis_elecp=0. | ||||
ChokeLineIsOpening = .true. | ChokeLine%IsOpening = .true. | ||||
ChokeLineIsClosing = .false. | ChokeLine%IsClosing = .false. | ||||
endif | endif | ||||
@@ -254,21 +254,21 @@ SUBROUTINE CHOKE_LINE_SUB | |||||
RAM(5)%First_OpenTimecheck = 0 | RAM(5)%First_OpenTimecheck = 0 | ||||
RAM(5)%time=RAM(5)%time+DeltaT_BOP !overal time (s) | RAM(5)%time=RAM(5)%time+RamLine%DeltaT_BOP !overal time (s) | ||||
!=================================================== | !=================================================== | ||||
! BOP | ! BOP | ||||
!=================================================== | !=================================================== | ||||
if (ChokeLine_closed==0) then !bop closing | if (ChokeLine%closed==0) then !bop closing | ||||
call bop_code(4,H_ChokeLineBop,5) !ramtype=4 5=RNUMBER | call bop_code(4,ChokeLine%H_Bop,5) !ramtype=4 5=RNUMBER | ||||
endif !bop is closing | endif !bop is closing | ||||
!================================================================ | !================================================================ | ||||
if (ChokeLine_closed==1) then | if (ChokeLine%closed==1) then | ||||
RAM(5)%Q=0 | RAM(5)%Q=0 | ||||
!p_bop=pram_reg | !p_bop=pram_reg | ||||
RAM(5)%p_bop=pa | RAM(5)%p_bop=ShearRam%PA | ||||
RAMS%minloss(5,17)=0. !RNUMBER=5 | RAMS%minloss(5,17)=0. !RNUMBER=5 | ||||
endif | endif | ||||
@@ -295,9 +295,9 @@ RAM(5)%timecounter_ram=RAM(5)%timecounter_ram+1 | |||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
if (ChokeLine_closed==1) then | if (ChokeLine%closed==1) then | ||||
! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ||||
finished_ChokeLine=1 | ChokeLine%finished=1 | ||||
! endif | ! endif | ||||
endif | endif | ||||
@@ -20,12 +20,12 @@ module ChokeLineMain | |||||
subroutine ChokeLine_Step | subroutine ChokeLine_Step | ||||
use VARIABLES | use VARIABLES | ||||
implicit none | implicit none | ||||
if (finished_ChokeLine/=0) then | if (ChokeLine%finished/=0) then | ||||
call CHOKE_LINE | call CHOKE_LINE | ||||
if (ChokeLineIsOpening .or. ChokeLineIsClosing) then | if (ChokeLine%IsOpening .or. ChokeLine%IsClosing) then | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
if(finished_ChokeLine==0) then | if(ChokeLine%finished==0) then | ||||
call CHOKE_LINE_SUB !only body of loop2 | call CHOKE_LINE_SUB !only body of loop2 | ||||
endif | endif | ||||
endif | endif | ||||
@@ -19,7 +19,7 @@ SUBROUTINE KILL_LINE | |||||
RAM(6)%SuccessionCounter = RAM(6)%SuccessionCounter + 1 | RAM(6)%SuccessionCounter = RAM(6)%SuccessionCounter + 1 | ||||
if (BopControlPanel%KillLineValve == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then | if (BopControlPanel%KillLineValve == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then | if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then | ||||
RAM(6)%SuccessionCounter = 0 ! also in starup | RAM(6)%SuccessionCounter = 0 ! also in starup | ||||
@@ -30,7 +30,7 @@ SUBROUTINE KILL_LINE | |||||
endif | endif | ||||
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -38,36 +38,36 @@ SUBROUTINE KILL_LINE | |||||
if (KillLineOpenLedMine == LedOn) then | if (BopStackInput%KillLineOpenLedMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
KillLine_closed=0 | KillLine%closed=0 | ||||
RAM(6)%vdis_tot=0 | RAM(6)%vdis_tot=0 | ||||
RAM(6)%vdis_bottles=0. | RAM(6)%vdis_bottles=0. | ||||
RAM(6)%fvr_air=0. | RAM(6)%fvr_air=0. | ||||
RAM(6)%vdis_elecp=0. | RAM(6)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(6)%Qzero=70 | RAM(6)%Qzero=70 | ||||
RAM(6)%Q=RAM(6)%Qzero | RAM(6)%Q=RAM(6)%Qzero | ||||
RAM(6)%flow=70 | RAM(6)%flow=70 | ||||
RAM(6)%tol=0.0037 | RAM(6)%tol=0.0037 | ||||
if (finished_KillLine==1) then | if (KillLine%finished==1) then | ||||
KillLineLeverOld= 1.0 | KillLine%LeverOld= 1.0 | ||||
else | else | ||||
KillLineLeverOld=BopControlPanel%KillLineValve | KillLine%LeverOld=BopControlPanel%KillLineValve | ||||
endif | endif | ||||
finished_KillLine=0 | KillLine%finished=0 | ||||
KillLineIsOpening = .true. | KillLine%IsOpening = .true. | ||||
BopControlPanel%KillLineCloseLED = LedOff | BopControlPanel%KillLineCloseLED = LedOff | ||||
KillLineCloseLedMine = LedOff | BopStackInput%KillLineCloseLedMine = LedOff | ||||
BopControlPanel%KillLineOpenLED = LedOn !LedBlinking | BopControlPanel%KillLineOpenLED = LedOn !LedBlinking | ||||
RAM(6)%bop_type = 3 | RAM(6)%bop_type = 3 | ||||
!AbopKillLine=196.67 | !AbopKillLine=196.67 | ||||
AbopKillLine=(BopStackSpecification%KillClose*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) | KillLine%Abop=(BopStackSpecification%KillClose*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) !1.5 galon for each BOP | KillLine%NeededVolume=KillLine%Abop*(KillLine%IDBase-max(KillLine%ODDrillpipe_in,KillLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP | ||||
endif | endif | ||||
if (BopControlPanel%KillLineValve == 1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then | if (BopControlPanel%KillLineValve == 1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then | if ( RAM(6)%SuccessionCounter /= RAM(6)%SuccessionCounterOld+1 ) then | ||||
@@ -79,7 +79,7 @@ SUBROUTINE KILL_LINE | |||||
endif | endif | ||||
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -87,15 +87,15 @@ SUBROUTINE KILL_LINE | |||||
if (KillLineCloseLedMine == LedOn) then | if (BopStackInput%KillLineCloseLedMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
KillLine_closed=0 | KillLine%closed=0 | ||||
RAM(6)%vdis_tot=0 | RAM(6)%vdis_tot=0 | ||||
RAM(6)%vdis_bottles=0. | RAM(6)%vdis_bottles=0. | ||||
RAM(6)%fvr_air=0. | RAM(6)%fvr_air=0. | ||||
RAM(6)%vdis_elecp=0. | RAM(6)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(6)%Qzero=70 | RAM(6)%Qzero=70 | ||||
RAM(6)%Q=RAM(6)%Qzero | RAM(6)%Q=RAM(6)%Qzero | ||||
RAM(6)%flow=70 | RAM(6)%flow=70 | ||||
@@ -103,13 +103,13 @@ SUBROUTINE KILL_LINE | |||||
if (finished_KillLine==1) then | if (KillLine%finished==1) then | ||||
KillLineLeverOld= -1.0 | KillLine%LeverOld= -1.0 | ||||
else | else | ||||
KillLineLeverOld=BopControlPanel%KillLineValve | KillLine%LeverOld=BopControlPanel%KillLineValve | ||||
endif | endif | ||||
finished_KillLine=0 | KillLine%finished=0 | ||||
KillLineIsClosing = .true. | KillLine%IsClosing = .true. | ||||
!if (KillLineCloseLed == LedOn) then | !if (KillLineCloseLed == LedOn) then | ||||
@@ -117,18 +117,18 @@ SUBROUTINE KILL_LINE | |||||
!end if | !end if | ||||
BopControlPanel%KillLineCloseLED = LedOff !new | BopControlPanel%KillLineCloseLED = LedOff !new | ||||
KillLineCloseLedMine = LedOff !new | BopStackInput%KillLineCloseLedMine = LedOff !new | ||||
BopControlPanel%KillLineCloseLED = LedOn !LedBlinking | BopControlPanel%KillLineCloseLED = LedOn !LedBlinking | ||||
RAM(6)%bop_type = 3 | RAM(6)%bop_type = 3 | ||||
!AbopKillLine=196.67 | !AbopKillLine=196.67 | ||||
AbopKillLine=(BopStackSpecification%KillOpen*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) | KillLine%Abop=(BopStackSpecification%KillOpen*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) !1.5 galon for each BOP | KillLine%NeededVolume=KillLine%Abop*(KillLine%IDBase-max(KillLine%ODDrillpipe_in,KillLine%ODDrillpipe_inBase))/(2.*231) !1.5 galon for each BOP | ||||
endif | endif | ||||
!========================================================================== | !========================================================================== | ||||
if (KillLineIsOpening .or. KillLineIsClosing) then | if (KillLine%IsOpening .or. KillLine%IsClosing) then | ||||
CALL KILL_LINE_SUB | CALL KILL_LINE_SUB | ||||
end if | end if | ||||
@@ -157,8 +157,8 @@ SUBROUTINE KILL_LINE_SUB | |||||
implicit none | implicit none | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
! loop6: do while (finished_KillLine==0) | ! loop6: do while (finished_KillLine==0) | ||||
@@ -167,7 +167,7 @@ SUBROUTINE KILL_LINE_SUB | |||||
if (BopControlPanel%KillLineValve == 1.0 .and. KillLineLeverOld == -1.0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. p_acc>acc_MinPressure) then | if (BopControlPanel%KillLineValve == 1.0 .and. KillLine%LeverOld == -1.0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
if ( RAM(6)%First_CloseTimecheck == 0 ) then | if ( RAM(6)%First_CloseTimecheck == 0 ) then | ||||
@@ -182,7 +182,7 @@ SUBROUTINE KILL_LINE_SUB | |||||
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
@@ -190,26 +190,26 @@ SUBROUTINE KILL_LINE_SUB | |||||
KillLine_closed=0 | KillLine%closed=0 | ||||
RAM(6)%p_bop=pa | RAM(6)%p_bop=ShearRam%PA | ||||
KillLineLeverOld = BopControlPanel%KillLineValve | KillLine%LeverOld = BopControlPanel%KillLineValve | ||||
BopControlPanel%KillLineOpenLED = LedOff | BopControlPanel%KillLineOpenLED = LedOff | ||||
KillLineOpenLedMine = LedOff | BopStackInput%KillLineOpenLedMine = LedOff | ||||
BopControlPanel%KillLineCloseLED = LedOn !LedBlinking | BopControlPanel%KillLineCloseLED = LedOn !LedBlinking | ||||
CALL OpenKillLine | CALL OpenKillLine | ||||
RAM(6)%bop_type = 3 | RAM(6)%bop_type = 3 | ||||
!AbopKillLine=196.67 | !AbopKillLine=196.67 | ||||
AbopKillLine=(BopStackSpecification%KillClose*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) | KillLine%Abop=(BopStackSpecification%KillClose*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeKillLine=AbopKillLine*(IDKillLine-max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase))/(2.*231) | KillLine%NeededVolume=KillLine%Abop*(KillLine%ID-max(KillLine%ODDrillpipe_in,KillLine%ODDrillpipe_inBase))/(2.*231) | ||||
RAM(6)%vdis_bottles=0. | RAM(6)%vdis_bottles=0. | ||||
RAM(6)%fvr_air=0. | RAM(6)%fvr_air=0. | ||||
RAM(6)%vdis_elecp=0. | RAM(6)%vdis_elecp=0. | ||||
KillLineIsClosing = .true. | KillLine%IsClosing = .true. | ||||
KillLineIsOpening = .false. | KillLine%IsOpening = .false. | ||||
endif | endif | ||||
if (BopControlPanel%KillLineValve == -1.0 .and. KillLineLeverOld == 1.0 .and. p_acc>acc_MinPressure .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%KillLineValve == -1.0 .and. KillLine%LeverOld == 1.0 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if ( RAM(6)%First_OpenTimecheck == 0 ) then | if ( RAM(6)%First_OpenTimecheck == 0 ) then | ||||
@@ -222,30 +222,30 @@ SUBROUTINE KILL_LINE_SUB | |||||
RAM(6)%SuccessionCounterOld= RAM(6)%SuccessionCounter | RAM(6)%SuccessionCounterOld= RAM(6)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(6)%SuccessionCounter < int(2.5/DeltaT_BOP) ) then | if ( RAM(6)%SuccessionCounter < int(2.5/RamLine%DeltaT_BOP) ) then | ||||
return | return | ||||
endif | endif | ||||
endif | endif | ||||
KillLine_closed=0 | KillLine%closed=0 | ||||
RAM(6)%p_bop=pa | RAM(6)%p_bop=ShearRam%PA | ||||
KillLineLeverOld = BopControlPanel%KillLineValve | KillLine%LeverOld = BopControlPanel%KillLineValve | ||||
BopControlPanel%KillLineCloseLED = LedOff | BopControlPanel%KillLineCloseLED = LedOff | ||||
KillLineCloseLedMine = LedOff | BopStackInput%KillLineCloseLedMine = LedOff | ||||
BopControlPanel%KillLineOpenLED = LedOn !LedBlinking | BopControlPanel%KillLineOpenLED = LedOn !LedBlinking | ||||
CALL OpenKillLine | CALL OpenKillLine | ||||
RAM(6)%bop_type = 3 | RAM(6)%bop_type = 3 | ||||
!AbopKillLine=196.67 | !AbopKillLine=196.67 | ||||
AbopKillLine=(BopStackSpecification%KillOpen*231)/((IDKillLineBase-ODDrillpipe_inKillLineBase)/2.) | KillLine%Abop=(BopStackSpecification%KillOpen*231)/((KillLine%IDBase-KillLine%ODDrillpipe_inBase)/2.) | ||||
NeededVolumeKillLine=AbopKillLine*(IDKillLineBase-IDKillLine)/(2.*231) | KillLine%NeededVolume=KillLine%Abop*(KillLine%IDBase-KillLine%ID)/(2.*231) | ||||
RAM(6)%vdis_bottles=0. | RAM(6)%vdis_bottles=0. | ||||
RAM(6)%fvr_air=0. | RAM(6)%fvr_air=0. | ||||
RAM(6)%vdis_elecp=0. | RAM(6)%vdis_elecp=0. | ||||
KillLineIsOpening = .true. | KillLine%IsOpening = .true. | ||||
KillLineIsClosing = .false. | KillLine%IsClosing = .false. | ||||
endif | endif | ||||
@@ -253,21 +253,21 @@ SUBROUTINE KILL_LINE_SUB | |||||
RAM(6)%First_OpenTimecheck = 0 | RAM(6)%First_OpenTimecheck = 0 | ||||
RAM(6)%time=RAM(6)%time+DeltaT_BOP !overal time (s) | RAM(6)%time=RAM(6)%time+RamLine%DeltaT_BOP !overal time (s) | ||||
!=================================================== | !=================================================== | ||||
! BOP | ! BOP | ||||
!=================================================== | !=================================================== | ||||
if (KillLine_closed==0) then !bop closing | if (KillLine%closed==0) then !bop closing | ||||
call bop_code(5,H_KillLineBop,6) !ramtype=5 6=RNUMBER | call bop_code(5,KillLine%H_Bop,6) !ramtype=5 6=RNUMBER | ||||
endif !bop is closing | endif !bop is closing | ||||
!================================================================ | !================================================================ | ||||
if (KillLine_closed==1) then | if (KillLine%closed==1) then | ||||
RAM(6)%Q=0 | RAM(6)%Q=0 | ||||
!p_bop=pram_reg | !p_bop=pram_reg | ||||
RAM(6)%p_bop=pa | RAM(6)%p_bop=ShearRam%PA | ||||
RAMS%minloss(6,17)=0. !RNUMBER=6 | RAMS%minloss(6,17)=0. !RNUMBER=6 | ||||
endif | endif | ||||
@@ -295,9 +295,9 @@ RAM(6)%timecounter_ram=RAM(6)%timecounter_ram+1 | |||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
if (KillLine_closed==1) then | if (KillLine%closed==1) then | ||||
! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0) then | ! if ((UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0) then | ||||
finished_KillLine=1 | KillLine%finished=1 | ||||
! endif | ! endif | ||||
endif | endif | ||||
@@ -20,10 +20,10 @@ module KillLineMain | |||||
subroutine KillLine_Step | subroutine KillLine_Step | ||||
use VARIABLES | use VARIABLES | ||||
implicit none | implicit none | ||||
if (finished_KillLine/=0) then | if (KillLine%finished/=0) then | ||||
call KILL_LINE | call KILL_LINE | ||||
if (KillLineIsOpening .or. KillLineIsClosing) then | if (KillLine%IsOpening .or. KillLine%IsClosing) then | ||||
if(finished_KillLine==0) then | if(KillLine%finished==0) then | ||||
call KILL_LINE_SUB !only body of loop2 | call KILL_LINE_SUB !only body of loop2 | ||||
endif | endif | ||||
endif | endif | ||||
@@ -13,8 +13,8 @@ SUBROUTINE PIPE_RAMS1 | |||||
! START CONDITIONS FOR PIPE RAMS 1 | ! START CONDITIONS FOR PIPE RAMS 1 | ||||
!===================================================================== | !===================================================================== | ||||
RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1 | RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1 | ||||
if (BopControlPanel%UpperRamsValve == 1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if (UpperRamsCloseLEDMine == LedOn) then | if (BopStackInput%UpperRamsCloseLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
if ( RAM(2)%SuccessionCounter /= RAM(2)%SuccessionCounterOld+1 ) then | if ( RAM(2)%SuccessionCounter /= RAM(2)%SuccessionCounterOld+1 ) then | ||||
@@ -28,13 +28,13 @@ SUBROUTINE PIPE_RAMS1 | |||||
if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(2)%First_CloseTimecheck= 1 | RAM(2)%First_CloseTimecheck= 1 | ||||
BopControlPanel%UpperRamsOpenLED = LedOff | BopControlPanel%UpperRamsOpenLED = LedOff | ||||
UpperRamsOpenLEDMine = LedOff | BopStackInput%UpperRamsOpenLEDMine = LedOff | ||||
BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking | BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking | ||||
RAM(2)%FourwayValve = 1 | RAM(2)%FourwayValve = 1 | ||||
@@ -43,42 +43,42 @@ SUBROUTINE PIPE_RAMS1 | |||||
endif | endif | ||||
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close | if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close | ||||
!write(*,*) 'close 2' | !write(*,*) 'close 2' | ||||
RAM(2)%FourwayValve = 0 | RAM(2)%FourwayValve = 0 | ||||
PipeRam1_closed=0 | PipeRam1%closed=0 | ||||
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) | !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) | ||||
RAM(2)%vdis_tot=0 | RAM(2)%vdis_tot=0 | ||||
RAM(2)%vdis_bottles=0. | RAM(2)%vdis_bottles=0. | ||||
RAM(2)%fvr_air=0. | RAM(2)%fvr_air=0. | ||||
RAM(2)%vdis_elecp=0. | RAM(2)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(2)%Qzero=70 | RAM(2)%Qzero=70 | ||||
RAM(2)%Q=RAM(2)%Qzero | RAM(2)%Q=RAM(2)%Qzero | ||||
RAM(2)%flow=70 | RAM(2)%flow=70 | ||||
RAM(2)%tol=0.0037 | RAM(2)%tol=0.0037 | ||||
if (finished_pipe1==1) then | if (PipeRam1%finished==1) then | ||||
PipeRams1LeverOld=-1.0 | PipeRam1%PipeRams1DotLeverOld=-1.0 | ||||
else | else | ||||
PipeRams1LeverOld=BopControlPanel%UpperRamsValve | PipeRam1%PipeRams1DotLeverOld=BopControlPanel%UpperRamsValve | ||||
endif | endif | ||||
finished_pipe1=0 | PipeRam1%finished=0 | ||||
PipeRam1IsClosing = .true. | PipeRam1%IsClosing = .true. | ||||
PipeRam1IsOpening = .false. | PipeRam1%IsOpening = .false. | ||||
RAM(2)%bop_type = 3 | RAM(2)%bop_type = 3 | ||||
!AbopPipeRam=196.67 | !AbopPipeRam=196.67 | ||||
AbopPipeRam=(BopStackSpecification%UpperRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%UpperRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) !3.67 galon for each BOP | PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam1%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !3.67 galon for each BOP | ||||
endif | endif | ||||
if (BopControlPanel%UpperRamsValve == -1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%UpperRamsValve == -1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if (UpperRamsOpenLEDMine == LedOn) then | if (BopStackInput%UpperRamsOpenLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
@@ -91,13 +91,13 @@ SUBROUTINE PIPE_RAMS1 | |||||
endif | endif | ||||
if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(2)%First_OpenTimecheck= 1 | RAM(2)%First_OpenTimecheck= 1 | ||||
BopControlPanel%UpperRamsCloseLED = LedOff !new | BopControlPanel%UpperRamsCloseLED = LedOff !new | ||||
UpperRamsCloseLedMine = LedOff !new | BopStackInput%UpperRamsCloseLEDMine = LedOff !new | ||||
BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking | BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking | ||||
RAM(2)%FourwayValve = 1 | RAM(2)%FourwayValve = 1 | ||||
@@ -106,19 +106,19 @@ SUBROUTINE PIPE_RAMS1 | |||||
endif | endif | ||||
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close | if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close | ||||
!write(*,*) 'open 2' | !write(*,*) 'open 2' | ||||
RAM(2)%FourwayValve = 0 | RAM(2)%FourwayValve = 0 | ||||
PipeRam1_closed=0 | PipeRam1%closed=0 | ||||
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) | !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) | ||||
RAM(2)%vdis_tot=0 | RAM(2)%vdis_tot=0 | ||||
RAM(2)%vdis_bottles=0. | RAM(2)%vdis_bottles=0. | ||||
RAM(2)%fvr_air=0. | RAM(2)%fvr_air=0. | ||||
RAM(2)%vdis_elecp=0. | RAM(2)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(2)%Qzero=70 | RAM(2)%Qzero=70 | ||||
RAM(2)%Q=RAM(2)%Qzero | RAM(2)%Q=RAM(2)%Qzero | ||||
RAM(2)%flow=70 | RAM(2)%flow=70 | ||||
@@ -126,14 +126,14 @@ SUBROUTINE PIPE_RAMS1 | |||||
if (finished_pipe1==1) then | if (PipeRam1%finished==1) then | ||||
PipeRams1LeverOld=1.0 | PipeRam1%PipeRams1DotLeverOld=1.0 | ||||
else | else | ||||
PipeRams1LeverOld=BopControlPanel%UpperRamsValve | PipeRam1%PipeRams1DotLeverOld=BopControlPanel%UpperRamsValve | ||||
endif | endif | ||||
finished_pipe1=0 | PipeRam1%finished=0 | ||||
PipeRam1IsOpening = .true. | PipeRam1%IsOpening = .true. | ||||
PipeRam1IsClosing = .false. | PipeRam1%IsClosing = .false. | ||||
!if (UpperRamsOpenLED == LedOn) then | !if (UpperRamsOpenLED == LedOn) then | ||||
@@ -144,17 +144,17 @@ SUBROUTINE PIPE_RAMS1 | |||||
RAM(2)%bop_type = 3 | RAM(2)%bop_type = 3 | ||||
!AbopPipeRam=186.5 | !AbopPipeRam=186.5 | ||||
AbopPipeRam=(BopStackSpecification%UpperRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%UpperRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) !3.48 galon for each BOP | PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam1%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !3.48 galon for each BOP | ||||
endif | endif | ||||
!===================================================================== | !===================================================================== | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
if (PipeRam1IsOpening .or. PipeRam1IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then | if (PipeRam1%IsOpening .or. PipeRam1%IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
CALL PIPE_RAMS1_SUB | CALL PIPE_RAMS1_SUB | ||||
end if | end if | ||||
@@ -190,7 +190,7 @@ SUBROUTINE PIPE_RAMS1_SUB | |||||
RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1 | RAM(2)%SuccessionCounter = RAM(2)%SuccessionCounter + 1 | ||||
if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRams1LeverOld == -1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%UpperRamsValve == 1.0 .and. PipeRam1%PipeRams1DotLeverOld == -1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
@@ -207,11 +207,11 @@ SUBROUTINE PIPE_RAMS1_SUB | |||||
if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
BopControlPanel%UpperRamsOpenLED = LedOff | BopControlPanel%UpperRamsOpenLED = LedOff | ||||
UpperRamsOpenLEDMine = LedOff | BopStackInput%UpperRamsOpenLEDMine = LedOff | ||||
BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking | BopControlPanel%UpperRamsCloseLED = LedOn !LedBlinking | ||||
RAM(2)%FourwayValve = 1 | RAM(2)%FourwayValve = 1 | ||||
@@ -222,35 +222,35 @@ SUBROUTINE PIPE_RAMS1_SUB | |||||
endif | endif | ||||
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then | if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
!write(*,*) 'close 4' | !write(*,*) 'close 4' | ||||
RAM(2)%FourwayValve = 0 | RAM(2)%FourwayValve = 0 | ||||
PipeRam1_closed=0 | PipeRam1%closed=0 | ||||
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) ! for TD code | !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) ! for TD code | ||||
CALL OpenUpperRams ! for C code | CALL OpenUpperRams ! for C code | ||||
PipeRam1_Situation_forTD= 0 ! open - for TD code | PipeRam1%Situation_forTD= 0 ! open - for TD code | ||||
RAM(2)%p_bop=pa | RAM(2)%p_bop=ShearRam%PA | ||||
PipeRams1LeverOld = BopControlPanel%UpperRamsValve | PipeRam1%PipeRams1DotLeverOld = BopControlPanel%UpperRamsValve | ||||
RAM(2)%bop_type = 3 | RAM(2)%bop_type = 3 | ||||
!AbopPipeRam=196.67 | !AbopPipeRam=196.67 | ||||
AbopPipeRam=(BopStackSpecification%UpperRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%UpperRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
!write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams | !write(*,*) 'NeededVolumeShearRams1=',NeededVolumeShearRams | ||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRam1-max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base))/(2.*231) | PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%ID-max(PipeRam1%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) | ||||
! write(*,*) 'NeededVolumeShearRams2=',NeededVolumeShearRams | ! write(*,*) 'NeededVolumeShearRams2=',NeededVolumeShearRams | ||||
RAM(2)%vdis_bottles=0. | RAM(2)%vdis_bottles=0. | ||||
RAM(2)%fvr_air=0. | RAM(2)%fvr_air=0. | ||||
RAM(2)%vdis_elecp=0. | RAM(2)%vdis_elecp=0. | ||||
PipeRam1IsClosing = .true. | PipeRam1%IsClosing = .true. | ||||
PipeRam1IsOpening = .false. | PipeRam1%IsOpening = .false. | ||||
endif | endif | ||||
if (BopControlPanel%UpperRamsValve == -1.0 .and. PipeRams1LeverOld == 1.0 .and. UpperRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%UpperRamsValve == -1.0 .and. PipeRam1%PipeRams1DotLeverOld == 1.0 .and. PipeRam1%UpperRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if ( RAM(2)%First_OpenTimecheck == 0 ) then | if ( RAM(2)%First_OpenTimecheck == 0 ) then | ||||
@@ -263,11 +263,11 @@ SUBROUTINE PIPE_RAMS1_SUB | |||||
RAM(2)%SuccessionCounterOld= RAM(2)%SuccessionCounter | RAM(2)%SuccessionCounterOld= RAM(2)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(2)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(2)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
BopControlPanel%UpperRamsCloseLED = LedOff | BopControlPanel%UpperRamsCloseLED = LedOff | ||||
UpperRamsCloseLEDMine = LedOff | BopStackInput%UpperRamsCloseLEDMine = LedOff | ||||
BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking | BopControlPanel%UpperRamsOpenLED = LedOn !LedBlinking | ||||
RAM(2)%FourwayValve = 1 | RAM(2)%FourwayValve = 1 | ||||
@@ -279,30 +279,30 @@ SUBROUTINE PIPE_RAMS1_SUB | |||||
endif | endif | ||||
if (RAM(2)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then | if (RAM(2)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
!write(*,*) 'open 4' | !write(*,*) 'open 4' | ||||
RAM(2)%FourwayValve = 0 | RAM(2)%FourwayValve = 0 | ||||
PipeRam1_closed=0 | PipeRam1%closed=0 | ||||
!PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) | !PipeRam1_closed_withPossibility= PipeRam1_closed * TD_BOPConnectionPossibility(2) | ||||
CALL OpenUpperRams | CALL OpenUpperRams | ||||
PipeRam1_Situation_forTD= 0 ! open - for TD code | PipeRam1%Situation_forTD= 0 ! open - for TD code | ||||
RAM(2)%p_bop=pa | RAM(2)%p_bop=ShearRam%PA | ||||
PipeRams1LeverOld = BopControlPanel%UpperRamsValve | PipeRam1%PipeRams1DotLeverOld = BopControlPanel%UpperRamsValve | ||||
RAM(2)%bop_type = 3 | RAM(2)%bop_type = 3 | ||||
!AbopPipeRam=186.5 | !AbopPipeRam=186.5 | ||||
AbopPipeRam=(BopStackSpecification%UpperRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%UpperRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams1=AbopPipeRam*(IDPipeRamBase-IDPipeRam1)/(2.*231) | PipeRam1%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-PipeRam1%ID)/(2.*231) | ||||
RAM(2)%vdis_bottles=0. | RAM(2)%vdis_bottles=0. | ||||
RAM(2)%fvr_air=0. | RAM(2)%fvr_air=0. | ||||
RAM(2)%vdis_elecp=0. | RAM(2)%vdis_elecp=0. | ||||
PipeRam1IsOpening = .true. | PipeRam1%IsOpening = .true. | ||||
PipeRam1IsClosing = .false. | PipeRam1%IsClosing = .false. | ||||
endif | endif | ||||
@@ -310,21 +310,21 @@ SUBROUTINE PIPE_RAMS1_SUB | |||||
RAM(2)%First_OpenTimecheck = 0 | RAM(2)%First_OpenTimecheck = 0 | ||||
RAM(2)%time=RAM(2)%time+DeltaT_BOP !overal time (s) | RAM(2)%time=RAM(2)%time+RamLine%DeltaT_BOP !overal time (s) | ||||
!=================================================== | !=================================================== | ||||
! BOP | ! BOP | ||||
!=================================================== | !=================================================== | ||||
if (PipeRam1_closed==0) then !bop closing | if (PipeRam1%closed==0) then !bop closing | ||||
call bop_code(2,H_PipeRam1Bop,2) !ramtype=2 2=RNUMBER | call bop_code(2,PipeRam1%H,2) !ramtype=2 2=RNUMBER | ||||
endif !bop is closing | endif !bop is closing | ||||
!================================================================ | !================================================================ | ||||
if (PipeRam1_closed==1) then | if (PipeRam1%closed==1) then | ||||
RAM(2)%Q=0 | RAM(2)%Q=0 | ||||
!p_bop=pram_reg | !p_bop=pram_reg | ||||
RAM(2)%p_bop=pa | RAM(2)%p_bop=ShearRam%PA | ||||
RAMS%minloss(2,17)=0. !RNUMBER=2 | RAMS%minloss(2,17)=0. !RNUMBER=2 | ||||
endif | endif | ||||
@@ -352,9 +352,9 @@ RAM(2)%timecounter_ram=RAM(2)%timecounter_ram+1 | |||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
if (PipeRam1_closed==1) then | if (PipeRam1%closed==1) then | ||||
! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (LowerRamsValve==1. .and. LowerRamsFailureMalf==0) .or. (LowerRamsValve==-1.0 .and. LowerRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ||||
finished_pipe1=1 | PipeRam1%finished=1 | ||||
! endif | ! endif | ||||
endif | endif | ||||
@@ -367,8 +367,8 @@ endif | |||||
if ( finished_pipe1==1 .and. RAM(2)%Bottles_Charged_MalfActive==.true.) then | if ( PipeRam1%finished==1 .and. RAM(2)%Bottles_Charged_MalfActive==.true.) then | ||||
call bop_code(2,H_PipeRam1Bop,2) !ramtype=2 2=RNUMBER | call bop_code(2,PipeRam1%H,2) !ramtype=2 2=RNUMBER | ||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
endif | endif | ||||
@@ -18,11 +18,11 @@ SUBROUTINE PIPE_RAMS2 | |||||
RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1 | RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1 | ||||
if (BopControlPanel%LowerRamsValve == 1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%LowerRamsValve == 1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
!write(*,*) 'close 1' | !write(*,*) 'close 1' | ||||
if (LowerRamsCloseLEDMine == LedOn) then | if (BopStackInput%LowerRamsCloseLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
@@ -36,13 +36,13 @@ SUBROUTINE PIPE_RAMS2 | |||||
endif | endif | ||||
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(3)%First_CloseTimecheck= 1 | RAM(3)%First_CloseTimecheck= 1 | ||||
BopControlPanel%LowerRamsOpenLED = LedOff | BopControlPanel%LowerRamsOpenLED = LedOff | ||||
LowerRamsOpenLEDMine = LedOff | BopStackInput%LowerRamsOpenLEDMine = LedOff | ||||
BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking | BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking | ||||
RAM(3)%FourwayValve = 1 | RAM(3)%FourwayValve = 1 | ||||
@@ -54,45 +54,45 @@ SUBROUTINE PIPE_RAMS2 | |||||
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close | if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close | ||||
!write(*,*) 'close 2' | !write(*,*) 'close 2' | ||||
RAM(3)%FourwayValve = 0 | RAM(3)%FourwayValve = 0 | ||||
PipeRam2_closed=0 | PipeRam2%closed=0 | ||||
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | ||||
RAM(3)%vdis_tot=0 | RAM(3)%vdis_tot=0 | ||||
RAM(3)%vdis_bottles=0. | RAM(3)%vdis_bottles=0. | ||||
RAM(3)%fvr_air=0. | RAM(3)%fvr_air=0. | ||||
RAM(3)%vdis_elecp=0. | RAM(3)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(3)%Qzero=70 | RAM(3)%Qzero=70 | ||||
RAM(3)%Q=RAM(3)%Qzero | RAM(3)%Q=RAM(3)%Qzero | ||||
RAM(3)%flow=70 | RAM(3)%flow=70 | ||||
RAM(3)%tol=0.0037 | RAM(3)%tol=0.0037 | ||||
if (finished_pipe2==1) then | if (PipeRam2%finished==1) then | ||||
PipeRams2LeverOld=-1.0 | PipeRam2%LeverOld=-1.0 | ||||
else | else | ||||
PipeRams2LeverOld=BopControlPanel%LowerRamsValve | PipeRam2%LeverOld=BopControlPanel%LowerRamsValve | ||||
endif | endif | ||||
finished_pipe2=0 | PipeRam2%finished=0 | ||||
PipeRam2IsClosing = .true. | PipeRam2%IsClosing = .true. | ||||
PipeRam2IsOpening = .false. | PipeRam2%IsOpening = .false. | ||||
RAM(3)%bop_type = 3 | RAM(3)%bop_type = 3 | ||||
!AbopPipeRam=196.67 | !AbopPipeRam=196.67 | ||||
AbopPipeRam=(BopStackSpecification%LowerRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%LowerRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) !galon for each BOP | PipeRam2%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam2%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !galon for each BOP | ||||
!write(*,*) 'close 1' | !write(*,*) 'close 1' | ||||
endif | endif | ||||
if (BopControlPanel%LowerRamsValve == -1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%LowerRamsValve == -1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
!write(*,*) 'open 1' | !write(*,*) 'open 1' | ||||
if (LowerRamsOpenLEDMine == LedOn) then | if (BopStackInput%LowerRamsOpenLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
@@ -106,13 +106,13 @@ SUBROUTINE PIPE_RAMS2 | |||||
endif | endif | ||||
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(3)%First_OpenTimecheck= 1 | RAM(3)%First_OpenTimecheck= 1 | ||||
BopControlPanel%LowerRamsCloseLED = LedOff !new | BopControlPanel%LowerRamsCloseLED = LedOff !new | ||||
LowerRamsCloseLedMine = LedOff !new | BopStackInput%LowerRamsCloseLEDMine = LedOff !new | ||||
BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking | BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking | ||||
RAM(3)%FourwayValve = 1 | RAM(3)%FourwayValve = 1 | ||||
@@ -123,31 +123,31 @@ SUBROUTINE PIPE_RAMS2 | |||||
endif | endif | ||||
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close | if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close | ||||
!write(*,*) 'open 2' | !write(*,*) 'open 2' | ||||
RAM(3)%FourwayValve = 0 | RAM(3)%FourwayValve = 0 | ||||
PipeRam2_closed=0 | PipeRam2%closed=0 | ||||
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | ||||
RAM(3)%vdis_tot=0 | RAM(3)%vdis_tot=0 | ||||
RAM(3)%vdis_bottles=0. | RAM(3)%vdis_bottles=0. | ||||
RAM(3)%fvr_air=0. | RAM(3)%fvr_air=0. | ||||
RAM(3)%vdis_elecp=0. | RAM(3)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(3)%Qzero=70 | RAM(3)%Qzero=70 | ||||
RAM(3)%Q=RAM(3)%Qzero | RAM(3)%Q=RAM(3)%Qzero | ||||
RAM(3)%flow=70 | RAM(3)%flow=70 | ||||
RAM(3)%tol=0.0037 | RAM(3)%tol=0.0037 | ||||
if (finished_pipe2==1) then | if (PipeRam2%finished==1) then | ||||
PipeRams2LeverOld=1.0 | PipeRam2%LeverOld=1.0 | ||||
else | else | ||||
PipeRams2LeverOld=BopControlPanel%LowerRamsValve | PipeRam2%LeverOld=BopControlPanel%LowerRamsValve | ||||
endif | endif | ||||
finished_pipe2=0 | PipeRam2%finished=0 | ||||
PipeRam2IsOpening = .true. | PipeRam2%IsOpening = .true. | ||||
PipeRam2IsClosing = .false. | PipeRam2%IsClosing = .false. | ||||
!if (LowerRamsOpenLED == LedOn) then | !if (LowerRamsOpenLED == LedOn) then | ||||
@@ -157,8 +157,8 @@ SUBROUTINE PIPE_RAMS2 | |||||
RAM(3)%bop_type = 3 | RAM(3)%bop_type = 3 | ||||
!AbopPipeRam=186.5 | !AbopPipeRam=186.5 | ||||
AbopPipeRam=(BopStackSpecification%LowerRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%LowerRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) !galon for each BOP | PipeRam2%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-max(PipeRam2%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) !galon for each BOP | ||||
!write(*,*) 'open 1' | !write(*,*) 'open 1' | ||||
endif | endif | ||||
@@ -166,9 +166,9 @@ SUBROUTINE PIPE_RAMS2 | |||||
!===================================================================== | !===================================================================== | ||||
if (PipeRam2IsOpening .or. PipeRam2IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then | if (PipeRam2%IsOpening .or. PipeRam2%IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then | ||||
FirstSet= 0 | Annular%FirstSet= 0 | ||||
RamsFirstSet= 0 | AnnularComputational%RamsFirstSet= 0 | ||||
CALL PIPE_RAMS2_SUB | CALL PIPE_RAMS2_SUB | ||||
end if | end if | ||||
@@ -206,7 +206,7 @@ SUBROUTINE PIPE_RAMS2_SUB | |||||
RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1 | RAM(3)%SuccessionCounter = RAM(3)%SuccessionCounter + 1 | ||||
if (BopControlPanel%LowerRamsValve == 1.0 .and. PipeRams2LeverOld == -1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%LowerRamsValve == 1.0 .and. PipeRam2%LeverOld == -1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
!write(*,*) 'close 3' | !write(*,*) 'close 3' | ||||
@@ -223,11 +223,11 @@ SUBROUTINE PIPE_RAMS2_SUB | |||||
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
BopControlPanel%LowerRamsOpenLED = LedOff | BopControlPanel%LowerRamsOpenLED = LedOff | ||||
LowerRamsOpenLEDMine = LedOff | BopStackInput%LowerRamsOpenLEDMine = LedOff | ||||
BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking | BopControlPanel%LowerRamsCloseLED = LedOn !LedBlinking | ||||
RAM(3)%FourwayValve = 1 | RAM(3)%FourwayValve = 1 | ||||
@@ -241,34 +241,34 @@ SUBROUTINE PIPE_RAMS2_SUB | |||||
endif | endif | ||||
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then | if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
!write(*,*) 'close 4' | !write(*,*) 'close 4' | ||||
RAM(3)%FourwayValve = 0 | RAM(3)%FourwayValve = 0 | ||||
PipeRam2_closed=0 | PipeRam2%closed=0 | ||||
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | ||||
RAM(3)%p_bop=pa | RAM(3)%p_bop=ShearRam%PA | ||||
PipeRams2LeverOld = BopControlPanel%LowerRamsValve | PipeRam2%LeverOld = BopControlPanel%LowerRamsValve | ||||
CALL OpenLowerRams | CALL OpenLowerRams | ||||
PipeRam2_Situation_forTD= 0 ! open - for TD code | PipeRam2%Situation_forTD= 0 ! open - for TD code | ||||
RAM(3)%bop_type = 3 | RAM(3)%bop_type = 3 | ||||
!AbopPipeRam=196.67 | !AbopPipeRam=196.67 | ||||
AbopPipeRam=(BopStackSpecification%LowerRamClose*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%LowerRamClose*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRam2-max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base))/(2.*231) | PipeRam2%NeededVolume=PipeRam1%A*(PipeRam2%ID-max(PipeRam2%ODDrillpipe_in,PipeRam1%ODDrillpipe_inBase))/(2.*231) | ||||
RAM(3)%vdis_bottles=0. | RAM(3)%vdis_bottles=0. | ||||
RAM(3)%fvr_air=0. | RAM(3)%fvr_air=0. | ||||
RAM(3)%vdis_elecp=0. | RAM(3)%vdis_elecp=0. | ||||
PipeRam2IsClosing = .true. | PipeRam2%IsClosing = .true. | ||||
PipeRam2IsOpening = .false. | PipeRam2%IsOpening = .false. | ||||
!write(*,*) 'close 2' | !write(*,*) 'close 2' | ||||
endif | endif | ||||
if (BopControlPanel%LowerRamsValve == -1.0 .and. PipeRams2LeverOld == 1.0 .and. LowerRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%LowerRamsValve == -1.0 .and. PipeRam2%LeverOld == 1.0 .and. PipeRam2%LowerRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
!write(*,*) 'open 3' | !write(*,*) 'open 3' | ||||
@@ -282,11 +282,11 @@ SUBROUTINE PIPE_RAMS2_SUB | |||||
RAM(3)%SuccessionCounterOld= RAM(3)%SuccessionCounter | RAM(3)%SuccessionCounterOld= RAM(3)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(3)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(3)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
BopControlPanel%LowerRamsCloseLED = LedOff | BopControlPanel%LowerRamsCloseLED = LedOff | ||||
LowerRamsCloseLEDMine = LedOff | BopStackInput%LowerRamsCloseLEDMine = LedOff | ||||
BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking | BopControlPanel%LowerRamsOpenLED = LedOn !LedBlinking | ||||
RAM(3)%FourwayValve = 1 | RAM(3)%FourwayValve = 1 | ||||
@@ -299,28 +299,28 @@ SUBROUTINE PIPE_RAMS2_SUB | |||||
endif | endif | ||||
if (RAM(3)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then | if (RAM(3)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
!write(*,*) 'open 4' | !write(*,*) 'open 4' | ||||
RAM(3)%FourwayValve = 0 | RAM(3)%FourwayValve = 0 | ||||
PipeRam2_closed=0 | PipeRam2%closed=0 | ||||
!PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) | ||||
RAM(3)%p_bop=pa | RAM(3)%p_bop=ShearRam%PA | ||||
PipeRams2LeverOld = BopControlPanel%LowerRamsValve | PipeRam2%LeverOld = BopControlPanel%LowerRamsValve | ||||
CALL OpenLowerRams | CALL OpenLowerRams | ||||
PipeRam2_Situation_forTD= 0 ! open - for TD code | PipeRam2%Situation_forTD= 0 ! open - for TD code | ||||
RAM(3)%bop_type = 3 | RAM(3)%bop_type = 3 | ||||
!AbopPipeRam=186.5 | !AbopPipeRam=186.5 | ||||
AbopPipeRam=(BopStackSpecification%LowerRamOpen*231)/((IDPipeRamBase-ODDrillpipe_inPipeRam1Base)/2.) | PipeRam1%A=(BopStackSpecification%LowerRamOpen*231)/((PipeRam1%IDBase-PipeRam1%ODDrillpipe_inBase)/2.) | ||||
NeededVolumePipeRams2=AbopPipeRam*(IDPipeRamBase-IDPipeRam2)/(2.*231) | PipeRam2%NeededVolume=PipeRam1%A*(PipeRam1%IDBase-PipeRam2%ID)/(2.*231) | ||||
RAM(3)%vdis_bottles=0. | RAM(3)%vdis_bottles=0. | ||||
RAM(3)%fvr_air=0. | RAM(3)%fvr_air=0. | ||||
RAM(3)%vdis_elecp=0. | RAM(3)%vdis_elecp=0. | ||||
PipeRam2IsOpening = .true. | PipeRam2%IsOpening = .true. | ||||
PipeRam2IsClosing = .false. | PipeRam2%IsClosing = .false. | ||||
!write(*,*) 'open 2' | !write(*,*) 'open 2' | ||||
endif | endif | ||||
@@ -330,22 +330,22 @@ SUBROUTINE PIPE_RAMS2_SUB | |||||
RAM(3)%First_OpenTimecheck = 0 | RAM(3)%First_OpenTimecheck = 0 | ||||
RAM(3)%time=RAM(3)%time+DeltaT_BOP !overal time (s) | RAM(3)%time=RAM(3)%time+RamLine%DeltaT_BOP !overal time (s) | ||||
!=================================================== | !=================================================== | ||||
! BOP | ! BOP | ||||
!=================================================== | !=================================================== | ||||
if (PipeRam2_closed==0) then !bop closing | if (PipeRam2%closed==0) then !bop closing | ||||
!write(*,*) 'BOP code is called' | !write(*,*) 'BOP code is called' | ||||
call bop_code(3,H_PipeRam2Bop,3) !ramtype=3 3=RNUMBER | call bop_code(3,PipeRam2%H_Bop,3) !ramtype=3 3=RNUMBER | ||||
endif !bop is closing | endif !bop is closing | ||||
!================================================================ | !================================================================ | ||||
if (PipeRam2_closed==1) then | if (PipeRam2%closed==1) then | ||||
RAM(3)%Q=0 | RAM(3)%Q=0 | ||||
!p_bop=pram_reg | !p_bop=pram_reg | ||||
RAM(3)%p_bop=pa | RAM(3)%p_bop=ShearRam%PA | ||||
RAMS%minloss(3,17)=0. !RNUMBER=3 | RAMS%minloss(3,17)=0. !RNUMBER=3 | ||||
endif | endif | ||||
@@ -373,10 +373,10 @@ RAM(3)%timecounter_ram=RAM(3)%timecounter_ram+1 | |||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
if (PipeRam2_closed==1) then | if (PipeRam2%closed==1) then | ||||
! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ! if ((MiddleRamsValve==1. .and. MiddleRamsFailureMalf==0) .or. (MiddleRamsValve==-1.0 .and. MiddleRamsFailureMalf==0) .or. (UpperRamsValve==1. .and. UpperRamsFailureMalf==0) .or. (UpperRamsValve==-1.0 .and. UpperRamsFailureMalf==0) .or. (AnnularValve==1. .and. AnnularFailureMalf==0) .or. (AnnularValve==-1.0 .and. AnnularFailureMalf==0) .or. ChokeLineValve==1. .or. ChokeLineValve==-1.0 .or. KillLineValve==1. .or. KillLineValve==-1.0) then | ||||
finished_pipe2=1 | PipeRam2%finished=1 | ||||
! endif | ! endif | ||||
endif | endif | ||||
@@ -385,8 +385,8 @@ endif | |||||
! end do loop4 !while finished_pipe2==0 | ! end do loop4 !while finished_pipe2==0 | ||||
if ( finished_pipe2==1 .and. RAM(3)%Bottles_Charged_MalfActive==.true.) then | if ( PipeRam2%finished==1 .and. RAM(3)%Bottles_Charged_MalfActive==.true.) then | ||||
call bop_code(3,H_PipeRam2Bop,3) !ramtype=3 3=RNUMBER | call bop_code(3,PipeRam2%H_Bop,3) !ramtype=3 3=RNUMBER | ||||
! call sleepqq(100) | ! call sleepqq(100) | ||||
endif | endif | ||||
@@ -20,10 +20,10 @@ module PipeRams1Main | |||||
subroutine PipeRams1_Step | subroutine PipeRams1_Step | ||||
use VARIABLES | use VARIABLES | ||||
implicit none | implicit none | ||||
if (finished_pipe1/=0) then | if (PipeRam1%finished/=0) then | ||||
call PIPE_RAMS1 | call PIPE_RAMS1 | ||||
if (PipeRam1IsOpening .or. PipeRam1IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then | if (PipeRam1%IsOpening .or. PipeRam1%IsClosing .or. RAM(2)%Bottles_Charged_MalfActive) then | ||||
if(finished_pipe1==0) then | if(PipeRam1%finished==0) then | ||||
call PIPE_RAMS1_SUB !only body of loop2 | call PIPE_RAMS1_SUB !only body of loop2 | ||||
endif | endif | ||||
endif | endif | ||||
@@ -21,10 +21,10 @@ | |||||
subroutine PipeRams2_Step | subroutine PipeRams2_Step | ||||
use VARIABLES | use VARIABLES | ||||
implicit none | implicit none | ||||
if (finished_pipe2/=0) then | if (PipeRam2%finished/=0) then | ||||
call PIPE_RAMS2 | call PIPE_RAMS2 | ||||
if (PipeRam2IsOpening .or. PipeRam2IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then | if (PipeRam2%IsOpening .or. PipeRam2%IsClosing .or. RAM(3)%Bottles_Charged_MalfActive) then | ||||
if(finished_pipe2==0) then | if(PipeRam2%finished==0) then | ||||
call PIPE_RAMS2_SUB !only body of loop2 | call PIPE_RAMS2_SUB !only body of loop2 | ||||
endif | endif | ||||
endif | endif | ||||
@@ -16,9 +16,9 @@ SUBROUTINE SHEAR_RAMS | |||||
RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1 | RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1 | ||||
if (BopControlPanel%MiddleRamsValve == 1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%MiddleRamsValve == 1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if (MiddleRamsCloseLEDMine == LedOn) then | if (BopStackInput%MiddleRamsCloseLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
@@ -32,13 +32,13 @@ SUBROUTINE SHEAR_RAMS | |||||
endif | endif | ||||
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(4)%First_CloseTimecheck= 1 | RAM(4)%First_CloseTimecheck= 1 | ||||
BopControlPanel%MiddleRamsOpenLED = LedOff | BopControlPanel%MiddleRamsOpenLED = LedOff | ||||
MiddleRamsOpenLEDMine = LedOff | BopStackInput%MiddleRamsOpenLEDMine = LedOff | ||||
BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking | BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking | ||||
RAM(4)%FourwayValve = 1 | RAM(4)%FourwayValve = 1 | ||||
@@ -48,46 +48,46 @@ SUBROUTINE SHEAR_RAMS | |||||
endif | endif | ||||
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close | if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close | ||||
!write(*,*) 'close 2' | !write(*,*) 'close 2' | ||||
RAM(4)%FourwayValve = 0 | RAM(4)%FourwayValve = 0 | ||||
ShearBop_closed=0 | RamLine%ShearBop_closed=0 | ||||
!ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) | !ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) | ||||
RAM(4)%vdis_tot=0 | RAM(4)%vdis_tot=0 | ||||
RAM(4)%vdis_bottles=0. | RAM(4)%vdis_bottles=0. | ||||
RAM(4)%fvr_air=0. | RAM(4)%fvr_air=0. | ||||
RAM(4)%vdis_elecp=0. | RAM(4)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(4)%Qzero=70 | RAM(4)%Qzero=70 | ||||
RAM(4)%Q=RAM(4)%Qzero | RAM(4)%Q=RAM(4)%Qzero | ||||
RAM(4)%flow=70 | RAM(4)%flow=70 | ||||
RAM(4)%tol=0.0037 | RAM(4)%tol=0.0037 | ||||
if (finished_shear==1) then | if (RamLine%FINISHED_shear==1) then | ||||
ShearRamsLeverOld=-1.0 | RamLine%ShearRamsLeverOld=-1.0 | ||||
else | else | ||||
ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | RamLine%ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | ||||
endif | endif | ||||
finished_shear=0 | RamLine%FINISHED_shear=0 | ||||
ShearRamIsClosing = .true. | RamLine%ShearRamIsClosing = .true. | ||||
ShearRamIsOpening = .false. | RamLine%ShearRamIsOpening = .false. | ||||
RAM(4)%bop_type = 2 | RAM(4)%bop_type = 2 | ||||
!NeededVolumeShearRams=5.8 !galon for each BOP | !NeededVolumeShearRams=5.8 !galon for each BOP | ||||
!AbopShearRam=196.67 !(in^2) | !AbopShearRam=196.67 !(in^2) | ||||
AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(IDshearBopBase/2.) | ShearRam%AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(ShearRam%IDshearBopBase/2.) | ||||
!NeededVolumeShearRams=BlindRamClose !galon for each BOP **changed | !NeededVolumeShearRams=BlindRamClose !galon for each BOP **changed | ||||
NeededVolumeShearRams=AbopShearRam*(IDshearBopBase-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed | ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed | ||||
va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231) | ShearRam%VA=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ODDrillpipe_inShearRam)/(2.*231) | ||||
vb=NeededVolumeShearRams | ShearRam%VB=ShearRam%NeededVolumeShearRams | ||||
endif | endif | ||||
if (BopControlPanel%MiddleRamsValve == -1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | if (BopControlPanel%MiddleRamsValve == -1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1) then | ||||
if (MiddleRamsOpenLEDMine == LedOn) then | if (BopStackInput%MiddleRamsOpenLEDMine == LedOn) then | ||||
RETURN | RETURN | ||||
end if | end if | ||||
@@ -100,13 +100,13 @@ SUBROUTINE SHEAR_RAMS | |||||
endif | endif | ||||
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
!return | !return | ||||
RAM(4)%First_OpenTimecheck= 1 | RAM(4)%First_OpenTimecheck= 1 | ||||
BopControlPanel%MiddleRamsCloseLED = LedOff !new | BopControlPanel%MiddleRamsCloseLED = LedOff !new | ||||
MiddleRamsCloseLedMine = LedOff !new | BopStackInput%MiddleRamsCloseLEDMine = LedOff !new | ||||
BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking | BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking | ||||
endif | endif | ||||
@@ -114,40 +114,40 @@ SUBROUTINE SHEAR_RAMS | |||||
endif | endif | ||||
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then ! 1: Open , 0: Close | if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then ! 1: Open , 0: Close | ||||
!write(*,*) 'open 2' | !write(*,*) 'open 2' | ||||
RAM(4)%FourwayValve = 0 | RAM(4)%FourwayValve = 0 | ||||
ShearBop_closed=0 | RamLine%ShearBop_closed=0 | ||||
!ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) | !ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) | ||||
RAM(4)%vdis_tot=0 | RAM(4)%vdis_tot=0 | ||||
RAM(4)%vdis_bottles=0. | RAM(4)%vdis_bottles=0. | ||||
RAM(4)%fvr_air=0. | RAM(4)%fvr_air=0. | ||||
RAM(4)%vdis_elecp=0. | RAM(4)%vdis_elecp=0. | ||||
Qiter=7 | Pumps%Qiter=7 | ||||
RAM(4)%Qzero=70 | RAM(4)%Qzero=70 | ||||
RAM(4)%Q=RAM(4)%Qzero | RAM(4)%Q=RAM(4)%Qzero | ||||
RAM(4)%flow=70 | RAM(4)%flow=70 | ||||
RAM(4)%tol=0.0037 | RAM(4)%tol=0.0037 | ||||
if (finished_shear==1) then | if (RamLine%FINISHED_shear==1) then | ||||
ShearRamsLeverOld=1.0 | RamLine%ShearRamsLeverOld=1.0 | ||||
else | else | ||||
ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | RamLine%ShearRamsLeverOld=BopControlPanel%MiddleRamsValve | ||||
endif | endif | ||||
finished_shear=0 | RamLine%FINISHED_shear=0 | ||||
ShearRamIsOpening = .true. | RamLine%ShearRamIsOpening = .true. | ||||
ShearRamIsClosing = .false. | RamLine%ShearRamIsClosing = .false. | ||||
RAM(4)%bop_type = 3 | RAM(4)%bop_type = 3 | ||||
!AbopShearRam=186.5 !(in^2) | !AbopShearRam=186.5 !(in^2) | ||||
AbopShearRam=(BopStackSpecification%BlindRamOpen*231)/(IDshearBopBase/2.) | ShearRam%AbopShearRam=(BopStackSpecification%BlindRamOpen*231)/(ShearRam%IDshearBopBase/2.) | ||||
!NeededVolumeShearRams=5.5 !galon for each BOP | !NeededVolumeShearRams=5.5 !galon for each BOP | ||||
!NeededVolumeShearRams=BlindRamOpen ! **changed | !NeededVolumeShearRams=BlindRamOpen ! **changed | ||||
NeededVolumeShearRams=AbopShearRam*(IDshearBopBase-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed | ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) !3.67 galon for each BOP ! **changed | ||||
!va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231) | !va=AbopShearRam*(IDshearBopBase-ODDrillpipe_inShearRam)/(2.*231) | ||||
!vb=NeededVolumeShearRams | !vb=NeededVolumeShearRams | ||||
endif | endif | ||||
@@ -175,39 +175,39 @@ SUBROUTINE SHEAR_RAMS_SUB | |||||
! loop2: do while (finished_shear==0) | ! loop2: do while (finished_shear==0) | ||||
RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1 | RAM(4)%SuccessionCounter = RAM(4)%SuccessionCounter + 1 | ||||
if (BopControlPanel%MiddleRamsValve == 1.0 .and. ShearRamsLeverOld == -1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_CloseTimecheck == 0) then | if (BopControlPanel%MiddleRamsValve == 1.0 .and. RamLine%ShearRamsLeverOld == -1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_CloseTimecheck == 0) then | ||||
if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then | if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then | ||||
RAM(4)%SuccessionCounter = 0 ! also in starup | RAM(4)%SuccessionCounter = 0 ! also in starup | ||||
RAM(4)%SuccessionCounterOld = 0 ! also in starup | RAM(4)%SuccessionCounterOld = 0 ! also in starup | ||||
else | else | ||||
RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter | RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
BopControlPanel%MiddleRamsOpenLED = LedOff | BopControlPanel%MiddleRamsOpenLED = LedOff | ||||
MiddleRamsOpenLEDMine = LedOff | BopStackInput%MiddleRamsOpenLEDMine = LedOff | ||||
BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking | BopControlPanel%MiddleRamsCloseLED = LedOn !LedBlinking | ||||
RAM(4)%FourwayValve = 1 | RAM(4)%FourwayValve = 1 | ||||
endif | endif | ||||
endif | endif | ||||
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then | if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
RAM(4)%FourwayValve = 0 | RAM(4)%FourwayValve = 0 | ||||
ShearBop_closed=0 | RamLine%ShearBop_closed=0 | ||||
RAM(4)%p_bop=pa | RAM(4)%p_bop=ShearRam%PA | ||||
ShearRamsLeverOld = BopControlPanel%MiddleRamsValve | RamLine%ShearRamsLeverOld = BopControlPanel%MiddleRamsValve | ||||
CALL OpenMiddleRams ! for C code | CALL OpenMiddleRams ! for C code | ||||
ShearBop_Situation_forTD= 0 ! open - for TD code | RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code | ||||
RAM(4)%bop_type = 2 | RAM(4)%bop_type = 2 | ||||
AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(IDshearBopBase/2.) | ShearRam%AbopShearRam=(BopStackSpecification%BlindRamClose*231)/(ShearRam%IDshearBopBase/2.) | ||||
NeededVolumeShearRams=AbopShearRam*(IDshearBop-ShearIsNotAllowed*ODDrillpipe_inShearRam)/(2.*231) ! **changed | ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBop-ShearRam%ShearIsNotAllowed*ShearRam%ODDrillpipe_inShearRam)/(2.*231) ! **changed | ||||
RAM(4)%vdis_bottles=0. | RAM(4)%vdis_bottles=0. | ||||
RAM(4)%fvr_air=0. | RAM(4)%fvr_air=0. | ||||
RAM(4)%vdis_elecp=0. | RAM(4)%vdis_elecp=0. | ||||
ShearRamIsClosing = .true. | RamLine%ShearRamIsClosing = .true. | ||||
ShearRamIsOpening = .false. | RamLine%ShearRamIsOpening = .false. | ||||
endif | endif | ||||
if (BopControlPanel%MiddleRamsValve == -1.0 .and. ShearRamsLeverOld == 1.0 .and. MiddleRamsFailureMalf==0 .and. RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_OpenTimecheck == 0) then | if (BopControlPanel%MiddleRamsValve == -1.0 .and. RamLine%ShearRamsLeverOld == 1.0 .and. ShearRam%MiddleRamsFailureMalf==0 .and. BopStackAcc%RigAirMalf==0 .and. BopControlPanel%AirMasterValve==1 .and. RAM(4)%First_OpenTimecheck == 0) then | ||||
if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then | if ( RAM(4)%SuccessionCounter /= RAM(4)%SuccessionCounterOld+1 ) then | ||||
RAM(4)%SuccessionCounter = 0 ! also in starup | RAM(4)%SuccessionCounter = 0 ! also in starup | ||||
RAM(4)%SuccessionCounterOld = 0 ! also in starup | RAM(4)%SuccessionCounterOld = 0 ! also in starup | ||||
@@ -216,52 +216,52 @@ SUBROUTINE SHEAR_RAMS_SUB | |||||
RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter | RAM(4)%SuccessionCounterOld= RAM(4)%SuccessionCounter | ||||
endif | endif | ||||
if ( RAM(4)%SuccessionCounter >= int(2.5/DeltaT_BOP) ) then | if ( RAM(4)%SuccessionCounter >= int(2.5/RamLine%DeltaT_BOP) ) then | ||||
BopControlPanel%MiddleRamsCloseLED = LedOff | BopControlPanel%MiddleRamsCloseLED = LedOff | ||||
MiddleRamsCloseLEDMine = LedOff | BopStackInput%MiddleRamsCloseLEDMine = LedOff | ||||
BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking | BopControlPanel%MiddleRamsOpenLED = LedOn !LedBlinking | ||||
RAM(4)%FourwayValve = 1 | RAM(4)%FourwayValve = 1 | ||||
endif | endif | ||||
endif | endif | ||||
if (RAM(4)%FourwayValve == 1 .and. p_acc>acc_MinPressure) then | if (RAM(4)%FourwayValve == 1 .and. RamLine%P_ACC>BopStackAcc%acc_MinPressure) then | ||||
RAM(4)%FourwayValve = 0 | RAM(4)%FourwayValve = 0 | ||||
ShearBop_closed=0 | RamLine%ShearBop_closed=0 | ||||
RAM(4)%p_bop=pa | RAM(4)%p_bop=ShearRam%PA | ||||
ShearRamsLeverOld = BopControlPanel%MiddleRamsValve | RamLine%ShearRamsLeverOld = BopControlPanel%MiddleRamsValve | ||||
CALL OpenMiddleRams | CALL OpenMiddleRams | ||||
ShearBop_Situation_forTD= 0 ! open - for TD code | RamLine%ShearBop_Situation_forTD= 0 ! open - for TD code | ||||
RAM(4)%bop_type = 3 | RAM(4)%bop_type = 3 | ||||
NeededVolumeShearRams=AbopShearRam*(IDshearBopBase-IDshearBop)/(2.*231) | ShearRam%NeededVolumeShearRams=ShearRam%AbopShearRam*(ShearRam%IDshearBopBase-ShearRam%IDshearBop)/(2.*231) | ||||
RAM(4)%vdis_bottles=0. | RAM(4)%vdis_bottles=0. | ||||
RAM(4)%fvr_air=0. | RAM(4)%fvr_air=0. | ||||
RAM(4)%vdis_elecp=0. | RAM(4)%vdis_elecp=0. | ||||
ShearRamIsOpening = .true. | RamLine%ShearRamIsOpening = .true. | ||||
ShearRamIsClosing = .false. | RamLine%ShearRamIsClosing = .false. | ||||
endif | endif | ||||
RAM(4)%First_CloseTimecheck = 0 | RAM(4)%First_CloseTimecheck = 0 | ||||
RAM(4)%First_OpenTimecheck = 0 | RAM(4)%First_OpenTimecheck = 0 | ||||
RAM(4)%time=RAM(4)%time+DeltaT_BOP !overal time (s) | RAM(4)%time=RAM(4)%time+RamLine%DeltaT_BOP !overal time (s) | ||||
!=================================================== | !=================================================== | ||||
! BOP | ! BOP | ||||
!=================================================== | !=================================================== | ||||
if (ShearBop_closed==0) then !bop closing | if (RamLine%ShearBop_closed==0) then !bop closing | ||||
call bop_code(1,H_ShearRamBop,4) !ramtype=1 4=RNUMBER | call bop_code(1,ShearRam%H_ShearRamBop,4) !ramtype=1 4=RNUMBER | ||||
endif !bop is closing | endif !bop is closing | ||||
!================================================================ | !================================================================ | ||||
if (ShearBop_closed==1) then | if (RamLine%ShearBop_closed==1) then | ||||
RAM(4)%Q=0 | RAM(4)%Q=0 | ||||
RAM(4)%p_bop=pa | RAM(4)%p_bop=ShearRam%PA | ||||
RAMS%minloss(4,17)=0. !RNUMBER=4 | RAMS%minloss(4,17)=0. !RNUMBER=4 | ||||
endif | endif | ||||
RAM(4)%timecounter_ram=RAM(4)%timecounter_ram+1 | RAM(4)%timecounter_ram=RAM(4)%timecounter_ram+1 | ||||
call sleepqq(100) | call sleepqq(100) | ||||
if (ShearBop_closed==1) then | if (RamLine%ShearBop_closed==1) then | ||||
finished_shear=1 | RamLine%FINISHED_shear=1 | ||||
endif | endif | ||||
! if (IsStopped == .true.) return | ! if (IsStopped == .true.) return | ||||
! end do loop2 !while finished_shear==0 | ! end do loop2 !while finished_shear==0 | ||||
@@ -8,124 +8,146 @@ MODULE VARIABLES | |||||
!=========================================================================== | !=========================================================================== | ||||
! INPUT VARIABLES | ! INPUT VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL,ALLOCATABLE:: MINORS1(:,:),PIPINGS_RAMLINE(:,:),MINORS_ANNULAR(:,:),PIPINGS_ANNULAR(:,:),PIPINGS_AIRPUMP(:,:),MINORS_AIRPUMP(:,:) | type :: BopStackInputType | ||||
REAL,ALLOCATABLE:: MINORS1(:,:),PIPINGS_RAMLINE(:,:),MINORS_ANNULAR(:,:),PIPINGS_ANNULAR(:,:),PIPINGS_AIRPUMP(:,:),MINORS_AIRPUMP(:,:) | |||||
integer AnnularOpenLedMine,AnnularCloseLedMine,UpperRamsCloseLEDMine,UpperRamsOpenLEDMine,LowerRamsOpenLEDMine,LowerRamsCloseLEDMine | integer AnnularOpenLedMine,AnnularCloseLedMine,UpperRamsCloseLEDMine,UpperRamsOpenLEDMine,LowerRamsOpenLEDMine,LowerRamsCloseLEDMine | ||||
integer MiddleRamsOpenLEDMine,MiddleRamsCloseLEDMine,KillLineOpenLedMine,KillLineCloseLedMine,ChokeLineOpenLEDMine,ChokeLineCloseLEDMine | integer MiddleRamsOpenLEDMine,MiddleRamsCloseLEDMine,KillLineOpenLedMine,KillLineCloseLedMine,ChokeLineOpenLEDMine,ChokeLineCloseLEDMine | ||||
integer BOP_timeCounter | integer BOP_timeCounter | ||||
end type BopStackInputType | |||||
type(BopStackInputType)::BopStackInput | |||||
!=========================================================================== | !=========================================================================== | ||||
! ACC. VARIABLES | ! ACC. VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL,PARAMETER :: PI=3.141593 ,PressureDifferenceSteps = 20. ,BaseDifferenceP= 200. ! psi | REAL,PARAMETER :: PI=3.141593 ,PressureDifferenceSteps = 20. ,BaseDifferenceP= 200. ! psi | ||||
REAL FVR_TOT,BOTTLE_CAPACITY,PRAMS_REGSET,acc_ChargedPressure,acc_MinPressure,ACC_PRECHARGE,ByPassOld | type::BopStackAccType | ||||
REAL pram_reg,test1,test2,test3,test4,test5,test6,test7,test8,test9,ax,bx | REAL FVR_TOT,BOTTLE_CAPACITY,PRAMS_REGSET,acc_ChargedPressure,acc_MinPressure,ACC_PRECHARGE,ByPassOld | ||||
integer NOBOTTLES,AccPupmsFailMalf,AirSupplyPressureGaugeMalf,ManifoldPressureGaugeMalf,AccumulatorPressureGaugeMalf,RigAirMalf | REAL pram_reg,test1,test2,test3,test4,test5,test6,test7,test8,test9,ax,bx | ||||
real Cumulative_AirVolume, PressureDifference | integer NOBOTTLES,AccPupmsFailMalf,AirSupplyPressureGaugeMalf,ManifoldPressureGaugeMalf,AccumulatorPressureGaugeMalf,RigAirMalf | ||||
integer SoundKoomeyAirPump | real Cumulative_AirVolume, PressureDifference | ||||
integer SoundKoomeyAirPump | |||||
end type BopStackAccType | |||||
type(BopStackAccType)::BopStackAcc | |||||
!=========================================================================== | !=========================================================================== | ||||
! RAM LINE COMPUTATIONAL VARIABLES | ! RAM LINE COMPUTATIONAL VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical ShearRamIsClosing,ShearRamIsOpening | type:: RamLineType | ||||
REAL ShearRamsLeverOld,NoActiveRmas | logical ShearRamIsClosing,ShearRamIsOpening | ||||
!REAL checkp,p_acccheck | REAL ShearRamsLeverOld,NoActiveRmas | ||||
REAL P_ACC,FVR,DeltaT_BOP | !REAL checkp,p_acccheck | ||||
REAL diffp_air,losses_air,Qup,kinetic_air,pipe_loss1air,minor_loss1air,static_loss1air!,pipe_loss1_before,minor_loss1,static_loss1,kinetic_loss1,pipe_loss1 | REAL P_ACC,FVR,DeltaT_BOP | ||||
!REAL loss_before,pipe_loss2,minor_loss2,deltah,static_loss2,kinetic_loss2,loss_after | REAL diffp_air,losses_air,Qup,kinetic_air,pipe_loss1air,minor_loss1air,static_loss1air!,pipe_loss1_before,minor_loss1,static_loss1,kinetic_loss1,pipe_loss1 | ||||
integer AIRP_SWITCH,ELECP_SWITCH,ShearBop_closed,FINISHED_shear,EOF,NO_MINORSRAMLINE,NO_PIPINGSRAMLINE,NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | !REAL loss_before,pipe_loss2,minor_loss2,deltah,static_loss2,kinetic_loss2,loss_after | ||||
integer counter,iteration,ShearBop_Situation_forTD | integer AIRP_SWITCH,ELECP_SWITCH,ShearBop_closed,FINISHED_shear,EOF,NO_MINORSRAMLINE,NO_PIPINGSRAMLINE,NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | ||||
real BA1,BA2,BA3,BA4,BBA1,BBA2,BBA3,BBA4 | integer counter,iteration,ShearBop_Situation_forTD | ||||
REAL B1,B2,B3,B4 | real BA1,BA2,BA3,BA4,BBA1,BBA2,BBA3,BBA4 | ||||
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | REAL B1,B2,B3,B4 | ||||
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:) | REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | ||||
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) | REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:) | ||||
REAL,ALLOCATABLE:: DIAM_RAMLINE_INCH(:),DIAM_RAMLINE_MM(:),AREA_RAMLINE(:),ROUGHNESS_AIRPLINE(:),ROUGHNESS_RAMLINE(:),RELROUGH_RAMLINE(:),LENGT_RAMLINE(:),LF_RAMLINE(:),CV_RAMLINE(:),NOTE_RAMLINE(:),AREAMINOR_RAMLINE(:) | REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) | ||||
!REAL,ALLOCATABLE:: Re_ramline(:),fric(:),fricloss(:) | REAL,ALLOCATABLE:: DIAM_RAMLINE_INCH(:),DIAM_RAMLINE_MM(:),AREA_RAMLINE(:),ROUGHNESS_AIRPLINE(:),ROUGHNESS_RAMLINE(:),RELROUGH_RAMLINE(:),LENGT_RAMLINE(:),LF_RAMLINE(:),CV_RAMLINE(:),NOTE_RAMLINE(:),AREAMINOR_RAMLINE(:) | ||||
REAL,ALLOCATABLE:: MINORDIAMETER_RAMLINE(:) | !REAL,ALLOCATABLE:: Re_ramline(:),fric(:),fricloss(:) | ||||
INTEGER,ALLOCATABLE:: ITEM(:),ITEM_PIPING(:),ITEM_PIPINGAIR(:),ITEM_MINORAIR(:) | REAL,ALLOCATABLE:: MINORDIAMETER_RAMLINE(:) | ||||
CHARACTER,ALLOCATABLE:: DECRIPTION(:),DECRIPTION2(:),DECRIPTION_RAM(:),DESCRIPTION_AIR1(:),DESCRIPTION_AIR2(:) | INTEGER,ALLOCATABLE:: ITEM(:),ITEM_PIPING(:),ITEM_PIPINGAIR(:),ITEM_MINORAIR(:) | ||||
real:: counter_airp,pacc_before | CHARACTER,ALLOCATABLE:: DECRIPTION(:),DECRIPTION2(:),DECRIPTION_RAM(:),DESCRIPTION_AIR1(:),DESCRIPTION_AIR2(:) | ||||
integer Annular_active,ShearBop_active,PipeRam1_active,PipeRam2_active,ChokeLine_active,KillLine_active | real:: counter_airp,pacc_before | ||||
!=========================================================================== | integer Annular_active,ShearBop_active,PipeRam1_active,PipeRam2_active,ChokeLine_active,KillLine_active | ||||
end type RamLineType | |||||
type(RamLineType)::RamLine | |||||
!=========================================================================== | |||||
! ANNULAR PREVENTER COMPUTATIONAL VARIABLES | ! ANNULAR PREVENTER COMPUTATIONAL VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
type::AnnularComputationalType | |||||
integer PannularTimeStepDelay | integer PannularTimeStepDelay | ||||
type(DynamicDoubleArrayType) :: Pannular_regDelay | type(DynamicDoubleArrayType) :: Pannular_regDelay | ||||
logical AnnPressureRise | |||||
integer NO_MinorsAnnularLine,NO_PipingsAnnularLine,RamsFirstSet | |||||
logical AnnPressureRise | REAL pa_annular,p_annular | ||||
integer NO_MinorsAnnularLine,NO_PipingsAnnularLine,RamsFirstSet | REAL,ALLOCATABLE:: MINORDIAMETER_ANNULARLINE(:),AREAMINOR_ANNULARLINE(:) | ||||
REAL pa_annular,p_annular | !REAL,ALLOCATABLE:: REAL_PregAnnular(:),real_IDAnnular(:),real_pAnnular(:) | ||||
REAL,ALLOCATABLE:: MINORDIAMETER_ANNULARLINE(:),AREAMINOR_ANNULARLINE(:) | REAL REAL_PregAnnular,real_IDAnnular,real_pAnnular | ||||
!REAL,ALLOCATABLE:: REAL_PregAnnular(:),real_IDAnnular(:),real_pAnnular(:) | REAL,ALLOCATABLE:: LF_ANNULARLINE(:),CV_ANNULARLINE(:),NOTE_ANNULARLINE(:),minlosspa_ANNULAR(:),minloss_ANNULAR(:) | ||||
REAL REAL_PregAnnular,real_IDAnnular,real_pAnnular | REAL,ALLOCATABLE:: DIAM_ANNULARLINE_INCH(:),DIAM_ANNULARLINE_MM(:),AREA_ANNULARLINE(:) | ||||
REAL,ALLOCATABLE:: LF_ANNULARLINE(:),CV_ANNULARLINE(:),NOTE_ANNULARLINE(:),minlosspa_ANNULAR(:),minloss_ANNULAR(:) | REAL,ALLOCATABLE:: LENGT_ANNULARLINE(:),ROUGHNESS_ANNULARLINE(:),RELROUGH_ANNULARLINE(:),Re_ANNULARline(:),fricANNULAR(:),friclossANNULAR(:) | ||||
REAL,ALLOCATABLE:: DIAM_ANNULARLINE_INCH(:),DIAM_ANNULARLINE_MM(:),AREA_ANNULARLINE(:) | INTEGER,ALLOCATABLE:: ITEMANNULAR(:),ITEM_PIPINGANNULAR(:) | ||||
REAL,ALLOCATABLE:: LENGT_ANNULARLINE(:),ROUGHNESS_ANNULARLINE(:),RELROUGH_ANNULARLINE(:),Re_ANNULARline(:),fricANNULAR(:),friclossANNULAR(:) | CHARACTER,ALLOCATABLE:: DECRIPTIONANNULAR(:),DECRIPTION2ANNULAR(:),DECRIPTION_ANNULAR(:) | ||||
INTEGER,ALLOCATABLE:: ITEMANNULAR(:),ITEM_PIPINGANNULAR(:) | REAL WellBorePressure,acoef,Bcoef,const,AnnularSealingPressure,AnnularMovingPressure | ||||
CHARACTER,ALLOCATABLE:: DECRIPTIONANNULAR(:),DECRIPTION2ANNULAR(:),DECRIPTION_ANNULAR(:) | end type AnnularComputationalType | ||||
REAL WellBorePressure,acoef,Bcoef,const,AnnularSealingPressure,AnnularMovingPressure | type(AnnularComputationalType)::AnnularComputational | ||||
!=========================================================================== | !=========================================================================== | ||||
! ANNULAR PREVENTER VARIABLES | ! ANNULAR PREVENTER VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL (8) Pannular_reg | type :: AnnularType | ||||
real Pannular_regset | REAL (8) Pannular_reg | ||||
logical AnnularIsClosing,AnnularIsOpening | real Pannular_regset | ||||
REAL tolAnnular,tolzeroAnnular | logical AnnularIsClosing,AnnularIsOpening | ||||
integer Annular_closed,finished_Annular,FirstSet,AnnularFailureMalf,AnnularLeakMalf,AnnularPressureGaugeMalf,Annular_Situation_forTD | REAL tolAnnular,tolzeroAnnular | ||||
REAL AnnularLeverOld,H_AnnularBop,IDAnnular,AbopAnnular,ODDrillpipe_inAnnular,IDAnnularBase,ODDrillpipe_inAnnularBase | integer Annular_closed,finished_Annular,FirstSet,AnnularFailureMalf,AnnularLeakMalf,AnnularPressureGaugeMalf,Annular_Situation_forTD | ||||
REAL NeededVolumeAnnular | REAL AnnularLeverOld,H_AnnularBop,IDAnnular,AbopAnnular,ODDrillpipe_inAnnular,IDAnnularBase,ODDrillpipe_inAnnularBase | ||||
REAL NeededVolumeAnnular | |||||
end type AnnularType | |||||
type(AnnularType)::Annular | |||||
!=========================================================================== | !=========================================================================== | ||||
! PIPE RAMS 1 VARIABLES | ! PIPE RAMS 1 VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical PipeRam1IsClosing,PipeRam1IsOpening | type::PipeRams1Type | ||||
REAL PipeRams1LeverOld,H_PipeRam1Bop | logical IsClosing,IsOpening | ||||
REAL NeededVolumePipeRams1,AbopPipeRam,IDPipeRamBase,IDPipeRam1,ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base | REAL PipeRams1DotLeverOld,H | ||||
integer PipeRam1_closed,finished_pipe1,UpperRamsFailureMalf,UpperRamsLeakMalf,PipeRam1_Situation_forTD | REAL NeededVolume,A,IDBase,ID,ODDrillpipe_in,ODDrillpipe_inBase | ||||
REAL real_IDPipeRam1 | integer closed,finished,UpperRamsFailureMalf,UpperRamsLeakMalf,Situation_forTD | ||||
REAL real_ID | |||||
end type PipeRams1Type | |||||
type(PipeRams1Type)::PipeRam1 | |||||
!============================================================================ | !============================================================================ | ||||
! SHEAR RAM BOP VARIABLES | ! SHEAR RAM BOP VARIABLES | ||||
!============================================================================ | !============================================================================ | ||||
REAL PA,PB,P_SHEAR,VA,VB,RAM_COURSE,H_REGRAM,H_ShearRamBop | type:: ShearRamType | ||||
REAL,ALLOCATABLE:: ALPHA_QRAM(:),ALPHA_VDISRAM(:),ALPHA_PACC(:),ALPHA_PREGRAM(:),ALPHA_PBOP(:) | REAL PA,PB,P_SHEAR,VA,VB,RAM_COURSE,H_REGRAM,H_ShearRamBop | ||||
!REAL,ALLOCATABLE:: REAL_TIME(:),REAL_QRAM(:),REAL_VDISRAM(:),REAL_PACC(:),REAL_PREGRAM(:),REAL_PBOP(:),real_IDshearBop(:) | REAL,ALLOCATABLE:: ALPHA_QRAM(:),ALPHA_VDISRAM(:),ALPHA_PACC(:),ALPHA_PREGRAM(:),ALPHA_PBOP(:) | ||||
REAL REAL_TIME,REAL_QRAM,REAL_VDISRAM,REAL_PACC,REAL_PREGRAM,REAL_PBOP,real_IDshearBop | !REAL,ALLOCATABLE:: REAL_TIME(:),REAL_QRAM(:),REAL_VDISRAM(:),REAL_PACC(:),REAL_PREGRAM(:),REAL_PBOP(:),real_IDshearBop(:) | ||||
REAL IDshearBopBase,IDshearBop,ODDrillpipe_inShearRam,AbopShearRam,NeededVolumeShearRams,ODDrillpipe_inShearRamBase | REAL REAL_TIME,REAL_QRAM,REAL_VDISRAM,REAL_PACC,REAL_PREGRAM,REAL_PBOP,real_IDshearBop | ||||
Real IDshearBopFinal,IDPipeRam1Final,IDPipeRam2Final,IDAnnularFinal,OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular | REAL IDshearBopBase,IDshearBop,ODDrillpipe_inShearRam,AbopShearRam,NeededVolumeShearRams,ODDrillpipe_inShearRamBase | ||||
Real MinimumOpenArea_InBOP | Real IDshearBopFinal,IDPipeRam1Final,IDPipeRam2Final,IDAnnularFinal,OpenArea_shearBop,OpenArea_PipeRam1,OpenArea_PipeRam2,OpenArea_Annular | ||||
integer MiddleRamsFailureMalf,MiddleRamsLeakMalf,ShearIsNotAllowed | Real MinimumOpenArea_InBOP | ||||
integer MiddleRamsFailureMalf,MiddleRamsLeakMalf,ShearIsNotAllowed | |||||
end type ShearRamType | |||||
type(ShearRamType)::ShearRam | |||||
!=========================================================================== | !=========================================================================== | ||||
! PIPE RAMS 2 VARIABLES | ! PIPE RAMS 2 VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical PipeRam2IsClosing,PipeRam2IsOpening | type::PipeRam2Type | ||||
REAL PipeRams2LeverOld,H_PipeRam2Bop | logical IsClosing,IsOpening | ||||
REAL NeededVolumePipeRams2,IDPipeRam2,ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam2Base | REAL LeverOld,H_Bop | ||||
integer PipeRam2_closed,finished_pipe2,LowerRamsFailureMalf,LowerRamsLeakMalf,PipeRam2_Situation_forTD | REAL NeededVolume,ID,ODDrillpipe_in,ODDrillpipe_inBase | ||||
!REAL,ALLOCATABLE:: real_IDPipeRam2(:) | integer closed,finished,LowerRamsFailureMalf,LowerRamsLeakMalf,Situation_forTD | ||||
REAL real_IDPipeRam2 | !REAL,ALLOCATABLE:: real_IDPipeRam2(:) | ||||
REAL real_ID | |||||
end type PipeRam2Type | |||||
type(PipeRam2Type)::PipeRam2 | |||||
!=========================================================================== | !=========================================================================== | ||||
! CHOKE LINE VARIABLES | ! CHOKE LINE VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical ChokeLineIsClosing,ChokeLineIsOpening | type::ChokeLineType | ||||
REAL ChokeLineLeverOld,H_ChokeLineBop | logical IsClosing,IsOpening | ||||
REAL NeededVolumeChokeLine,AbopChokeLine,IDChokeLine,ODDrillpipe_inChokeLine,IDChokeLineBase,ODDrillpipe_inChokeLineBase | REAL LeverOld,H_Bop | ||||
integer ChokeLine_closed,finished_ChokeLine | REAL NeededVolume,Abop,ID,ODDrillpipe_in,IDBase,ODDrillpipe_inBase | ||||
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) | integer closed,finished | ||||
REAL real_IDChokeLine | !REAL,ALLOCATABLE:: real_IDPipeRam1(:) | ||||
REAL real_ID | |||||
end type ChokeLineType | |||||
type(ChokeLineType)::ChokeLine | |||||
!=========================================================================== | !=========================================================================== | ||||
! KILL LINE VARIABLES | ! KILL LINE VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
logical KillLineIsClosing,KillLineIsOpening | type::KillLineType | ||||
REAL KillLineLeverOld,H_KillLineBop | logical IsClosing,IsOpening | ||||
REAL NeededVolumeKillLine,AbopKillLine,IDKillLine,ODDrillpipe_inKillLine,IDKillLineBase,ODDrillpipe_inKillLineBase | REAL LeverOld,H_Bop | ||||
integer KillLine_closed,finished_KillLine | REAL NeededVolume,Abop,ID,ODDrillpipe_in,IDBase,ODDrillpipe_inBase | ||||
!REAL,ALLOCATABLE:: real_IDPipeRam1(:) | integer closed,finished | ||||
REAL real_IDKillLine | !REAL,ALLOCATABLE:: real_IDPipeRam1(:) | ||||
REAL real_ID | |||||
end type KillLineType | |||||
type(KillLineType)::KillLine | |||||
!============================================================================ | !============================================================================ | ||||
! OIL & ENVIRONMENT VARIABLES | ! OIL & ENVIRONMENT VARIABLES | ||||
!============================================================================ | !============================================================================ | ||||
@@ -135,13 +157,14 @@ REAL:: SG=1.12,WDENS=1000,GRAVITY=9.81,RE_CR=2000,NU=9e-6 | |||||
!============================================================================ | !============================================================================ | ||||
! PUMP VARIABLES | ! PUMP VARIABLES | ||||
!============================================================================ | !============================================================================ | ||||
REAL P_AIRP,DELTAV_AIR,TOL_AIR,DELTAV_ELECP,Qiter | type::PumpsType | ||||
REAL ELECTRIC_PUMPON,ELECTRIC_PUMPOFF,AIR_PUMPON,AIR_PUMPOFF,QAIR_PUMP,QELECTRIC_PUMP | REAL P_AIRP,DELTAV_AIR,TOL_AIR,DELTAV_ELECP,Qiter | ||||
!REAL,ALLOCATABLE:: alpha_Qair(:),alpha_timeair(:),alpha_paccair(:),alpha_pairp(:),alpha_diffpair(:),alpha_lossesair(:),alpha_fvrair(:) | REAL ELECTRIC_ON,ELECTRIC_OFF,AIR_ON,AIR_OFF,QAIR,QELECTRIC | ||||
REAL alpha_Qair,alpha_timeair,alpha_paccair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_fvrair | !REAL,ALLOCATABLE:: alpha_Qair(:),alpha_timeair(:),alpha_paccair(:),alpha_pairp(:),alpha_diffpair(:),alpha_lossesair(:),alpha_fvrair(:) | ||||
logical SoundKoomeyElectricPump | REAL alpha_Qair,alpha_timeair,alpha_paccair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_fvrair | ||||
logical SoundKoomeyElectric | |||||
end type PumpsType | |||||
type(PumpsType)::Pumps | |||||
!================================================================================= | !================================================================================= | ||||
@@ -9,13 +9,13 @@ write(*,*) 'deallocateeeeeeeeeeeee' | |||||
!=========================================================================== | !=========================================================================== | ||||
!if(allocated(PIPINGS_AIRPUMP)) deallocate(PIPINGS_AIRPUMP) | !if(allocated(PIPINGS_AIRPUMP)) deallocate(PIPINGS_AIRPUMP) | ||||
DEALLOCATE (PIPINGS_AIRPUMP,DIAM_AIR_INCH, & | DEALLOCATE (AirPumpLine%PIPINGS_AIRPUMP,AirPumpLine%DIAM_AIR_INCH, & | ||||
Re_air,AREA_AIR,LENGT_AIR,ROUGHNESS_AIRPLINE,REL_ROUGHAIR, & | AirPumpLine%Re_air,AirPumpLine%AREA_AIR,AirPumpLine%LENGT_AIR,AirPumpLine%ROUGHNESS_AIRPLINE,AirPumpLine%REL_ROUGHAIR, & | ||||
fric_air,fricloss_air) | AirPumpLine%fric_air,AirPumpLine%fricloss_air) | ||||
!================================================================ | !================================================================ | ||||
DEALLOCATE (MINORS_AIRPUMP,MINORDIAM_AIR_INCH, & | DEALLOCATE (AirPumpLine%MINORS_AIRPUMP,AirPumpLine%MINORDIAM_AIR_INCH, & | ||||
MINORAREA_AIR,LF_AIR,CV_AIR,NOTE_AIR & | AirPumpLine%MINORAREA_AIR,AirPumpLine%LF_AIR,AirPumpLine%CV_AIR,AirPumpLine%NOTE_AIR & | ||||
,minlosspa_air,minloss_air) | ,AirPumpLine%minlosspa_air,AirPumpLine%minloss_air) | ||||
END | END | ||||
@@ -33,63 +33,63 @@ implicit none | |||||
!=========================================================================== | !=========================================================================== | ||||
! AIR PUMP LOSSES INPUT | ! AIR PUMP LOSSES INPUT | ||||
!=========================================================================== | !=========================================================================== | ||||
NO_PIPINGS_AIRPLINE=1 | AirPumpLine%NO_PIPINGS_AIRPLINE=1 | ||||
ALLOCATE (PIPINGS_AIRPUMP(NO_PIPINGS_AIRPLINE,3)) | ALLOCATE (AirPumpLine%PIPINGS_AIRPUMP(AirPumpLine%NO_PIPINGS_AIRPLINE,3)) | ||||
! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION | ! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION | ||||
PIPINGS_AIRPUMP(1,1:3)= (/0.5, 60960., 0.03/) !Avg.acc.distance | AirPumpLine%PIPINGS_AIRPUMP(1,1:3)= (/0.5, 60960., 0.03/) !Avg.acc.distance | ||||
!60960= 200 ft | !60960= 200 ft | ||||
ALLOCATE (DIAM_AIR_INCH(NO_PIPINGS_AIRPLINE),Re_air(NO_PIPINGS_AIRPLINE),AREA_AIR(NO_PIPINGS_AIRPLINE), & | ALLOCATE (AirPumpLine%DIAM_AIR_INCH(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%Re_air(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%AREA_AIR(AirPumpLine%NO_PIPINGS_AIRPLINE), & | ||||
LENGT_AIR(NO_PIPINGS_AIRPLINE),ROUGHNESS_AIRPLINE(NO_PIPINGS_AIRPLINE),REL_ROUGHAIR(NO_PIPINGS_AIRPLINE), & | AirPumpLine%LENGT_AIR(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%ROUGHNESS_AIRPLINE(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%REL_ROUGHAIR(AirPumpLine%NO_PIPINGS_AIRPLINE), & | ||||
fric_air(NO_PIPINGS_AIRPLINE),fricloss_air(NO_PIPINGS_AIRPLINE)) | AirPumpLine%fric_air(AirPumpLine%NO_PIPINGS_AIRPLINE),AirPumpLine%fricloss_air(AirPumpLine%NO_PIPINGS_AIRPLINE)) | ||||
DO I=1,NO_PIPINGS_AIRPLINE | DO I=1,AirPumpLine%NO_PIPINGS_AIRPLINE | ||||
DIAM_AIR_INCH(I)=PIPINGS_AIRPUMP(I,1) | AirPumpLine%DIAM_AIR_INCH(I)=AirPumpLine%PIPINGS_AIRPUMP(I,1) | ||||
LENGT_AIR(I)=PIPINGS_AIRPUMP(I,2) | AirPumpLine%LENGT_AIR(I)=AirPumpLine%PIPINGS_AIRPUMP(I,2) | ||||
ROUGHNESS_AIRPLINE(I)=PIPINGS_AIRPUMP(I,3) | AirPumpLine%ROUGHNESS_AIRPLINE(I)=AirPumpLine%PIPINGS_AIRPUMP(I,3) | ||||
AREA_AIR(I)=PI*(DIAM_AIR_INCH(I)*0.0254)**2/4 !D(in), AREA(m) | AirPumpLine%AREA_AIR(I)=PI*(AirPumpLine%DIAM_AIR_INCH(I)*0.0254)**2/4 !D(in), AREA(m) | ||||
REL_ROUGHAIR(I)=ROUGHNESS_AIRPLINE(I)/(DIAM_AIR_INCH(I)*25.4) | AirPumpLine%REL_ROUGHAIR(I)=AirPumpLine%ROUGHNESS_AIRPLINE(I)/(AirPumpLine%DIAM_AIR_INCH(I)*25.4) | ||||
!DIAM_RAMLINE_MM(I)=DIAM_RAMLINE_MM(I)*.001 ! (m) | !DIAM_RAMLINE_MM(I)=DIAM_RAMLINE_MM(I)*.001 ! (m) | ||||
LENGT_AIR(I)=LENGT_AIR(I)*.001 ! (m) | AirPumpLine%LENGT_AIR(I)=AirPumpLine%LENGT_AIR(I)*.001 ! (m) | ||||
ENDDO | ENDDO | ||||
!================================================================ | !================================================================ | ||||
NO_MINORS_AIRPLINE=6 | AirPumpLine%NO_MINORS_AIRPLINE=6 | ||||
ALLOCATE (MINORS_AIRPUMP(NO_MINORS_AIRPLINE,4)) | ALLOCATE (AirPumpLine%MINORS_AIRPUMP(AirPumpLine%NO_MINORS_AIRPLINE,4)) | ||||
! ID(INCH) LF CV NOTE(BAR) DESCRIPTION | ! ID(INCH) LF CV NOTE(BAR) DESCRIPTION | ||||
MINORS_AIRPUMP(1,1:4)= (/2., 10., 0., 0./) !Acc.tee | AirPumpLine%MINORS_AIRPUMP(1,1:4)= (/2., 10., 0., 0./) !Acc.tee | ||||
MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow | AirPumpLine%MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow | ||||
MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter | AirPumpLine%MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter | ||||
MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve | AirPumpLine%MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve | ||||
MINORS_AIRPUMP(5,1:4)= (/1., 0., 9.2, 0./) !valve | AirPumpLine%MINORS_AIRPUMP(5,1:4)= (/1., 0., 9.2, 0./) !valve | ||||
MINORS_AIRPUMP(6,1:4)= (/2., 6.4, 0., 0./) !unionA | AirPumpLine%MINORS_AIRPUMP(6,1:4)= (/2., 6.4, 0., 0./) !unionA | ||||
ALLOCATE (MINORDIAM_AIR_INCH(NO_MINORS_AIRPLINE),MINORAREA_AIR(NO_MINORS_AIRPLINE), & | ALLOCATE (AirPumpLine%MINORDIAM_AIR_INCH(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%MINORAREA_AIR(AirPumpLine%NO_MINORS_AIRPLINE), & | ||||
LF_AIR(NO_MINORS_AIRPLINE),CV_AIR(NO_MINORS_AIRPLINE),NOTE_AIR(NO_MINORS_AIRPLINE) & | AirPumpLine%LF_AIR(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%CV_AIR(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%NOTE_AIR(AirPumpLine%NO_MINORS_AIRPLINE) & | ||||
,minlosspa_air(NO_MINORS_AIRPLINE),minloss_air(NO_MINORS_AIRPLINE)) | ,AirPumpLine%minlosspa_air(AirPumpLine%NO_MINORS_AIRPLINE),AirPumpLine%minloss_air(AirPumpLine%NO_MINORS_AIRPLINE)) | ||||
DO I=1,NO_MINORS_AIRPLINE | DO I=1,AirPumpLine%NO_MINORS_AIRPLINE | ||||
MINORDIAM_AIR_INCH(I)=MINORS_AIRPUMP(I,1) | AirPumpLine%MINORDIAM_AIR_INCH(I)=AirPumpLine%MINORS_AIRPUMP(I,1) | ||||
LF_AIR(I)=MINORS_AIRPUMP(I,2) | AirPumpLine%LF_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,2) | ||||
CV_AIR(I)=MINORS_AIRPUMP(I,3) | AirPumpLine%CV_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,3) | ||||
NOTE_AIR(I)=MINORS_AIRPUMP(I,4) | AirPumpLine%NOTE_AIR(I)=AirPumpLine%MINORS_AIRPUMP(I,4) | ||||
MINORAREA_AIR(I)=PI*(MINORDIAM_AIR_INCH(I)*0.0254)**2/4. !D(in), AREA(m) | AirPumpLine%MINORAREA_AIR(I)=PI*(AirPumpLine%MINORDIAM_AIR_INCH(I)*0.0254)**2/4. !D(in), AREA(m) | ||||
ENDDO | ENDDO | ||||
@@ -107,7 +107,7 @@ SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER) | |||||
Integer I | Integer I | ||||
loop3: do while (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. ChokeAirFail==0) | loop3: do while (ABS(ChokeControlPanel%ChokeControlLever)==1.0 .AND. ChokeControlPanel%ChokePanelRigAirSwitch == 1 .AND. CHOOKE(CHNUMBER)%FailMalf==0 .AND. AirDrivenPump%ChokeAirFail==0) | ||||
if (ChokeControlPanel%ChokeControlLever == 1.0) then | if (ChokeControlPanel%ChokeControlLever == 1.0) then | ||||
CHOOKE(CHNUMBER)%ChokeIsClosing = .true. | CHOOKE(CHNUMBER)%ChokeIsClosing = .true. | ||||
CHOOKE(CHNUMBER)%ChokeIsOpening = .false. | CHOOKE(CHNUMBER)%ChokeIsOpening = .false. | ||||
@@ -120,7 +120,7 @@ SUBROUTINE PIPE_RAMS_CHOKE(CHNUMBER) | |||||
time=time+DeltaT_Choke !overal time (s) | AirPumpLine%TIME=AirPumpLine%TIME+AirPumpLine%DeltaT_Choke !overal time (s) | ||||
@@ -155,33 +155,33 @@ implicit none | |||||
INTEGER CHNUMBER | INTEGER CHNUMBER | ||||
QAIR_PUMP=Qiter+.1 !(gpm) maximum flow for the start | AirDrivenPump%QAIR_PUMP=AirPumpLine%QITER+.1 !(gpm) maximum flow for the start | ||||
diffp_air=-10 | AirPumpLine%diffp_air=-10 | ||||
losses_air=10 | AirPumpLine%losses_air=10 | ||||
!=================================================================== | !=================================================================== | ||||
! AIR OPERATED PUMP | ! AIR OPERATED PUMP | ||||
! MODEL 10-6000W030 RATIO 55:1 | ! MODEL 10-6000W030 RATIO 55:1 | ||||
!=================for air consumption at 100 psig=================== | !=================for air consumption at 100 psig=================== | ||||
do while (diffp_air<0) | do while (AirPumpLine%diffp_air<0) | ||||
QAIR_PUMP=QAIR_PUMP-.1 | AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP-.1 | ||||
! Qup=QAIR_PUMP; | ! Qup=AirDrivenPump%QAIR_PUMP; | ||||
!cc1 = 1354; cc2 = -2066; cc3 = -2109; cc4 = -513.6; cc5 = 5935 FOR OUTPUT IN GPM | !cc1 = 1354; cc2 = -2066; cc3 = -2109; cc4 = -513.6; cc5 = 5935 FOR OUTPUT IN GPM | ||||
p_airp=cc1*(QAIR_PUMP**4) + cc2*(QAIR_PUMP**3) + cc3*(QAIR_PUMP**2) + cc4*QAIR_PUMP + cc5 !(psig) | AirPumpLine%P_AIRP=AirDrivenPump%cc1*(AirDrivenPump%QAIR_PUMP**4) + AirDrivenPump%cc2*(AirDrivenPump%QAIR_PUMP**3) + AirDrivenPump%cc3*(AirDrivenPump%QAIR_PUMP**2) + AirDrivenPump%cc4*AirDrivenPump%QAIR_PUMP + AirDrivenPump%cc5 !(psig) | ||||
! kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-5/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) | ! kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-5/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) | ||||
diffp_air= p_airp - Pdownstrem | AirPumpLine%diffp_air= AirPumpLine%P_AIRP - AirPumpLine%Pdownstrem | ||||
end do !returns Qup | end do !returns Qup | ||||
do while (abs((diffp_air-losses_air)/diffp_air)>tol_air) !finding correct QAIR_pump for 1 timecounter_ram | do while (abs((AirPumpLine%diffp_air-AirPumpLine%losses_air)/AirPumpLine%diffp_air)>AirPumpLine%TOL_AIR) !finding correct QAIR_pump for 1 timecounter_ram | ||||
if (diffp_air-losses_air>0) then | if (AirPumpLine%diffp_air-AirPumpLine%losses_air>0) then | ||||
QAIR_PUMP=QAIR_PUMP+.005 | AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP+.005 | ||||
else | else | ||||
QAIR_PUMP=QAIR_PUMP-.005 | AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP-.005 | ||||
endif | endif | ||||
!=================================================================== | !=================================================================== | ||||
@@ -189,53 +189,53 @@ endif | |||||
! MODEL 10-6000W030 RATIO 55:1 | ! MODEL 10-6000W030 RATIO 55:1 | ||||
!=================for air consumption at 100 psig=================== | !=================for air consumption at 100 psig=================== | ||||
p_airp=cc1*(QAIR_PUMP**4) + cc2*(QAIR_PUMP**3) + cc3*(QAIR_PUMP**2) + cc4*QAIR_PUMP + cc5 !(psig) | AirPumpLine%P_AIRP=AirDrivenPump%cc1*(AirDrivenPump%QAIR_PUMP**4) + AirDrivenPump%cc2*(AirDrivenPump%QAIR_PUMP**3) + AirDrivenPump%cc3*(AirDrivenPump%QAIR_PUMP**2) + AirDrivenPump%cc4*AirDrivenPump%QAIR_PUMP + AirDrivenPump%cc5 !(psig) | ||||
!kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-005/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) | !kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-005/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) | ||||
diffp_air= p_airp - Pdownstrem | AirPumpLine%diffp_air= AirPumpLine%P_AIRP - AirPumpLine%Pdownstrem | ||||
!===========================LOSSES==================================== | !===========================LOSSES==================================== | ||||
do i=1,NO_PIPINGS_AIRPLINE | do i=1,AirPumpLine%NO_PIPINGS_AIRPLINE | ||||
Re_air(i)=QAIR_PUMP*6.30902e-005*DIAM_AIR_INCH(I)*0.0254/(area_air(i)*nu) | AirPumpLine%Re_air(i)=AirDrivenPump%QAIR_PUMP*6.30902e-005*AirPumpLine%DIAM_AIR_INCH(I)*0.0254/(AirPumpLine%AREA_AIR(i)*nu) | ||||
enddo | enddo | ||||
do i=1,NO_PIPINGS_AIRPLINE | do i=1,AirPumpLine%NO_PIPINGS_AIRPLINE | ||||
if (Re_air(i)<Re_cr) then | if (AirPumpLine%Re_air(i)<Re_cr) then | ||||
fric_air(i)=64/Re_air(i) | AirPumpLine%fric_air(i)=64/AirPumpLine%Re_air(i) | ||||
else | else | ||||
fric_air(i)=1/(-1.8*log10((rel_roughair(i)/3.7)**1.11+6.9/Re_air(i)))**2 | AirPumpLine%fric_air(i)=1/(-1.8*log10((AirPumpLine%REL_ROUGHAIR(i)/3.7)**1.11+6.9/AirPumpLine%Re_air(i)))**2 | ||||
endif | endif | ||||
fricloss_air(i)=((fric_air(i)*(wdens*sg*lengt_air(i)*(QAIR_PUMP*6.30902e-005/area_air(i))**2))/(2*DIAM_AIR_INCH(I)*0.0254))/6895 | AirPumpLine%fricloss_air(i)=((AirPumpLine%fric_air(i)*(wdens*sg*AirPumpLine%LENGT_AIR(i)*(AirDrivenPump%QAIR_PUMP*6.30902e-005/AirPumpLine%AREA_AIR(i))**2))/(2*AirPumpLine%DIAM_AIR_INCH(I)*0.0254))/6895 | ||||
enddo | enddo | ||||
pipe_loss1air=sum(fricloss_air) !loss before regulator(psi) | AirPumpLine%pipe_loss1air=sum(AirPumpLine%fricloss_air) !loss before regulator(psi) | ||||
do i=1,NO_MINORS_AIRPLINE | do i=1,AirPumpLine%NO_MINORS_AIRPLINE | ||||
if (LF_air(i)/=0) then | if (AirPumpLine%LF_AIR(i)/=0) then | ||||
minlosspa_air(i)=LF_air(i)*wdens*sg*(QAIR_PUMP*6.30902e-005/MINORAREA_AIR(i))**2/2 !(Pa) | AirPumpLine%minlosspa_air(i)=AirPumpLine%LF_AIR(i)*wdens*sg*(AirDrivenPump%QAIR_PUMP*6.30902e-005/AirPumpLine%MINORAREA_AIR(i))**2/2 !(Pa) | ||||
minloss_air(i)=minlosspa_air(i)/6895 !(psi) | AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi) | ||||
elseif (CV_air(i)/=0) then | elseif (AirPumpLine%CV_AIR(i)/=0) then | ||||
minlosspa_air(i)=1000*sg*((11.7*QAIR_PUMP*6.30902e-005*3600)/(CV_air(i)))**2 !(pa) | AirPumpLine%minlosspa_air(i)=1000*sg*((11.7*AirDrivenPump%QAIR_PUMP*6.30902e-005*3600)/(AirPumpLine%CV_AIR(i)))**2 !(pa) | ||||
minloss_air(i)=minlosspa_air(i)/6895 !(psi) | AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi) | ||||
else | else | ||||
minlosspa_air(i)=NOTE_air(i)*1e5 !(pa) | AirPumpLine%minlosspa_air(i)=AirPumpLine%NOTE_AIR(i)*1e5 !(pa) | ||||
minloss_air(i)=minlosspa_air(i)/6895 !(psi) | AirPumpLine%minloss_air(i)=AirPumpLine%minlosspa_air(i)/6895 !(psi) | ||||
endif | endif | ||||
enddo | enddo | ||||
minor_loss1air=sum(minloss_air) !loss before regulator(psi) | AirPumpLine%minor_loss1air=sum(AirPumpLine%minloss_air) !loss before regulator(psi) | ||||
static_loss1air=0 | AirPumpLine%static_loss1air=0 | ||||
losses_air=pipe_loss1air+minor_loss1air+static_loss1air !(psi) | AirPumpLine%losses_air=AirPumpLine%pipe_loss1air+AirPumpLine%minor_loss1air+AirPumpLine%static_loss1air !(psi) | ||||
!========================================================================= | !========================================================================= | ||||
@@ -244,29 +244,29 @@ losses_air=pipe_loss1air+minor_loss1air+static_loss1air !(psi) | |||||
Qiter=QAIR_PUMP | AirPumpLine%QITER=AirDrivenPump%QAIR_PUMP | ||||
QAIR_PUMP=QAIR_PUMP*(ChokeControlPanel%ChokeRateControlKnob/10.) ! final Q (gpm) | AirDrivenPump%QAIR_PUMP=AirDrivenPump%QAIR_PUMP*(ChokeControlPanel%ChokeRateControlKnob/10.) ! final Q (gpm) | ||||
Cumulative_AirVolume_Choke= Cumulative_AirVolume_Choke + ((QAIR_PUMP * DeltaT_Choke / 60.0 ) / (1.5*0.004329004) ) ! =strokes | Choke%Cumulative_AirVolume_Choke= Choke%Cumulative_AirVolume_Choke + ((AirDrivenPump%QAIR_PUMP * AirPumpLine%DeltaT_Choke / 60.0 ) / (1.5*0.004329004) ) ! =strokes | ||||
if ( Cumulative_AirVolume_Choke > 1.0 ) then | if ( Choke%Cumulative_AirVolume_Choke > 1.0 ) then | ||||
SoundChokePump= 60 | Choke%SoundChokePump= 60 | ||||
Cumulative_AirVolume_Choke= Cumulative_AirVolume_Choke - 1.0 | Choke%Cumulative_AirVolume_Choke= Choke%Cumulative_AirVolume_Choke - 1.0 | ||||
else | else | ||||
SoundChokePump= 0.0 | Choke%SoundChokePump= 0.0 | ||||
endif | endif | ||||
!SoundChokePump= int (QAIR_PUMP/ (1.5*0.004329004)*DeltaT_Choke/60.0) ! 1.5: Volume per stroke (in^3) , 0.004329004: in^3 to gal , 60:seconds | !SoundChokePump= int (QAIR_PUMP/ (1.5*0.004329004)*DeltaT_Choke/60.0) ! 1.5: Volume per stroke (in^3) , 0.004329004: in^3 to gal , 60:seconds | ||||
deltav_air=QAIR_PUMP*DeltaT_Choke/60 !(galon) delta_t=1sec , Q(gpm) | AirPumpLine%DELTAV_AIR=AirDrivenPump%QAIR_PUMP*AirPumpLine%DeltaT_Choke/60 !(galon) delta_t=1sec , Q(gpm) | ||||
if (CHOOKE(CHNUMBER)%ChokeIsClosing) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse + (deltav_air*3785.412/Acylinder)!*(ChokeRateControlKnob/10.) ! 3785.412 : GALON TO CM^3 | if (CHOOKE(CHNUMBER)%ChokeIsClosing) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse + (AirPumpLine%DELTAV_AIR*3785.412/AirPumpLine%Acylinder)!*(ChokeRateControlKnob/10.) ! 3785.412 : GALON TO CM^3 | ||||
if (CHOOKE(CHNUMBER)%ChokeIsOpening) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse - (deltav_air*3785.412/Acylinder)!*(ChokeRateControlKnob/10.) | if (CHOOKE(CHNUMBER)%ChokeIsOpening) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUMBER)%PassedCourse - (AirPumpLine%DELTAV_AIR*3785.412/AirPumpLine%Acylinder)!*(ChokeRateControlKnob/10.) | ||||
@@ -276,39 +276,39 @@ if (CHOOKE(CHNUMBER)%ChokeIsOpening) CHOOKE(CHNUMBER)%PassedCourse=CHOOKE(CHNUM | |||||
!((((((((IN OUTER LOOP)))))) | !((((((((IN OUTER LOOP)))))) | ||||
!===============AIR PUMP OUTPUTS========================= | !===============AIR PUMP OUTPUTS========================= | ||||
alpha_timeair=time ! overal time (s) | AirPumpLine%alpha_timeair=AirPumpLine%TIME ! overal time (s) | ||||
alpha_Pdownstrem=Pdownstrem | AirPumpLine%alpha_Pdownstrem=AirPumpLine%Pdownstrem | ||||
alpha_pairp=p_airp | AirPumpLine%alpha_pairp=AirPumpLine%P_AIRP | ||||
alpha_Qair=QAIR_PUMP | AirPumpLine%alpha_Qair=AirDrivenPump%QAIR_PUMP | ||||
!write(*,*) 'diffp_air=',diffp_air | !write(*,*) 'diffp_air=',diffp_air | ||||
!pause | !pause | ||||
alpha_diffpair=diffp_air | AirPumpLine%alpha_diffpair=AirPumpLine%diffp_air | ||||
alpha_lossesair=losses_air | AirPumpLine%alpha_lossesair=AirPumpLine%losses_air | ||||
!======================================================== | !======================================================== | ||||
!OPEN(150,FILE='CHOKE_AIRPUMP_OUTPUTS.DAT') | !OPEN(150,FILE='CHOKE_AIRPUMP_OUTPUTS.DAT') | ||||
if (CHOOKE(CHNUMBER)%ChokeIsClosing .AND. CHOOKE(CHNUMBER)%PassedCourse>CourseBase) then | if (CHOOKE(CHNUMBER)%ChokeIsClosing .AND. CHOOKE(CHNUMBER)%PassedCourse>AirPumpLine%CourseBase) then | ||||
CHOOKE(CHNUMBER)%PassedCourse=CourseBase | CHOOKE(CHNUMBER)%PassedCourse=AirPumpLine%CourseBase | ||||
SoundChokePump= 0.0 | Choke%SoundChokePump= 0.0 | ||||
endif | endif | ||||
if (CHOOKE(CHNUMBER)%ChokeIsOpening .AND. CHOOKE(CHNUMBER)%PassedCourse<0.) then | if (CHOOKE(CHNUMBER)%ChokeIsOpening .AND. CHOOKE(CHNUMBER)%PassedCourse<0.) then | ||||
CHOOKE(CHNUMBER)%PassedCourse=0. | CHOOKE(CHNUMBER)%PassedCourse=0. | ||||
SoundChokePump= 0.0 | Choke%SoundChokePump= 0.0 | ||||
endif | endif | ||||
call SetSoundChokePump(SoundChokePump) | call SetSoundChokePump(Choke%SoundChokePump) | ||||
CHOOKE(CHNUMBER)%PercentClose= CHOOKE(CHNUMBER)%PassedCourse/CourseBase | CHOOKE(CHNUMBER)%PercentClose= CHOOKE(CHNUMBER)%PassedCourse/AirPumpLine%CourseBase | ||||
IF (ChokeControlPanel%Choke1LED==1) THEN | IF (ChokeControlPanel%Choke1LED==1) THEN | ||||
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 | ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 | ||||
ELSE ! Choke2LED==1 | ELSE ! Choke2LED==1 | ||||
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 | ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 | ||||
ENDIF | ENDIF | ||||
!CALL SetHydraulicChock1(nint(MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)*100)) | !CALL SetHydraulicChock1(nint(MIN(CHOOKE(1)%PercentClose / 0.91 , 1.0)*100)) | ||||
@@ -329,37 +329,37 @@ alpha_lossesair=losses_air | |||||
HydraulicChoke1WashoutCoef= HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf | Choke%HydraulicChoke1WashoutCoef= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf | ||||
HydraulicChoke1WashoutCoef= MIN( 0.5 , HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(60.0/DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time | Choke%HydraulicChoke1WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time | ||||
HydraulicChoke2WashoutCoef= HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf | Choke%HydraulicChoke2WashoutCoef= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf | ||||
HydraulicChoke2WashoutCoef= MIN( 0.5 , HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(60.0/DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time | Choke%HydraulicChoke2WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(60.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5=maximum washout coef , 60.0 sec= 1min duration time | ||||
!write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef | !write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef | ||||
IF (CHOOKE(1)%PlugMalf == 1) THEN | IF (CHOOKE(1)%PlugMalf == 1) THEN | ||||
Present_HydraulicChoke1Plug= Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf | Choke%Present_HydraulicChoke1Plug= Choke%Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf | ||||
! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ||||
! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent | ! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent | ||||
!write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent | !write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent | ||||
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - HydraulicChoke1PluggedPercent_Old) /= 0) then | if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then | ||||
DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Present_HydraulicChoke1Plug | Choke%DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Choke%Present_HydraulicChoke1Plug | ||||
Plug1TimeCounter = 0 | Choke%Plug1TimeCounter = 0 | ||||
!write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug | !write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug | ||||
endif | endif | ||||
Plug1TimeCounter= Plug1TimeCounter + 1 | Choke%Plug1TimeCounter= Choke%Plug1TimeCounter + 1 | ||||
HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | ||||
if (Plug1TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=600 | if (Choke%Plug1TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=600 | ||||
Present_HydraulicChoke1Plug = Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((DeltaPlug1Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 | Choke%Present_HydraulicChoke1Plug = Choke%Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((Choke%DeltaPlug1Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 | ||||
endif | endif | ||||
@@ -374,23 +374,23 @@ alpha_lossesair=losses_air | |||||
IF (CHOOKE(2)%PlugMalf == 1) THEN | IF (CHOOKE(2)%PlugMalf == 1) THEN | ||||
Present_HydraulicChoke2Plug= Present_HydraulicChoke2Plug * CHOOKE(2)%PlugMalf | Choke%Present_HydraulicChoke2Plug= Choke%Present_HydraulicChoke2Plug * CHOOKE(2)%PlugMalf | ||||
! integer: HydraulicChoke2PluggedPercent,HydraulicChoke2PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ! integer: HydraulicChoke2PluggedPercent,HydraulicChoke2PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ||||
! real: Present_HydraulicChoke2Plug,DeltaPlug2Percent | ! real: Present_HydraulicChoke2Plug,DeltaPlug2Percent | ||||
if ( (ChokeProblems%HydraulicChoke2PluggedPercent - HydraulicChoke2PluggedPercent_Old) /= 0 ) then | if ( (ChokeProblems%HydraulicChoke2PluggedPercent - Choke%HydraulicChoke2PluggedPercent_Old) /= 0 ) then | ||||
DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Present_HydraulicChoke2Plug | Choke%DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Choke%Present_HydraulicChoke2Plug | ||||
Plug2TimeCounter = 0 | Choke%Plug2TimeCounter = 0 | ||||
endif | endif | ||||
Plug2TimeCounter= Plug2TimeCounter + 1 | Choke%Plug2TimeCounter= Choke%Plug2TimeCounter + 1 | ||||
HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | ||||
if (Plug2TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=600 | if (Choke%Plug2TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=600 | ||||
Present_HydraulicChoke2Plug = Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((DeltaPlug2Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 | Choke%Present_HydraulicChoke2Plug = Choke%Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((Choke%DeltaPlug2Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 | ||||
endif | endif | ||||
@@ -403,14 +403,14 @@ alpha_lossesair=losses_air | |||||
! fully open area is 123/64 in^2 = 0.01334635 ft^2 | ! fully open area is 123/64 in^2 = 0.01334635 ft^2 | ||||
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*HydraulicChoke1WashoutCoef*ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*Choke%HydraulicChoke1WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | ||||
!write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke | !write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke | ||||
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup | CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Choke%Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup | ||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*HydraulicChoke2WashoutCoef*ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*Choke%HydraulicChoke2WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | ||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Choke%Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | ||||
!write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke | !write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke | ||||
@@ -418,8 +418,8 @@ alpha_lossesair=losses_air | |||||
CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke | CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke | ||||
! 144: ft^2 to in^2 | ! 144: ft^2 to in^2 | ||||
CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | ||||
CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | ||||
!write(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100 | !write(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100 | ||||
@@ -1,6 +1,6 @@ | |||||
module choke | module ChokeModule | ||||
USE CHOKEVARIABLES | USE CHOKEVARIABLES | ||||
!USE CDataDisplayConsoleVariables, CasingPressureDataDisplay=>CasingPressure!, StandPipePressureDataDisplay=>StandPipePressure | !USE CDataDisplayConsoleVariables, CasingPressureDataDisplay=>CasingPressure!, StandPipePressureDataDisplay=>StandPipePressure | ||||
USE CChokeProblemsVariables | USE CChokeProblemsVariables | ||||
@@ -42,9 +42,9 @@ module choke | |||||
IF (ChokeControlPanel%Choke1LED==1) THEN | IF (ChokeControlPanel%Choke1LED==1) THEN | ||||
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 ! display monitor | ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(1)%PercentClose*10 ! display monitor | ||||
ELSE ! Choke2LED==1 | ELSE ! Choke2LED==1 | ||||
ChokeControlPanel%ChokePosition= (1 - GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 ! display monitor | ChokeControlPanel%ChokePosition= (1 - Choke%GaugeChokePositionMailf) * CHOOKE(2)%PercentClose*10 ! display monitor | ||||
ENDIF | ENDIF | ||||
@@ -62,37 +62,37 @@ module choke | |||||
HydraulicChoke1WashoutCoef= HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf | Choke%HydraulicChoke1WashoutCoef= Choke%HydraulicChoke1WashoutCoef * CHOOKE(1)%WashoutMalf | ||||
HydraulicChoke1WashoutCoef= MIN( 0.5 , HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(180.0/DeltaT_Choke)) ) ! 0.5 = maximum washout coef , 180.0 sec = 3 min duration time | Choke%HydraulicChoke1WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke1WashoutCoef+ CHOOKE(1)%WashoutMalf*(0.5/(180.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5 = maximum washout coef , 180.0 sec = 3 min duration time | ||||
HydraulicChoke2WashoutCoef= HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf | Choke%HydraulicChoke2WashoutCoef= Choke%HydraulicChoke2WashoutCoef * CHOOKE(2)%WashoutMalf | ||||
HydraulicChoke2WashoutCoef= MIN( 0.5 , HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(180.0/DeltaT_Choke)) ) ! 0.5 = maximum washout coef , 180.0 sec = 3 min duration time | Choke%HydraulicChoke2WashoutCoef= MIN( 0.5 , Choke%HydraulicChoke2WashoutCoef+ CHOOKE(2)%WashoutMalf*(0.5/(180.0/AirPumpLine%DeltaT_Choke)) ) ! 0.5 = maximum washout coef , 180.0 sec = 3 min duration time | ||||
!write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef | !write(*,*) 'HydraulicChoke1WashoutCoef=' , HydraulicChoke1WashoutCoef | ||||
IF (CHOOKE(1)%PlugMalf == 1) THEN | IF (CHOOKE(1)%PlugMalf == 1) THEN | ||||
Present_HydraulicChoke1Plug= Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf | Choke%Present_HydraulicChoke1Plug= Choke%Present_HydraulicChoke1Plug * CHOOKE(1)%PlugMalf | ||||
! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ! integer: HydraulicChoke1PluggedPercent,HydraulicChoke1PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ||||
! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent | ! real: Present_HydraulicChoke1Plug,DeltaPlug1Percent | ||||
!write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent | !write(*,*) 'HydraulicChoke1PluggedPercent=' , HydraulicChoke1PluggedPercent | ||||
if ( (ChokeProblems%HydraulicChoke1PluggedPercent - HydraulicChoke1PluggedPercent_Old) /= 0) then | if ( (ChokeProblems%HydraulicChoke1PluggedPercent - Choke%HydraulicChoke1PluggedPercent_Old) /= 0) then | ||||
DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Present_HydraulicChoke1Plug | Choke%DeltaPlug1Percent = (REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100.) - Choke%Present_HydraulicChoke1Plug | ||||
Plug1TimeCounter = 0 | Choke%Plug1TimeCounter = 0 | ||||
!write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug | !write(*,*) 'DeltaPlug1Percent, Present_HydraulicChoke1Plug = ' ,DeltaPlug1Percent , Present_HydraulicChoke1Plug | ||||
endif | endif | ||||
Plug1TimeCounter= Plug1TimeCounter + 1 | Choke%Plug1TimeCounter= Choke%Plug1TimeCounter + 1 | ||||
HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | ||||
if (Plug1TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800 | if (Choke%Plug1TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800 | ||||
Present_HydraulicChoke1Plug = Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((DeltaPlug1Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 | Choke%Present_HydraulicChoke1Plug = Choke%Present_HydraulicChoke1Plug + CHOOKE(1)%PlugMalf* ((Choke%DeltaPlug1Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 600.0 | ||||
endif | endif | ||||
@@ -107,23 +107,23 @@ module choke | |||||
IF (CHOOKE(2)%PlugMalf == 1) THEN | IF (CHOOKE(2)%PlugMalf == 1) THEN | ||||
Present_HydraulicChoke2Plug= Present_HydraulicChoke2Plug * CHOOKE(2)%PlugMalf | Choke%Present_HydraulicChoke2Plug= Choke%Present_HydraulicChoke2Plug * CHOOKE(2)%PlugMalf | ||||
! integer: HydraulicChoke2PluggedPercent,HydraulicChoke2PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ! integer: HydraulicChoke2PluggedPercent,HydraulicChoke2PluggedPercent_Old,PlugTimeCounter,ChokePlugTimeDelay | ||||
! real: Present_HydraulicChoke2Plug,DeltaPlug2Percent | ! real: Present_HydraulicChoke2Plug,DeltaPlug2Percent | ||||
if ( (ChokeProblems%HydraulicChoke2PluggedPercent - HydraulicChoke2PluggedPercent_Old) /= 0 ) then | if ( (ChokeProblems%HydraulicChoke2PluggedPercent - Choke%HydraulicChoke2PluggedPercent_Old) /= 0 ) then | ||||
DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Present_HydraulicChoke2Plug | Choke%DeltaPlug2Percent = (REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100.) - Choke%Present_HydraulicChoke2Plug | ||||
Plug2TimeCounter = 0 | Choke%Plug2TimeCounter = 0 | ||||
endif | endif | ||||
Plug2TimeCounter= Plug2TimeCounter + 1 | Choke%Plug2TimeCounter= Choke%Plug2TimeCounter + 1 | ||||
HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | ||||
if (Plug2TimeCounter <= ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800 | if (Choke%Plug2TimeCounter <= Choke%ChokePlugTimeDelay) then !ChokePlugTimeDelay=1800 | ||||
Present_HydraulicChoke2Plug = Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((DeltaPlug2Percent / real(ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 1800.0 | Choke%Present_HydraulicChoke2Plug = Choke%Present_HydraulicChoke2Plug + CHOOKE(2)%PlugMalf *((Choke%DeltaPlug2Percent / real(Choke%ChokePlugTimeDelay))) ! real(ChokePlugTimeDelay)= 1800.0 | ||||
endif | endif | ||||
@@ -136,14 +136,14 @@ module choke | |||||
! fully open area is 123/64 in^2 = 0.01334635 ft^2 | ! fully open area is 123/64 in^2 = 0.01334635 ft^2 | ||||
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*HydraulicChoke1WashoutCoef*ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke+(CHOOKE(1)%WashoutMalf*Choke%HydraulicChoke1WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | ||||
!write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke | !write(*,*) 'CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke=' ,CHOOKE(1)%WashoutMalf , CHOOKE(1)%AreaChoke | ||||
CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup | CHOOKE(1)%AreaChoke=CHOOKE(1)%AreaChoke-(CHOOKE(1)%PlugMalf* Choke%Present_HydraulicChoke1Plug *CHOOKE(1)%AreaChoke) ! Initialised in Choke Startup | ||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*HydraulicChoke2WashoutCoef*ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke+(CHOOKE(2)%WashoutMalf*Choke%HydraulicChoke2WashoutCoef*Choke%ChokeAreaFullyOpen/144.0) ! Initialised in Choke Startup | ||||
CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | CHOOKE(2)%AreaChoke=CHOOKE(2)%AreaChoke-(CHOOKE(2)%PlugMalf* Choke%Present_HydraulicChoke2Plug *CHOOKE(2)%AreaChoke) ! Initialised in Choke Startup | ||||
!write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke | !write(*,*) 'CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke=' ,CHOOKE(2)%WashoutMalf , CHOOKE(2)%AreaChoke | ||||
@@ -151,8 +151,8 @@ module choke | |||||
CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke | CHOOKE(2)%AreaChokeFinal= CHOOKE(2)%AreaChoke | ||||
! 144: ft^2 to in^2 | ! 144: ft^2 to in^2 | ||||
CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | CALL SetHydraulicChock1(100 - nint((CHOOKE(1)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | ||||
CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | CALL SetHydraulicChock2(100 - nint((CHOOKE(2)%AreaChokeFinal/(Choke%ChokeAreaFullyOpen/144.))*100)) ! for manifold valve | ||||
!write(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100 | !write(*,*) 'CHOOKE(1)%PercentClose=' , CHOOKE(1)%PercentClose ! close percent 0 to 100 | ||||
@@ -180,4 +180,4 @@ module choke | |||||
!************************* IN MUD SYSTEM MODULE************************* | !************************* IN MUD SYSTEM MODULE************************* | ||||
end subroutine CHOKE_MainBody | end subroutine CHOKE_MainBody | ||||
end module CHOKE | end module ChokeModule |
@@ -12,28 +12,35 @@ IMPLICIT NONE | |||||
!=========================================================================== | !=========================================================================== | ||||
! CHOKE VARIABLES | ! CHOKE VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL Ycritical,Cp,Cv,CL,kRatio,nPolytripic,x1,SGliquid,WaterDensity,LiquidDensity,VL,VG1 | type::ChokeType | ||||
REAL epsilon_step,epsilon_abs,step_size,Ycritical_a,Ycritical_b,Ycritical_c | REAL Ycritical,Cp,Cv,CL,kRatio,nPolytripic,x1,SGliquid,WaterDensity,LiquidDensity,VL,VG1 | ||||
REAL G2,Cdrag,Pwh,MixDens2,Yratio_a,Yratio_b,Yratio_c,Yratio,Yratio_low,Yratio_high | REAL epsilon_step,epsilon_abs,step_size,Ycritical_a,Ycritical_b,Ycritical_c | ||||
REAL FlowRate,Patm,MassFlux,LiquidPPG,time2,AreaChoke | REAL G2,Cdrag,Pwh,MixDens2,Yratio_a,Yratio_b,Yratio_c,Yratio,Yratio_low,Yratio_high | ||||
REAL eps_step,eps_abs,Yratiomat(100),Yrario_actual,Yrario | REAL FlowRate,Patm,MassFlux,LiquidPPG,time2,AreaChoke | ||||
REAL :: DegreeOpen,GRAVITY1=9.81!,PercentClose | REAL eps_step,eps_abs,Yratiomat(100),Yrario_actual,Yrario | ||||
REAL ChokedMassFlux,ChokedFlowRate,PwhChoked | REAL :: DegreeOpen,GRAVITY1=9.81!,PercentClose | ||||
REAL TotalStrokes1,TotalStrokes2 | REAL ChokedMassFlux,ChokedFlowRate,PwhChoked | ||||
!INTEGER WashoutMalf,PlugMalf,failMalf | REAL TotalStrokes1,TotalStrokes2 | ||||
INTEGER GaugeChokePositionMailf,SoundChokePump | !INTEGER WashoutMalf,PlugMalf,failMalf | ||||
Real Cumulative_AirVolume_Choke | INTEGER GaugeChokePositionMailf,SoundChokePump | ||||
Real HydraulicChoke1WashoutCoef,HydraulicChoke2WashoutCoef | Real Cumulative_AirVolume_Choke | ||||
Real HydraulicChoke1WashoutCoef,HydraulicChoke2WashoutCoef | |||||
Real Present_HydraulicChoke1Plug, Present_HydraulicChoke2Plug,DeltaPlug1Percent,DeltaPlug2Percent | Real Present_HydraulicChoke1Plug, Present_HydraulicChoke2Plug,DeltaPlug1Percent,DeltaPlug2Percent | ||||
Integer HydraulicChoke1PluggedPercent_Old,HydraulicChoke2PluggedPercent_Old,Plug1TimeCounter,Plug2TimeCounter,ChokePlugTimeDelay | Integer HydraulicChoke1PluggedPercent_Old,HydraulicChoke2PluggedPercent_Old,Plug1TimeCounter,Plug2TimeCounter,ChokePlugTimeDelay | ||||
Real ChokeAreaFullyOpen | Real ChokeAreaFullyOpen | ||||
end type ChokeType | |||||
type(ChokeType)::Choke | |||||
!=========================================================================== | !=========================================================================== | ||||
! AIR DRIVEN PUMP VARIABLES | ! AIR DRIVEN PUMP VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
REAL QAIR_PUMP,cc1,cc2,cc3,cc4,cc5 | type::AirDrivenPumpType | ||||
REAL QAIR_PUMP,cc1,cc2,cc3,cc4,cc5 | |||||
INTEGER ChokeAirFail | |||||
end type AirDrivenPumpType | |||||
type(AirDrivenPumpType)::AirDrivenPump | |||||
PARAMETER PI=3.141593 | PARAMETER PI=3.141593 | ||||
INTEGER ChokeAirFail | |||||
!============================================================================ | !============================================================================ | ||||
! OIL & ENVIRONMENT VARIABLES | ! OIL & ENVIRONMENT VARIABLES | ||||
!============================================================================ | !============================================================================ | ||||
@@ -46,57 +53,29 @@ REAL:: SG=1.12,WDENS=1000,GRAVITY=9.81,RE_CR=2000,NU=9e-6 | |||||
! AIR PUMP LINE COMPUTATIONAL VARIABLES | ! AIR PUMP LINE COMPUTATIONAL VARIABLES | ||||
!=========================================================================== | !=========================================================================== | ||||
!logical ChokeIsClosing,ChokeIsOpening | !logical ChokeIsClosing,ChokeIsOpening | ||||
REAL ChokeControlLeverOld | type::AirPumpLineType | ||||
REAL P_AIRP,QITER,DELTAV_AIR,TIME,DeltaT_Choke,TOL_AIR | REAL ChokeControlLeverOld | ||||
REAL diffp_air,losses_air,pipe_loss1air,minor_loss1air,static_loss1air | REAL P_AIRP,QITER,DELTAV_AIR,TIME,DeltaT_Choke,TOL_AIR | ||||
integer NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | REAL diffp_air,losses_air,pipe_loss1air,minor_loss1air,static_loss1air | ||||
REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | integer NO_PIPINGS_AIRPLINE,NO_MINORS_AIRPLINE | ||||
REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:),MINORS_AIRPUMP(:,:) | REAL,ALLOCATABLE:: Re_air(:),DIAM_AIR_MM(:),DIAM_AIR_INCH(:),AREA_AIR(:),REL_ROUGHAIR(:),LENGT_AIR(:),LF_AIR(:),CV_AIR(:),NOTE_AIR(:) | ||||
REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) | REAL,ALLOCATABLE:: fric_air(:),fricloss_air(:),minlosspa_air(:),minloss_air(:),MINORS_AIRPUMP(:,:) | ||||
REAL,ALLOCATABLE:: ROUGHNESS_AIRPLINE(:),PIPINGS_AIRPUMP(:,:) | REAL,ALLOCATABLE:: MINORDIAM_AIR_INCH(:),MINORAREA_AIR(:) | ||||
REAL Acylinder,CourseBase!,PassedCourse | REAL,ALLOCATABLE:: ROUGHNESS_AIRPLINE(:),PIPINGS_AIRPUMP(:,:) | ||||
REAL alpha_Qair,alpha_timeair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_Pdownstrem,Pdownstrem | REAL Acylinder,CourseBase!,PassedCourse | ||||
REAL alpha_Qair,alpha_timeair,alpha_pairp,alpha_diffpair,alpha_lossesair,alpha_Pdownstrem,Pdownstrem | |||||
end type AirPumpLineType | |||||
type(AirPumpLineType)::AirPumpLine | |||||
!================================================================================= | !================================================================================= | ||||
TYPE, PUBLIC :: CHOKE_TypeVars | TYPE, PUBLIC :: CHOKE_TypeVars | ||||
INTEGER WashoutMalf,PlugMalf,failMalf | |||||
REAL PercentClose,PassedCourse,AreaChoke,AreaChokeFinal | |||||
logical ChokeIsClosing,ChokeIsOpening | |||||
INTEGER WashoutMalf,PlugMalf,failMalf | |||||
REAL PercentClose,PassedCourse,AreaChoke,AreaChokeFinal | |||||
logical ChokeIsClosing,ChokeIsOpening | |||||
END TYPE CHOKE_TypeVars | END TYPE CHOKE_TypeVars | ||||
TYPE(CHOKE_TypeVars), DIMENSION(1:2) :: CHOOKE | TYPE(CHOKE_TypeVars), DIMENSION(1:2) :: CHOOKE | ||||
!TYPE, PUBLIC :: BOP_TypeVars2D | |||||
!REAL, ALLOCATABLE:: minlosspa(:,:),minloss(:,:) | |||||
!REAL,ALLOCATABLE:: Re_ramline(:,:),fric(:,:),fricloss(:,:) | |||||
! | |||||
! | |||||
!END TYPE BOP_TypeVars2D | |||||
! | |||||
!TYPE(BOP_TypeVars2D) :: RAMS | |||||
! 1 : CHOKE1 | |||||
! 2 : CHOKE2 | |||||
END MODULE | END MODULE | ||||
@@ -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 | Choke%kRatio=1.4 | ||||
Cp=0.24 | Choke%Cp=0.24 | ||||
CL=0.8 | Choke%CL=0.8 | ||||
x1=0.5 | Choke%x1=0.5 | ||||
LiquidPPG=9. | Choke%LiquidPPG=9. | ||||
LiquidDensity=LiquidPPG*7.48 !lbm/ft**3 | Choke%LiquidDensity=Choke%LiquidPPG*7.48 !lbm/ft**3 | ||||
VL=1.0/LiquidDensity !SpecificVolume of Liquid | Choke%VL=1.0/Choke%LiquidDensity !SpecificVolume of Liquid | ||||
Cv=Cp/kRatio | Choke%Cv=Choke%Cp/Choke%kRatio | ||||
nPolytripic=1+(x1*(Cp-Cv)/(x1*Cv+(1-x1)*CL)) | Choke%nPolytripic=1+(Choke%x1*(Choke%Cp-Choke%Cv)/(Choke%x1*Choke%Cv+(1-Choke%x1)*Choke%CL)) | ||||
VG1=1./0.748 !lbm/ft**3 Specific Volume of Air, Upstream | Choke%VG1=1./0.748 !lbm/ft**3 Specific Volume of Air, Upstream | ||||
Cdrag=0.8 | Choke%Cdrag=0.8 | ||||
Pwh=1400. !psi | Choke%Pwh=1400. !psi | ||||
Patm=14.7 | Choke%Patm=14.7 | ||||
MixDens2=x1*VG1 !lbm/ft**3 | Choke%MixDens2=Choke%x1*Choke%VG1 !lbm/ft**3 | ||||
epsilon_abs= 1e-5 | Choke%epsilon_abs= 1e-5 | ||||
epsilon_step= 1e-5 | Choke%epsilon_step= 1e-5 | ||||
!ChokeDiameter= 32/64. !in | !ChokeDiameter= 32/64. !in | ||||
@@ -66,26 +66,26 @@ CHOOKE%PercentClose= 0.0 | |||||
! CHOOKE(1)%AreaChoke=0.01334635 | ! CHOOKE(1)%AreaChoke=0.01334635 | ||||
!ChokeAreaFullyOpen = 123.d0 / 64.d0 ! fully open area is 123/64 in^2 = 0.01334635 ft^2 | !ChokeAreaFullyOpen = 123.d0 / 64.d0 ! fully open area is 123/64 in^2 = 0.01334635 ft^2 | ||||
DeltaT_Choke=0.1 | AirPumpLine%DeltaT_Choke=0.1 | ||||
!TotalStrokes1=0. | !TotalStrokes1=0. | ||||
!TotalStrokes2=0. | !TotalStrokes2=0. | ||||
HydraulicChoke1WashoutCoef= 0.0 | Choke%HydraulicChoke1WashoutCoef= 0.0 | ||||
HydraulicChoke2WashoutCoef= 0.0 | Choke%HydraulicChoke2WashoutCoef= 0.0 | ||||
ChokePlugTimeDelay = int(180./DeltaT_Choke) ! =1800 = 180/0.1 : for 3 min delay | Choke%ChokePlugTimeDelay = int(180./AirPumpLine%DeltaT_Choke) ! =1800 = 180/0.1 : for 3 min delay | ||||
Present_HydraulicChoke1Plug = REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100. | Choke%Present_HydraulicChoke1Plug = REAL(ChokeProblems%HydraulicChoke1PluggedPercent)/100. | ||||
HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | Choke%HydraulicChoke1PluggedPercent_Old= ChokeProblems%HydraulicChoke1PluggedPercent | ||||
Plug1TimeCounter= 0 | Choke%Plug1TimeCounter= 0 | ||||
DeltaPlug1Percent = 0.0 | Choke%DeltaPlug1Percent = 0.0 | ||||
Present_HydraulicChoke2Plug = REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100. | Choke%Present_HydraulicChoke2Plug = REAL(ChokeProblems%HydraulicChoke2PluggedPercent)/100. | ||||
HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | Choke%HydraulicChoke2PluggedPercent_Old= ChokeProblems%HydraulicChoke2PluggedPercent | ||||
Plug2TimeCounter= 0 | Choke%Plug2TimeCounter= 0 | ||||
DeltaPlug2Percent = 0.0 | Choke%DeltaPlug2Percent = 0.0 | ||||
@@ -93,35 +93,35 @@ DeltaPlug2Percent = 0.0 | |||||
!======================AIRPUMP INPUTS(CONSTANTS)=========================== | !======================AIRPUMP INPUTS(CONSTANTS)=========================== | ||||
CourseBase= 24. !cm | AirPumpLine%CourseBase= 24. !cm | ||||
CHOOKE%PassedCourse= 0. | CHOOKE%PassedCourse= 0. | ||||
ChokeControlPanel%ChokePosition=0. | ChokeControlPanel%ChokePosition=0. | ||||
Acylinder= PI*(8.**2)/4. ! (CM^2), 8=DIAMETER, 24=course , 3785.412: cm^3 to galon | AirPumpLine%Acylinder= PI*(8.**2)/4. ! (CM^2), 8=DIAMETER, 24=course , 3785.412: cm^3 to galon | ||||
CHOOKE%ChokeIsOpening = .false. | CHOOKE%ChokeIsOpening = .false. | ||||
CHOOKE%ChokeIsClosing = .false. | CHOOKE%ChokeIsClosing = .false. | ||||
P_AIRP=0 | AirPumpLine%P_AIRP=0 | ||||
cc1 = 0.1354; cc2 = -2.066; cc3 = -21.09; cc4 = -51.36; cc5 = 5935 ! FOR OUTPUT IN GPM | AirDrivenPump%cc1 = 0.1354; AirDrivenPump%cc2 = -2.066; AirDrivenPump%cc3 = -21.09; AirDrivenPump%cc4 = -51.36; AirDrivenPump%cc5 = 5935 ! FOR OUTPUT IN GPM | ||||
! cc1 = 4.754e-07; cc2 = -0.0001676; cc3 = -0.03953; cc4 = -2.223; cc5 = 5935 FOR OUTPUT IN IN^3/MIN | ! cc1 = 4.754e-07; cc2 = -0.0001676; cc3 = -0.03953; cc4 = -2.223; cc5 = 5935 FOR OUTPUT IN IN^3/MIN | ||||
Pdownstrem= 4950 !+0.01*Pchoke (psi) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | AirPumpLine%Pdownstrem= 4950 !+0.01*Pchoke (psi) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ||||
Qiter=5. !(gpm) | AirPumpLine%QITER=5. !(gpm) | ||||
! Q=0.0003585; true | ! Q=0.0003585; true | ||||
time=0 | AirPumpLine%TIME=0 | ||||
tol_air=0.05 | AirPumpLine%TOL_AIR=0.05 | ||||
AirPumpLine%alpha_Qair=0 | |||||
alpha_Qair=0 | AirPumpLine%alpha_timeair=0 | ||||
alpha_timeair=0 | AirPumpLine%alpha_Pdownstrem=AirPumpLine%Pdownstrem | ||||
alpha_Pdownstrem=Pdownstrem | AirPumpLine%alpha_diffpair=0 | ||||
alpha_diffpair=0 | AirPumpLine%alpha_lossesair=0 | ||||
alpha_lossesair=0 | |||||
@@ -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. | Choke%TotalStrokes1 =0. | ||||
TotalStrokes2 =0. | Choke%TotalStrokes2 =0. | ||||
endif | endif | ||||
endif | endif | ||||
!write(*,*) 'b)))' , ChokePanelStrokeResetSwitch | !write(*,*) 'b)))' , ChokePanelStrokeResetSwitch | ||||
TotalStrokes1= TotalStrokes1+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline | Choke%TotalStrokes1= Choke%TotalStrokes1+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline | ||||
TotalStrokes2= TotalStrokes2+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline | Choke%TotalStrokes2= Choke%TotalStrokes2+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline | ||||
IF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 1) THEN | IF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 1) THEN | ||||
ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP1SPMGauge)) | ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP1SPMGauge)) | ||||
ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(TotalStrokes1)) | ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(Choke%TotalStrokes1)) | ||||
ELSEIF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 2) THEN | ELSEIF (ChokeControlPanel%ChokePanelPumpSelectorSwitch == 2) THEN | ||||
ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP2SPMGauge)) | ChokeControlPanel%ChokePanelSPMCounter = real(nint(DataDisplayConsole%MP2SPMGauge)) | ||||
ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(TotalStrokes2)) | ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(Choke%TotalStrokes2)) | ||||
ELSE | ELSE | ||||
ChokeControlPanel%ChokePanelSPMCounter= real(nint(DataDisplayConsole%MP1SPMGauge+DataDisplayConsole%MP2SPMGauge)) | ChokeControlPanel%ChokePanelSPMCounter= real(nint(DataDisplayConsole%MP1SPMGauge+DataDisplayConsole%MP2SPMGauge)) | ||||
ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(TotalStrokes1+TotalStrokes2)) | ChokeControlPanel%ChokePanelTotalStrokeCounter = real(nint(Choke%TotalStrokes1+Choke%TotalStrokes2)) | ||||
ENDIF | ENDIF | ||||
! ChokePanelStrokeResetSwitch = 0 | ! ChokePanelStrokeResetSwitch = 0 | ||||
@@ -251,8 +251,8 @@ ReturnFlowRate=0. | |||||
GraphTotalStrokes=0. | GraphTotalStrokes=0. | ||||
TotalStrokes1 =0. | Choke%TotalStrokes1 =0. | ||||
TotalStrokes2 =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 (OldTotalOpenChokeArea <= 0.01 * Choke%ChokeAreaFullyOpen) OldTotalOpenChokeArea = 0.01 * Choke%ChokeAreaFullyOpen | ||||
IF (InstantaneousTotalOpenChokeArea <= 0.01 * ChokeAreaFullyOpen) THEN | IF (InstantaneousTotalOpenChokeArea <= 0.01 * Choke%ChokeAreaFullyOpen) THEN | ||||
WellToChokeManifoldOpen = .FALSE. | WellToChokeManifoldOpen = .FALSE. | ||||
OldTotalOpenChokeArea = 0.01 * ChokeAreaFullyOpen | OldTotalOpenChokeArea = 0.01 * Choke%ChokeAreaFullyOpen | ||||
!WRITE (*,*) ' Choke Controler Here 2' | !WRITE (*,*) ' Choke Controler Here 2' | ||||
ELSE IF (InstantaneousTotalOpenChokeArea > 0.5 * ChokeAreaFullyOpen .OR. WelltoPitsOpen) THEN | ELSE IF (InstantaneousTotalOpenChokeArea > 0.5 * Choke%ChokeAreaFullyOpen .OR. WelltoPitsOpen) THEN | ||||
! mud flows through well to bell nipple, or choke is rather open | ! mud flows through well to bell nipple, or choke is rather open | ||||
TotalOpenChokeArea = InstantaneousTotalOpenChokeArea | TotalOpenChokeArea = InstantaneousTotalOpenChokeArea | ||||
!WRITE (*,*) ' Choke Controler Here 1' | !WRITE (*,*) ' Choke Controler Here 1' | ||||
@@ -31,10 +31,10 @@ subroutine TD_BOPDiamCalculation | |||||
TD_BOPHeight(4) = BopStackSpecification%LowerRamHeight | TD_BOPHeight(4) = BopStackSpecification%LowerRamHeight | ||||
TD_BOPRamDiam(1) = IDAnnularfinal | TD_BOPRamDiam(1) = ShearRam%IDAnnularFinal | ||||
TD_BOPRamDiam(2) = IDPipeRam1final | TD_BOPRamDiam(2) = ShearRam%IDPipeRam1Final | ||||
TD_BOPRamDiam(3) = IDshearBopfinal | TD_BOPRamDiam(3) = ShearRam%IDshearBopFinal | ||||
TD_BOPRamDiam(4) = IDPipeRam2final | TD_BOPRamDiam(4) = ShearRam%IDPipeRam2Final | ||||
@@ -32,30 +32,30 @@ subroutine TD_HookLoadCalculation | |||||
!print* , 'TD_HookLoad1=' , TD_HookLoad | !print* , 'TD_HookLoad1=' , TD_HookLoad | ||||
if ( Drawworks%motion==1 ) then | if ( Drawworks%motion==1 ) then | ||||
if ( PipeRam1_Situation_forTD==1 ) then !Upper Ram | if ( PipeRam1%Situation_forTD==1 ) then !Upper Ram | ||||
TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag | TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag | ||||
end if | end if | ||||
if ( PipeRam2_Situation_forTD==1 ) then !Lower Ram | if ( PipeRam2%Situation_forTD==1 ) then !Lower Ram | ||||
TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag | TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag | ||||
end if | end if | ||||
if ( ShearBop_Situation_forTD==1 ) then !Blind Ram | if ( RamLine%ShearBop_Situation_forTD==1 ) then !Blind Ram | ||||
TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag !???????????????????? | TD_HookLoad = TD_HookLoad+BopStackSpecification%RamStringDrag !???????????????????? | ||||
end if | end if | ||||
if ( Annular_Situation_forTD==1 ) then !Annular Preventer | if ( Annular%Annular_Situation_forTD==1 ) then !Annular Preventer | ||||
TD_HookLoad = TD_HookLoad+(p_annular*BopStackSpecification%AnnularStringDrag) | TD_HookLoad = TD_HookLoad+(AnnularComputational%p_annular*BopStackSpecification%AnnularStringDrag) | ||||
end if | end if | ||||
else if ( Drawworks%motion==-1 ) then | else if ( Drawworks%motion==-1 ) then | ||||
if ( PipeRam1_Situation_forTD==1 ) then !Upper Ram | if ( PipeRam1%Situation_forTD==1 ) then !Upper Ram | ||||
TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag | TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag | ||||
end if | end if | ||||
if ( PipeRam2_Situation_forTD==1 ) then !Lower Ram | if ( PipeRam2%Situation_forTD==1 ) then !Lower Ram | ||||
TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag | TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag | ||||
end if | end if | ||||
if ( ShearBop_Situation_forTD==1 ) then !Blind Ram | if ( RamLine%ShearBop_Situation_forTD==1 ) then !Blind Ram | ||||
TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag !???????????????????? | TD_HookLoad = TD_HookLoad-BopStackSpecification%RamStringDrag !???????????????????? | ||||
end if | end if | ||||
if ( Annular_Situation_forTD==1 ) then !Annular Preventer | if ( Annular%Annular_Situation_forTD==1 ) then !Annular Preventer | ||||
TD_HookLoad = TD_HookLoad-(p_annular*BopStackSpecification%AnnularStringDrag) | TD_HookLoad = TD_HookLoad-(AnnularComputational%p_annular*BopStackSpecification%AnnularStringDrag) | ||||
end if | end if | ||||
end if | end if | ||||