@@ -151,7 +151,7 @@ subroutine Kick_Contraction ! is called in subroutine CirculationCodeSelect | |||||
!********************************************************* | !********************************************************* | ||||
!write(*,*) 'Kick Contraction' | !write(*,*) 'Kick Contraction' | ||||
!MUD(2)%Q= total_pumps%Total_Pump_GPM | |||||
!MUD(2)%Q= MPumps%Total_Pump_GPM | |||||
StringFlowRate= MUD(2)%Q | StringFlowRate= MUD(2)%Q | ||||
AnnulusFlowRate= MUD(2)%Q | AnnulusFlowRate= MUD(2)%Q | ||||
@@ -18,7 +18,7 @@ subroutine Kick_Migration ! is called in subroutine CirculationCodeSelect | |||||
integer jopelement,jopmud,jopsection,CuttingValue | integer jopelement,jopmud,jopsection,CuttingValue | ||||
!MUD(2)%Q= total_pumps%Total_Pump_GPM | |||||
!MUD(2)%Q= MPumps%Total_Pump_GPM | |||||
!StringFlowRate= MUD(2)%Q | !StringFlowRate= MUD(2)%Q | ||||
!AnnulusFlowRate= MUD(2)%Q | !AnnulusFlowRate= MUD(2)%Q | ||||
! | ! | ||||
@@ -2189,9 +2189,9 @@ module MudSystem | |||||
GraphTotalStrokes=GraphTotalStrokes+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline | GraphTotalStrokes=GraphTotalStrokes+((DataDisplayConsole%MP1SPMGauge)/60.)*DeltaT_Mudline+((DataDisplayConsole%MP2SPMGauge)/60.)*DeltaT_Mudline | ||||
total_pumps%Total_Stroke_Counter_For_Plot = total_pumps%Total_Stroke_Counter_For_Plot + ((DataDisplayConsole%MP1SPMGauge + DataDisplayConsole%MP2SPMGauge) / 60.0) * DeltaT_Mudline | |||||
MPumps%Total_Stroke_Counter_For_Plot = MPumps%Total_Stroke_Counter_For_Plot + ((DataDisplayConsole%MP1SPMGauge + DataDisplayConsole%MP2SPMGauge) / 60.0) * DeltaT_Mudline | |||||
CALL SetTotalStrokes(INT(total_pumps%Total_Stroke_Counter_For_Plot)) | |||||
CALL SetTotalStrokes(INT(MPumps%Total_Stroke_Counter_For_Plot)) | |||||
DataDisplayConsole%TotalStrokeCounter= real(nint(TotalStrokesPump1+TotalStrokesPump2)) !for drilling data display | DataDisplayConsole%TotalStrokeCounter= real(nint(TotalStrokesPump1+TotalStrokesPump2)) !for drilling data display | ||||
@@ -31,7 +31,7 @@ AnnCapOld=0. | |||||
DeltaAnnCap=0. | DeltaAnnCap=0. | ||||
total_pumps%Total_Stroke_Counter_For_Plot = 0.0 | |||||
MPumps%Total_Stroke_Counter_For_Plot = 0.0 | |||||
DeltaT_Mudline=0.1 !second | DeltaT_Mudline=0.1 !second | ||||
@@ -131,7 +131,7 @@ FluidFlowCounter = 0 | |||||
CALL MUDLINE_LOSS_INPUTS() | CALL MUDLINE_LOSS_INPUTS() | ||||
!total_pumps%Total_Pump_GPM=10. ! Initial Value | |||||
!MPumps%Total_Pump_GPM=10. ! Initial Value | |||||
MUD%Q=0. ! Initial Value | MUD%Q=0. ! Initial Value | ||||
Q_flow32=0. | Q_flow32=0. | ||||
@@ -1,66 +1,57 @@ | |||||
subroutine Pump1_MainSolver | subroutine Pump1_MainSolver | ||||
use Pumps_VARIABLES | |||||
Use Pumps_VARIABLES | |||||
Implicit none | |||||
implicit none | |||||
!Call DrillingConsole_ScrLEDs | |||||
Call Pumps_Inputs | |||||
if (PUMP(1)%Throttle<=0.e0) then | |||||
if (PUMP(1)%Throttle<=0.d0) then | |||||
PUMP(1)%K_throttle = 1 | PUMP(1)%K_throttle = 1 | ||||
end if | end if | ||||
if((any(PUMP(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (PUMP(1)%Switch==-1) .and. (PUMP(1)%K_throttle==1) .and. (PUMP(1)%PowerFailMalf==0) .and. (PUMP(1)%Failure==0) .and. (Pumps_IsStopped == .false.)) then | |||||
!!print*, 'pumps on' | |||||
if((any(PUMP(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (PUMP(1)%Switch==-1) .and. (PUMP(1)%K_throttle==1) .and. (PUMP(1)%PowerFailMalf==0) .and. (PUMP(1)%Failure==0)) then | |||||
PUMP(1)%SoundBlower = .true. | PUMP(1)%SoundBlower = .true. | ||||
!Call SetSoundBlowerMP1(PUMP(1)%SoundBlower) | |||||
!MP1BLWR = 1 | |||||
PUMP(1)%BLWR = 1 | |||||
!========================== Pump 1 Rate limit ========================== | !========================== Pump 1 Rate limit ========================== | ||||
if (((PUMP(1)%N_new-PUMP(1)%N_old)/PUMP(1)%time_step)>PUMP(1)%RateChange) then | if (((PUMP(1)%N_new-PUMP(1)%N_old)/PUMP(1)%time_step)>PUMP(1)%RateChange) then | ||||
PUMP(1)%Speed =(PUMP(1)%RateChange*PUMP(1)%time_step)+PUMP(1)%N_old | |||||
PUMP(1)%Speed =(PUMP(1)%RateChange*PUMP(1)%time_step)+PUMP(1)%N_old ![RPM] | |||||
else if (((PUMP(1)%N_old-PUMP(1)%N_new)/PUMP(1)%time_step)>PUMP(1)%RateChange) then | else if (((PUMP(1)%N_old-PUMP(1)%N_new)/PUMP(1)%time_step)>PUMP(1)%RateChange) then | ||||
PUMP(1)%Speed = (-PUMP(1)%RateChange*PUMP(1)%time_step)+PUMP(1)%N_old | PUMP(1)%Speed = (-PUMP(1)%RateChange*PUMP(1)%time_step)+PUMP(1)%N_old | ||||
else | else | ||||
PUMP(1)%Speed = PUMP(1)%N_new | PUMP(1)%Speed = PUMP(1)%N_new | ||||
end if | end if | ||||
!======================================================================= | !======================================================================= | ||||
Call Pump_OnMode_Solver(1) | Call Pump_OnMode_Solver(1) | ||||
else | |||||
else | |||||
if ((any(PUMP(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (PUMP(1)%Switch==-1) .and. (Pumps_IsStopped == .false.)) then | |||||
if ((any(PUMP(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (PUMP(1)%Switch==-1)) then | |||||
PUMP(1)%SoundBlower = .true. | PUMP(1)%SoundBlower = .true. | ||||
!Call SetSoundBlowerMP1(PUMP(1)%SoundBlower) | |||||
else | else | ||||
PUMP(1)%SoundBlower = .false. | PUMP(1)%SoundBlower = .false. | ||||
!Call SetSoundBlowerMP1(PUMP(1)%SoundBlower) | |||||
end if | end if | ||||
if ((any(PUMP(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (PUMP(1)%Switch==-1) .and. (Pumps_IsStopped == .false.) .and. (PUMP(1)%PowerFailMalf==0) .and. (PUMP(1)%Failure==0)) then | |||||
!MP1BLWR = 1 | |||||
if ((any(PUMP(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (PUMP(1)%Switch==-1) .and. (PUMP(1)%PowerFailMalf==0) .and. (PUMP(1)%Failure==0)) then | |||||
PUMP(1)%BLWR = 1 | |||||
else | else | ||||
!MP1BLWR = 0 | |||||
PUMP(1)%BLWR = 0 | |||||
end if | end if | ||||
Call Pump_OffMode_Solver(1) | Call Pump_OffMode_Solver(1) | ||||
!Call ClosePump1() | |||||
PUMP(1)%K_throttle = 0 | PUMP(1)%K_throttle = 0 | ||||
end if | end if | ||||
PUMP(1)%N_old = PUMP(1)%Speed | |||||
PUMP(1)%N_old = PUMP(1)%Speed | |||||
print*, 'Q , P , Hp , N=' | |||||
print*, PUMP(1)%Flow_Rate , PUMP(1)%StandPipe_Pressure , PUMP(1)%Hydraulic_HorsePower , PUMP(1)%Speed | |||||
! pause | |||||
end subroutine Pump1_MainSolver | end subroutine Pump1_MainSolver |
@@ -0,0 +1,57 @@ | |||||
subroutine Pump2_MainSolver | |||||
Use Pumps_VARIABLES | |||||
Implicit none | |||||
if (PUMP(2)%Throttle<=0.d0) then | |||||
PUMP(2)%K_throttle = 1 | |||||
end if | |||||
if((any(PUMP(2)%AssignmentSwitchh==(/1,2,3,4,5,7,8,11/))) .and. (PUMP(2)%Switch==-1) .and. (PUMP(2)%K_throttle==1) .and. (PUMP(2)%PowerFailMalf==0) .and. (PUMP(2)%Failure==0)) then | |||||
PUMP(2)%SoundBlower = .true. | |||||
PUMP(2)%BLWR = 1 | |||||
!========================== Pump 2 Rate limit ========================== | |||||
if (((PUMP(2)%N_new-PUMP(2)%N_old)/PUMP(2)%time_step)>PUMP(2)%RateChange) then | |||||
PUMP(2)%Speed =(PUMP(2)%RateChange*PUMP(2)%time_step)+PUMP(2)%N_old | |||||
else if (((PUMP(2)%N_old-PUMP(2)%N_new)/PUMP(2)%time_step)>PUMP(2)%RateChange) then | |||||
PUMP(2)%Speed = (-PUMP(2)%RateChange*PUMP(2)%time_step)+PUMP(2)%N_old | |||||
else | |||||
PUMP(2)%Speed = PUMP(2)%N_new | |||||
end if | |||||
!======================================================================= | |||||
Call Pump_OnMode_Solver(2) | |||||
else | |||||
if ((any(PUMP(2)%AssignmentSwitchh==(/1,2,3,4,5,7,8,11/))) .and. (PUMP(2)%Switch==-1)) then | |||||
PUMP(2)%SoundBlower = .true. | |||||
else | |||||
PUMP(2)%SoundBlower = .false. | |||||
end if | |||||
if ((any(PUMP(2)%AssignmentSwitchh==(/1,2,3,4,5,7,8,11/))) .and. (PUMP(2)%Switch==-1) .and. (PUMP(2)%PowerFailMalf==0) .and. (PUMP(2)%Failure==0)) then | |||||
PUMP(2)%BLWR = 1 | |||||
else | |||||
PUMP(2)%BLWR = 0 | |||||
end if | |||||
Call Pump_OffMode_Solver(2) | |||||
PUMP(2)%K_throttle = 0 | |||||
end if | |||||
PUMP(2)%N_old = PUMP(2)%Speed | |||||
end subroutine Pump2_MainSolver |
@@ -0,0 +1,41 @@ | |||||
subroutine Pump3_MainSolver | |||||
Use Pumps_VARIABLES | |||||
Implicit none | |||||
if (PUMP(3)%Throttle<=0.d0) then | |||||
PUMP(3)%K_throttle = 1 | |||||
end if | |||||
if((PUMP(3)%Switch==1) .and. (PUMP(3)%K_throttle==1) .and. (PUMP(3)%PowerFailMalf==0) .and. (PUMP(3)%Failure==0)) then | |||||
!========================== Pump 3 Rate limit ========================== | |||||
if (((PUMP(3)%N_new-PUMP(3)%N_old)/PUMP(3)%time_step)>PUMP(3)%RateChange) then | |||||
PUMP(3)%Speed =(PUMP(3)%RateChange*PUMP(3)%time_step)+PUMP(3)%N_old ![RPM] | |||||
else if (((PUMP(3)%N_old-PUMP(3)%N_new)/PUMP(3)%time_step)>PUMP(3)%RateChange) then | |||||
PUMP(3)%Speed = (-PUMP(3)%RateChange*PUMP(3)%time_step)+PUMP(3)%N_old | |||||
else | |||||
PUMP(3)%Speed = PUMP(3)%N_new | |||||
end if | |||||
!======================================================================= | |||||
Call Pump_OnMode_Solver(3) | |||||
else | |||||
Call Pump_OffMode_Solver(3) | |||||
PUMP(3)%K_throttle = 0 | |||||
end if | |||||
PUMP(3)%N_old = PUMP(3)%Speed | |||||
end subroutine Pump3_MainSolver |
@@ -1,52 +1,46 @@ | |||||
subroutine Pump_OffMode_Solver(Pump_No) | subroutine Pump_OffMode_Solver(Pump_No) | ||||
use Pumps_VARIABLES | |||||
!use CPumpsVariables | |||||
!use CDrillingConsoleVariables | |||||
!use CDataDisplayConsoleVariables | |||||
!! use CSimulationVariables | |||||
!use CDrillWatchVariables | |||||
!use CSounds | |||||
Use Pumps_VARIABLES | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
INTEGER :: Pump_No | INTEGER :: Pump_No | ||||
PUMP(1)%N_new = 0.e0 | |||||
!========================== Pump 1 Rate limit ========================== | |||||
if (((PUMP(1)%N_new-PUMP(1)%N_old)/PUMP(1)%time_step)>PUMP(1)%RateChange) then | |||||
PUMP(1)%Speed =(PUMP(1)%RateChange*PUMP(1)%time_step)+PUMP(1)%N_old | |||||
else if (((PUMP(1)%N_old-PUMP(1)%N_new)/PUMP(1)%time_step)>PUMP(1)%RateChange) then | |||||
PUMP(1)%Speed = (-PUMP(1)%RateChange*PUMP(1)%time_step)+PUMP(1)%N_old | |||||
else | |||||
PUMP(1)%Speed = PUMP(1)%N_new | |||||
end if | |||||
!======================================================================= | |||||
PUMP(Pump_No)%Flow_Rate = PUMP(1)%FlowRatePerSTK*4118.e0*0.01e0*(PUMP(Pump_No)%Speed/PUMP(Pump_No)%Trans_Ratio) ![gpm] | |||||
PUMP(Pump_No)%Hydraulic_HorsePower = ( (PUMP(Pump_No)%Flow_Rate/0.01e0)*PUMP(Pump_No)%Max_Pressure)/(168067.e0*PUMP(Pump_No)%Mech_Efficiency) ![HHP] | |||||
if ( PUMP(Pump_No)%StandPipe_Pressure>=PUMP(Pump_No)%Max_Pressure ) then | |||||
!print*, 'pumps critical' | |||||
PUMP(Pump_No)%Flow_Rate = (1714.e0*PUMP(Pump_No)%Hydraulic_HorsePower)/PUMP(Pump_No)%Max_Pressure ![gpm] | |||||
PUMP(Pump_No)%Speed = ( PUMP(Pump_No)%Flow_Rate/(PUMP(1)%FlowRatePerSTK*4118.e0*0.01e0) )*PUMP(Pump_No)%Trans_Ratio ![rpm] | |||||
end if | |||||
total_pumps%Total_Pump_GPM = PUMP(1)%Flow_Rate+PUMP(2)%Flow_Rate+PUMP(3)%Flow_Rate | |||||
total_pumps%Total_Pump_SPM = (PUMP(1)%Speed/PUMP(1)%Trans_Ratio)+(PUMP(2)%Speed/PUMP(2)%Trans_Ratio)+(PUMP(3)%Speed/PUMP(3)%Trans_Ratio) | |||||
!Call Set_MP1SPMGauge( sngl(1-PUMP(1)%SPMGaugeMalf)*real((PUMP(1)%Speed/PUMP(1)%Trans_Ratio),8) ) | |||||
!SPM1 = MP1SPMGauge | |||||
!PUMP(1)%SoundSPM = INT(PUMP(1)%Speed/PUMP(1)%Trans_Ratio) | |||||
!Call SetSoundMP1( PUMP(1)%SoundSPM ) | |||||
PUMP(Pump_No)%N_new = 0.d0 | |||||
!========================== Pump Rate limit ========================== | |||||
if (((PUMP(Pump_No)%N_new-PUMP(Pump_No)%N_old)/PUMP(Pump_No)%time_step)>PUMP(Pump_No)%RateChange) then | |||||
PUMP(Pump_No)%Speed =(PUMP(Pump_No)%RateChange*PUMP(Pump_No)%time_step)+PUMP(Pump_No)%N_old | |||||
else if (((PUMP(Pump_No)%N_old-PUMP(Pump_No)%N_new)/PUMP(Pump_No)%time_step)>PUMP(Pump_No)%RateChange) then | |||||
PUMP(Pump_No)%Speed = (-PUMP(Pump_No)%RateChange*PUMP(Pump_No)%time_step)+PUMP(Pump_No)%N_old | |||||
else | |||||
PUMP(Pump_No)%Speed = PUMP(Pump_No)%N_new | |||||
end if | |||||
!======================================================================= | |||||
PUMP(Pump_No)%Flow_Rate = PUMP(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0*(PUMP(Pump_No)%Speed/PUMP(Pump_No)%Trans_Ratio) ![gpm] | |||||
PUMP(Pump_No)%HorsePower = ((PUMP(Pump_No)%Flow_Rate/0.01d0)*PUMP(Pump_No)%StandPipe_Pressure)/(168067.d0*PUMP(Pump_No)%Mech_Efficiency) ![HHP] | |||||
!PUMP(Pump_No)%Max_Horsepower = ((PUMP(Pump_No)%Flow_Rate/0.01d0)*PUMP(Pump_No)%Max_Pressure)/(168067.d0*PUMP(Pump_No)%Mech_Efficiency) ![HHP] | |||||
PUMP(Pump_No)%Max_Horsepower = (PUMP(Pump_No)%Flow_Rate*PUMP(Pump_No)%Max_Pressure)/(1714.d0*PUMP(Pump_No)%Mech_Efficiency) | |||||
if ( PUMP(Pump_No)%StandPipe_Pressure>PUMP(Pump_No)%Max_Pressure ) then ! in shart check shavad | |||||
!if ( (PUMP(Pump_No)%StandPipe_Pressure*PUMP(Pump_No)%Flow_Rate)>(1714.d0*PUMP(Pump_No)%Max_Horsepower*PUMP(Pump_No)%Mech_Efficiency) ) then | |||||
PUMP(Pump_No)%Flow_Rate = (1714.d0*PUMP(Pump_No)%Mech_Efficiency*PUMP(Pump_No)%Max_Horsepower)/PUMP(Pump_No)%StandPipe_Pressure ![gpm] | |||||
PUMP(Pump_No)%Speed = ( PUMP(Pump_No)%Flow_Rate/(PUMP(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0) )*PUMP(Pump_No)%Trans_Ratio ![rpm] | |||||
end if | |||||
PUMP(Pump_No)%SoundSPM = INT(PUMP(Pump_No)%Speed/PUMP(Pump_No)%Trans_Ratio) | |||||
If (PUMP(Pump_No)%Flow_Rate>0.d0) Then | |||||
PUMP(Pump_No)%Open_Close = 1 | |||||
Else | |||||
PUMP(Pump_No)%Open_Close = 0 | |||||
End if | |||||
end subroutine Pump_OffMode_Solver | end subroutine Pump_OffMode_Solver |
@@ -1,55 +1,32 @@ | |||||
subroutine Pump_OnMode_Solver(Pump_No) | subroutine Pump_OnMode_Solver(Pump_No) | ||||
use Pumps_VARIABLES | |||||
!use CPumpsVariables | |||||
!use CDrillingConsoleVariables | |||||
!use CDataDisplayConsoleVariables | |||||
!! use CSimulationVariables | |||||
!use CDrillWatchVariables | |||||
!use equipments_PowerLimit | |||||
!use CSounds | |||||
!use CWarningsVariables | |||||
Use Pumps_VARIABLES | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
INTEGER :: Pump_No | INTEGER :: Pump_No | ||||
PUMP(Pump_No)%Flow_Rate = PUMP(1)%FlowRatePerSTK*4118.e0*0.01e0*(PUMP(Pump_No)%Speed/PUMP(Pump_No)%Trans_Ratio) ![gpm] | |||||
PUMP(Pump_No)%Max_FlowRate = PUMP(1)%FlowRatePerSTK*4118.e0*0.01e0*PUMP(1)%MaxSPM ![gpm] | |||||
PUMP(Pump_No)%Hydraulic_HorsePower = ( (PUMP(Pump_No)%Flow_Rate/0.01e0)*PUMP(Pump_No)%Max_Pressure)/(168067.e0*PUMP(Pump_No)%Mech_Efficiency) ![HHP] | |||||
if ( PUMP(Pump_No)%StandPipe_Pressure>=PUMP(Pump_No)%Max_Pressure ) then ! in shart check shavad | |||||
!print*, 'pumps critical' | |||||
PUMP(Pump_No)%Flow_Rate = (1714.e0*PUMP(Pump_No)%Hydraulic_HorsePower)/PUMP(Pump_No)%Max_Pressure ![gpm] | |||||
PUMP(Pump_No)%Speed = ( PUMP(Pump_No)%Flow_Rate/(PUMP(1)%FlowRatePerSTK*4118.e0*0.01e0) )*PUMP(Pump_No)%Trans_Ratio ![rpm] | |||||
end if | |||||
PUMP(Pump_No)%Flow_Rate = PUMP(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0*(PUMP(Pump_No)%Speed/PUMP(Pump_No)%Trans_Ratio) ![gpm] | |||||
PUMP(Pump_No)%Max_FlowRate = PUMP(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0*PUMP(Pump_No)%MaxSPM ![gpm] | |||||
PUMP(Pump_No)%HorsePower = ((PUMP(Pump_No)%Flow_Rate/0.01d0)*PUMP(Pump_No)%StandPipe_Pressure)/(168067.d0*PUMP(Pump_No)%Mech_Efficiency) ![HHP] | |||||
!PUMP(Pump_No)%Max_Horsepower = ((PUMP(Pump_No)%Flow_Rate/0.01d0)*PUMP(Pump_No)%Max_Pressure)/(168067.d0*PUMP(Pump_No)%Mech_Efficiency) ![HHP] | |||||
PUMP(Pump_No)%Max_Horsepower = (PUMP(Pump_No)%Flow_Rate*PUMP(Pump_No)%Max_Pressure)/(1714.d0*PUMP(Pump_No)%Mech_Efficiency) | |||||
if ( PUMP(Pump_No)%StandPipe_Pressure>PUMP(Pump_No)%Max_Pressure ) then ! in shart check shavad | |||||
!if ( (PUMP(Pump_No)%StandPipe_Pressure*PUMP(Pump_No)%Flow_Rate)>(1714.d0*PUMP(Pump_No)%Max_Horsepower*PUMP(Pump_No)%Mech_Efficiency) ) then | |||||
PUMP(Pump_No)%Flow_Rate = (1714.d0*PUMP(Pump_No)%Mech_Efficiency*PUMP(Pump_No)%Max_Horsepower)/PUMP(Pump_No)%StandPipe_Pressure ![gpm] | |||||
PUMP(Pump_No)%Speed = ( PUMP(Pump_No)%Flow_Rate/(PUMP(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0) )*PUMP(Pump_No)%Trans_Ratio ![rpm] | |||||
end if | |||||
total_pumps%Total_Pump_GPM = PUMP(1)%Flow_Rate+PUMP(2)%Flow_Rate+PUMP(3)%Flow_Rate | |||||
total_pumps%Total_Pump_SPM = (PUMP(1)%Speed/PUMP(1)%Trans_Ratio)+(PUMP(2)%Speed/PUMP(2)%Trans_Ratio)+(PUMP(3)%Speed/PUMP(3)%Trans_Ratio) | |||||
PUMP(Pump_No)%SoundSPM = INT(PUMP(Pump_No)%Speed/PUMP(Pump_No)%Trans_Ratio) ![spm] | |||||
If (PUMP(Pump_No)%Flow_Rate>0.d0) Then | |||||
PUMP(Pump_No)%Open_Close = 1 | |||||
Else | |||||
PUMP(Pump_No)%Open_Close = 0 | |||||
End if | |||||
!Call Set_MP1SPMGauge( sngl(1-PUMP(1)%SPMGaugeMalf)*real((PUMP(1)%Speed/PUMP(1)%Trans_Ratio),8) ) | |||||
!SPM1 = MP1SPMGauge | |||||
!PUMP(1)%SoundSPM = INT(PUMP(1)%Speed/PUMP(1)%Trans_Ratio) | |||||
!Call SetSoundMP1( PUMP(1)%SoundSPM ) | |||||
! | |||||
! | |||||
! | |||||
!IF (PUMP(1)%Flow_Rate>0.) Then | |||||
! Call OpenPump1() | |||||
!Else | |||||
! Call ClosePump1() | |||||
!End if | |||||
!IF (PUMP(2)%Flow_Rate>0.) Then | |||||
! Call OpenPump2() | |||||
!Else | |||||
! Call ClosePump2() | |||||
!End if | |||||
@@ -1,11 +1,6 @@ | |||||
module PumpsMain | module PumpsMain | ||||
use CPumpsVariables | |||||
use CDrillingConsoleVariables | |||||
use CDataDisplayConsoleVariables | |||||
! use CSimulationVariables | |||||
use Pumps_VARIABLES | |||||
use CSounds | |||||
Use Pumps_VARIABLES | |||||
implicit none | implicit none | ||||
public | public | ||||
@@ -18,15 +13,15 @@ module PumpsMain | |||||
! ***** subroutine Pump1MainBody ***** | ! ***** subroutine Pump1MainBody ***** | ||||
! **************************** | ! **************************** | ||||
! subroutine Pump1_Setup() | |||||
! ! use CSimulationVariables | |||||
! implicit none | |||||
! call OnSimulationInitialization%Add(Pump1_Init) | |||||
! call OnSimulationStop%Add(Pump1_Init) | |||||
! call OnPump1Step%Add(Pump1_Step) | |||||
! call OnPump1Output%Add(Pump1_Output) | |||||
! call OnPump1Main%Add(Pump1MainBody) | |||||
! end subroutine | |||||
subroutine Pump1_Setup() | |||||
use CSimulationVariables | |||||
implicit none | |||||
call OnSimulationInitialization%Add(Pump1_Init) | |||||
call OnSimulationStop%Add(Pump1_Init) | |||||
call OnPump1Step%Add(Pump1_Step) | |||||
call OnPump1Output%Add(Pump1_Output) | |||||
call OnPump1Main%Add(Pump1MainBody) | |||||
end subroutine | |||||
subroutine Pump1_Init | subroutine Pump1_Init | ||||
Call Pumps_StartUp | Call Pumps_StartUp | ||||
@@ -36,41 +31,27 @@ module PumpsMain | |||||
Call Pump1_MainSolver | Call Pump1_MainSolver | ||||
end subroutine Pump1_Step | end subroutine Pump1_Step | ||||
! subroutine Pump1_Output | |||||
! implicit none | |||||
! end subroutine Pump1_Output | |||||
! subroutine Pump1MainBody | |||||
! use ifport | |||||
! use ifmt | |||||
! !use Pump1_MainSolver | |||||
! use CWarningsVariables | |||||
! !use equipments_PowerLimit | |||||
! implicit none | |||||
subroutine Pump1_Output | |||||
implicit none | |||||
end subroutine Pump1_Output | |||||
subroutine Pump1MainBody | |||||
use ifport | |||||
use ifmt | |||||
implicit none | |||||
! integer,dimension(8) :: MP_START_TIME, MP_END_TIME | |||||
! INTEGER :: MP_SolDuration | |||||
Call Pumps_StartUp | |||||
! Call Pumps_StartUp | |||||
! loop1 : do | |||||
! !!Call sleepqq(10) | |||||
! !!Call DATE_AND_TIME(values=MP_START_TIME) | |||||
! Call Pump1_MainSolver | |||||
! if (Pumps_IsStopped == .true.) then | |||||
! exit loop1 | |||||
! end if | |||||
loop1 : do | |||||
Call Pumps_MainSolver | |||||
! !!Call DATE_AND_TIME(values=MP_END_TIME) | |||||
! !!MP_SolDuration = 100-(MP_END_TIME(5)*3600000+MP_END_TIME(6)*60000+MP_END_TIME(7)*1000+MP_END_TIME(8)-MP_START_TIME(5)*3600000-MP_START_TIME(6)*60000-MP_START_TIME(7)*1000-MP_START_TIME(8)) | |||||
! !!if(MP_SolDuration > 0.0) then | |||||
! !! Call sleepqq(MP_SolDuration) | |||||
! !!end if | |||||
! end do loop1 | |||||
end do loop1 | |||||
! end subroutine Pump1MainBody | |||||
end subroutine Pump1MainBody | |||||
@@ -80,7 +61,7 @@ module PumpsMain | |||||
! ***** subroutine Pump2MainBody ***** | ! ***** subroutine Pump2MainBody ***** | ||||
! **************************** | ! **************************** | ||||
! subroutine Pump2_Setup() | ! subroutine Pump2_Setup() | ||||
! ! use CSimulationVariables | |||||
! use CSimulationVariables | |||||
! implicit none | ! implicit none | ||||
! call OnSimulationInitialization%Add(Pump2_Init) | ! call OnSimulationInitialization%Add(Pump2_Init) | ||||
! call OnSimulationStop%Add(Pump2_Init) | ! call OnSimulationStop%Add(Pump2_Init) | ||||
@@ -140,7 +121,7 @@ module PumpsMain | |||||
!! ***** subroutine Pump3MainBody ***** | !! ***** subroutine Pump3MainBody ***** | ||||
!! **************************** | !! **************************** | ||||
! subroutine Pump3_Setup() | ! subroutine Pump3_Setup() | ||||
! ! use CSimulationVariables | |||||
! use CSimulationVariables | |||||
! implicit none | ! implicit none | ||||
! call OnSimulationInitialization%Add(Pump3_Init) | ! call OnSimulationInitialization%Add(Pump3_Init) | ||||
! call OnSimulationStop%Add(Pump3_Init) | ! call OnSimulationStop%Add(Pump3_Init) | ||||
@@ -1,55 +1,110 @@ | |||||
subroutine Pumps_Inputs | subroutine Pumps_Inputs | ||||
!use CPumpsVariables | |||||
!use CDrillingConsoleVariables | |||||
!use CDataDisplayConsoleVariables | |||||
!! use CSimulationVariables | |||||
use Pumps_VARIABLES | |||||
!use MudSystem | |||||
Use CDrillingConsoleVariables | |||||
Use Pumps_VARIABLES | |||||
Use MudSystem | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
PUMP(1)%StandPipe_Pressure = 25.e0!PumpPressure1 ![psi] | |||||
!PUMP(1)%BlowPopOffMalf = 0 !??????? motaghayere voroudi | |||||
PUMP(1)%AssignmentSwitchh = 1!AssignmentSwitch | |||||
if ( PUMP(1)%BlowPopOffMalf==1 ) then ! Pump1 Malfunction ----> Blow Pop-offs (Relief Valves) | |||||
PUMP(1)%StandPipe_Pressure = 0.d0 | |||||
else | |||||
PUMP(1)%StandPipe_Pressure = PumpPressure1 ![psi] | |||||
if ( PUMP(1)%StandPipe_Pressure<=14.d0 ) then | |||||
PUMP(1)%StandPipe_Pressure = 14.d0 | |||||
end if | |||||
end if | |||||
PUMP(1)%Switch = -1!MP1CPSwitch | |||||
PUMP(1)%AssignmentSwitchh = DrillingConsole%AssignmentSwitch | |||||
PUMP(1)%Throttle = 0.e0!MP1Throttle ![RPM] | |||||
PUMP(1)%Switch = DrillingConsole%MP1CPSwitch | |||||
PUMP(1)%PowerFailMalf = 1 !??????? motaghayere voroudi (Pump1 Malfunction ----> Power Failure) | |||||
PUMP(1)%Throttle = DrillingConsole%MP1Throttle ![RPM] | |||||
PUMP(1)%Failure = 0!Pump1Failure (Pump1 Warning ----> Failure) | |||||
!PUMP(1)%PowerFailMalf = 0 !??????? motaghayere voroudi (Pump1 Malfunction ----> Power Failure) !dar CPumpProblemsVariables meghdardehi mishavad | |||||
Pumps_IsStopped = .false.!IsStopped | |||||
PUMP(1)%Failure = Pump1Failure !(Pump1 Warning ----> Failure) | |||||
PUMP(1)%N_new = PUMP(1)%Throttle | |||||
PUMP(1)%N_new = PUMP(1)%Throttle | |||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
!PUMP(2)%BlowPopOffMalf = 0 !??????? motaghayere voroudi | |||||
if ( PUMP(2)%BlowPopOffMalf==1 ) then ! Pump2 Malfunction ----> Blow Pop-offs (Relief Valves) | |||||
PUMP(2)%StandPipe_Pressure = 0.d0 | |||||
else | |||||
PUMP(2)%StandPipe_Pressure = PumpPressure2 ![psi] | |||||
if ( PUMP(2)%StandPipe_Pressure<=14.d0 ) then | |||||
PUMP(2)%StandPipe_Pressure = 14.d0 | |||||
end if | |||||
end if | |||||
PUMP(2)%AssignmentSwitchh = DrillingConsole%AssignmentSwitch | |||||
PUMP(2)%Switch = DrillingConsole%MP2Switch | |||||
PUMP(2)%Throttle = DrillingConsole%MP2Throttle ![RPM] | |||||
!PUMP(2)%PowerFailMalf = 0 !??????? motaghayere voroudi (Pump2 Malfunction ----> Power Failure) !dar CPumpProblemsVariables meghdardehi mishavad | |||||
PUMP(2)%Failure = Pump2Failure !(Pump2 Warning ----> Failure) | |||||
PUMP(2)%N_new = PUMP(2)%Throttle | |||||
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
! | |||||
! PUMP(2)%StandPipe_Pressure = PumpPressure2 ![psi] | |||||
! | |||||
! | |||||
! | |||||
! | |||||
! | |||||
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<< | !!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<< | ||||
! | |||||
! PUMP(3)%StandPipe_Pressure = PumpPressure3 ![psi] | |||||
!PUMP(3)%BlowPopOffMalf = 0 !??????? motaghayere voroudi | |||||
if ( PUMP(3)%BlowPopOffMalf==1 ) then ! Pump3 Malfunction ----> Blow Pop-offs (Relief Valves) | |||||
PUMP(3)%StandPipe_Pressure = 0.d0 | |||||
else | |||||
PUMP(3)%StandPipe_Pressure = PumpPressure3 ![psi] | |||||
if ( PUMP(3)%StandPipe_Pressure<=14.d0 ) then | |||||
PUMP(3)%StandPipe_Pressure = 14.d0 | |||||
end if | |||||
end if | |||||
PUMP(3)%Switch = DrillingConsole%MP1CPSwitch | |||||
PUMP(3)%Throttle = DrillingConsole%MP1Throttle ![RPM] | |||||
!PUMP(3)%PowerFailMalf = 0 !??????? motaghayere voroudi (Pump3 Malfunction ----> Power Failure) !dar CPumpProblemsVariables meghdardehi mishavad | |||||
PUMP(3)%Failure = Pump3Failure !(Pump1 Warning ----> Failure) | |||||
PUMP(3)%N_new = PUMP(3)%Throttle | |||||
!>>>>>>>>>>>>>>>>>>>>>>> Total Pumps <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
end subroutine Pumps_Inputs | end subroutine Pumps_Inputs |
@@ -0,0 +1,28 @@ | |||||
subroutine Pumps_MainSolver | |||||
Use Pumps_VARIABLES | |||||
Implicit none | |||||
Call DrillingConsole_ScrLEDs !koja bezaramesh????? | |||||
Call Pumps_Inputs | |||||
Call Pump1_MainSolver | |||||
Call Pump2_MainSolver | |||||
Call Pump3_MainSolver | |||||
Call Pumps_TotalSolver | |||||
Call Pumps_Outputs | |||||
end subroutine Pumps_MainSolver |
@@ -1,51 +1,94 @@ | |||||
subroutine Pumps_Outputs | subroutine Pumps_Outputs | ||||
use CPumpsVariables | |||||
use CDrillingConsoleVariables | |||||
use CDataDisplayConsoleVariables | |||||
! use CSimulationVariables | |||||
use Pumps_VARIABLES | |||||
use MudSystem | |||||
Use CDataDisplayConsoleVariables | |||||
Use CSimulationVariables | |||||
Use Pumps_VARIABLES | |||||
Use MudSystem | |||||
Use CDrillWatchVariables | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
!Call SetSoundBlowerMP1(PUMP(1)%SoundBlower) | |||||
! DrillingConsole%MP1BLWR = 1 | |||||
! Call OpenPump1() | |||||
! Call ClosePump1() | |||||
! total_pumps%Total_Pump_GPM = 100 | |||||
! total_pumps%Total_Pump_SPM = | |||||
! Call Set_MP1SPMGauge( sngl(1-PUMP(1)%SPMGaugeMalf)*real((PUMP(1)%Speed/PUMP(1)%Trans_Ratio),8) ) | |||||
! DrillingWatch%SPM1 = MP1SPMGauge | |||||
! Call SetSoundMP1( PUMP(1)%SoundSPM ) | |||||
! SCR1LED=1 | |||||
! SCR2LED=1 | |||||
! SCR3LED=1 | |||||
! SCR4LED=1 | |||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
If (PUMP(1)%Open_Close==1) then | |||||
Call OpenPump1() | |||||
Else if (PUMP(1)%Open_Close==0) then | |||||
Call ClosePump1() | |||||
End if | |||||
DrillingConsole%MP1BLWR = PUMP(1)%BLWR | |||||
Call SetSoundBlowerMP1( PUMP(1)%SoundBlower ) !.true. or .false. | |||||
Call SetSoundMP1( PUMP(1)%SoundSPM ) ![spm] , integer | |||||
if ((PUMP(1)%Switch==-1) .or. (PUMP(1)%Switch==0)) then | |||||
Call Set_MP1SPMGauge( sngl(1-PUMP(1)%SPMGaugeMalf)*real((PUMP(1)%Speed/PUMP(1)%Trans_Ratio),8) ) ![spm] , real | |||||
DrillingWatch%SPM1 = DataDisplayConsole%MP1SPMGauge | |||||
end if | |||||
!PUMP(1)%Flow_Rate !to other modules , [gpm] | |||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
If (PUMP(2)%Open_Close==1) then | |||||
Call OpenPump2() | |||||
Else if (PUMP(2)%Open_Close==0) then | |||||
Call ClosePump2() | |||||
End if | |||||
DrillingConsole%MP2BLWR = PUMP(2)%BLWR | |||||
Call SetSoundBlowerMP2( PUMP(2)%SoundBlower ) | |||||
Call SetSoundMP2( PUMP(2)%SoundSPM ) | |||||
Call Set_MP2SPMGauge( sngl(1-PUMP(2)%SPMGaugeMalf)*real((PUMP(2)%Speed/PUMP(2)%Trans_Ratio),8) ) | |||||
DrillingWatch%SPM2 = DataDisplayConsole%MP2SPMGauge | |||||
!PUMP(2)%Flow_Rate !to other modules | |||||
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
! | |||||
! | |||||
! | |||||
! | |||||
! | |||||
! | |||||
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<< | !!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<< | ||||
! | |||||
If (PUMP(3)%Open_Close==1) then | |||||
Call OpenCementPump() | |||||
Else if (PUMP(3)%Open_Close==0) then | |||||
Call CloseCementPump() | |||||
End if | |||||
Call SetSoundMP3( PUMP(3)%SoundSPM ) | |||||
if (PUMP(3)%Switch==1) then | |||||
Call Set_MP1SPMGauge( real((PUMP(3)%Speed/PUMP(3)%Trans_Ratio),8) ) | |||||
DrillingWatch%SPM1 = DataDisplayConsole%MP1SPMGauge | |||||
end if | |||||
!PUMP(3)%Flow_Rate !to other modules | |||||
!>>>>>>>>>>>>>>>>>>>>>>> Total Pumps <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
!MPumps%Total_Pump_Gpm = 100.d0 !??????????? | |||||
!MPumps%Total_Pump_SPM = 1000.d0 !????????????? | |||||
!SCR1LED=1 | |||||
!SCR2LED=1 | |||||
!SCR3LED=1 | |||||
!SCR4LED=1 | |||||
end subroutine Pumps_Outputs | end subroutine Pumps_Outputs |
@@ -1,12 +1,7 @@ | |||||
subroutine Pumps_StartUp | subroutine Pumps_StartUp | ||||
!use CPumpsVariables | |||||
!use CDrillingConsoleVariables | |||||
!use CDataDisplayConsoleVariables | |||||
!! use CSimulationVariables | |||||
!use CPowerVariables | |||||
use Pumps_VARIABLES | |||||
Use CPumpsVariables | |||||
Use Pumps_VARIABLES | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
@@ -14,61 +9,59 @@ subroutine Pumps_StartUp | |||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<< | !>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<< | ||||
PUMP(1)%FlowRatePerSTK = 7000.e0 ![bbl] !??????? motaghayere voroudi | |||||
!PUMP(1)%FlowRatePerSTK = PUMP(1)%FlowRatePerSTK*0.0292e0 ![gpm] | |||||
PUMP(1)%RateChange = 4.e0 ! [stk/min2] !??????? motaghayere voroudi | |||||
PUMP(1)%Stroke_Length = 12.e0!MudPump1Stroke ! bayad hazf beshe ? | |||||
PUMP(1)%Piston_Diameter = 4.e0!MudPump1LinerDiameter ! bayad hazf beshe ? | |||||
PUMP(1)%Piston_Area = (pi*(PUMP(1)%Piston_Diameter**2.e0))/4.e0 ! bayad hazf beshe ? | |||||
PUMP(1)%Mech_Efficiency = 0.95e0!MudPump1MechanicalEfficiency [dimensionless] | |||||
!PUMP(1)%Vol_Efficiency = MudPump1VolumetricEfficiency ! bayad hazf beshe ? | |||||
!PUMP(1)%Max_Horsepower = MudPump1 ! bayad hazf beshe ? | |||||
PUMP(1)%Max_Pressure = 600.e0 ! [psi] !??????? motaghayere voroudi | |||||
PUMP(1)%MaxSPM = 275.e0!MudPump1Maximum [spm] | |||||
PUMP(1)%Trans_Ratio = 965.e0/PUMP(1)%MaxSPM | |||||
PUMP(1)%time_step = 0.1e0 !?????? niaz hast ya na?? | |||||
PUMP(1)%RateChange = PUMP(1)%RateChange*PUMP(1)%Trans_Ratio ! [rpm/min2] | |||||
PUMP(1)%FlowRatePerSTK = 7000.d0 ![bbl] !??????? motaghayere voroudi | |||||
!PUMP(1)%FlowRatePerSTK = PUMP(1)%FlowRatePerSTK*0.0292d0 ![gpm] | |||||
PUMP(1)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi | |||||
PUMP(1)%Mech_Efficiency = PumpsSpecification%MudPump1MechanicalEfficiency ![dimensionless] | |||||
!PUMP(1)%Vol_Efficiency = MudPump1VolumetricEfficiency !bayad hazf beshe ? | |||||
PUMP(1)%Max_Pressure = 600.d0 ![psi] !??????? motaghayere voroudi | |||||
PUMP(1)%MaxSPM = PumpsSpecification%MudPump1Maximum ![spm] | |||||
PUMP(1)%Trans_Ratio = 965.d0/PUMP(1)%MaxSPM | |||||
PUMP(1)%time_step = 0.1d0 !?????? niaz hast ya na?? | |||||
PUMP(1)%RateChange = 193.d0!PUMP(1)%RateChange*PUMP(1)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s | |||||
PUMP(1)%K_throttle = 0 | PUMP(1)%K_throttle = 0 | ||||
Pumps_IsStopped = .false. | |||||
PUMP(1)%N_old = 0.e0 | |||||
PUMP(1)%N_old = 0.d0 | |||||
Call Pump_OffMode_Solver(1) | Call Pump_OffMode_Solver(1) | ||||
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
!PUMP(2)%Stroke_Length = MudPump2Stroke | |||||
!PUMP(2)%Piston_Diameter = MudPump2LinerDiameter | |||||
!PUMP(2)%Piston_Area = pi*PUMP(2)%Piston_Diameter*PUMP(2)%Piston_Diameter/4. | |||||
!PUMP(2)%Mech_Efficiency = MudPump2MechanicalEfficiency | |||||
!PUMP(2)%Vol_Efficiency = MudPump2VolumetricEfficiency | |||||
!PUMP(2)%Max_Horsepower = MudPump2 | |||||
!PUMP(2)%Inertia_Moment = 23.261341 ! 23.261341 [kg.m^2] = 552 [lb.ft^2] | |||||
!PUMP(2)%J_coef = PUMP(2)%Inertia_Moment+(4.*(PUMP(2)%Inertia_Moment)) | |||||
!PUMP(2)%Trans_Ratio = 965.0/MudPump2Maximum | |||||
!PUMP(2)%time_step = .10 | |||||
! | |||||
!PUMP(2)%Flow_Rate = 0. | |||||
!Call Pump2_OffMode_Solver(2) | |||||
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<< | |||||
PUMP(2)%FlowRatePerSTK = 7000.d0 ![bbl] !??????? motaghayere voroudi | |||||
!PUMP(2)%FlowRatePerSTK = PUMP(2)%FlowRatePerSTK*0.0292d0 ![gpm] | |||||
PUMP(2)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi | |||||
PUMP(2)%Mech_Efficiency = PumpsSpecification%MudPump2MechanicalEfficiency ![dimensionless] | |||||
!PUMP(2)%Vol_Efficiency = MudPump2VolumetricEfficiency !bayad hazf beshe ? | |||||
PUMP(2)%Max_Pressure = 600.d0 ![psi] !??????? motaghayere voroudi | |||||
PUMP(2)%MaxSPM = PumpsSpecification%MudPump2Maximum ![spm] | |||||
PUMP(2)%Trans_Ratio = 965.d0/PUMP(2)%MaxSPM | |||||
PUMP(2)%time_step = 0.1d0 !?????? niaz hast ya na?? | |||||
PUMP(2)%RateChange = 193.d0!PUMP(2)%RateChange*PUMP(2)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s | |||||
PUMP(2)%K_throttle = 0 | |||||
PUMP(2)%N_old = 0.d0 | |||||
Call Pump_OffMode_Solver(2) | |||||
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<< | !!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<< | ||||
!PUMP(3)%Stroke_Length = CementPumpStroke | |||||
!PUMP(3)%Piston_Diameter = CementPumpLinerDiameter | |||||
!PUMP(3)%Piston_Area = pi*PUMP(3)%Piston_Diameter*PUMP(3)%Piston_Diameter/4. | |||||
!PUMP(3)%Mech_Efficiency = CementPumpMechanicalEfficiency | |||||
!PUMP(3)%Vol_Efficiency = CementPumpVolumetricEfficiency | |||||
!PUMP(3)%Max_Horsepower = CementPump | |||||
!PUMP(3)%Inertia_Moment = 23.261341 ! 23.261341 [kg.m^2] = 552 [lb.ft^2] | |||||
!PUMP(3)%Trans_Ratio = 965.0/CementPumpMaximum | |||||
!PUMP(3)%time_step = .10 | |||||
! | |||||
!PUMP(3)%Flow_Rate = 0. | |||||
!Call Pump3_OffMode_Solver | |||||
PUMP(3)%FlowRatePerSTK = 7000.d0 ![bbl] !??????? motaghayere voroudi | |||||
!PUMP(3)%FlowRatePerSTK = PUMP(3)%FlowRatePerSTK*0.0292d0 ![gpm] | |||||
PUMP(3)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi | |||||
PUMP(3)%Mech_Efficiency = PumpsSpecification%CementPumpMechanicalEfficiency ![dimensionless] | |||||
!PUMP(3)%Vol_Efficiency = CementPumpVolumetricEfficiency !bayad hazf beshe ? | |||||
PUMP(3)%Max_Pressure = 600.d0 ![psi] !??????? motaghayere voroudi | |||||
PUMP(3)%MaxSPM = PumpsSpecification%CementPumpMaximum ![spm] | |||||
PUMP(3)%Trans_Ratio = 965.d0/PUMP(3)%MaxSPM | |||||
PUMP(3)%time_step = 0.1d0 !?????? niaz hast ya na?? | |||||
PUMP(3)%RateChange = 193.d0!PUMP(3)%RateChange*PUMP(3)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s | |||||
PUMP(3)%K_throttle = 0 | |||||
PUMP(3)%N_old = 0.d0 | |||||
Call Pump_OffMode_Solver(3) | |||||
@@ -0,0 +1,14 @@ | |||||
subroutine Pumps_TotalSolver | |||||
Use Pumps_VARIABLES | |||||
Implicit none | |||||
MPumps%Total_Pump_Gpm = PUMP(1)%Flow_Rate+PUMP(2)%Flow_Rate+PUMP(3)%Flow_Rate ![gpm] | |||||
MPumps%Total_Pump_SPM = (PUMP(1)%Speed/PUMP(1)%Trans_Ratio)+(PUMP(2)%Speed/PUMP(2)%Trans_Ratio)+(PUMP(3)%Speed/PUMP(3)%Trans_Ratio) ![stk/min] | |||||
end subroutine Pumps_TotalSolver |
@@ -2,12 +2,17 @@ MODULE Pumps_VARIABLES | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
PUBLIC | PUBLIC | ||||
REAL , PARAMETER :: pi=3.14159265e0 | |||||
Logical :: Pumps_IsStopped | |||||
Type, public:: Pumps_Type | |||||
REAL , PARAMETER :: pi=3.14159265d0 | |||||
Type, public:: Pumps_Var | |||||
REAL :: Total_Pump_GPM, Total_Pump_SPM, Total_Stroke_Counter_For_Plot | REAL :: Total_Pump_GPM, Total_Pump_SPM, Total_Stroke_Counter_For_Plot | ||||
end Type Pumps_Type | |||||
Type(Pumps_Type)::total_pumps | |||||
end Type Pumps_Var | |||||
Type(Pumps_Var) :: MPumps | |||||
@@ -20,15 +25,16 @@ MODULE Pumps_VARIABLES | |||||
INTEGER :: PowerFailMalf , BlowPopOffMalf , SPMGaugeMalf , Failure | INTEGER :: PowerFailMalf , BlowPopOffMalf , SPMGaugeMalf , Failure | ||||
REAL :: Throttle, RateChange | REAL :: Throttle, RateChange | ||||
REAL :: Stroke_Length, Piston_Area, Piston_Diameter, Inertia_Moment | |||||
REAL :: Mech_Efficiency, Vol_Efficiency, Trans_Ratio | REAL :: Mech_Efficiency, Vol_Efficiency, Trans_Ratio | ||||
REAL :: StandPipe_Pressure , Max_Pressure | REAL :: StandPipe_Pressure , Max_Pressure | ||||
REAL :: Torque, Speed, N_new, N_old, MaxSPM | |||||
REAL :: Flow_Rate, Hydraulic_HorsePower, Max_Horsepower, FlowRatePerSTK, Max_FlowRate | |||||
REAL :: simulation_time, time_step | |||||
REAL :: Speed, N_new, N_old, MaxSPM | |||||
REAL :: Flow_Rate, Hydraulic_HorsePower, Max_Horsepower, FlowRatePerSTK, Max_FlowRate, HorsePower | |||||
REAL :: time_step | |||||
REAL(8) :: START_TIME, END_TIME | |||||
INTEGER :: INT_CPU_TIME, Dt_ref | |||||
INTEGER :: BLWR ! 1=On , 0=Off | |||||
INTEGER :: Open_Close ! 1=Open , 0=Close | |||||
!************* Sound_VARIABLES ********************** | !************* Sound_VARIABLES ********************** | ||||
INTEGER :: SoundSPM | INTEGER :: SoundSPM | ||||
@@ -10,7 +10,7 @@ subroutine Rtable_MainSolver | |||||
IMPLICIT NONE | IMPLICIT NONE | ||||
! if (IsPortable) then | ! if (IsPortable) then | ||||
! RTable%AssignmentSwitch = 1 | ! RTable%AssignmentSwitch = 1 | ||||
! else | ! else | ||||
@@ -26,7 +26,7 @@ subroutine Rtable_MainSolver | |||||
RTable%SoundBlower = .true. | RTable%SoundBlower = .true. | ||||
Call SetSoundBlowerRT(RTable%SoundBlower) | Call SetSoundBlowerRT(RTable%SoundBlower) | ||||
DrillingConsole%RTBLWR = 1 | DrillingConsole%RTBLWR = 1 | ||||
IF ( DrillingConsole%RTTransmissionLever /=0 .and. RotaryGearsAbuse==0 ) THEN !be in clutch mode ?????? | IF ( DrillingConsole%RTTransmissionLever /=0 .and. RotaryGearsAbuse==0 ) THEN !be in clutch mode ?????? | ||||
RTable%N_new = DrillingConsole%RTThrottle | RTable%N_new = DrillingConsole%RTThrottle | ||||
@@ -301,11 +301,15 @@ | |||||
<File RelativePath=".\Equipments\MudSystem\Utube2_and_Trip_In.f90"/></Filter> | <File RelativePath=".\Equipments\MudSystem\Utube2_and_Trip_In.f90"/></Filter> | ||||
<Filter Name="Pumps"> | <Filter Name="Pumps"> | ||||
<File RelativePath=".\Equipments\Pumps\Pump1_MainSolver.f90"/> | <File RelativePath=".\Equipments\Pumps\Pump1_MainSolver.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\Pump2_MainSolver.f90"/> | |||||
<File RelativePath=".\Equipments\Pumps\Pump3_MainSolver.f90"/> | |||||
<File RelativePath=".\Equipments\Pumps\Pump_OffMode_Solver.f90"/> | <File RelativePath=".\Equipments\Pumps\Pump_OffMode_Solver.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\Pump_OnMode_Solver.f90"/> | <File RelativePath=".\Equipments\Pumps\Pump_OnMode_Solver.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\Pumps_Inputs.f90"/> | <File RelativePath=".\Equipments\Pumps\Pumps_Inputs.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\Pumps_MainSolver.f90"/> | |||||
<File RelativePath=".\Equipments\Pumps\Pumps_Outputs.f90"/> | <File RelativePath=".\Equipments\Pumps\Pumps_Outputs.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\Pumps_StartUp.f90"/> | <File RelativePath=".\Equipments\Pumps\Pumps_StartUp.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\Pumps_TotalSolver.f90"/> | |||||
<File RelativePath=".\Equipments\Pumps\Pumps_VARIABLES.f90"/> | <File RelativePath=".\Equipments\Pumps\Pumps_VARIABLES.f90"/> | ||||
<File RelativePath=".\Equipments\Pumps\PumpsMain.f90"/></Filter> | <File RelativePath=".\Equipments\Pumps\PumpsMain.f90"/></Filter> | ||||
<Filter Name="RotaryTable"> | <Filter Name="RotaryTable"> | ||||