@@ -326,12 +326,12 @@ def InjectionWellPressureDrop(model: Model, Taverage: float, wellflowrate: float
326
326
327
327
return DPWell , f1 , v , rhowater
328
328
329
-
330
329
def ProdPressureDropsAndPumpingPowerUsingImpedenceModel (f3 : float , vprod : float , rhowaterinj : float ,
331
330
rhowaterprod : float , rhowaterreservoir : float , depth : float ,
332
331
wellflowrate : float , prodwelldiam : float ,
333
332
impedance : float , nprod : int , waterloss : float ,
334
- pumpeff : float ) -> tuple :
333
+ pumpeff : float , tilt : float = 90.0 ,
334
+ trim_neg_to_zero : bool = True ) -> tuple :
335
335
"""
336
336
Calculate Pressure Drops and Pumping Power needed for the production well using the Impedance Model
337
337
:param f3: friction factor [-]
@@ -358,6 +358,10 @@ def ProdPressureDropsAndPumpingPowerUsingImpedenceModel(f3: float, vprod: float,
358
358
:type waterloss: float
359
359
:param pumpeff: pump efficiency [-]
360
360
:type pumpeff: float
361
+ :param tilt: tilt of the well from the junction box to the bottom of the laterals [degrees]
362
+ :type tilt: float
363
+ :param trim_neg_to_zero: whether to trim negative values of pumping power to zero
364
+ :type trim_neg_to_zero: bool
361
365
:return: tuple of DPOverall, PumpingPower, DPProdWell, DPReserv, DPBouyancy
362
366
:rtype: tuple
363
367
"""
@@ -368,7 +372,8 @@ def ProdPressureDropsAndPumpingPowerUsingImpedenceModel(f3: float, vprod: float,
368
372
DPReserv = impedance * nprod * wellflowrate * 1000. / rhowaterreservoir
369
373
370
374
# buoyancy pressure drop [kPa]
371
- DPBouyancy = (rhowaterprod - rhowaterinj ) * depth * 9.81 / 1E3 # /1E3 to convert from Pa to kPa
375
+ gravity_tilt = 9.81 * np .sin (np .radians (tilt ))
376
+ DPBouyancy = (rhowaterprod - rhowaterinj ) * depth * gravity_tilt / 1E3 # /1E3 to convert from Pa to kPa
372
377
373
378
# overall pressure drop
374
379
DPOverall = DPReserv + DPProdWell + DPBouyancy
@@ -378,7 +383,8 @@ def ProdPressureDropsAndPumpingPowerUsingImpedenceModel(f3: float, vprod: float,
378
383
PumpingPower = DPOverall * nprod * wellflowrate * (1 + waterloss ) / rhowaterinj / pumpeff / 1E3
379
384
380
385
# in GEOPHIRES v1.2, negative pumping power values become zero (b/c we are not generating electricity)
381
- PumpingPower = [0. if x < 0. else x for x in PumpingPower ]
386
+ if trim_neg_to_zero :
387
+ PumpingPower = [0. if x < 0. else x for x in PumpingPower ]
382
388
383
389
return DPOverall , PumpingPower , DPProdWell , DPReserv , DPBouyancy
384
390
@@ -1170,6 +1176,34 @@ def __init__(self, model: Model):
1170
1176
PreferredUnits = PressureUnit .KPASCAL ,
1171
1177
CurrentUnits = PressureUnit .KPASCAL
1172
1178
)
1179
+ self .total_drilled_length = self .OutputParameterDict [self .total_drilled_length .Name ] = OutputParameter (
1180
+ Name = "Total length of all drilling" ,
1181
+ value = - 1.0 ,
1182
+ UnitType = Units .LENGTH ,
1183
+ PreferredUnits = LengthUnit .KILOMETERS ,
1184
+ CurrentUnits = LengthUnit .KILOMETERS
1185
+ )
1186
+ self .tot_vert_m = self .OutputParameterDict [self .tot_vert_m .Name ] = OutputParameter (
1187
+ Name = "Total length of vertical drilling" ,
1188
+ value = - 1.0 ,
1189
+ UnitType = Units .LENGTH ,
1190
+ PreferredUnits = LengthUnit .METERS ,
1191
+ CurrentUnits = LengthUnit .METERS
1192
+ )
1193
+ self .tot_to_junction_m = self .OutputParameterDict [self .tot_to_junction_m .Name ] = OutputParameter (
1194
+ Name = "Total length from lateral junction to base of vertical drilling" ,
1195
+ value = - 1.0 ,
1196
+ UnitType = Units .LENGTH ,
1197
+ PreferredUnits = LengthUnit .METERS ,
1198
+ CurrentUnits = LengthUnit .METERS
1199
+ )
1200
+ self .tot_lateral_m = self .OutputParameterDict [self .tot_lateral_m .Name ] = OutputParameter (
1201
+ Name = "Total length of lateral drilling" ,
1202
+ value = - 1.0 ,
1203
+ UnitType = Units .LENGTH ,
1204
+ PreferredUnits = LengthUnit .METERS ,
1205
+ CurrentUnits = LengthUnit .METERS
1206
+ )
1173
1207
1174
1208
def __str__ (self ):
1175
1209
return "WellBores"
0 commit comments