From 5b48a5c1a1930694a0b3a03737d20025d58fcfdc Mon Sep 17 00:00:00 2001 From: Will Holmgren Date: Fri, 3 May 2019 14:38:02 -0700 Subject: [PATCH 1/2] change MC to apply pvwatts_losses to mc.dc instead of mc.ac --- docs/sphinx/source/whatsnew/v0.6.2.rst | 3 +++ pvlib/modelchain.py | 2 +- pvlib/test/test_modelchain.py | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/source/whatsnew/v0.6.2.rst b/docs/sphinx/source/whatsnew/v0.6.2.rst index de00f40816..7d51cb5c4b 100644 --- a/docs/sphinx/source/whatsnew/v0.6.2.rst +++ b/docs/sphinx/source/whatsnew/v0.6.2.rst @@ -46,6 +46,8 @@ Bug fixes near horizon. (:issue:`656`) * Fixed numpy warnings in :py:func:`~pvlib.tracking.singleaxis` when comparing NaN values to limits. (:issue:`622`) +* Change ModelChain to apply ``pvwatts_losses`` to ``mc.dc`` instead of + ``mc.ac``. (:issue:`696`) Testing @@ -60,3 +62,4 @@ Contributors * Todd Hendricks (:ghuser:`tahentx`) * Kevin Anderson (:ghuser:`kevinsa5`) * :ghuser:`bentomlinson` +* :ghuser:`yxh289` diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 46c312d054..0a8ec66c71 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -697,7 +697,7 @@ def infer_losses_model(self): def pvwatts_losses(self): self.losses = (100 - self.system.pvwatts_losses()) / 100. - self.ac *= self.losses + self.dc *= self.losses return self def no_extra_losses(self): diff --git a/pvlib/test/test_modelchain.py b/pvlib/test/test_modelchain.py index 26761ebbcf..8be1f42b2f 100644 --- a/pvlib/test/test_modelchain.py +++ b/pvlib/test/test_modelchain.py @@ -405,6 +405,14 @@ def test_losses_models_pvwatts(pvwatts_dc_pvwatts_ac_system, location, weather, m.assert_called_with(age=age) assert isinstance(mc.ac, (pd.Series, pd.DataFrame)) assert not mc.ac.empty + # check that we're applying correction to dc + # GH 696 + dc_with_loss = mc.dc + mc = ModelChain(pvwatts_dc_pvwatts_ac_system, location, dc_model='pvwatts', + aoi_model='no_loss', spectral_model='no_loss', + losses_model='no_loss') + mc.run_model(weather.index, weather=weather) + assert not np.allclose(mc.dc, dc_with_loss, equal_nan=True) def test_losses_models_ext_def(pvwatts_dc_pvwatts_ac_system, location, weather, From c50a023b7ca645aff69a308036aabcad9d1b1e91 Mon Sep 17 00:00:00 2001 From: Will Holmgren Date: Fri, 3 May 2019 14:41:04 -0700 Subject: [PATCH 2/2] move losses call to before ac call --- pvlib/modelchain.py | 2 +- pvlib/test/test_modelchain.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 0a8ec66c71..50bc3293ef 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -913,7 +913,7 @@ def run_model(self, times=None, weather=None): self.effective_irradiance_model() self.temp_model() self.dc_model() - self.ac_model() self.losses_model() + self.ac_model() return self diff --git a/pvlib/test/test_modelchain.py b/pvlib/test/test_modelchain.py index 8be1f42b2f..cf6b1b2a81 100644 --- a/pvlib/test/test_modelchain.py +++ b/pvlib/test/test_modelchain.py @@ -389,7 +389,7 @@ def test_spectral_models(system, location, spectral_model): def constant_losses(mc): mc.losses = 0.9 - mc.ac *= mc.losses + mc.dc *= mc.losses def test_losses_models_pvwatts(pvwatts_dc_pvwatts_ac_system, location, weather,