1 # Copyright (C) 2010 Richard Lincoln
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 # Lesser General Public License for more details.
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA, USA
17 from CIM14
.IEC61970
.Generation
.Production
.GeneratingUnit
import GeneratingUnit
19 class HydroGeneratingUnit(GeneratingUnit
):
20 """A generating unit whose prime mover is a hydraulic turbine (e.g., Francis, Pelton, Kaplan)
23 def __init__(self
, energyConversionCapability
="generator", hydroUnitWaterCost
=0.0, HydroPowerPlant
=None, PenstockLossCurve
=None, HydroGeneratingEfficiencyCurves
=None, TailbayLossCurve
=None, *args
, **kw_args
):
24 """Initialises a new 'HydroGeneratingUnit' instance.
26 @param energyConversionCapability: Energy conversion capability for generating. Values are: "generator", "pumpAndGenerator"
27 @param hydroUnitWaterCost: The equivalent cost of water that drives the hydro turbine, expressed as cost per volume.
28 @param HydroPowerPlant: The hydro generating unit belongs to a hydro power plant
29 @param PenstockLossCurve: A hydro generating unit has a penstock loss curve
30 @param HydroGeneratingEfficiencyCurves: A hydro generating unit has an efficiency curve
31 @param TailbayLossCurve: A hydro generating unit has a tailbay loss curve
33 #: Energy conversion capability for generating. Values are: "generator", "pumpAndGenerator"
34 self
.energyConversionCapability
= energyConversionCapability
36 #: The equivalent cost of water that drives the hydro turbine, expressed as cost per volume.
37 self
.hydroUnitWaterCost
= hydroUnitWaterCost
39 self
._HydroPowerPlant
= None
40 self
.HydroPowerPlant
= HydroPowerPlant
42 self
._PenstockLossCurve
= None
43 self
.PenstockLossCurve
= PenstockLossCurve
45 self
._HydroGeneratingEfficiencyCurves
= []
46 self
.HydroGeneratingEfficiencyCurves
= [] if HydroGeneratingEfficiencyCurves
is None else HydroGeneratingEfficiencyCurves
48 self
._TailbayLossCurve
= []
49 self
.TailbayLossCurve
= [] if TailbayLossCurve
is None else TailbayLossCurve
51 super(HydroGeneratingUnit
, self
).__init
__(*args
, **kw_args
)
53 _attrs
= ["energyConversionCapability", "hydroUnitWaterCost"]
54 _attr_types
= {"energyConversionCapability": str, "hydroUnitWaterCost": float}
55 _defaults
= {"energyConversionCapability": "generator", "hydroUnitWaterCost": 0.0}
56 _enums
= {"energyConversionCapability": "HydroEnergyConversionKind"}
57 _refs
= ["HydroPowerPlant", "PenstockLossCurve", "HydroGeneratingEfficiencyCurves", "TailbayLossCurve"]
58 _many_refs
= ["HydroGeneratingEfficiencyCurves", "TailbayLossCurve"]
60 def getHydroPowerPlant(self
):
61 """The hydro generating unit belongs to a hydro power plant
63 return self
._HydroPowerPlant
65 def setHydroPowerPlant(self
, value
):
66 if self
._HydroPowerPlant
is not None:
67 filtered
= [x
for x
in self
.HydroPowerPlant
.HydroGeneratingUnits
if x
!= self
]
68 self
._HydroPowerPlant
._HydroGeneratingUnits
= filtered
70 self
._HydroPowerPlant
= value
71 if self
._HydroPowerPlant
is not None:
72 self
._HydroPowerPlant
._HydroGeneratingUnits
.append(self
)
74 HydroPowerPlant
= property(getHydroPowerPlant
, setHydroPowerPlant
)
76 def getPenstockLossCurve(self
):
77 """A hydro generating unit has a penstock loss curve
79 return self
._PenstockLossCurve
81 def setPenstockLossCurve(self
, value
):
82 if self
._PenstockLossCurve
is not None:
83 self
._PenstockLossCurve
._HydroGeneratingUnit
= None
85 self
._PenstockLossCurve
= value
86 if self
._PenstockLossCurve
is not None:
87 self
._PenstockLossCurve
._HydroGeneratingUnit
= self
89 PenstockLossCurve
= property(getPenstockLossCurve
, setPenstockLossCurve
)
91 def getHydroGeneratingEfficiencyCurves(self
):
92 """A hydro generating unit has an efficiency curve
94 return self
._HydroGeneratingEfficiencyCurves
96 def setHydroGeneratingEfficiencyCurves(self
, value
):
97 for x
in self
._HydroGeneratingEfficiencyCurves
:
98 x
._HydroGeneratingUnit
= None
100 y
._HydroGeneratingUnit
= self
101 self
._HydroGeneratingEfficiencyCurves
= value
103 HydroGeneratingEfficiencyCurves
= property(getHydroGeneratingEfficiencyCurves
, setHydroGeneratingEfficiencyCurves
)
105 def addHydroGeneratingEfficiencyCurves(self
, *HydroGeneratingEfficiencyCurves
):
106 for obj
in HydroGeneratingEfficiencyCurves
:
107 obj
._HydroGeneratingUnit
= self
108 self
._HydroGeneratingEfficiencyCurves
.append(obj
)
110 def removeHydroGeneratingEfficiencyCurves(self
, *HydroGeneratingEfficiencyCurves
):
111 for obj
in HydroGeneratingEfficiencyCurves
:
112 obj
._HydroGeneratingUnit
= None
113 self
._HydroGeneratingEfficiencyCurves
.remove(obj
)
115 def getTailbayLossCurve(self
):
116 """A hydro generating unit has a tailbay loss curve
118 return self
._TailbayLossCurve
120 def setTailbayLossCurve(self
, value
):
121 for x
in self
._TailbayLossCurve
:
122 x
._HydroGeneratingUnit
= None
124 y
._HydroGeneratingUnit
= self
125 self
._TailbayLossCurve
= value
127 TailbayLossCurve
= property(getTailbayLossCurve
, setTailbayLossCurve
)
129 def addTailbayLossCurve(self
, *TailbayLossCurve
):
130 for obj
in TailbayLossCurve
:
131 obj
._HydroGeneratingUnit
= self
132 self
._TailbayLossCurve
.append(obj
)
134 def removeTailbayLossCurve(self
, *TailbayLossCurve
):
135 for obj
in TailbayLossCurve
:
136 obj
._HydroGeneratingUnit
= None
137 self
._TailbayLossCurve
.remove(obj
)