@@ -2,19 +2,7 @@ module CMudPropertiesVariables | |||
use CIActionReference | |||
!**use CDoubleEventHandlerCollection | |||
implicit none | |||
public | |||
!pointers | |||
! procedure (ActionDouble), pointer :: ActiveMudVolumePtr | |||
! procedure (ActionDouble), pointer :: ActiveDensityPtr | |||
! procedure (ActionDouble), pointer :: ReserveMudVolumePtr | |||
! procedure (ActionDouble), pointer :: ReserveDensityPtr | |||
!**type(DoubleEventHandlerCollection) :: OnActiveMudVolumeChange | |||
!**type(DoubleEventHandlerCollection) :: OnActiveDensityChange | |||
!**type(DoubleEventHandlerCollection) :: OnReserveMudVolumeChange | |||
!**type(DoubleEventHandlerCollection) :: OnReserveDensityChange | |||
public | |||
!constants | |||
integer, parameter :: WaterBase_MudType = 0 | |||
integer, parameter :: OilBase_MudType = 1 | |||
@@ -51,60 +39,11 @@ module CMudPropertiesVariables | |||
real(8) :: ActiveTotalContents | |||
real(8) :: ActiveTotalContentsGal | |||
logical :: ActiveAutoDensity | |||
!real(8) :: ReserveTotalTankCapacity | |||
!real(8) :: ReserveTotalTankCapacityGal | |||
!real(8) :: ReserveSettledContents | |||
!real(8) :: ReserveSettledContentsGal | |||
!real(8) :: ReserveTotalContents | |||
!real(8) :: ReserveTotalContentsGal | |||
real(8) :: InitialTripTankMudVolume | |||
real(8) :: InitialTripTankMudVolumeGal | |||
real(8) :: PedalFlowMeter | |||
End type MudPropertiesType | |||
Type(MudPropertiesType)::MudProperties | |||
contains | |||
subroutine Set_ActiveMudVolume_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(MudProperties%ActiveMudVolume == v) return | |||
#endif | |||
MudProperties%ActiveMudVolume = v | |||
! if(associated(ActiveMudVolumePtr)) call ActiveMudVolumePtr(MudProperties%ActiveMudVolume) | |||
end subroutine | |||
subroutine Set_ActiveDensity_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(MudProperties%ActiveDensity == v) return | |||
#endif | |||
MudProperties%ActiveDensity = v | |||
! if(associated(ActiveDensityPtr)) call ActiveDensityPtr(MudProperties%ActiveDensity) | |||
end subroutine | |||
subroutine Set_ReserveMudVolume_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(MudProperties%ReserveMudVolume == v) return | |||
#endif | |||
MudProperties%ReserveMudVolume = v | |||
! if(associated(ReserveMudVolumePtr)) call ReserveMudVolumePtr(MudProperties%ReserveMudVolume) | |||
end subroutine | |||
subroutine Set_ReserveDensity_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(MudProperties%ReserveDensity == v) return | |||
#endif | |||
MudProperties%ReserveDensity = v | |||
! if(associated(ReserveDensityPtr)) call ReserveDensityPtr(MudProperties%ReserveDensity) | |||
end subroutine | |||
! Type(MudPropertiesType)::MudProperties | |||
@@ -0,0 +1,91 @@ | |||
module MudPropertiesModule | |||
use SimulationVariables | |||
use json_module | |||
implicit none | |||
contains | |||
subroutine MudPropertiesToJson(parent) | |||
type(json_value),pointer :: parent | |||
type(json_core) :: json | |||
type(json_value),pointer :: p | |||
! 1. create new node | |||
call json%create_object(p,'Mud') | |||
! 2. add member of data type to new node | |||
call json%add(p,"ActiveMudType",data%Configuration%Mud%ActiveMudType) | |||
call json%add(p,"ActiveRheologyModel",data%Configuration%Mud%ActiveRheologyModel) | |||
call json%add(p,"ActiveMudVolume",data%Configuration%Mud%ActiveMudVolume) | |||
call json%add(p,"ActiveMudVolumeGal",data%Configuration%Mud%ActiveMudVolumeGal) | |||
call json%add(p,"ActiveDensity",data%Configuration%Mud%ActiveDensity) | |||
call json%add(p,"ActivePlasticViscosity",data%Configuration%Mud%ActivePlasticViscosity) | |||
call json%add(p,"ActiveYieldPoint",data%Configuration%Mud%ActiveYieldPoint) | |||
call json%add(p,"ActiveThetaThreeHundred",data%Configuration%Mud%ActiveThetaThreeHundred) | |||
call json%add(p,"ActiveThetaSixHundred",data%Configuration%Mud%ActiveThetaSixHundred) | |||
call json%add(p,"ReserveMudType",data%Configuration%Mud%ReserveMudType) | |||
call json%add(p,"ReserveMudVolume",data%Configuration%Mud%ReserveMudVolume) | |||
call json%add(p,"ReserveMudVolumeGal",data%Configuration%Mud%ReserveMudVolumeGal) | |||
call json%add(p,"ReserveDensity",data%Configuration%Mud%ReserveDensity) | |||
call json%add(p,"ReservePlasticViscosity",data%Configuration%Mud%ReservePlasticViscosity) | |||
call json%add(p,"ReserveYieldPoint",data%Configuration%Mud%ReserveYieldPoint) | |||
call json%add(p,"ReserveThetaThreeHundred",data%Configuration%Mud%ReserveThetaThreeHundred) | |||
call json%add(p,"ReserveThetaSixHundred",data%Configuration%Mud%ReserveThetaSixHundred) | |||
call json%add(p,"ActiveTotalTankCapacity",data%Configuration%Mud%ActiveTotalTankCapacity) | |||
call json%add(p,"ActiveTotalTankCapacityGal",data%Configuration%Mud%ActiveTotalTankCapacityGal) | |||
call json%add(p,"ActiveSettledContents",data%Configuration%Mud%ActiveSettledContents) | |||
call json%add(p,"ActiveSettledContentsGal",data%Configuration%Mud%ActiveSettledContentsGal) | |||
call json%add(p,"ActiveTotalContents",data%Configuration%Mud%ActiveTotalContents) | |||
call json%add(p,"ActiveTotalContentsGal",data%Configuration%Mud%ActiveTotalContentsGal) | |||
call json%add(p,"ActiveAutoDensity",data%Configuration%Mud%ActiveAutoDensity) | |||
call json%add(p,"InitialTripTankMudVolume",data%Configuration%Mud%InitialTripTankMudVolume) | |||
call json%add(p,"InitialTripTankMudVolumeGal",data%Configuration%Mud%InitialTripTankMudVolumeGal) | |||
call json%add(p,"PedalFlowMeter",data%Configuration%Mud%PedalFlowMeter) | |||
! 3. add new node to parent | |||
call json%add(parent,p) | |||
end subroutine | |||
subroutine Set_ActiveMudVolume_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(data%Configuration%Mud%ActiveMudVolume == v) return | |||
#endif | |||
data%Configuration%Mud%ActiveMudVolume = v | |||
! if(associated(ActiveMudVolumePtr)) call ActiveMudVolumePtr(data%Configuration%Mud%ActiveMudVolume) | |||
end subroutine | |||
subroutine Set_ActiveDensity_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(data%Configuration%Mud%ActiveDensity == v) return | |||
#endif | |||
data%Configuration%Mud%ActiveDensity = v | |||
! if(associated(ActiveDensityPtr)) call ActiveDensityPtr(data%Configuration%Mud%ActiveDensity) | |||
end subroutine | |||
subroutine Set_ReserveMudVolume_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(data%Configuration%Mud%ReserveMudVolume == v) return | |||
#endif | |||
data%Configuration%Mud%ReserveMudVolume = v | |||
! if(associated(ReserveMudVolumePtr)) call ReserveMudVolumePtr(data%Configuration%Mud%ReserveMudVolume) | |||
end subroutine | |||
subroutine Set_ReserveDensity_StudentStation(v) | |||
implicit none | |||
real*8, intent(in) :: v | |||
#ifdef ExcludeExtraChanges | |||
if(data%Configuration%Mud%ReserveDensity == v) return | |||
#endif | |||
data%Configuration%Mud%ReserveDensity = v | |||
! if(associated(ReserveDensityPtr)) call ReserveDensityPtr(data%Configuration%Mud%ReserveDensity) | |||
end subroutine | |||
end module MudPropertiesModule |
@@ -9,18 +9,37 @@ module CPathGeneration | |||
type(json_value),pointer :: parent | |||
type(json_core) :: json | |||
type(json_value),pointer :: p | |||
type(json_value),pointer :: ppath,pitems,pdp,p | |||
integer::i | |||
! 1. create new node | |||
call json%create_object(p,'Path') | |||
call json%create_object(ppath,'Path') | |||
call json%create_array(pitems,'Items') | |||
do i=1,data%Configuration%Path%ItemCount | |||
call json%create_object(p,'') | |||
call json%add(p,"HoleType",data%Configuration%Path%items(i)%HoleType) | |||
call json%add(p,"Angle",data%Configuration%Path%items(i)%Angle) | |||
call json%add(p,"Length",data%Configuration%Path%items(i)%Length) | |||
call json%add(p,"FinalAngle",data%Configuration%Path%items(i)%FinalAngle) | |||
call json%add(p,"TotalLength",data%Configuration%Path%items(i)%TotalLength) | |||
call json%add(p,"MeasuredDepth",data%Configuration%Path%items(i)%MeasuredDepth) | |||
call json%add(p,"TotalVerticalDepth",data%Configuration%Path%items(i)%TotalVerticalDepth) | |||
call json%add(pitems,p) | |||
end do | |||
! 2. add member of data type to new node | |||
! call StringConfigurationToJson(p) | |||
! call FormationToJson(p) | |||
! call json%add(p,"",data%Configuration%Formation%Formations(i)%Abrasiveness) | |||
call json%create_array(pdp,'DataPoints') | |||
do i=1,data%Configuration%Path%DataPointsCount | |||
call json%create_object(p,'') | |||
call json%add(p,"X",data%Configuration%Path%DataPoints(i)%X) | |||
call json%add(p,"Y",data%Configuration%Path%DataPoints(i)%Y) | |||
call json%add(pdp,p) | |||
end do | |||
! 3. add new node to parent | |||
call json%add(parent,p) | |||
call json%add(ppath,pitems) | |||
call json%add(ppath,pdp) | |||
call json%add(parent,ppath) | |||
end subroutine | |||
end module CPathGeneration |
@@ -25,6 +25,6 @@ module CPathGenerationVariables | |||
type(CDataPointItem), allocatable :: DataPoints(:) | |||
End type PathGenerationType | |||
Type(PathGenerationType)::PathGeneration | |||
! Type(PathGenerationType)::PathGeneration | |||
end module CPathGenerationVariables |
@@ -2,33 +2,33 @@ module CWellSurveyData | |||
use CWellSurveyDataVariables | |||
implicit none | |||
public | |||
contains | |||
integer function SetSurveyData(count, array) | |||
!DEC$ ATTRIBUTES DLLEXPORT::SetSurveyData | |||
!DEC$ ATTRIBUTES ALIAS: 'SetSurveyData' :: SetSurveyData | |||
implicit none | |||
integer, intent(in) :: count | |||
integer :: i | |||
type(CSurveyDataItem), intent(inout), target :: array(count) | |||
type(CSurveyDataItem), pointer :: item | |||
WellSurveyData%Count = count | |||
if(size(WellSurveyData%Items) > 0) then | |||
deallocate(WellSurveyData%Items) | |||
end if | |||
if(count > 0) then | |||
allocate(WellSurveyData%Items(count)) | |||
do i = 1, count | |||
item => array(i) | |||
WellSurveyData%Items(i)%MeasuredDepth = item%MeasuredDepth | |||
WellSurveyData%Items(i)%Inclination = item%Inclination | |||
WellSurveyData%Items(i)%Azimoth = item%Azimoth | |||
WellSurveyData%Items(i)%TotalVerticalDepth = item%TotalVerticalDepth | |||
WellSurveyData%Items(i)%X = item%X | |||
WellSurveyData%Items(i)%Y = item%Y | |||
WellSurveyData%Items(i)%Z = item%Z | |||
end do | |||
end if | |||
contains | |||
! integer function SetSurveyData(count, array) | |||
! !DEC$ ATTRIBUTES DLLEXPORT::SetSurveyData | |||
! !DEC$ ATTRIBUTES ALIAS: 'SetSurveyData' :: SetSurveyData | |||
! implicit none | |||
! integer, intent(in) :: count | |||
! integer :: i | |||
! type(CSurveyDataItem), intent(inout), target :: array(count) | |||
! type(CSurveyDataItem), pointer :: item | |||
! WellSurveyData%Count = count | |||
! if(size(WellSurveyData%Items) > 0) then | |||
! deallocate(WellSurveyData%Items) | |||
! end if | |||
! if(count > 0) then | |||
! allocate(WellSurveyData%Items(count)) | |||
! do i = 1, count | |||
! item => array(i) | |||
! WellSurveyData%Items(i)%MeasuredDepth = item%MeasuredDepth | |||
! WellSurveyData%Items(i)%Inclination = item%Inclination | |||
! WellSurveyData%Items(i)%Azimoth = item%Azimoth | |||
! WellSurveyData%Items(i)%TotalVerticalDepth = item%TotalVerticalDepth | |||
! WellSurveyData%Items(i)%X = item%X | |||
! WellSurveyData%Items(i)%Y = item%Y | |||
! WellSurveyData%Items(i)%Z = item%Z | |||
! end do | |||
! end if | |||
SetSurveyData = 0 | |||
end function SetSurveyData | |||
! SetSurveyData = 0 | |||
! end function SetSurveyData | |||
end module CWellSurveyData |
@@ -139,7 +139,7 @@ ALLOCATE (data%State%MudSystem%Xstart_OpSection(data%State%F_Counts%BottomHoleIn | |||
call data%State%MudSystem%Hz_Mud_Backhead_section%AddToFirst (1) | |||
call data%State%MudSystem%Hz_Mud_Forehead_X%AddToFirst (data%State%MudSystem%Xend_PipeSection(1)) | |||
call data%State%MudSystem%Hz_Mud_Forehead_section%AddToFirst (1) | |||
call data%State%MudSystem%Hz_Density%AddToFirst (MudProperties%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%Hz_Density%AddToFirst (data%Configuration%Mud%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%Hz_RemainedVolume_in_LastSection%AddToFirst (0.0d0) | |||
call data%State%MudSystem%Hz_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) | |||
call data%State%MudSystem%Hz_MudOrKick%AddToFirst (0) | |||
@@ -150,7 +150,7 @@ ALLOCATE (data%State%MudSystem%Xstart_OpSection(data%State%F_Counts%BottomHoleIn | |||
call data%State%MudSystem%St_Mud_Backhead_section%AddToFirst (2) | |||
call data%State%MudSystem%St_Mud_Forehead_X%AddToFirst (data%State%MudSystem%Xend_PipeSection(data%State%F_Counts%StringIntervalCounts)) | |||
call data%State%MudSystem%St_Mud_Forehead_section%AddToFirst (data%State%F_Counts%StringIntervalCounts) | |||
call data%State%MudSystem%St_Density%AddToFirst (MudProperties%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%St_Density%AddToFirst (data%Configuration%Mud%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%St_RemainedVolume_in_LastSection%AddToFirst (0.0d0) | |||
call data%State%MudSystem%St_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) | |||
call data%State%MudSystem%St_MudOrKick%AddToFirst (0) | |||
@@ -161,7 +161,7 @@ ALLOCATE (data%State%MudSystem%Xstart_OpSection(data%State%F_Counts%BottomHoleIn | |||
call data%State%MudSystem%Ann_Mud_Backhead_section%AddToFirst (data%State%F_Counts%StringIntervalCounts+1) | |||
call data%State%MudSystem%Ann_Mud_Forehead_X%AddToFirst (data%State%MudSystem%Xend_PipeSection(data%State%MudSystem%NoPipeSections)) | |||
call data%State%MudSystem%Ann_Mud_Forehead_section%AddToFirst (data%State%MudSystem%NoPipeSections) | |||
call data%State%MudSystem%Ann_Density%AddToFirst (MudProperties%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%Ann_Density%AddToFirst (data%Configuration%Mud%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%Ann_RemainedVolume_in_LastSection%AddToFirst (0.0d0) | |||
call data%State%MudSystem%Ann_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) | |||
call data%State%MudSystem%Ann_MudOrKick%AddToFirst (0) | |||
@@ -177,7 +177,7 @@ ALLOCATE (data%State%MudSystem%Xstart_OpSection(data%State%F_Counts%BottomHoleIn | |||
call data%State%MudSystem%ChokeLine_Mud_Backhead_section%AddToFirst (1) | |||
call data%State%MudSystem%ChokeLine_Mud_Forehead_X%AddToFirst (data%Configuration%BopStack%ChokeLineLength) | |||
call data%State%MudSystem%ChokeLine_Mud_Forehead_section%AddToFirst (1) | |||
call data%State%MudSystem%ChokeLine_Density%AddToFirst (MudProperties%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%ChokeLine_Density%AddToFirst (data%Configuration%Mud%ActiveDensity) ! initial(ppg) | |||
call data%State%MudSystem%ChokeLine_RemainedVolume_in_LastSection%AddToFirst (0.0d0) | |||
call data%State%MudSystem%ChokeLine_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) | |||
call data%State%MudSystem%ChokeLine_MudOrKick%AddToFirst (0) | |||
@@ -188,7 +188,7 @@ ALLOCATE (data%State%MudSystem%Xstart_OpSection(data%State%F_Counts%BottomHoleIn | |||
call data%State%MudSystem%Op_Mud_Backhead_section%AddToFirst (1) | |||
call data%State%MudSystem%Op_Mud_Forehead_X%AddToFirst (data%State%MudSystem%Xend_OpSection(data%State%F_Counts%BottomHoleIntervalCounts)) | |||
call data%State%MudSystem%Op_Mud_Forehead_section%AddToFirst (data%State%F_Counts%BottomHoleIntervalCounts) | |||
call data%State%MudSystem%Op_Density%AddToFirst (MudProperties%ActiveDensity) | |||
call data%State%MudSystem%Op_Density%AddToFirst (data%Configuration%Mud%ActiveDensity) | |||
call data%State%MudSystem%Op_RemainedVolume_in_LastSection%AddToFirst (0.0d0) | |||
call data%State%MudSystem%Op_EmptyVolume_inBackheadLocation%AddToFirst (0.0d0) | |||
call data%State%MudSystem%Op_MudOrKick%AddToFirst (0) | |||
@@ -5,7 +5,7 @@ use SimulationVariables !@@@ | |||
use PressureDisplayVARIABLESModule | |||
USE FricPressDropVarsModule | |||
USE Fluid_Flow_Startup_Vars | |||
USE CMudPropertiesVariables | |||
! USE CMudPropertiesVariables | |||
USE CManifolds | |||
use CPumpsVariables | |||
use CPumps | |||
@@ -17,6 +17,7 @@ use SimulationVariables !@@@ | |||
use CDataDisplayConsole | |||
use SimulationVariables | |||
use CStudentStationVariables !, PitGainLossReset=>PitGainLossZero | |||
use MudPropertiesModule | |||
implicit none | |||
@@ -687,7 +688,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ Mp1Coef*data%State%Pump(1)%Flow_Rate*data%State%MudSystem%DeltaT_Mudline/60. + Mp2Coef*data%State%Pump(2)%Flow_Rate*data%State%MudSystem%DeltaT_Mudline/60. | |||
!write(*,*) 'active by j15' | |||
endif | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal) | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , data%Configuration%Mud%ActiveTotalTankCapacityGal-data%Configuration%Mud%ActiveSettledContentsGal) | |||
!if ActiveTankVolume is higher, excess amount is dumped | |||
endif | |||
if (H84 > 0.0) then !CementPumpToCementTank_Through67 | |||
@@ -1039,7 +1040,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((0.5*data%State%MUD(6)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%BellNippleVolume= data%State%MudSystem%BellNippleVolume+ ((0.5*data%State%MUD(6)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
endif | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal) | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , data%Configuration%Mud%ActiveTotalTankCapacityGal-data%Configuration%Mud%ActiveSettledContentsGal) | |||
!if ActiveTankVolume is higher, excess amount is dumped | |||
endif | |||
@@ -1075,17 +1076,17 @@ use SimulationVariables !@ | |||
if (j3 == 1 .and. B71==1) then !(volumes in galon) | |||
data%State%MUD(3)%Q = min(data%State%MUD(3)%Q , data%State%MudSystem%PedalMeter) | |||
!write(*,*) 'data%State%MUD(3)%Q=' , data%State%MUD(3)%Q | |||
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN | |||
IF (data%Configuration%Mud%ActiveAutoDensity == .FALSE.) THEN | |||
data%State%MudSystem%ActiveTankDensity= ((data%State%MudSystem%ActiveTankDensity*data%State%MudSystem%ActiveTankVolume)+(data%State%MudSystem%BellNippleDensity*(data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%ActiveTankVolume+((data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
!write(*,*) 'active increase bell 1=' , ((data%State%MUD(3)%Q/60.)*DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((20.8d0-data%State%MudSystem%BellNippleDensity)/(20.8d0-data%State%MudSystem%ActiveTankDensity))*((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed cutting density = 20.8 ppg | |||
!write(*,*) 'active increase bell 2=' , ((20.8d0-BellNippleDensity)/(20.8d0-ActiveTankDensity))*((data%State%MUD(3)%Q/60.d0)*DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity < 5.0) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity < 5.0) THEN | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((2.d0-data%State%MudSystem%BellNippleDensity)/(2.d0-data%State%MudSystem%ActiveTankDensity))*((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg | |||
!write(*,*) 'active increase bell 3=' , ((2.d0-BellNippleDensity)/(2.d0-ActiveTankDensity))*((data%State%MUD(3)%Q/60.d0)*DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%BellNippleDensity .and. data%State%MudSystem%BellNippleDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%BellNippleDensity .and. data%State%MudSystem%BellNippleDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
!write(*,*) ' Auto true 3' | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
!write(*,*) 'active increase bell 4=' , ((data%State%MUD(3)%Q/60.d0)*DeltaT_Mudline) | |||
@@ -1093,18 +1094,18 @@ use SimulationVariables !@ | |||
endif | |||
if (j3 == 1 .and. B77==1) then | |||
data%State%MUD(3)%Q = min(data%State%MUD(3)%Q , data%State%MudSystem%PedalMeter) | |||
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN | |||
IF (data%Configuration%Mud%ActiveAutoDensity == .FALSE.) THEN | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%BellNippleDensity*(data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%TripTankVolumeCalc+((data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ (data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((20.8d0-data%State%MudSystem%BellNippleDensity)/(20.8d0-data%State%MudSystem%ActiveTankDensity))*((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ AddedVolumeToTank | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity < 5.0) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity < 5.0) THEN | |||
AddedVolumeToTank= ((2.d0-data%State%MudSystem%BellNippleDensity)/(2.d0-data%State%MudSystem%ActiveTankDensity))*((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ AddedVolumeToTank | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%BellNippleDensity .and. data%State%MudSystem%BellNippleDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%BellNippleDensity .and. data%State%MudSystem%BellNippleDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ AddedVolumeToTank | |||
@@ -1118,7 +1119,7 @@ use SimulationVariables !@ | |||
data%State%MUD(3)%Q = min(data%State%MUD(3)%Q , data%State%MudSystem%PedalMeter) | |||
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN | |||
IF (data%Configuration%Mud%ActiveAutoDensity == .FALSE.) THEN | |||
data%State%MudSystem%ActiveTankDensity= ((data%State%MudSystem%ActiveTankDensity*data%State%MudSystem%ActiveTankVolume)+(data%State%MudSystem%BellNippleDensity*(0.5*data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%ActiveTankVolume+((0.5*data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%BellNippleDensity*(0.5*data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%TripTankVolumeCalc+((0.5*data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
@@ -1126,7 +1127,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((0.5*data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ ((0.5*data%State%MUD(3)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%BellNippleDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((20.8d0-data%State%MudSystem%BellNippleDensity)/(20.8d0-data%State%MudSystem%ActiveTankDensity))*((0.5d0*data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
@@ -1135,7 +1136,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ AddedVolumeToTank | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ AddedVolumeToTank | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((2.d0-data%State%MudSystem%BellNippleDensity)/(2.d0-data%State%MudSystem%ActiveTankDensity))*((0.5d0*data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1143,7 +1144,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ AddedVolumeToTank | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ AddedVolumeToTank | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%BellNippleDensity .and. data%State%MudSystem%BellNippleDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%BellNippleDensity .and. data%State%MudSystem%BellNippleDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((data%State%MUD(3)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1180,7 +1181,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%TripTankVolumeCalc = min(data%State%MudSystem%TripTankVolumeCalc,50.*42.) !50. BBL *42. gal/BBL = gal | |||
!if TripTankVolumeCalc>50 BBl, excess value(TripTankVolumeCalc-50) is dumped | |||
data%State%MudSystem%ActiveTankVolume = min(data%State%MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal - MudProperties%ActiveSettledContentsGal) | |||
data%State%MudSystem%ActiveTankVolume = min(data%State%MudSystem%ActiveTankVolume , data%Configuration%Mud%ActiveTotalTankCapacityGal - data%Configuration%Mud%ActiveSettledContentsGal) | |||
!if ActiveTankVolume is higher, excess amount is dumped | |||
!write(*,*) 'BellNippleDensity=' , BellNippleDensity | |||
@@ -1284,27 +1285,27 @@ use SimulationVariables !@ | |||
! IN ALL CONDITIONS EFFECT OF 78 IS COMPUTED BY RealJ4 | |||
if (C71==1 .and. C77==0) then !(volumes in galon) RealJ4: 1 OR 2(IF 78 IS OPEN) | |||
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN | |||
IF (data%Configuration%Mud%ActiveAutoDensity == .FALSE.) THEN | |||
data%State%MudSystem%ActiveTankDensity= ((data%State%MudSystem%ActiveTankDensity*data%State%MudSystem%ActiveTankVolume)+(data%State%MudSystem%ChokeOutletDensity*((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%ActiveTankVolume+(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ (((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
!write(*,*) 'active increase choke1=' , (((1./RealJ4)*data%State%MUD(4)%Q/60.)*DeltaT_Mudline) | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((20.8d0-data%State%MudSystem%ChokeOutletDensity)/(20.8d0-data%State%MudSystem%ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed cutting density = 20.8 ppg | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1./RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
!write(*,*) 'active increase choke2=' , ((20.8d0-ChokeOutletDensity)/(20.8d0-ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity < 5.0) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity < 5.0) THEN | |||
data%State%MudSystem%ActiveTankVolume= data%State%MudSystem%ActiveTankVolume+ ((2.d0-data%State%MudSystem%ChokeOutletDensity)/(2.d0-data%State%MudSystem%ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
!write(*,*) 'active increase choke3=' ,((2.d0-ChokeOutletDensity)/(2.d0-ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ChokeOutletDensity .and. data%State%MudSystem%ChokeOutletDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ChokeOutletDensity .and. data%State%MudSystem%ChokeOutletDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
!write(*,*) ' Auto true 3' | |||
@@ -1321,13 +1322,13 @@ use SimulationVariables !@ | |||
if (C77==1 .and. C71==0) then !RealJ4: 1 OR 2(IF 78 IS OPEN) | |||
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN | |||
IF (data%Configuration%Mud%ActiveAutoDensity == .FALSE.) THEN | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ChokeOutletDensity*((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%TripTankVolumeCalc+(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
data%State%MudSystem%TripTankVolumeCalc= data%State%MudSystem%TripTankVolumeCalc+ (((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((20.8d0-data%State%MudSystem%ChokeOutletDensity)/(20.8d0-data%State%MudSystem%ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1337,7 +1338,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity < 5.0) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity < 5.0) THEN | |||
AddedVolumeToTank= ((2.d0-data%State%MudSystem%ChokeOutletDensity)/(2.d0-data%State%MudSystem%ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1346,7 +1347,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ChokeOutletDensity .and. data%State%MudSystem%ChokeOutletDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ChokeOutletDensity .and. data%State%MudSystem%ChokeOutletDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= (((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1363,7 +1364,7 @@ use SimulationVariables !@ | |||
if (C71==1 .and. C77==1) then !RealJ4: 2 OR 3(IF 78 IS OPEN) | |||
IF (MudProperties%ActiveAutoDensity == .FALSE.) THEN | |||
IF (data%Configuration%Mud%ActiveAutoDensity == .FALSE.) THEN | |||
data%State%MudSystem%ActiveTankDensity= ((data%State%MudSystem%ActiveTankDensity*data%State%MudSystem%ActiveTankVolume)+(data%State%MudSystem%ChokeOutletDensity*((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%ActiveTankVolume+(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ChokeOutletDensity*((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline))/(data%State%MudSystem%TripTankVolumeCalc+(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline)) | |||
@@ -1372,7 +1373,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1./RealJ4)*data%State%MUD(4)%Q/60.)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. data%State%MudSystem%ChokeOutletDensity > data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((20.8d0-data%State%MudSystem%ChokeOutletDensity)/(20.8d0-data%State%MudSystem%ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
@@ -1383,7 +1384,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((2.d0-data%State%MudSystem%ChokeOutletDensity)/(2.d0-data%State%MudSystem%ActiveTankDensity))*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) ! asumed GAS density = 2.0 ppg | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1393,7 +1394,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%ChokeManifoldDumpVolume= data%State%MudSystem%ChokeManifoldDumpVolume+ C78*(((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0)*data%State%MudSystem%DeltaT_Mudline) | |||
ELSEIF (MudProperties%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ChokeOutletDensity .and. data%State%MudSystem%ChokeOutletDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
ELSEIF (data%Configuration%Mud%ActiveAutoDensity .and. 5.0 < data%State%MudSystem%ChokeOutletDensity .and. data%State%MudSystem%ChokeOutletDensity <= data%State%MudSystem%ActiveTankDensity) THEN | |||
AddedVolumeToTank= ((1.d0/RealJ4)*data%State%MUD(4)%Q/60.d0) | |||
data%State%MudSystem%TripTankDensityCalc= ((data%State%MudSystem%TripTankDensityCalc*data%State%MudSystem%TripTankVolumeCalc)+(data%State%MudSystem%ActiveTankDensity*AddedVolumeToTank))/(data%State%MudSystem%TripTankVolumeCalc+AddedVolumeToTank) | |||
@@ -1424,7 +1425,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%TripTankVolumeCalc=min(data%State%MudSystem%TripTankVolumeCalc,50.*42.) !50. BBL *42. gal/BBL = gal | |||
!if TripTankVolumeCalc>50 BBl, excess value(TripTankVolumeCalc-50) is dumped | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal) | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , data%Configuration%Mud%ActiveTotalTankCapacityGal-data%Configuration%Mud%ActiveSettledContentsGal) | |||
!if ActiveTankVolume is higher, excess amount is dumped | |||
endif | |||
@@ -1535,7 +1536,7 @@ use SimulationVariables !@ | |||
data%State%MudSystem%TripTankVolumeCalc=min(data%State%MudSystem%TripTankVolumeCalc,50.*42.) !50. BBL *42. gal/BBL = gal | |||
!if TripTankVolumeCalc>50 BBl, excess value(TripTankVolumeCalc-50) is dumped | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal) | |||
data%State%MudSystem%ActiveTankVolume=min(data%State%MudSystem%ActiveTankVolume , data%Configuration%Mud%ActiveTotalTankCapacityGal-data%Configuration%Mud%ActiveSettledContentsGal) | |||
!if ActiveTankVolume is higher, excess amount is dumped | |||
endif | |||
@@ -2001,8 +2002,8 @@ use SimulationVariables !@ | |||
IF (Manifold%Valve(67)%Status == .TRUE.) call Activate_Pump3PopOffValveBlown() !Pump2PopOffValveBlown= .TRUE. | |||
IF (data%State%MudSystem%ActiveTankVolume >= (MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal)) THEN | |||
data%State%MudSystem%ActiveTankVolume = (MudProperties%ActiveTotalTankCapacityGal-MudProperties%ActiveSettledContentsGal) | |||
IF (data%State%MudSystem%ActiveTankVolume >= (data%Configuration%Mud%ActiveTotalTankCapacityGal-data%Configuration%Mud%ActiveSettledContentsGal)) THEN | |||
data%State%MudSystem%ActiveTankVolume = (data%Configuration%Mud%ActiveTotalTankCapacityGal-data%Configuration%Mud%ActiveSettledContentsGal) | |||
call Activate_ActiveTankOverflow() | |||
ELSE | |||
call Deactivate_ActiveTankOverflow() | |||
@@ -2502,7 +2503,7 @@ use SimulationVariables !@ | |||
implicit none | |||
real(8), intent (in) :: v | |||
!call Log_4('ActiveMudVolumeChanged=', v) | |||
data%State%MudSystem%ActiveTankVolume= MudProperties%ActiveMudVolumeGal ! update from student input | |||
data%State%MudSystem%ActiveTankVolume= data%Configuration%Mud%ActiveMudVolumeGal ! update from student input | |||
end subroutine | |||
subroutine ActiveDensityChanged(v) | |||
@@ -2510,7 +2511,7 @@ use SimulationVariables !@ | |||
implicit none | |||
real(8), intent (in) :: v | |||
!call Log_4('ActiveDensityChanged=', v) | |||
data%State%MudSystem%ActiveTankDensity= MudProperties%ActiveDensity ! update from student input | |||
data%State%MudSystem%ActiveTankDensity= data%Configuration%Mud%ActiveDensity ! update from student input | |||
end subroutine | |||
subroutine ReserveMudVolumeChanged(v) | |||
@@ -2518,7 +2519,7 @@ use SimulationVariables !@ | |||
implicit none | |||
real(8), intent (in) :: v | |||
!call Log_4('ReserveMudVolumeChanged=', v) | |||
data%State%MudSystem%ReserveTankVolume= MudProperties%ReserveMudVolumeGal ! update from student input | |||
data%State%MudSystem%ReserveTankVolume= data%Configuration%Mud%ReserveMudVolumeGal ! update from student input | |||
end subroutine | |||
subroutine ReserveDensityChanged(v) | |||
@@ -2526,7 +2527,7 @@ use SimulationVariables !@ | |||
implicit none | |||
real(8), intent (in) :: v | |||
!call Log_4('ReserveDensityChanged=', v) | |||
data%State%MudSystem%ReserveTankDensity= MudProperties%ReserveDensity ! update from student input | |||
data%State%MudSystem%ReserveTankDensity= data%Configuration%Mud%ReserveDensity ! update from student input | |||
end subroutine | |||
! subroutine SetupMudSystem() | |||
@@ -94,11 +94,11 @@ data%State%MudSystem%FluidFlowCounter = 0 | |||
imud=1 | |||
data%State%MudSystem%iLoc= 1 ! for Kick | |||
data%State%MudSystem%Suction_Density_MudSystem= MudProperties%ActiveDensity | |||
data%State%MudSystem%SuctionDensity_Old= MudProperties%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%StringDensity_Old= MudProperties%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%AnnulusSuctionDensity_Old= MudProperties%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%ChokeLineDensity_Old= MudProperties%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%Suction_Density_MudSystem= data%Configuration%Mud%ActiveDensity | |||
data%State%MudSystem%SuctionDensity_Old= data%Configuration%Mud%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%StringDensity_Old= data%Configuration%Mud%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%AnnulusSuctionDensity_Old= data%Configuration%Mud%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%ChokeLineDensity_Old= data%Configuration%Mud%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%TotalAddedVolume= 0. | |||
@@ -176,12 +176,12 @@ data%State%MudSystem%PressureGauge76 = 0.0 | |||
data%State%MudSystem%TripTank_MaxVol_Allowded= 50. *42. !(bbl to gal, initial value) | |||
data%State%MudSystem%ActiveTankFloorArea= (MudProperties%ActiveTotalTankCapacityGal) / (7.48051948*100./12.) ! (ft^2) - Tank Height= 100 inch , 12=inch to ft 7.48051948=gal to ft^3 | |||
data%State%MudSystem%ActiveTankFloorArea= (data%Configuration%Mud%ActiveTotalTankCapacityGal) / (7.48051948*100./12.) ! (ft^2) - Tank Height= 100 inch , 12=inch to ft 7.48051948=gal to ft^3 | |||
data%State%MudSystem%TripTankFloorArea= (50.*42.) / (7.48051948*100./12.) ! (ft^2) - 50.*42.=Trip Tank Capacity in BBl*42= Gal , Tank Height= 100 inch , 12=inch to ft 7.48051948=gal to ft^3 | |||
data%State%MudSystem%TripTank_Vol= MudProperties%InitialTripTankMudVolumeGal !(gal) | |||
data%State%MudSystem%TripTank_Vol= data%Configuration%Mud%InitialTripTankMudVolumeGal !(gal) | |||
data%State%MudSystem%TripTank_Dens= 1. | |||
data%EquipmentControl%DataDisplayConsole%TripTankGauge=0. | |||
@@ -206,8 +206,8 @@ data%State%MudSystem%Mp2Density= 0.0 !(VALVE83) | |||
data%State%MudSystem%Mp3Density= 0.0 !(VALVE84) | |||
data%State%MudSystem%ReserveTankVolume= MudProperties%ReserveMudVolumeGal ! initial volume (gal) | |||
data%State%MudSystem%ReserveTankDensity= MudProperties%ReserveDensity ! initial | |||
data%State%MudSystem%ReserveTankVolume= data%Configuration%Mud%ReserveMudVolumeGal ! initial volume (gal) | |||
data%State%MudSystem%ReserveTankDensity= data%Configuration%Mud%ReserveDensity ! initial | |||
@@ -219,21 +219,21 @@ data%State%MudSystem%PumpsDumpFlowRate= 0.0 | |||
data%State%MudSystem%ActiveTankVolume= MudProperties%ActiveMudVolumeGal ! initial volume (gal) | |||
data%State%MudSystem%ActiveTankVolume= data%Configuration%Mud%ActiveMudVolumeGal ! initial volume (gal) | |||
data%State%MudSystem%RefrencePitVolume= data%State%MudSystem%ActiveTankVolume/42. !(bbl) | |||
data%State%MudSystem%RefrencePitVolume_DrillWatch= data%State%MudSystem%ActiveTankVolume/42. !(bbl) | |||
data%State%MudSystem%MVT_MinVol_Allowded= 0. | |||
data%State%MudSystem%MVT_MaxVol_Allowded= 0. | |||
data%State%MudSystem%MudTank1_vol= MudProperties%ActiveMudVolumeGal/3. ! (gal) | |||
data%State%MudSystem%MudTank2_vol= MudProperties%ActiveMudVolumeGal/3. ! (gal) | |||
data%State%MudSystem%MudTank3_vol= MudProperties%ActiveMudVolumeGal/3. ! (gal) | |||
data%State%MudSystem%ActiveTankSettled= MudProperties%ActiveSettledContentsGal ! (gal) | |||
data%State%MudSystem%MudTank4_vol= MudProperties%InitialTripTankMudVolumeGal ! (gal) | |||
data%State%MudSystem%MudTank1_vol= data%Configuration%Mud%ActiveMudVolumeGal/3. ! (gal) | |||
data%State%MudSystem%MudTank2_vol= data%Configuration%Mud%ActiveMudVolumeGal/3. ! (gal) | |||
data%State%MudSystem%MudTank3_vol= data%Configuration%Mud%ActiveMudVolumeGal/3. ! (gal) | |||
data%State%MudSystem%ActiveTankSettled= data%Configuration%Mud%ActiveSettledContentsGal ! (gal) | |||
data%State%MudSystem%MudTank4_vol= data%Configuration%Mud%InitialTripTankMudVolumeGal ! (gal) | |||
data%State%MudSystem%TripTankVolumeCalc= MudProperties%InitialTripTankMudVolumeGal ! initial volume (gal) | |||
data%State%MudSystem%ActiveTankDensity= MudProperties%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%TripTankVolumeCalc= data%Configuration%Mud%InitialTripTankMudVolumeGal ! initial volume (gal) | |||
data%State%MudSystem%ActiveTankDensity= data%Configuration%Mud%ActiveDensity ! initial(ppg) | |||
data%State%MudSystem%TripTankDensityCalc= data%EquipmentControl%Tank%TripTankDensity ! initial(ppg) | |||
data%State%MudSystem%ChokeManifoldDumpVolume= 0.0 | |||
@@ -246,7 +246,7 @@ data%State%MudSystem%FirstSet_Time= .true. | |||
data%State%MudSystem%PedalMeter= MudProperties%PedalFlowMeter !1600. !(gpm) | |||
data%State%MudSystem%PedalMeter= data%Configuration%Mud%PedalFlowMeter !1600. !(gpm) | |||
data%State%MudSystem%ReturnFlowRate=0. | |||
@@ -32,7 +32,7 @@ use SimulationVariables !@, pi4 => pi | |||
KickVARIABLES%MaxChokeDensityChange = 25.0 ! [ppg/min] | |||
KickVARIABLES%ChokeMinDensity = 2.0 | |||
KickVARIABLES%ChokeDensity = MudProperties%ActiveDensity | |||
KickVARIABLES%ChokeDensity = data%Configuration%Mud%ActiveDensity | |||
KickVARIABLES%MinKickVol = 0.5 ! USGal | |||
@@ -71,7 +71,7 @@ use SimulationVariables !@, pi4 => pi | |||
SoundSpeed = 1530.0 / Convfttom | |||
data%State%PressureDisplay%PressureTimeStepDelay(1) = INT(2.0 * SUM(data%Configuration%StringConfiguration%StringConfigurations(2:)%ComponentLength) / SoundSpeed / dt) | |||
data%State%PressureDisplay%PressureTimeStepDelay(2) = INT(PathGeneration%Items(SIZE(PathGeneration%Items))%MeasuredDepth / SoundSpeed / dt) | |||
data%State%PressureDisplay%PressureTimeStepDelay(2) = INT(data%Configuration%Path%Items(SIZE(data%Configuration%Path%Items))%MeasuredDepth / SoundSpeed / dt) | |||
data%State%PressureDisplay%PressureTimeStepDelay(3) = INT(Shoe%ShoeDepth / SoundSpeed / dt) | |||
!WRITE (*,*) SUM(StringConfigurations(2:)%ComponentLength), PathGenerations(SIZE(PathGenerations))%TotalVerticalDepth!, WellSurveyData(SIZE(WellSurveyData))%TotalVerticalDepth | |||
@@ -83,11 +83,11 @@ use SimulationVariables !@, pi4 => pi | |||
END DO | |||
DO i = 1 , data%State%PressureDisplay%PressureTimeStepDelay(2) | |||
CALL BottomHolePressureDelay%AddToFirst(REAL(0.052 * MudProperties%ActiveDensity * PathGeneration%Items(SIZE(PathGeneration%Items))%TotalVerticalDepth)) | |||
CALL BottomHolePressureDelay%AddToFirst(REAL(0.052 * data%Configuration%Mud%ActiveDensity * data%Configuration%Path%Items(SIZE(data%Configuration%Path%Items))%TotalVerticalDepth)) | |||
END DO | |||
DO i = 1 , data%State%PressureDisplay%PressureTimeStepDelay(3) | |||
CALL ShoePressureDelay%AddToFirst(REAL(0.052 * MudProperties%ActiveDensity * Shoe%ShoeDepth)) | |||
CALL ShoePressureDelay%AddToFirst(REAL(0.052 * data%Configuration%Mud%ActiveDensity * Shoe%ShoeDepth)) | |||
END DO | |||
@@ -113,8 +113,8 @@ use SimulationVariables !@, pi4 => pi | |||
data%State%GasType(3)%GasConstant = RUniversal / data%State%GasType(2)%MolarWt | |||
!!!!!!!! Mud density and viscosity | |||
Theta600Refrence = MudProperties%ActiveThetaSixHundred | |||
Theta300Refrence = MudProperties%ActiveThetaThreeHundred | |||
DensityRefrence = MudProperties%ActiveDensity | |||
Theta600Refrence = data%Configuration%Mud%ActiveThetaSixHundred | |||
Theta300Refrence = data%Configuration%Mud%ActiveThetaThreeHundred | |||
DensityRefrence = data%Configuration%Mud%ActiveDensity | |||
END SUBROUTINE |
@@ -11,7 +11,7 @@ SUBROUTINE FricPressDrop(iloc) | |||
USE FricPressDropVarsModule | |||
USE CMudPropertiesVariables | |||
USE SimulationVariables | |||
USE Fluid_Flow_Startup_Vars | |||
USE CError | |||
@@ -45,9 +45,9 @@ SUBROUTINE FricPressDrop(iloc) | |||
FlowEl(iloc)%YieldP = 2.0 * FlowEl(iloc)%Theta300 - FlowEl(iloc)%Theta600 ! lbf/100ft**2 | |||
FlowEl(iloc)%nIndex = 3.32 * log10(FlowEl(iloc)%Theta600 / FlowEl(iloc)%Theta300) | |||
FlowEl(iloc)%kIndex = 510.0 * FlowEl(iloc)%Theta300 / (511.0**FlowEl(iloc)%nIndex) ! rabete fv2 | |||
IF (MudProperties%ActiveRheologyModel == Herschel_Bulkley_RheologyModel .AND. FlowEl(iloc)%alpha == 0) THEN | |||
IF (data%Configuration%Mud%ActiveRheologyModel == Herschel_Bulkley_RheologyModel .AND. FlowEl(iloc)%alpha == 0) THEN | |||
FlowEl(iloc)%kIndex = 1.066 * FlowEl(iloc)%Theta300 / (511.0**FlowEl(iloc)%nIndex) | |||
ELSE IF (MudProperties%ActiveRheologyModel == Herschel_Bulkley_RheologyModel .AND. FlowEl(iloc)%alpha == 1) THEN | |||
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == Herschel_Bulkley_RheologyModel .AND. FlowEl(iloc)%alpha == 1) THEN | |||
FlowEl(iloc)%nIndex = 3.32 * log10((FlowEl(iloc)%Theta600 - TauZero) / (FlowEl(iloc)%Theta300 - TauZero)) | |||
FlowEl(iloc)%kIndex = 1.066 * (FlowEl(iloc)%Theta300 - TauZero) / (511.0**FlowEl(iloc)%nIndex) | |||
END IF | |||
@@ -75,10 +75,10 @@ SUBROUTINE FricPressDrop(iloc) | |||
!END IF | |||
! Calculating effective or apparent viscosity | |||
IF (MudProperties%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic | |||
IF (data%Configuration%Mud%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic | |||
FlowEl(iloc)%mueff = FlowEl(iloc)%muPlastic + 5. * FlowEl(iloc)%YieldP * FlowEl(iloc)%Dhyd / FlowEl(iloc)%vel | |||
!write(*,*) 'pointer1' , FlowEl(iloc)%muPlastic , FlowEl(iloc)%YieldP , FlowEl(iloc)%Dhyd , FlowEl(iloc)%vel | |||
ELSE IF (MudProperties%ActiveRheologyModel == PowerLaw_RheologyModel .OR. MudProperties%ActiveRheologyModel == Herschel_Bulkley_RheologyModel) THEN ! Power Law | |||
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == PowerLaw_RheologyModel .OR. data%Configuration%Mud%ActiveRheologyModel == Herschel_Bulkley_RheologyModel) THEN ! Power Law | |||
FlowEl(iloc)%Gf = ((3. - FlowEl(iloc)%alpha) * FlowEl(iloc)%nIndex + 1.0) / FlowEl(iloc)%nIndex / (4.0 - FlowEl(iloc)%alpha) * (2.0 + FlowEl(iloc)%alpha) / 2.0 | |||
FlowEl(iloc)%mueff = (FlowEl(iloc)%kIndex) / (1. + FlowEl(iloc)%alpha / 2.) * ((96. * FlowEl(iloc)%vel / FlowEl(iloc)%Dhyd)**(FlowEl(iloc)%nIndex - 1)) * FlowEl(iloc)%Gf**FlowEl(iloc)%nIndex | |||
!write(*,*) 'pointer2' , FlowEl(iloc)%kIndex ,FlowEl(iloc)%alpha , FlowEl(iloc)%vel ,FlowEl(iloc)%Dhyd,FlowEl(iloc)%nIndex ,FlowEl(iloc)%Gf ,FlowEl(iloc)%nIndex | |||
@@ -99,7 +99,7 @@ SUBROUTINE FricPressDrop(iloc) | |||
!FlowEl(iloc)%GenRe = 2997 * FlowEl(iloc)%density * FlowEl(iloc)%vel**2 / 19.36 / FlowEl(iloc)%tauW | |||
! Calculating friction factor | |||
IF (MudProperties%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic | |||
IF (data%Configuration%Mud%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic | |||
IF (FlowEl(iloc)%GenRe <= 2000.0) THEN ! laminar regime | |||
FlowEl(iloc)%f = 16.0 / FlowEl(iloc)%GenRe | |||
ELSE IF (FlowEl(iloc)%GenRe >= 4000.0) THEN ! turbulent regime | |||
@@ -113,7 +113,7 @@ SUBROUTINE FricPressDrop(iloc) | |||
+ (FlowEl(iloc)%GenRe - 2000.0) / 2000.0 * FlowEl(iloc)%a / FlowEl(iloc)%GenRe**FlowEl(iloc)%b | |||
END IF | |||
ELSE IF (MudProperties%ActiveRheologyModel == PowerLaw_RheologyModel) THEN ! Power law | |||
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == PowerLaw_RheologyModel) THEN ! Power law | |||
FlowEl(iloc)%ReCritLam = 3470. - 1370. * FlowEl(iloc)%nIndex | |||
FlowEl(iloc)%ReCritTurb = 4270. - 1370. * FlowEl(iloc)%nIndex | |||
@@ -167,7 +167,7 @@ END SUBROUTINE FricPressDrop | |||
SUBROUTINE PartialDerivativeFricToFlowRate(iloc) | |||
USE FricPressDropVarsModule | |||
USE CMudPropertiesVariables | |||
USE SimulationVariables | |||
USE Fluid_Flow_Startup_Vars | |||
use KickVARIABLESModule | |||
USE CError | |||
@@ -186,7 +186,7 @@ SUBROUTINE PartialDerivativeFricToFlowRate(iloc) | |||
.AND. (ABS(FlowEl(iloc)%Length) >= PressLengthTolerance) & | |||
.AND. (FlowEl(iloc)%MaterialType /= 4)) THEN ! not air | |||
IF (MudProperties%ActiveRheologyModel == PowerLaw_RheologyModel) THEN ! Power law | |||
IF (data%Configuration%Mud%ActiveRheologyModel == PowerLaw_RheologyModel) THEN ! Power law | |||
!IF (FlowEl(iloc)%Flowrate == 0.0) THEN | |||
! FlowEl(iloc)%Flowrate = 10.0 | |||
! CALL FricPressDrop(iloc) | |||
@@ -204,7 +204,7 @@ SUBROUTINE PartialDerivativeFricToFlowRate(iloc) | |||
* ((FlowEl(iloc)%a * FlowEl(iloc)%GenRe**(1. - FlowEl(iloc)%b) - 16.) / 800. / FlowEl(iloc)%f - 1.)) | |||
END IF | |||
ELSE IF (MudProperties%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic | |||
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic | |||
IF (FlowEl(iloc)%GenRe <= 2000.0 .OR. FlowEl(iloc)%f == 0.0) THEN ! laminar flow if f = 0.0, we have no flow in first time flowing | |||
FlowEl(iloc)%FricToQPartialDiff = (16. * FlowEl(iloc)%muPlastic * REAL(FlowEl(iloc)%Length) * 2.224 * (10.)**(-3)) & | |||
/ (25.81 * 928. * (1 - 0.184 * FlowEl(iloc)%alpha) * FlowEl(iloc)%Dhyd**2 * FlowEl(iloc)%Area) | |||
@@ -168,7 +168,7 @@ use SimulationVariables !@@@ | |||
data%State%ROP_Bit%RateOfPenetration = (data%State%ROP_Spec%f1*data%State%ROP_Spec%f2*data%State%ROP_Spec%f3*data%State%ROP_Spec%f4*data%State%ROP_Spec%f5*data%State%ROP_Spec%f6*data%State%ROP_Spec%f7*data%State%ROP_Spec%f8) ![ft/h] | |||
data%State%ROP_Bit%RateOfPenetration = (DINT(data%State%ROP_Bit%RateOfPenetration*10.d0))/10.d0 | |||
if ( (data%State%TD_WellGeneral%WellTotalLength==PathGeneration%Items(PathGeneration%ItemCount)%MeasuredDepth) ) then | |||
if ( (data%State%TD_WellGeneral%WellTotalLength==data%Configuration%Path%Items(data%Configuration%Path%ItemCount)%MeasuredDepth) ) then | |||
data%State%ROP_Bit%SetROPGauge = data%State%ROP_Bit%RateOfPenetration | |||
Call Set_ROP(data%State%ROP_Bit%SetROPGauge) ![ft/h] | |||
data%State%ROP_Bit%OldROPValue(4) = data%State%ROP_Bit%RateOfPenetration | |||
@@ -81,9 +81,9 @@ module SimulationVariables | |||
Type(PumpSpecificationType)::Pumps | |||
Type(RigSizeType)::RigSize | |||
Type(CasingLinerChokeType)::CasingLinerChoke | |||
Type(PathGenerationType)::PathGeneration | |||
Type(WellSurveyDataType)::WellSurveyData | |||
Type(MudPropertiesType)::MudProperties | |||
Type(PathGenerationType)::Path | |||
! Type(WellSurveyDataType)::WellSurveyData | |||
Type(MudPropertiesType)::Mud | |||
end type ConfigurationType | |||
type EquipmentControlType | |||
@@ -85,7 +85,8 @@ | |||
<File RelativePath=".\CSharp\BasicInputs\WellProfile\CPathGenerationVariables.f90"/> | |||
<File RelativePath=".\CSharp\BasicInputs\WellProfile\CWellSurveyData.f90"/> | |||
<File RelativePath=".\CSharp\BasicInputs\WellProfile\CWellSurveyDataVariables.f90"/></Filter> | |||
<File RelativePath=".\CSharp\BasicInputs\CMudPropertiesVariables.f90"/></Filter> | |||
<File RelativePath=".\CSharp\BasicInputs\CMudPropertiesVariables.f90"/> | |||
<File RelativePath=".\CSharp\BasicInputs\MudProperties.f90"/></Filter> | |||
<Filter Name="Common"> | |||
<File RelativePath=".\CSharp\Common\CCommon.f90"/> | |||
<File RelativePath=".\CSharp\Common\CCommonVariables.f90"/> | |||
@@ -1,15 +1,7 @@ | |||
real(8) :: CasingDepth | |||
real(8) :: CasingId | |||
real(8) :: CasingOd | |||
real(8) :: CasingWeight | |||
real(8) :: CasingCollapsePressure | |||
real(8) :: CasingTensileStrength | |||
real(8) :: LinerTopDepth | |||
real(8) :: LinerLength | |||
real(8) :: LinerId | |||
real(8) :: LinerOd | |||
real(8) :: LinerWeight | |||
real(8) :: LinerCollapsePressure | |||
real(8) :: LinerTensileStrength | |||
real(8) :: OpenHoleId | |||
real(8) :: OpenHoleLength | |||
integer :: HoleType | |||
real(8) :: Angle | |||
real(8) :: Length | |||
real(8) :: FinalAngle | |||
real(8) :: TotalLength | |||
real(8) :: MeasuredDepth | |||
real(8) :: TotalVerticalDepth |
@@ -9,7 +9,7 @@ subroutine TD_WellReadData | |||
data%State%TD_WellGeneral%WellIntervalsCount = PathGeneration%ItemCount + 1 ! +1 is belong to ROP hole | |||
data%State%TD_WellGeneral%WellIntervalsCount = data%Configuration%Path%ItemCount + 1 ! +1 is belong to ROP hole | |||
if (Allocated(data%State%TD_WellGeo)) deAllocate (data%State%TD_WellGeo) | |||
Allocate (data%State%TD_WellGeo(data%State%TD_WellGeneral%WellIntervalsCount)) | |||
@@ -21,25 +21,25 @@ subroutine TD_WellReadData | |||
! Set Well Geometry Data | |||
!==================================================== | |||
data%State%TD_WellGeo(1)%HoleType = PathGeneration%Items(1)%HoleType | |||
data%State%TD_WellGeo(1)%HoleType = data%Configuration%Path%Items(1)%HoleType | |||
data%State%TD_WellGeo(1)%StartAngle = 0.d0 ![rad] | |||
data%State%TD_WellGeo(1)%EndAngle = PathGeneration%Items(1)%FinalAngle*(pi/180.d0) ![rad] | |||
data%State%TD_WellGeo(1)%IntervalLength= PathGeneration%Items(1)%TotalLength ![ft] | |||
data%State%TD_WellGeo(1)%EndAngle = data%Configuration%Path%Items(1)%FinalAngle*(pi/180.d0) ![rad] | |||
data%State%TD_WellGeo(1)%IntervalLength= data%Configuration%Path%Items(1)%TotalLength ![ft] | |||
!data%State%TD_WellGeo(1)%VerticalDepth = PathGenerations(1)%TotalVerticalDepth | |||
data%State%TD_WellGeo(1)%TopDepth = 0.d0 | |||
data%State%TD_WellGeo(1)%DownDepth = PathGeneration%Items(1)%MeasuredDepth | |||
data%State%TD_WellGeo(1)%DownDepth = data%Configuration%Path%Items(1)%MeasuredDepth | |||
Do i=2,data%State%TD_WellGeneral%WellIntervalsCount-1 | |||
data%State%TD_WellGeo(i)%HoleType = PathGeneration%Items(i)%HoleType | |||
data%State%TD_WellGeo(i)%StartAngle = PathGeneration%Items(i-1)%FinalAngle*(pi/180.d0) | |||
data%State%TD_WellGeo(i)%EndAngle = PathGeneration%Items(i)%FinalAngle*(pi/180.d0) | |||
data%State%TD_WellGeo(i)%IntervalLength= PathGeneration%Items(i)%TotalLength | |||
!data%State%TD_WellGeo(i)%VerticalDepth = PathGeneration%Items(i)%TotalVerticalDepth | |||
data%State%TD_WellGeo(i)%TopDepth = PathGeneration%Items(i-1)%MeasuredDepth | |||
data%State%TD_WellGeo(i)%DownDepth = PathGeneration%Items(i)%MeasuredDepth | |||
data%State%TD_WellGeo(i)%HoleType = data%Configuration%Path%Items(i)%HoleType | |||
data%State%TD_WellGeo(i)%StartAngle = data%Configuration%Path%Items(i-1)%FinalAngle*(pi/180.d0) | |||
data%State%TD_WellGeo(i)%EndAngle = data%Configuration%Path%Items(i)%FinalAngle*(pi/180.d0) | |||
data%State%TD_WellGeo(i)%IntervalLength= data%Configuration%Path%Items(i)%TotalLength | |||
!data%State%TD_WellGeo(i)%VerticalDepth = data%Configuration%Path%Items(i)%TotalVerticalDepth | |||
data%State%TD_WellGeo(i)%TopDepth = data%Configuration%Path%Items(i-1)%MeasuredDepth | |||
data%State%TD_WellGeo(i)%DownDepth = data%Configuration%Path%Items(i)%MeasuredDepth | |||
!=====> Radius Of Curvature Calculation | |||
if (data%State%TD_WellGeo(i)%HoleType/=0) then | |||
@@ -26,7 +26,7 @@ subroutine TD_StartUp | |||
!! Allocate Modules | |||
!!==================================================== | |||
! !=====> Set WellGeo Dimension | |||
! data%State%TD_WellGeneral%WellIntervalsCount = PathGeneration%ItemCount + 1 ! +1 is belong to ROP hole | |||
! data%State%TD_WellGeneral%WellIntervalsCount = data%Configuration%Path%ItemCount + 1 ! +1 is belong to ROP hole | |||
! Allocate (data%State%TD_WellGeo(data%State%TD_WellGeneral%WellIntervalsCount)) | |||
! | |||
! !=====> Set WellGeo Dimension | |||
@@ -37,7 +37,7 @@ subroutine TD_StartUp | |||
data%State%ROP_Bit%RateOfPenetration = 0.d0 | |||
data%State%ROP_Bit%BearingWear = 0.d0 | |||
data%State%ROP_Spec%FormationNumber = 0 | |||
data%State%ROP_Bit%OldROPDepth = PathGeneration%Items(PathGeneration%ItemCount)%MeasuredDepth | |||
data%State%ROP_Bit%OldROPDepth = data%Configuration%Path%Items(data%Configuration%Path%ItemCount)%MeasuredDepth | |||
data%State%ROP_Bit%OldROPValue = 0.d0 | |||
data%State%ROP_Bit%SetROPGauge = 0.d0 | |||
@@ -2,58 +2,81 @@ | |||
"cells": [ | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 19, | |||
"execution_count": 5, | |||
"metadata": {}, | |||
"outputs": [ | |||
{ | |||
"data": { | |||
"text/plain": [ | |||
"[' integer :: RigType\\n',\n", | |||
" ' real(8) :: CrownHeight\\n',\n", | |||
" ' real(8) :: MonkeyBoandHeight\\n',\n", | |||
" ' real(8) :: RigFloorHeight\\n']" | |||
] | |||
}, | |||
"execution_count": 19, | |||
"metadata": {}, | |||
"output_type": "execute_result" | |||
"name": "stdout", | |||
"output_type": "stream", | |||
"text": [ | |||
"{\"BitType\":0,\n", | |||
"\"BitSize\":0,\n", | |||
"\"BitCodeHundreds\":0,\n", | |||
"\"BitCodeTens\":0,\n", | |||
"\"BitCodeOnes\":0,\n", | |||
"\"BitNozzleSize\":0,\n", | |||
"\"BitLength\":0,\n", | |||
"\"BitWeightPerLength\":0,\n", | |||
"\"BitNozzleNo\":0,\n", | |||
"\"FloatValve\":0,\n", | |||
"\n" | |||
] | |||
} | |||
], | |||
"source": [ | |||
"lines" | |||
"input = open(\"Text1.txt\")\n", | |||
"output = \"{\"\n", | |||
"lines = input.readlines()\n", | |||
"for line in lines:\n", | |||
" name = line.split(\"::\")[-1].strip()\n", | |||
" type = line.split(\"::\")[0].strip()\n", | |||
" output += f\"\\\"{name}\\\":0,\\n\" \n", | |||
" # name = line.split(\"%\")[-1][:-1]\n", | |||
" # print(name)\n", | |||
"print(output+\"}\")\n" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"execution_count": 23, | |||
"execution_count": 4, | |||
"metadata": {}, | |||
"outputs": [ | |||
{ | |||
"name": "stdout", | |||
"output_type": "stream", | |||
"text": [ | |||
"call json%add(p,\"CasingDepth\",data%Configuration%CasingLinerChoke%CasingDepth)\n", | |||
"call json%add(p,\"CasingId\",data%Configuration%CasingLinerChoke%CasingId)\n", | |||
"call json%add(p,\"CasingOd\",data%Configuration%CasingLinerChoke%CasingOd)\n", | |||
"call json%add(p,\"CasingWeight\",data%Configuration%CasingLinerChoke%CasingWeight)\n", | |||
"call json%add(p,\"CasingCollapsePressure\",data%Configuration%CasingLinerChoke%CasingCollapsePressure)\n", | |||
"call json%add(p,\"CasingTensileStrength\",data%Configuration%CasingLinerChoke%CasingTensileStrength)\n", | |||
"call json%add(p,\"\",data%Configuration%CasingLinerChoke%)\n", | |||
"call json%add(p,\"LinerTopDepth\",data%Configuration%CasingLinerChoke%LinerTopDepth)\n", | |||
"call json%add(p,\"LinerLength\",data%Configuration%CasingLinerChoke%LinerLength)\n", | |||
"call json%add(p,\"LinerId\",data%Configuration%CasingLinerChoke%LinerId)\n", | |||
"call json%add(p,\"LinerOd\",data%Configuration%CasingLinerChoke%LinerOd)\n", | |||
"call json%add(p,\"LinerWeight\",data%Configuration%CasingLinerChoke%LinerWeight)\n", | |||
"call json%add(p,\"LinerCollapsePressure\",data%Configuration%CasingLinerChoke%LinerCollapsePressure)\n", | |||
"call json%add(p,\"LinerTensileStrength\",data%Configuration%CasingLinerChoke%LinerTensileStrength)\n", | |||
"call json%add(p,\"\",data%Configuration%CasingLinerChoke%)\n", | |||
"call json%add(p,\"OpenHoleId\",data%Configuration%CasingLinerChoke%OpenHoleId)\n", | |||
"call json%add(p,\"OpenHoleLength\",data%Configuration%CasingLinerChoke%OpenHoleLength)\n" | |||
"call json%add(p,\"ActiveMudType\",data%Configuration%Mud%ActiveMudType)\n", | |||
"call json%add(p,\"ActiveRheologyModel\",data%Configuration%Mud%ActiveRheologyModel)\n", | |||
"call json%add(p,\"ActiveMudVolume\",data%Configuration%Mud%ActiveMudVolume)\n", | |||
"call json%add(p,\"ActiveMudVolumeGal\",data%Configuration%Mud%ActiveMudVolumeGal)\n", | |||
"call json%add(p,\"ActiveDensity\",data%Configuration%Mud%ActiveDensity)\n", | |||
"call json%add(p,\"ActivePlasticViscosity\",data%Configuration%Mud%ActivePlasticViscosity)\n", | |||
"call json%add(p,\"ActiveYieldPoint\",data%Configuration%Mud%ActiveYieldPoint)\n", | |||
"call json%add(p,\"ActiveThetaThreeHundred\",data%Configuration%Mud%ActiveThetaThreeHundred)\n", | |||
"call json%add(p,\"ActiveThetaSixHundred\",data%Configuration%Mud%ActiveThetaSixHundred)\n", | |||
"call json%add(p,\"ReserveMudType\",data%Configuration%Mud%ReserveMudType)\n", | |||
"call json%add(p,\"ReserveMudVolume\",data%Configuration%Mud%ReserveMudVolume)\n", | |||
"call json%add(p,\"ReserveMudVolumeGal\",data%Configuration%Mud%ReserveMudVolumeGal)\n", | |||
"call json%add(p,\"ReserveDensity\",data%Configuration%Mud%ReserveDensity)\n", | |||
"call json%add(p,\"ReservePlasticViscosity\",data%Configuration%Mud%ReservePlasticViscosity)\n", | |||
"call json%add(p,\"ReserveYieldPoint\",data%Configuration%Mud%ReserveYieldPoint)\n", | |||
"call json%add(p,\"ReserveThetaThreeHundred\",data%Configuration%Mud%ReserveThetaThreeHundred)\n", | |||
"call json%add(p,\"ReserveThetaSixHundred\",data%Configuration%Mud%ReserveThetaSixHundred)\n", | |||
"call json%add(p,\"ActiveTotalTankCapacity\",data%Configuration%Mud%ActiveTotalTankCapacity)\n", | |||
"call json%add(p,\"ActiveTotalTankCapacityGal\",data%Configuration%Mud%ActiveTotalTankCapacityGal)\n", | |||
"call json%add(p,\"ActiveSettledContents\",data%Configuration%Mud%ActiveSettledContents)\n", | |||
"call json%add(p,\"ActiveSettledContentsGal\",data%Configuration%Mud%ActiveSettledContentsGal)\n", | |||
"call json%add(p,\"ActiveTotalContents\",data%Configuration%Mud%ActiveTotalContents)\n", | |||
"call json%add(p,\"ActiveTotalContentsGal\",data%Configuration%Mud%ActiveTotalContentsGal)\n", | |||
"call json%add(p,\"ActiveAutoDensity\",data%Configuration%Mud%ActiveAutoDensity)\n", | |||
"call json%add(p,\"InitialTripTankMudVolume\",data%Configuration%Mud%InitialTripTankMudVolume)\n", | |||
"call json%add(p,\"InitialTripTankMudVolumeGal\",data%Configuration%Mud%InitialTripTankMudVolumeGal)\n", | |||
"call json%add(p,\"PedalFlowMeter\",data%Configuration%Mud%PedalFlowMeter)\n" | |||
] | |||
} | |||
], | |||
"source": [ | |||
"precode = \"\"\"call json%add(p,\"\",data%Configuration%CasingLinerChoke%\"\"\"\n", | |||
"precode = \"\"\"call json%add(p,\"\",data%Configuration%Mud%\"\"\"\n", | |||
"input = open(\"Text1.txt\")\n", | |||
"lines = input.readlines()\n", | |||
"for line in lines:\n", | |||
@@ -1,7 +1,31 @@ | |||
{ | |||
"Configuration": { | |||
"StringConfiguration": { | |||
"StringConfigurationItems": [], | |||
"StringConfigurationItems": [ | |||
{"BitType":0, | |||
"BitSize":0, | |||
"BitCodeHundreds":0, | |||
"BitCodeTens":0, | |||
"BitCodeOnes":0, | |||
"BitNozzleSize":0, | |||
"BitLength":0, | |||
"BitWeightPerLength":0, | |||
"BitNozzleNo":0, | |||
"FloatValve":0 | |||
} | |||
, | |||
{"BitType":0, | |||
"BitSize":0, | |||
"BitCodeHundreds":0, | |||
"BitCodeTens":0, | |||
"BitCodeOnes":0, | |||
"BitNozzleSize":0, | |||
"BitLength":0, | |||
"BitWeightPerLength":0, | |||
"BitNozzleNo":0, | |||
"FloatValve":0 | |||
} | |||
], | |||
"BitDefenition": { | |||
"BitCodeHundreds": 0, | |||
"BitCodeOnes": 0, | |||
@@ -15,7 +39,22 @@ | |||
"FloatValve": false | |||
} | |||
}, | |||
"Fromations": [], | |||
"Fromations": [ | |||
{"Top":0, | |||
"Thickness":0, | |||
"Drillablity":0, | |||
"Abrasiveness":0, | |||
"ThresholdWeight":0, | |||
"PorePressureGradient":0 | |||
}, | |||
{"Top":0, | |||
"Thickness":0, | |||
"Drillablity":0, | |||
"Abrasiveness":0, | |||
"ThresholdWeight":0, | |||
"PorePressureGradient":0 | |||
} | |||
], | |||
"Reservoir": { | |||
"AutoMigrationRate": 0.0E+0, | |||
"FluidGradient": 0.0E+0, | |||
@@ -152,6 +191,33 @@ | |||
"OpenHoleId": 0.0E+0, | |||
"OpenHoleLength": 0.0E+0 | |||
}, | |||
"Path": {} | |||
"Path": { | |||
"Items": [ | |||
{"HoleType":0, | |||
"Angle":0, | |||
"Length":0, | |||
"FinalAngle":0, | |||
"TotalLength":0, | |||
"MeasuredDepth":0, | |||
"TotalVerticalDepth":0 | |||
}, | |||
{"HoleType":0, | |||
"Angle":0, | |||
"Length":0, | |||
"FinalAngle":0, | |||
"TotalLength":0, | |||
"MeasuredDepth":0, | |||
"TotalVerticalDepth":0 | |||
} | |||
], | |||
"DataPoints": [ | |||
{"X":0, | |||
"Y":0 | |||
}, | |||
{"X":0, | |||
"Y":0 | |||
} | |||
] | |||
} | |||
} | |||
} |