From c5f30bc7ada58075cd1e0315ab6511e1c4619d3d Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Thu, 5 Dec 2024 12:46:07 -0600 Subject: [PATCH 1/2] Add test showing missing error --- floris/floris_model.py | 11 +++++++++-- tests/floris_model_integration_test.py | 27 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/floris/floris_model.py b/floris/floris_model.py index 83610e993..5bb70063f 100644 --- a/floris/floris_model.py +++ b/floris/floris_model.py @@ -1745,9 +1745,16 @@ def reinitialize(self, **_): @staticmethod def merge_floris_models(fmodel_list, reference_wind_height=None): - """Merge a list of FlorisModel objects into a single FlorisModel object. Note that it uses - the very first object specified in fmodel_list to build upon, + """Merge a list of FlorisModel objects into a single FlorisModel object. + Note that it uses the first object specified in fmodel_list to build upon, so it uses those wake model parameters, air density, and so on. + Currently, this function supports merging the following components of the FLORIS inputs: + - farm + - layout_x + - layout_y + - turbine_type + - flow_field + - reference_wind_height Args: fmodel_list (list): Array-like of FlorisModel objects. diff --git a/tests/floris_model_integration_test.py b/tests/floris_model_integration_test.py index 88a242c56..eabe764db 100644 --- a/tests/floris_model_integration_test.py +++ b/tests/floris_model_integration_test.py @@ -827,3 +827,30 @@ def test_reference_wind_height_methods(caplog): turbine_type=["nrel_5MW", "iea_15MW"] ) fmodel.assign_hub_height_to_ref_height() # Shouldn't allow due to multiple turbine types + +def test_merge_floris_models(): + + # Check that the merge function extends the data as expected + fmodel1 = FlorisModel(configuration=YAML_INPUT) + fmodel1.set( + layout_x=[0, 1000], + layout_y=[0, 0] + ) + fmodel2 = FlorisModel(configuration=YAML_INPUT) + fmodel2.set( + layout_x=[2000, 3000], + layout_y=[0, 0] + ) + + merged_fmodel = FlorisModel.merge_floris_models([fmodel1, fmodel2]) + assert merged_fmodel.n_turbines == 4 + + # Check that this model will run without error + merged_fmodel.run() + + # Verify error handling + + ## Input list with incorrect types + fmodel_list = [fmodel1, "not a floris model"] + with pytest.raises(TypeError): + merged_fmodel = FlorisModel.merge_floris_models(fmodel_list) From 0ffd2657f63a178a79e102dc02f78cc6b05755a8 Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Thu, 5 Dec 2024 12:52:27 -0600 Subject: [PATCH 2/2] Fix error handling --- floris/floris_model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/floris/floris_model.py b/floris/floris_model.py index 5bb70063f..f521b5faf 100644 --- a/floris/floris_model.py +++ b/floris/floris_model.py @@ -1771,8 +1771,8 @@ def merge_floris_models(fmodel_list, reference_wind_height=None): or general solver settings. """ - if not isinstance(fmodel_list[0], FlorisModel): - raise ValueError( + if not all( type(fm) == FlorisModel for fm in fmodel_list ): + raise TypeError( "Incompatible input specified. fmodel_list must be a list of FlorisModel objects." )