8000 Adds functionality for 'pvsyst' to be used as a losses_model. Adds a … · ncroft-b4/pvlib-python@56e1597 · GitHub
[go: up one dir, main page]

Skip to content

Commit 56e1597

Browse files
committed
Adds functionality for 'pvsyst' to be used as a losses_model. Adds a function for calculating dc losses from a loss percentage at stc based on the method employed by pvsyst.
1 parent 22cfb4f commit 56e1597

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

pvlib/modelchain.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,8 @@ class ModelChain:
328328
user-defined function.
329329
330330
losses_model: str, default 'no_loss'
331-
Valid strings are 'pvwatts', 'no_loss'. The loss functions will
332-
be set according to this parameter.
331+
Valid strings are 'pvwatts', 'no_loss', 'pvsyst'. The loss functions
332+
will be set according to this parameter.
333333
334334
name: None or str, default None
335335
Name of ModelChain instance.
@@ -940,6 +940,9 @@ def losses_model(self, model):
940940
elif model == 'no_loss':
941941
self._losses_model = model
942942
self._dc_losses = self.no_extra_losses
943+
elif model == 'pvsyst':
944+
self._losses_model = model
945+
self._dc_losses = self.pvsyst_dc_losses
943946
else:
944947
raise ValueError(model + ' is not a valid losses model')
945948
else:
@@ -957,6 +960,19 @@ def no_extra_losses(self):
957960
self.losses = 1
958961
return self
959962

963+
def pvsyst_dc_losses(self):
964+
"""
965+
Calculate time series of ohmic losses and apply those to the mpp power
966+
output of the `dc_model` based on the pvsyst equivalent resistance
967+
method. Uses a `dc_ohmic_percent` parameter in the `losses_parameters`
968+
of the PVsystem.
969+
"""
970+
Rw = self.system.pvsyst_dc_losses_eq_ohms()
971+
ohmic_loss_fraction = Rw * self.dc['i_mp'] / self.dc['v_mp']
972+
self.dc_ohmic_losses = ohmic_loss_fraction * self.dc['p_mp']
973+
self.dc['p_mp'] = self.dc['p_mp'] - self.dc_ohmic_losses
974+
return self
975+
960976
def effective_irradiance_model(self):
961977
fd = self.system.module_parameters.get('FD', 1.)
962978
self.effective_irradiance = self.spectral_modifier * (

0 commit comments

Comments
 (0)
0