|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731 |
- # 1 "/home/admin/SimulationCore2/FluidFlow/Well_Pressure_Data_Transfer.f90"
- SUBROUTINE WellPressureDataTransfer
-
- !! This subroutine calculates pressure distribution in well
- !! We divide well hydraulic system to 4 zones. 1- pump to string zone; this zone is horizontal
- !! 2- string zone; this zone includes drill pipes and collars and is vertical or neraly vertical
- !! 3- annulus zone; this zone includes annulus space between string and openhole or casing
- !! 4- Openhole zone; this zone includes spaces under bit to bottom of the wellbore
- !! The last two zone includes annulus space and open hole, are influenced by kicks and have crucial role in
- !! computing pressure distribution because reference point (back pressure in well head open condition
- !! and bottomhole pressure in well head closed condition) are in one of them. because of this, pressure
- !! distribution calculates in two subroutines : PressureAnnAndOHDistribution and PressurePumptoBitDistribution
- !! pressure change through well consist of pressure change due to friction, change of elevation and acceleration
- !! frictional pressure drop calculated by subroutine Sub_Press_Drop_Calculator
- !! This subroutine includes hydrostatic pressure and later will include effect of corss-section area change
- !! which causes acceleration or decceleration of flow
-
- USE FricPressDropVarsModule
- use MudSystemModule
- USE MudSystemVARIABLES
- use SimulationVariables !@@@
- USE GeoElements_FluidModule
- USE Fluid_Flow_Startup_Vars
- use KickVARIABLESModule
- ! USE CMudPropertiesVariables
- ! USE CBopStackVariables
- ! USE sROP_Variables
- ! USE CHOKEVARIABLES
- ! use CChokeManifoldVariables
- ! use SimulationVariables
- ! USE CBitProblemsVariables
- ! USE CChokeProblemsVariables
- ! USE CStringConfigurationVariables
- ! use CDataDisplayConsole
-
- IMPLICIT NONE
-
- INTEGER :: i , j
- REAL :: InstantaneousTotalOpenChokeArea , VolumeDensityProduct
-
- ChokeIsClosing = .FALSE.
- data%State%FricPressDrop%Kchoke = 0.0
- data%State%FricPressDrop%KBit = 0.0
-
-
- !!!!!!!!!!!!!!!! bit is present
- BitTrue = data%Configuration%StringConfiguration%StringConfigurations(1)%ComponentType == Bit_ComponentType ! Bit_ComponentType = 0
- BitCd = 0.98
- BitNozzDia = 32.0 * data%Configuration%StringConfiguration%BitDefinition%BitNozzleSize ! nozzle diameter in 1/32 in
- BitNozzleArea = 7.6699E-4 * BitNozzDia**2
- BitNozzleNum = data%Configuration%StringConfiguration%BitDefinition%BitNozzleNo - data%State%FricPressDrop%BitJetsPlugged * data%problems%BitProblems%PlugJetsCount
- BitTotNozzArea = BitNozzleNum * BitNozzleArea + 0.5 * data%State%FricPressDrop%BitJetsWashedOut * data%problems%BitProblems%JetWashoutCount * BitNozzleArea
- IF (BitNozzleNum == 0) THEN
- data%State%FricPressDrop%BitTotallyPluged = .TRUE.
- ELSE
- data%State%FricPressDrop%BitTotallyPluged = .FALSE.
- END IF
-
- data%State%FricPressDrop%FloatValveIn = data%Configuration%StringConfiguration%BitDefinition%FloatValve
- !FloatValveOpen = .TRUE.
- !IF (JetWashoutCount > 0 .OR. PlugJetsCount > 0) THEN
- ! WRITE (*,*) 'PlugJetsCount' , PlugJetsCount
- ! WRITE (*,*) 'JetWashoutCount', JetWashoutCount
- !END IF
-
- !WRITE (*,*) 'BitNozzleNum', BitNozzleNum
- !WRITE (*,*) 'BitTotNozzArea', BitTotNozzArea
- !WRITE (*,*) 'Float Valve??', BitDefinition%FloatValve
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- IF(ALLOCATED(GasPocketFlowEl)) DEALLOCATE(GasPocketFlowEl)
-
- !!!!!!!!!!!!!!!!!!!! Well Head Condition ( Open or Closed )
- ChokeKroneckerDelta = 0
-
-
- IF (data%State%MudSystem%WellToPitsOpen == .FALSE. .AND. data%State%MudSystem%WellToChokeManifoldOpen == .FALSE.) THEN
-
- WellHeadOpen = .FALSE.
- !WRITE (*,*) ' Well Head is closed '
- ELSE
- WellHeadOpen = .TRUE.
- END IF
-
- IF (data%State%MudSystem%WellToPitsOpen == .FALSE. .AND. data%State%MudSystem%WellToChokeManifoldOpen) ChokeKroneckerDelta = 1
- !WRITE (*,*) ' WelltoPitsOpen=' , WelltoPitsOpen, 'WellToChokeManifoldOpen= ' , WellToChokeManifoldOpen
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-
- data%State%FricPressDrop%NoHorizontalEl = data%State%MudSystem%NoHorizontalMudElements
- data%State%FricPressDrop%NoStringEl = data%State%MudSystem%NoStringMudElements
- data%State%FricPressDrop%NoAnnulusEl = data%State%MudSystem%NoCasingMudElements
- data%State%FricPressDrop%NoWellToChokeEl = 0
- IF (ChokeKroneckerDelta == 1) data%State%FricPressDrop%NoWellToChokeEl = data%State%MudSystem%ChokeLine_Density%Length()
- data%State%FricPressDrop%NoOpenHoleEl = data%State%MudSystem%NoBottomHoleMudElements
- data%State%FricPressDrop%NumbEl = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + data%State%FricPressDrop%NoAnnulusEl + data%State%FricPressDrop%NoWellToChokeEl + data%State%FricPressDrop%NoOpenHoleEl
- IF(ALLOCATED(FlowEl)) then
- DEALLOCATE(FlowEl)
- endif
- ALLOCATE(FlowEl(data%State%FricPressDrop%NumbEl))
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Transfering Data from module:MudSystemVARIABLES to module:FricPressDropVars to calculate Pressure distribution in flow path
- !!!!!!!!!!!!!!!!!!!!!!! Horizontal line
- !WRITE (*,*) 'H', NoHorizontalEl
- DO i = 1 , data%State%FricPressDrop%NoHorizontalEl
- ! WRITE (*,*) 'H , i' , i
- FlowEl(i)%StartX = data%State%MudSystem%Xstart_MudElement%Array(i)
- !WRITE (*,*) 'StartX', FlowEl(i)%StartX
- FlowEl(i)%EndX = data%State%MudSystem%Xend_MudElement%Array(i)
- !WRITE (*,*) 'Endx', FlowEl(i)%EndX
- FlowEl(i)%StartTVD = 0.d0
- FlowEl(i)%EndTVD = 0.d0
- FlowEl(i)%Id = 0.0
- FlowEl(i)%Od = data%State%MudSystem%PipeOD_MudElement%Array(i)
- FlowEl(i)%density = data%State%MudSystem%Density_MudElement%Array(i)
-
- FlowEl(i)%Dhyd = FlowEl(i)%Od
- FlowEl(i)%Length = ABS(FlowEl(i)%EndX - FlowEl(i)%StartX)
- FlowEl(i)%DepthDiff = 0.d0
- FlowEl(i)%Volume = PI / 4.0 * FlowEl(i)%Od**2 * REAL(FlowEl(i)%Length) / Convfttoinch**2
- IF (data%State%MudSystem%MudType_MudElement%Array(i) == 0) THEN ! = 0 for mud, = 1 for gas kick, = 4 for air
- FlowEl(i)%MaterialType = 0
- ELSE IF (data%State%MudSystem%MudType_MudElement%Array(i) == 4) THEN
- FlowEl(i)%MaterialType = 4
- ELSE
- FlowEl(i)%MaterialType = 1
- END IF
-
- FlowEl(i)%dPdLgrav = 0.0
- FlowEl(i)%StaticPressDiff = 0.0
-
-
-
- END DO
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!!!!!!!!!!!! String
- data%State%FricPressDrop%StringFirstEl = data%State%FricPressDrop%NoHorizontalEl + 1
- data%State%FricPressDrop%StringLastEl = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl
- DO i = data%State%FricPressDrop%NoHorizontalEl + 1 , data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl
- ! WRITE (*,*) 'ST , i' , i
- FlowEl(i)%StartX = data%State%MudSystem%Xstart_MudElement%Array(i)
- !WRITE (*,*) 'StartX', FlowEl(i)%StartX
- FlowEl(i)%EndX = data%State%MudSystem%Xend_MudElement%Array(i)
- !WRITE (*,*) 'Endx', FlowEl(i)%EndX
- FlowEl(i)%StartTVD = data%State%MudSystem%TVDstart_MudElement%Array(i)
- !WRITE (*,*) 'StartTVD', FlowEl(i)%StartTVD
- FlowEl(i)%EndTVD = data%State%MudSystem%TVDend_MudElement%Array(i)
- !WRITE (*,*) 'EndTVD', FlowEl(i)%EndTVD
- FlowEl(i)%Id = 0.0
- !WRITE (*,*) 'Id', FlowEl(i)%Id
- FlowEl(i)%Od = data%State%MudSystem%PipeOD_MudElement%Array(i)
- !WRITE (*,*) 'Od', FlowEl(i)%Od
- FlowEl(i)%Density = data%State%MudSystem%Density_MudElement%Array(i)
- !WRITE (*,*) 'Density', FlowEl(i)%Density
-
-
- FlowEl(i)%Dhyd = FlowEl(i)%Od
- FlowEl(i)%Length = ABS(FlowEl(i)%EndX - FlowEl(i)%StartX)
- !WRITE (*,*) 'Length', FlowEl(i)%Length
- FlowEl(i)%DepthDiff = ABS(FlowEl(i)%StartTVD - FlowEl(i)%EndTVD)
- !WRITE (*,*) 'DepthDiff', FlowEl(i)%DepthDiff
- FlowEl(i)%Area = PI / 4.0 * FlowEl(i)%Od**2 / Convfttoinch**2
- FlowEl(i)%Volume = FlowEl(i)%Area * REAL(FlowEl(i)%Length)
- IF (data%State%MudSystem%MudType_MudElement%Array(i) == 0) THEN ! = 0 for mud, = 1 for gas kick, = 4 for air
- FlowEl(i)%MaterialType = 0
- ELSE IF (data%State%MudSystem%MudType_MudElement%Array(i) == 4) THEN
- FlowEl(i)%MaterialType = 4
- ELSE
- FlowEl(i)%MaterialType = 1
- END IF
-
- IF (FlowEl(i)%MaterialType == 1 .OR. FlowEl(i)%MaterialType == 4) THEN
- FlowEl(i)%dPdLgrav = 0.0
- ELSE
- FlowEl(i)%dPdLgrav = 0.052 * FlowEl(i)%Density
- END IF
- FlowEl(i)%StaticPressDiff = FlowEl(i)%dPdLgrav * REAL(FlowEl(i)%DepthDiff)
-
-
-
-
- END DO
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!! Annulus
- data%State%FricPressDrop%AnnulusFirstEl = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + 1
- data%State%FricPressDrop%AnnulusLastEl = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + data%State%FricPressDrop%NoAnnulusEl
- DO i = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + 1 , data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + data%State%FricPressDrop%NoAnnulusEl
- ! WRITE (*,*) 'AN , i' , i
- FlowEl(i)%StartX = data%State%MudSystem%Xstart_MudElement%Array(i)
- !WRITE (*,*) 'StartX', FlowEl(i)%StartX
- FlowEl(i)%EndX = data%State%MudSystem%Xend_MudElement%Array(i)
- !WRITE (*,*) 'Endx', FlowEl(i)%EndX
- FlowEl(i)%StartTVD = data%State%MudSystem%TVDstart_MudElement%Array(i)
- FlowEl(i)%EndTVD = data%State%MudSystem%TVDend_MudElement%Array(i)
- FlowEl(i)%Id = data%State%MudSystem%PipeID_MudElement%Array(i)
- FlowEl(i)%Od = data%State%MudSystem%PipeOD_MudElement%Array(i)
- FlowEl(i)%Density = data%State%MudSystem%Density_MudElement%Array(i)
-
- FlowEl(i)%Dhyd = FlowEl(i)%Od - FlowEl(i)%Id
- FlowEl(i)%Length = ABS(FlowEl(i)%EndX - FlowEl(i)%StartX)
- FlowEl(i)%DepthDiff = ABS(FlowEl(i)%StartTVD - FlowEl(i)%EndTVD)
- FlowEl(i)%Area = PI / 4.0 * (FlowEl(i)%Od**2 - FlowEl(i)%Id**2) / Convfttoinch**2
- FlowEl(i)%Volume = FlowEl(i)%Area * REAL(FlowEl(i)%Length)
- IF (data%State%MudSystem%MudType_MudElement%Array(i) == 0) THEN ! = 0 for mud, = 1 for gas kick, = 4 for air
- FlowEl(i)%MaterialType = 0
- ELSE IF (data%State%MudSystem%MudType_MudElement%Array(i) == 4) THEN
- FlowEl(i)%MaterialType = 4
- ELSE
- FlowEl(i)%MaterialType = 1
- END IF
-
- IF (FlowEl(i)%MaterialType == 1 .OR. FlowEl(i)%MaterialType == 4) THEN
- FlowEl(i)%dPdLgrav = 0.0
- ELSE
- FlowEl(i)%dPdLgrav = 0.052 * FlowEl(i)%density
- END IF
- FlowEl(i)%StaticPressDiff = FlowEl(i)%dPdLgrav * REAL(FlowEl(i)%DepthDiff)
-
-
-
- END DO
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!! Well to choke manifold path
- j = 1
- DO i = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + data%State%FricPressDrop%NoAnnulusEl + 1 , data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + data%State%FricPressDrop%NoAnnulusEl + data%State%FricPressDrop%NoWelltoChokeEl
- ! WRITE (*,*) 'CH , i' , i
- FlowEl(i)%StartX = data%State%MudSystem%ChokeLine_Mud_Backhead_X%Array(j)
- !WRITE (*,*) 'StartX', FlowEl(i)%StartX
- FlowEl(i)%EndX = data%State%MudSystem%ChokeLine_Mud_Forehead_X%Array(j)
- !WRITE (*,*) 'Endx', FlowEl(i)%EndX
- FlowEl(i)%StartTVD = 0.d0
- FlowEl(i)%EndTVD = 0.d0
- FlowEl(i)%Id = 0.0
- FlowEl(i)%Od = data%Configuration%BopStack%ChokeLineId
- FlowEl(i)%density = data%State%MudSystem%ChokeLine_Density%Array(j)
-
- FlowEl(i)%Dhyd = FlowEl(i)%Od
- FlowEl(i)%Length = ABS(FlowEl(i)%EndX - FlowEl(i)%StartX)
- FlowEl(i)%DepthDiff = 0.d0
- FlowEl(i)%Area = PI / 4.0 * FlowEl(i)%Od**2 / Convfttoinch**2
- FlowEl(i)%Volume = FlowEl(i)%Area * REAL(FlowEl(i)%Length)
- IF (data%State%MudSystem%ChokeLine_MudOrKick%Array(j) == 0 .OR. data%State%MudSystem%ChokeLine_MudOrKick%Array(j) == 4) THEN ! = 0 for mud, = 1 for gas kick, = 4 for air
- FlowEl(i)%MaterialType = data%State%MudSystem%ChokeLine_MudOrKick%Array(j)
- ELSE
- FlowEl(i)%MaterialType = 1
- END IF
-
-
- FlowEl(i)%dPdLgrav = 0.0
- FlowEl(i)%StaticPressDiff = 0.0
-
- !WRITE (*,*) 'Ch density, length, Type' , i, FlowEl(i)%density , FlowEl(i)%length, FlowEl(i)%MaterialType
-
- j = j + 1
-
- END DO
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!! Open Hole
- data%State%FricPressDrop%OpenholeFirstEl = data%State%FricPressDrop%NoHorizontalEl + data%State%FricPressDrop%NoStringEl + data%State%FricPressDrop%NoAnnulusEl + data%State%FricPressDrop%NoWelltoChokeEl + 1
- j = 1
- DO i = data%State%FricPressDrop%OpenholeFirstEl , data%State%FricPressDrop%NumbEl ! = NoHorizontalEl + NoStringEl + NoCasingEl + NoOpenHoleEl
- ! WRITE (*,*) 'OP , i' , i
- FlowEl(i)%StartX = data%State%MudSystem%Xstart_OpMudElement%Array(j)
- !WRITE (*,*) 'StartX', FlowEl(i)%StartX
- FlowEl(i)%EndX = data%State%MudSystem%Xend_OpMudElement%Array(j)
- !WRITE (*,*) 'Endx', FlowEl(i)%EndX
- FlowEl(i)%StartTVD = data%State%MudSystem%TVDstart_OpMudElement%Array(j)
- FlowEl(i)%EndTVD = data%State%MudSystem%TVDend_OpMudElement%Array(j)
- FlowEl(i)%Id = 0.0
- FlowEl(i)%Od = data%State%MudSystem%PipeOD_OpMudElement%Array(j)
- FlowEl(i)%density = data%State%MudSystem%Density_OpMudElement%Array(j)
- FlowEl(i)%MaterialType = data%State%MudSystem%MudTypeOp_MudElement%Array(j) ! = 0 for mud, = 1 for gas kick, = 4 for air
-
- FlowEl(i)%Dhyd = FlowEl(i)%Od
- FlowEl(i)%Length = ABS(FlowEl(i)%EndX - FlowEl(i)%StartX)
- FlowEl(i)%DepthDiff = ABS(FlowEl(i)%StartTVD - FlowEl(i)%EndTVD)
- FlowEl(i)%Area = PI / 4.0 * FlowEl(i)%Od**2 / Convfttoinch**2
- FlowEl(i)%Volume = FlowEl(i)%Area * REAL(FlowEl(i)%Length)
- IF (data%State%MudSystem%MudTypeOp_MudElement%Array(j) == 0) THEN ! = 0 for mud, = 1 for gas kick, = 4 for air
- FlowEl(i)%MaterialType = 0
- ELSE IF (data%State%MudSystem%MudTypeOp_MudElement%Array(j) == 4) THEN
- FlowEl(i)%MaterialType = 4
- ELSE
- FlowEl(i)%MaterialType = 1
- END IF
-
- j = j + 1
- IF (FlowEl(i)%MaterialType == 1) THEN
- FlowEl(i)%dPdLgrav = 0.0
- ELSE
- FlowEl(i)%dPdLgrav = 0.052 * FlowEl(i)%density
- END IF
- FlowEl(i)%StaticPressDiff = FlowEl(i)%dPdLgrav * REAL(FlowEl(i)%DepthDiff)
-
- !WRITE (*,*) 'O density, length, Type of ith element' , i, FlowEl(i)%density , FlowEl(i)%length, FlowEl(i)%MaterialType
-
- END DO
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!!!!! Mud Element Viscosity Calculation
-
- DO i = 1 , data%State%FricPressDrop%NumbEl
- IF (FlowEl(i)%MaterialType /= 0) CYCLE
- IF (FlowEl(i)%density < 8.33) THEN
- WRITE (*,*) 'H, S, A, Ch, O', data%State%FricPressDrop%NoHorizontalEl , data%State%FricPressDrop%StringFirstEl , data%State%FricPressDrop%AnnulusFirstEl , data%State%FricPressDrop%NoWellToChokeEl , data%State%FricPressDrop%OpenHoleFirstEl
-
- WRITE (*,*) 'Element No, Volume(gal), Density(ppg), Type'
- DO j = 1 , data%State%FricPressDrop%NumbEl
- WRITE (*,*) j, FlowEl(j)%Volume * ConvFt3toUSGal , FlowEl(j)%Density, FlowEl(j)%MaterialType
- END DO
-
- CALL ErrorStop('Density below water density (8.33)', i)
- CYCLE
- END IF
-
- FlowEl(i)%Theta600 = Theta600Refrence + 11.0 * (MAX(FlowEl(i)%density , 8.33) - DensityRefrence)
- FlowEl(i)%Theta300 = Theta300Refrence + 6.0 * (MAX(FlowEl(i)%density , 8.33) - DensityRefrence)
- !WRITE (*,*) 'i, Theta600, Theta600', i, FlowEl(i)%Theta600, FlowEl(i)%Theta300
- END DO
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-
- FlowEl(:)%FlowRate = 0.0
- FlowEl(:)%StartPress = 0.0
- FlowEl(:)%EndPress = 0.0
-
- !WRITE (*,*) 'NoGasPocket=' , SIZE(GasPocketWeight%Array)
-
-
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- data%State%MudSystem%OpenArea32 = ((data%Equipments%ChokeManifold%LeftManualChoke * (1.0 - data%State%FricPressDrop%ManChoke1Plug * REAL(data%problems%ChokeProblems%ManualChoke1PluggedPercent)) / 100.0) + 0.5 * data%State%FricPressDrop%ManChoke1Washout) * data%State%Choke%ChokeAreaFullyOpen
- data%State%MudSystem%OpenArea33 = data%State%CHOOKE(1)%AreaChokeFinal * Convfttoinch**2 ! (1.d0 - data%State%CHOOKE(1)%PercentClose) * ChokeAreaFullyOpen
- data%State%MudSystem%OpenArea34 = data%State%CHOOKE(2)%AreaChokeFinal * Convfttoinch**2 ! (1.d0 - data%State%CHOOKE(2)%PercentClose) * ChokeAreaFullyOpen
- data%State%MudSystem%OpenArea35 = ((data%Equipments%ChokeManifold%RightManualChoke * (1.0 - data%State%FricPressDrop%ManChoke2Plug * REAL(data%problems%ChokeProblems%ManualChoke2PluggedPercent)) / 100.0) + 0.5 * data%State%FricPressDrop%ManChoke2Washout) * data%State%Choke%ChokeAreaFullyOpen
- !write(*,*) 'OpenArea32=' , OpenArea32, active32, ManChoke1Plug, ManualChoke1PluggedPercent, ManChoke1Washout
- !write(*,*) 'OpenArea33=' , OpenArea33, active33
- !write(*,*) 'OpenArea34=' , OpenArea34, active34, !HydraulicChoke2PluggedPercent
- !write(*,*) 'OpenArea35=' , OpenArea35, active35, ManChoke2Plug, ManualChoke2PluggedPercent, ManChoke2Washout
- InstantaneousTotalOpenChokeArea = data%State%MudSystem%OpenArea32 * active32 + data%State%MudSystem%OpenArea33 * active33 + data%State%MudSystem%OpenArea34 * active34 + data%State%MudSystem%OpenArea35 * active35 + data%State%FricPressDrop%ChokeBypassArea * active29
- data%State%FricPressDrop%OldTotalOpenChokeArea = data%State%FricPressDrop%TotalOpenChokeArea
- !WRITE (*,*) 'Instantaneous / Old TotalOpenChokeArea', InstantaneousTotalOpenChokeArea, OldTotalOpenChokeArea
- IF (data%State%FricPressDrop%OldTotalOpenChokeArea <= 0.01 * data%State%Choke%ChokeAreaFullyOpen) data%State%FricPressDrop%OldTotalOpenChokeArea = 0.01 * data%State%Choke%ChokeAreaFullyOpen
- IF (InstantaneousTotalOpenChokeArea <= 0.01 * data%State%Choke%ChokeAreaFullyOpen) THEN
- data%State%MudSystem%WellToChokeManifoldOpen = .FALSE.
- data%State%FricPressDrop%OldTotalOpenChokeArea = 0.01 * data%State%Choke%ChokeAreaFullyOpen
- !WRITE (*,*) ' Choke Controler Here 2'
-
- ELSE IF (InstantaneousTotalOpenChokeArea > 0.5 * data%State%Choke%ChokeAreaFullyOpen .OR. data%State%MudSystem%WellToPitsOpen) THEN
- ! mud flows through well to bell nipple, or choke is rather open
- data%State%FricPressDrop%TotalOpenChokeArea = InstantaneousTotalOpenChokeArea
- !WRITE (*,*) ' Choke Controler Here 1'
- ELSE
- IF (InstantaneousTotalOpenChokeArea > data%State%FricPressDrop%OldTotalOpenChokeArea) THEN
- data%State%FricPressDrop%TotalOpenChokeArea = MIN(1.1 * data%State%FricPressDrop%OldTotalOpenChokeArea , InstantaneousTotalOpenChokeArea)
- WRITE (*,*) ' Choke is opening' !, TotalOpenChokeArea, OldTotalOpenChokeArea, InstantaneousTotalOpenChokeArea
- ELSE IF (InstantaneousTotalOpenChokeArea < data%State%FricPressDrop%OldTotalOpenChokeArea) THEN
- data%State%FricPressDrop%TotalOpenChokeArea = MAX(0.9 * data%State%FricPressDrop%OldTotalOpenChokeArea , InstantaneousTotalOpenChokeArea)
- WRITE (*,*) ' Choke is closing' !, TotalOpenChokeArea, OldTotalOpenChokeArea, InstantaneousTotalOpenChokeArea
- ELSE
- data%State%FricPressDrop%TotalOpenChokeArea = InstantaneousTotalOpenChokeArea
- END IF
- END IF
- !WRITE (*,*) 'TotalOpenChokeArea=', TotalOpenChokeArea
-
-
-
-
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!!!!!!! Well Head Condition ( Open or Closed )
- ChokeKroneckerDelta = 0
- !WRITE (*,*) ' WelltoPitsOpen = ', WelltoPitsOpen
- !WRITE (*,*) ' WellToChokeManifoldOpen = ', WellToChokeManifoldOpen
- IF (data%State%MudSystem%WellToPitsOpen == .FALSE. .AND. data%State%MudSystem%WellToChokeManifoldOpen == .FALSE.) THEN
- !WRITE (*,*) ' WelltoPitsOpen = ', WelltoPitsOpen
- !WRITE (*,*) ' WellToChokeManifoldOpen = ', WellToChokeManifoldOpen
-
- WellHeadOpen = .FALSE.
- !WRITE (*,*) ' Well Head is closed '
- ELSE
- WellHeadOpen = .TRUE.
- END IF
-
- IF (data%State%MudSystem%WellToPitsOpen == .FALSE. .AND. data%State%MudSystem%WellToChokeManifoldOpen) ChokeKroneckerDelta = 1
- !WRITE (*,*) ' WelltoPitsOpen=' , WelltoPitsOpen, 'WellToChokeManifoldOpen= ' , WellToChokeManifoldOpen
- !WRITE (*,*) 'WellToChokeOpen , WellToChokeWasOpen', WellToChokeManifoldOpen, WellToChokeManifoldWasOpen
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- IF (NoGasPocket > 0) THEN
- IF (data%State%MudSystem%Choke_Kick_Saved_Volume_Final > 0.d0) THEN
- !WRITE (*,*) 'Choke_Kick_Saved_Volume_Final=', Choke_Kick_Saved_Volume_Final, (GasPocketModifiedVol%Array(NoGasPocket) * Convft3ToUSgal)
- ExitMass = REAL(data%State%MudSystem%Choke_Kick_Saved_Volume_Final / (GasPocketModifiedVol%Array(NoGasPocket) * Convft3ToUSgal)) * GasPocketWeight%Array(NoGasPocket)
- !IF (NoGasPocket > 1) ExitMass = ExitMass + (SUM(GasPocketDeltaVol%Array(1 : NoGasPocket - 1)) / GasPocketNewVol%Array(NoGasPocket)) * GasPocketWeight%Array(NoGasPocket)
- !WRITE (*,*) 'Total Exit mass=' , ExitMass !, DeltaVolumePipe, data%State%MudSystem%StringFlowRate * dt / ConvMinToSec
- IF (FlowEl(data%State%FricPressDrop%OpenholeFirstEl - 1)%MaterialType /= 1) THEN
- CALL RemoveGasPocket(NoGasPocket)
- WRITE (*,*) 'Choke_Kick_Saved_Volume_Final=', data%State%MudSystem%Choke_Kick_Saved_Volume_Final
- END IF
-
- END IF
-
-
- !NoGasPocket = SIZE(GasPocketWeight%Array)
- IF (NoGasPocket > 0) CALL GasPocketFlowElementTransformer
- END IF
-
- IF (data%State%FricPressDrop%NoWelltoChokeEl > 0) THEN
- OldChokeDensity = ChokeDensity
- VolumeDensityProduct = 0.0
- Do i = data%State%FricPressDrop%AnnulusLastEl + 1 , data%State%FricPressDrop%OpenholeFirstEl - 1
- VolumeDensityProduct = VolumeDensityProduct + ((MAX(FlowEl(i)%Density , ChokeMinDensity)) * FlowEl(i)%Volume)
- End Do
- ChokeDensity = VolumeDensityProduct / SUM(FlowEl(data%State%FricPressDrop%AnnulusLastEl + 1 : data%State%FricPressDrop%OpenholeFirstEl - 1)%Volume)
-
- !WRITE (*,*) 'ChokeDensity=', ChokeDensity
- data%State%FricPressDrop%Kchoke = (ChokeDensity / ((2.0 * 89158.0) * (0.26 * 0.61 * data%State%FricPressDrop%TotalOpenChokeArea)**2)) * 4.d0 ! *4.d0: seyyed gofte
- END IF
-
- IF (data%State%FricPressDrop%BitTotallyPluged == .FALSE.) THEN
- data%State%FricPressDrop%KBit = FlowEl(data%State%FricPressDrop%StringLastEl)%density / 12042.0 / BitCd**2 / BitTotNozzArea**2
- END IF
-
-
-
- END SUBROUTINE WellPressureDataTransfer
-
-
- SUBROUTINE GasPocketFlowElementTransformer
-
- !! This Subroutine makes relationship between fluid flow elements and gas pocket elements
- !! The main variable of this subroutine is GasPocketFlowEl
- !! For each gas pocket, GasPocketFlowEl has a row, which columns are numbers of flow elements which are contains that gas pocket
- !! For example, if we have two gas pockets and they are in (7,8) and (12,3,4) flow elements respectively,
- !! GasPocketFlowEl(1,:) = [12 , 3 , 4] and GasPocketFlowEl(2,:) = [7 , 8 , 0]
-
-
- USE FricPressDropVarsModule
- USE MudSystemVARIABLES
- use SimulationVariables
- USE GeoElements_FluidModule
- USE Fluid_Flow_Startup_Vars
- use KickVARIABLESModule
- USE CMudPropertiesVariables
- USE CBopStackVariables
- USE CDownHoleVariables
- USE CError
-
- IMPLICIT NONE
-
- INTEGER :: i , j , k
- REAL :: PressureCorrection
- PressureCorrection = 1.0
-
- if (print_log) print *, "NoGasPocket = ",NoGasPocket
- ALLOCATE(GasPocketFlowEl(NoGasPocket , 1))
- GasPocketFlowEl(:,:) = 0
- !WRITE (*,*) 'NoGasPocket=' , NoGasPocket
-
- i = 1
- j = 1
- DO k = data%State%FricPressDrop%OpenholeFirstEl , data%State%FricPressDrop%NumbEl
- IF (FlowEl(k)%MaterialType == 1) THEN
- IF (j > 1) THEN
- IF (GasPocketFlowEl(i , j - 1) /= k - 1) THEN
- i = i + 1
- j = 1
- END IF
- END IF
-
- IF (SIZE(GasPocketFlowEl , dim = 2) < j) THEN
- if (print_log) print *, "GasPocketFlowEl = ",GasPocketFlowEl
- ALLOCATE(tempGasPocketFlowEl(SIZE(GasPocketFlowEl , dim = 1) , SIZE(GasPocketFlowEl , dim = 2)))
- tempGasPocketFlowEl = GasPocketFlowEl
- DEALLOCATE(GasPocketFlowEl)
- ALLOCATE(GasPocketFlowEl(SIZE(tempGasPocketFlowEl , dim = 1) , SIZE(tempGasPocketFlowEl , dim = 2) + 1))
- GasPocketFlowEl(: , 1 : SIZE(tempGasPocketFlowEl , dim = 2)) = tempGasPocketFlowEl
- GasPocketFlowEl(: , SIZE(GasPocketFlowEl , dim = 2)) = 0
- DEALLOCATE(tempGasPocketFlowEl)
- END IF
-
- GasPocketFlowEl(i , j) = k
- j = j + 1
- END IF
- END DO
- !WRITE (*,*) 'GasPocketFlowEl=' , GasPocketFlowEl
-
- DO k = data%State%FricPressDrop%AnnulusFirstEl , data%State%FricPressDrop%OpenholeFirstEl - 1
- IF (FlowEl(k)%MaterialType == 1) THEN
- IF (j > 1) THEN
- IF (k == data%State%FricPressDrop%AnnulusFirstEl .AND. GasPocketFlowEl(i , j - 1) == data%State%FricPressDrop%NumbEl) THEN
- !WRITE (*,*) 'Kick is Around Bit'
- ELSE IF (GasPocketFlowEl(i , j - 1) /= k - 1) THEN
- i = i + 1
- j = 1
- !WRITE (*,*) 'i, j, k', i, j, k, FlowEl(k)%MaterialType
- END IF
- END IF
-
- IF (j > SIZE(GasPocketFlowEl , dim = 2)) THEN
- if (print_log) print *, "GasPocketFlowEl = ",GasPocketFlowEl
- ALLOCATE(tempGasPocketFlowEl(SIZE(GasPocketFlowEl , dim = 1) , SIZE(GasPocketFlowEl , dim = 2)))
- tempGasPocketFlowEl = GasPocketFlowEl
- DEALLOCATE(GasPocketFlowEl)
- ALLOCATE(GasPocketFlowEl(SIZE(tempGasPocketFlowEl , dim = 1) , SIZE(tempGasPocketFlowEl , dim = 2) + 1))
- GasPocketFlowEl(: , 1 : SIZE(tempGasPocketFlowEl , dim = 2)) = tempGasPocketFlowEl
- GasPocketFlowEl(: , SIZE(GasPocketFlowEl , dim = 2)) = 0
- DEALLOCATE(tempGasPocketFlowEl)
- END IF
- IF (i > NoGasPocket) THEN
- WRITE (*,*) 'GasPocketFlowEl', GasPocketFlowEl
- WRITE (*,*) 'i , j , k', i, j, k
- WRITE (*,*) 'H, S, A, Ch, O', data%State%FricPressDrop%NoHorizontalEl , data%State%FricPressDrop%StringFirstEl , data%State%FricPressDrop%AnnulusFirstEl , data%State%FricPressDrop%NoWellToChokeEl , data%State%FricPressDrop%OpenHoleFirstEl
-
- WRITE (*,*) 'Element No, Volume(gal), Density(ppg), Type'
- DO j = 1 , data%State%FricPressDrop%NumbEl
- WRITE (*,*) j, FlowEl(j)%Volume * ConvFt3toUSGal , FlowEl(j)%Density, FlowEl(j)%MaterialType
- END DO
-
- CALL ErrorStop('Error in calculating GasPocketFlowEl')
- END IF
-
- GasPocketFlowEl(i , j) = k
- !WRITE (*,*) 'GasPocketFlowEl=' , GasPocketFlowEl
- j = j + 1
-
- END IF
- !IF (i > NoGasPocket) CALL ErrorStop('Error in GasPocketFlowEl' , i)
- END DO
-
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- GasPocketModifiedVol%Array(:) = 0.d0
-
- DO i = 1 , NoGasPocket
- !WRITE(*,*) 'GasPocketFlowEl Data' , i , GasPocketFlowEl(: , i)
- DO j = 1 , SIZE(GasPocketFlowEl , dim = 2)
- IF (GasPocketFlowEl(i , j) > 0) GasPocketModifiedVol%Array(i) = GasPocketModifiedVol%Array(i) + FlowEl(GasPocketFlowEl(i , j))%Volume
- END DO
- END DO
- i = data%State%FricPressDrop%AnnulusLastEl
- j = data%State%FricPressDrop%OpenholeFirstEl - 1
-
-
- GasPocketOldVol%Array(:) = GasPocketModifiedVol%Array(:)
-
- GasPocketOldPress%Array(:) = GasPocketNewPress%Array(:)
- !WRITE (*,*) ' GasPocketweight%Array(1)', GasPocketweight%Array(1)
- IF (GasPocketWeight%Array(1) < 0.0) CALL ErrorStop(' Error in Calculating Mass ' , KickmdotBCoef)
-
-
- GasPocketDensity%Array(:) = (GasPocketweight%Array(:) / GasPocketModifiedVol%Array(:)) / convft3toUSgal ! [lbm/ft^3 to ppg]
- DO i = 1 , SIZE(GasPocketFlowEl , dim = 1)
- DO j = 1 , SIZE(GasPocketFlowEl , dim = 2)
- IF (GasPocketFlowEl(i , j) > 0) FlowEl(GasPocketFlowEl(i , j))%Density = GasPocketDensity%Array(i)
- END DO
- END DO
-
-
- !WRITE (*,*) 'Kick density (ppg)=' , GasPocketDensity(1)
- data%Equipments%DownHole%InfluxRate = MAX(((KickmdotACoef * (KickmdotBCoef - GasPocketNewPress%Array(1))) / GasPocketDensity%Array(1) * ConvMinToSec) , 0.0)
- !WRITE (*,*) ' InfluxRate (gpm) =', InfluxRate
-
- i = data%State%FricPressDrop%OpenholeFirstEl - 1
- IF (data%State%MudSystem%Choke_Kick_Saved_Volume_Final > 0.d0 .AND. WellHeadOpen) THEN
- WRITE (*,*) 'Kick is exiting through the choke'
- !ExitMass = GasPocketDensity%Array(NoGasPocket) * (SUM(GasPocketFlowInduced%Array(:)) + (DeltaVolumePipe * ConvMinToSec / dt) + data%State%MudSystem%StringFlowRate) / ConvMinToSec * dt
- GasPocketWeight%Array(NoGasPocket) = GasPocketweight%Array(NoGasPocket) - ExitMass
- IF (GasPocketWeight%Array(NoGasPocket) > 0.0) THEN
- GasPocketOldPress%Array(NoGasPocket) = GasPocketWeight%Array(NoGasPocket) * data%State%GasType(KickGasType)%GasConstant * &
- GasPocketCompressibility%Array(NoGasPocket) * GasPocketNewTemp%Array(NoGasPocket) / GasPocketModifiedVol%Array(NoGasPocket)
- GasPocketDensity%Array(NoGasPocket) = (GasPocketweight%Array(NoGasPocket) / GasPocketModifiedVol%Array(NoGasPocket)) / convft3toUSgal
- GasPocketNewVol%Array(:) = GasPocketOldVol%Array(:)
- ELSE ! gas pocket is escaped from the well completely
- WRITE (*,*) ' Last Pocket Removed'
- WRITE (*,*) ' GasPocketFlowEl', GasPocketFlowEl
- CALL RemoveGasPocket(NoGasPocket)
-
- !WRITE (*,*) ' GasPocketFlowEl', GasPocketFlowEl
-
- END IF
-
- ELSE IF (NoGasPocket == 1 .OR. WellHeadOpen) THEN ! kick is not last element of choke line or well head is closed
- GasPocketNewPress%Array(:) = GasPocketNewPress%Array(:) * REAL(GasPocketNewVol%Array(:) / GasPocketOldVol%Array(:))
- GasPocketOldPress%Array(:) = GasPocketNewPress%Array(:)
- GasPocketNewVol%Array(:) = GasPocketOldVol%Array(:)
-
- ELSE ! Many gas pocket is in the well and well head is closed
-
- 103 FORMAT (2I, 4X, (F9.3), 5X, (F9.3))
-
- GasPocketNewPress%Array(NoGasPocket) = GasPocketOldPress%Array(NoGasPocket)
- GasPocketNewVol%Array(NoGasPocket) = GasPocketCompressibility%Array(NoGasPocket) * data%State%GasType(KickGasType)%GasConstant * &
- GasPocketNewTemp%Array(NoGasPocket) * GasPocketWeight%Array(NoGasPocket) / GasPocketNewPress%Array(NoGasPocket)
-
-
-
- !WRITE (*,*) 'Mid'
- DO WHILE (ABS(PressureCorrection * 10.0) > KickConvergenceTolerance)
- DO j = NoGasPocket - 1 , 1 , -1
- CALL KickFunctionsCalculator(GasPocketNewPress%Array(j) , j , 5)
- GasPocketNewVol%Array(j) = GasPocketCompressibility%Array(j) * data%State%GasType(KickGasType)%GasConstant * &
- GasPocketNewTemp%Array(j) * GasPocketWeight%Array(j) / GasPocketNewPress%Array(j)
- !WRITE (*,*) j, REAL(GasPocketNewPress%Array(j)), REAL(GasPocketNewVol%Array(j) * Convft3toUSgal)
- END DO
- PressureCorrection = (SUM(GasPocketNewVol%Array(:)) - SUM(GasPocketOldVol%Array(:))) / SUM(GasPocketNewVol%Array(:) / GasPocketNewPress%Array(:))
- GasPocketNewPress%Array(NoGasPocket) = GasPocketNewPress%Array(NoGasPocket) + PressureCorrection
- GasPocketNewVol%Array(NoGasPocket) = GasPocketCompressibility%Array(NoGasPocket) * data%State%GasType(KickGasType)%GasConstant * &
- GasPocketNewTemp%Array(NoGasPocket) * GasPocketWeight%Array(NoGasPocket) / GasPocketNewPress%Array(NoGasPocket)
- j = NoGasPocket
- !WRITE (*,*) j, REAL(GasPocketNewPress%Array(j)), REAL(GasPocketNewVol%Array(j) * Convft3toUSgal)
- END DO
-
- !WRITE (*,*) 'Pressure Correction = ', PressureCorrection
- WRITE (*,*) 'After'
- DO i = 1 , NoGasPocket
- WRITE (*,*) i, REAL(GasPocketNewPress%Array(i)), REAL((GasPocketNewVol%Array(i) * Convft3toUSgal))
- END DO
-
- GasPocketOldPress%Array(:) = GasPocketNewPress%Array(:)
-
- END IF
-
-
- IF (GasPocketFlowEl(NoGasPocket , 1) == 0) THEN
- CALL RemoveGasPocket(1)
-
- !WRITE (*,*) 'GasPocketFlowEl', GasPocketFlowEl
- WRITE (*,*) 'First Pocket Removed'
- !WRITE (*,*) 'GasPocketFlowEl', GasPocketFlowEl
- END IF
-
-
-
- data%Equipments%DownHole%KickVolume = INT(SUM(GasPocketOldVol%Array(:)) * convft3toUSgal / 42. * 10.0) / 10.0
-
-
- !WRITE (*,*) ' Gas Kick Pressure (psi) = ' , GasPocketOldPress(1) , INT((GasPocketNewVol(1) / GasPocketOldVol(1)) * 1000.d0) / 1000.d0
- !WRITE (*,*) ' b) GasPocketNewVol (ft^3) = ' , GasPocketOldVol(1)
-
-
-
- END SUBROUTINE
-
-
- SUBROUTINE RemoveGasPocket(ilocal)
-
- use KickVARIABLESModule
- USE MudSystemVARIABLES
- use SimulationVariables !@@@
-
- IMPLICIT NONE
-
- INTEGER :: ilocal
-
- DEALLOCATE(KickJacobian , OldKickJacobian , KickVandPFunction , KickUnknownVector , KickCorrectionVector)
-
-
- WRITE (*,*) 'Gas Pocket Will be Removed', ilocal
- call GasPocketOldPress%Remove(ilocal)
- call GasPocketNewPress%Remove(ilocal)
- call GasPocketOldTemp%Remove(ilocal)
- call GasPocketNewTemp%Remove(ilocal)
- call GasPocketOldVol%Remove(ilocal)
- call GasPocketNewVol%Remove(ilocal)
- call GasPocketDeltaVol%Remove(ilocal)
- call GasPocketFlowInduced%Remove(ilocal)
- call GasPocketModifiedVol%Remove(ilocal)
- call GasPocketWeight%Remove(ilocal)
- call GasPocketDensity%Remove(ilocal)
- call GasPocketCompressibility%Remove(ilocal)
-
- NoGasPocket = NoGasPocket - 1
-
- IF (NoGasPocket > 0) THEN
- if (print_log) print *, "2 * NoGasPocket , 2 * NoGasPocket = ",2 * NoGasPocket , 2 * NoGasPocket
- ALLOCATE(KickJacobian(2 * NoGasPocket , 2 * NoGasPocket) , OldKickJacobian(2 * NoGasPocket , 2 * NoGasPocket) , KickVandPFunction(2 * NoGasPocket))
- ALLOCATE(KickUnknownVector(2 * NoGasPocket) , KickCorrectionVector(2 * NoGasPocket))
-
- IF (ALLOCATED(GasPocketFlowEl)) THEN
- ALLOCATE(tempGasPocketFlowEl(NoGasPocket , SIZE(GasPocketFlowEl , dim = 2)))
- tempGasPocketFlowEl = GasPocketFlowEl(1 : NoGasPocket , :)
- DEALLOCATE(GasPocketFlowEl)
- ALLOCATE(GasPocketFlowEl(SIZE(tempGasPocketFlowEl , dim = 1) , SIZE(tempGasPocketFlowEl , dim = 2)))
- GasPocketFlowEl = tempGasPocketFlowEl
- DEALLOCATE(tempGasPocketFlowEl)
- END IF
-
- ELSE ! NoGasPocket = 0
-
-
- CALL GasPocketOldPress%Empty
- CALL GasPocketNewPress%Empty
- CALL GasPocketOldTemp%Empty
- CALL GasPocketNewTemp%Empty
- CALL GasPocketOldVol%Empty
- CALL GasPocketNewVol%Empty
- CALL GasPocketDeltaVol%Empty
- CALL GasPocketFlowInduced%Empty
- CALL GasPocketModifiedVol%Empty
- CALL GasPocketWeight%Empty
- CALL GasPocketDensity%Empty
-
- data%Equipments%DownHole%InfluxRate = 0.0
- data%Equipments%DownHole%KickVolume = 0.0
-
- END IF
-
- !WRITE (*,*) 'Gas Pocket Removed', NoGasPocket + 1, ALLOCATED(GasPocketWeight%Array)
-
- END SUBROUTINE
-
-
-
-
-
-
-
|