subroutine Kick_Expansion ! is called in subroutine CirculationCodeSelect Use GeoElements_FluidModule USE CMudPropertiesVariables USE MudSystemVARIABLES use SimulationVariables !@@@ use SimulationVariables use SimulationVariables !@ !use CTanks !@use ConfigurationVariables, TripTankVolume2 => data%Equipments%DrillingWatch%TripTankVolume, TripTankDensity2 => TripTankDensity USE sROP_Other_Variables USE sROP_Variables USE CReservoirVariables use KickVARIABLESModule implicit none real(8) ExpansionVolume !write(*,*) 'Kick Expansion' ExpansionVolume= GasPocketDeltaVol%Array(data%State%MudSystem%NewInfluxNumber - data%State%MudSystem%KickNumber + 1) * 7.48 IF ( data%State%MudSystem%Kickexpansion_DueToMudLost ) ExpansionVolume = ((data%State%MudSystem%Qlost/60.0d0)*data%State%MudSystem%DeltaT_Mudline) !============================== kick zire mate bashad ============================== if (data%State%MudSystem%Op_KickLoc > 0 .and. data%State%MudSystem%Ann_KickLoc==0) then ! .and. Op_KickLoc /= Op_MudOrKick%Length ()) then !write(*,*) 'expansion (1)' data%State%MudSystem%Op_MudDischarged_Volume%Array(data%State%MudSystem%Op_KickLoc)= data%State%MudSystem%Op_MudDischarged_Volume%Array(data%State%MudSystem%Op_KickLoc)+ ExpansionVolume !if (data%State%MUD(4)%Q > 0.) then ! ! if (abs(ChokeLine_Density%Array(1)-Ann_Density%Last())< DensityMixTol) then ! ChokeLine_MudDischarged_Volume%Array(1)= ChokeLine_MudDischarged_Volume%Array(1) + ExpansionVolume ! else ! call ChokeLine_Density%AddToFirst (Ann_Density%Last()) ! call ChokeLine_MudDischarged_Volume%AddToFirst (ExpansionVolume) ! farz kardam ke hameye hajm ro ba yek density ezafe konim ! call ChokeLine_Mud_Forehead_X%AddToFirst (0.0d0) ! call ChokeLine_Mud_Forehead_section%AddToFirst (1) ! call ChokeLine_Mud_Backhead_X%AddToFirst (0.0d0) ! call ChokeLine_Mud_Backhead_section%AddToFirst (1) ! call ChokeLine_RemainedVolume_in_LastSection%AddToFirst (0.0d0) ! call ChokeLine_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) ! call ChokeLine_MudOrKick%AddToFirst (Ann_MudOrKick%Last()) ! endif ! !endif endif !======================================================================================== !============================= foreheade dar fazaye annulus bashad =========================== ! agar kick be entehaye annulus reside bashe, expansion ra emaal nemikonim if (data%State%MudSystem%Ann_KickLoc > 0) then ! .and. Ann_KickLoc /= Ann_MudOrKick%Length ()) then !write(*,*) 'expansion (2)' !if ( sum(Ann_MudDischarged_Volume%Array(1:Ann_KickLoc)) + ExpansionVolume > sum(PipeSection_VolumeCapacity(F_StringIntervalCounts+1:NoPipeSections)) ) then ! agar khast az mate rad kone ! ExpansionVolume= sum(PipeSection_VolumeCapacity(F_StringIntervalCounts+1:NoPipeSections)) - sum(Ann_MudDischarged_Volume%Array(1:Ann_KickLoc)) !endif data%State%MudSystem%Ann_MudDischarged_Volume%Array(data%State%MudSystem%Ann_KickLoc)= data%State%MudSystem%Ann_MudDischarged_Volume%Array(data%State%MudSystem%Ann_KickLoc)+ ExpansionVolume !if (data%State%MUD(4)%Q > 0.) then ! ! ! if (abs(ChokeLine_Density%Array(1)-Ann_Density%Last())< DensityMixTol) then ! ChokeLine_MudDischarged_Volume%Array(1)= ChokeLine_MudDischarged_Volume%Array(1) + ExpansionVolume ! else ! call ChokeLine_Density%AddToFirst (Ann_Density%Last()) ! call ChokeLine_MudDischarged_Volume%AddToFirst (ExpansionVolume) ! farz kardam ke hameye hajm ro ba yek density ezafe konim ! call ChokeLine_Mud_Forehead_X%AddToFirst (0.0d0) ! call ChokeLine_Mud_Forehead_section%AddToFirst (1) ! call ChokeLine_Mud_Backhead_X%AddToFirst (0.0d0) ! call ChokeLine_Mud_Backhead_section%AddToFirst (1) ! call ChokeLine_RemainedVolume_in_LastSection%AddToFirst (0.0d0) ! call ChokeLine_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) ! call ChokeLine_MudOrKick%AddToFirst (Ann_MudOrKick%Last()) ! endif ! !endif endif !======================================================================================== !=============================== foreheade dar choke line bashad ============================= if (data%State%MudSystem%ChokeLine_KickLoc > 0 .and. data%State%MudSystem%Ann_KickLoc==0) then data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(data%State%MudSystem%ChokeLine_KickLoc)= data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(data%State%MudSystem%ChokeLine_KickLoc)+ ExpansionVolume endif !======================================================================================== !write(*,*) 'Expansion======0' ! !do imud=1, Ann_MudDischarged_Volume%Length() ! ! write(*,*) 'Ann:', imud, Ann_MudDischarged_Volume%Array(imud), Ann_Density%Array(imud) ,Ann_MudOrKick%Array(imud) ! !enddo ! ! do imud=1, Op_MudDischarged_Volume%Length() ! write(*,*) 'Op:', imud, Op_MudDischarged_Volume%Array(imud), Op_Density%Array(imud) ,Op_MudOrKick%Array(imud) ! enddo !write(*,*) '0======expansion' end subroutine Kick_Expansion subroutine Kick_Contraction ! is called in subroutine CirculationCodeSelect Use GeoElements_FluidModule USE CMudPropertiesVariables USE MudSystemVARIABLES use SimulationVariables !@@@ use SimulationVariables use SimulationVariables !@ !use CTanks !@use ConfigurationVariables, TripTankVolume2 => data%Equipments%DrillingWatch%TripTankVolume, TripTankDensity2 => TripTankDensity USE sROP_Other_Variables USE sROP_Variables USE CReservoirVariables use KickVARIABLESModule USE CError implicit none integer jelement, jmud, jsection,ielement,i integer jopelement,jopmud,jopsection real(8) ContractionVolume !********************************************************* ! contraction is always with pump flow !********************************************************* !write(*,*) 'Kick Contraction' !data%State%MUD(2)%Q= data%State%MPumps%Total_Pump_GPM data%State%MudSystem%StringFlowRate= data%State%MUD(2)%Q data%State%MudSystem%AnnulusFlowRate= data%State%MUD(2)%Q if (data%State%MudSystem%NewPipeFilling == 0) then data%State%MudSystem%StringFlowRate= 0. data%State%MudSystem%AnnulusFlowRate= 0. endif !if (WellHeadIsOpen) then ContractionVolume= - GasPocketDeltaVol%Array(data%State%MudSystem%NewInfluxNumber - data%State%MudSystem%KickNumber + 1) * 7.48 !else !ContractionVolume = (data%State%MudSystem%StringFlowRate/60.0d0)*DeltaT_Mudline + DeltaVolumePipe if (data%State%MudSystem%KickNumber == 1 .and. data%State%MudSystem%WellHeadIsOpen==.false.) ContractionVolume = ContractionVolume + (data%State%MudSystem%StringFlowRate/60.0d0)*data%State%MudSystem%DeltaT_Mudline + data%State%MudSystem%DeltaVolumePipe !endif !************************************************************************************************************************************************************************** ! pump mud is added in "pump&TripIn" code IF (data%State%MudSystem%Op_KickLoc > 0 .and. data%State%MudSystem%Ann_KickLoc == 0) then ! All of kick is under bit (iloc == 1) data%State%MudSystem%Op_MudDischarged_Volume%Array(data%State%MudSystem%Op_KickLoc)= data%State%MudSystem%Op_MudDischarged_Volume%Array(data%State%MudSystem%Op_KickLoc) - ( ContractionVolume ) ELSE IF (data%State%MudSystem%Op_KickLoc == 0 .AND. data%State%MudSystem%Ann_KickLoc > 0 .AND. data%State%MudSystem%ChokeLine_KickLoc == 0) THEN ! All of kick is an Annulus (iloc == 1) data%State%MudSystem%Ann_MudDischarged_Volume%Array(data%State%MudSystem%Ann_KickLoc)= data%State%MudSystem%Ann_MudDischarged_Volume%Array(data%State%MudSystem%Ann_KickLoc) - ( ContractionVolume ) ELSE IF (data%State%MudSystem%Ann_KickLoc == 0 .AND. data%State%MudSystem%ChokeLine_KickLoc > 0) THEN ! kick is in chokeline only data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(data%State%MudSystem%ChokeLine_KickLoc)= data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(data%State%MudSystem%ChokeLine_KickLoc) - ( ContractionVolume ) ELSE IF (data%State%MudSystem%Op_KickLoc > 0 .AND. data%State%MudSystem%Ann_KickLoc > 0) THEN ! Kick is around bit (iloc==2) if (data%State%MudSystem%Ann_MudDischarged_Volume%Array(1) > ContractionVolume ) then data%State%MudSystem%Ann_MudDischarged_Volume%Array(1)= data%State%MudSystem%Ann_MudDischarged_Volume%Array(1) - ( ContractionVolume ) elseif (data%State%MudSystem%Op_MudDischarged_Volume%Last() > ContractionVolume ) then data%State%MudSystem%Op_MudDischarged_Volume%Array(data%State%MudSystem%Op_MudDischarged_Volume%Length())= data%State%MudSystem%Op_MudDischarged_Volume%Array(data%State%MudSystem%Op_MudDischarged_Volume%Length()) - ( ContractionVolume ) else Call ErrorStop ('kick contraction error 1') endif ELSE IF (data%State%MudSystem%Ann_KickLoc > 0 .AND. data%State%MudSystem%ChokeLine_KickLoc > 0) THEN if (data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(1) > ContractionVolume ) then data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(1) = data%State%MudSystem%ChokeLine_MudDischarged_Volume%Array(1) - ( ContractionVolume ) elseif (data%State%MudSystem%Ann_MudDischarged_Volume%Last() > ContractionVolume ) then data%State%MudSystem%Ann_MudDischarged_Volume%Array(data%State%MudSystem%Ann_MudDischarged_Volume%Length())= data%State%MudSystem%Ann_MudDischarged_Volume%Array(data%State%MudSystem%Ann_MudDischarged_Volume%Length()) - ( ContractionVolume ) else Call ErrorStop ('kick contraction error 2') endif endif ! write(*,*) 'contract======0' !! !do imud=1, Ann_MudDischarged_Volume%Length() !! ! write(*,*) 'Ann:', imud, Ann_MudDischarged_Volume%Array(imud), Ann_Density%Array(imud) ,Ann_MudOrKick%Array(imud) !! !enddo !! ! do imud=1, Op_MudDischarged_Volume%Length() ! write(*,*) 'Op:', imud, Op_MudDischarged_Volume%Array(imud), Op_Density%Array(imud) ,Op_MudOrKick%Array(imud) ! enddo !write(*,*) '0======contract' end subroutine Kick_Contraction