From b3726188767665097addff4565b8753c61774859 Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Wed, 31 May 2023 18:58:03 -0500 Subject: [PATCH 1/5] Arrange attribute declarations by shape and sort --- floris/simulation/farm.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/floris/simulation/farm.py b/floris/simulation/farm.py index 9aba71fa6..dfce16bba 100644 --- a/floris/simulation/farm.py +++ b/floris/simulation/farm.py @@ -62,26 +62,36 @@ class Farm(BaseClass): ) turbine_definitions: list = field(init=False, validator=iter_validator(list, dict)) + coordinates: List[Vec3] = field(init=False) + turbine_fCts: tuple = field(init=False, default=[]) + turbine_fTilts: list = field(init=False, default=[]) + yaw_angles: NDArrayFloat = field(init=False) yaw_angles_sorted: NDArrayFloat = field(init=False) + tilt_angles: NDArrayFloat = field(init=False) tilt_angles_sorted: NDArrayFloat = field(init=False) - coordinates: List[Vec3] = field(init=False) + hub_heights: NDArrayFloat = field(init=False) hub_heights_sorted: NDArrayFloat = field(init=False, default=[]) - turbine_fCts: tuple = field(init=False, default=[]) + turbine_type_map_sorted: NDArrayObject = field(init=False, default=[]) + rotor_diameters_sorted: NDArrayFloat = field(init=False, default=[]) + TSRs_sorted: NDArrayFloat = field(init=False, default=[]) + pPs: NDArrayFloat = field(init=False, default=[]) pPs_sorted: NDArrayFloat = field(init=False, default=[]) + pTs: NDArrayFloat = field(init=False, default=[]) pTs_sorted: NDArrayFloat = field(init=False, default=[]) + ref_tilt_cp_cts: NDArrayFloat = field(init=False, default=[]) ref_tilt_cp_cts_sorted: NDArrayFloat = field(init=False, default=[]) + correct_cp_ct_for_tilt: NDArrayFloat = field(init=False, default=[]) correct_cp_ct_for_tilt_sorted: NDArrayFloat = field(init=False, default=[]) - turbine_fTilts: list = field(init=False, default=[]) def __attrs_post_init__(self) -> None: # Turbine definitions can be supplied in three ways: From 72c54c5b996000580e6649cc91c1eae1c6d8ebec Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Wed, 31 May 2023 18:58:54 -0500 Subject: [PATCH 2/5] Add missing attribute declarations --- floris/simulation/farm.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/floris/simulation/farm.py b/floris/simulation/farm.py index dfce16bba..94cde86bf 100644 --- a/floris/simulation/farm.py +++ b/floris/simulation/farm.py @@ -75,10 +75,13 @@ class Farm(BaseClass): hub_heights: NDArrayFloat = field(init=False) hub_heights_sorted: NDArrayFloat = field(init=False, default=[]) + turbine_type_map: NDArrayObject = field(init=False, default=[]) turbine_type_map_sorted: NDArrayObject = field(init=False, default=[]) + rotor_diameters: NDArrayFloat = field(init=False, default=[]) rotor_diameters_sorted: NDArrayFloat = field(init=False, default=[]) + TSRs: NDArrayFloat = field(init=False, default=[]) TSRs_sorted: NDArrayFloat = field(init=False, default=[]) pPs: NDArrayFloat = field(init=False, default=[]) From be594f82d155d36acf709298ad3f7ba4796a85a3 Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Thu, 1 Jun 2023 09:43:32 -0500 Subject: [PATCH 3/5] Remove unused attribute --- floris/simulation/farm.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/floris/simulation/farm.py b/floris/simulation/farm.py index 94cde86bf..e2dabef4f 100644 --- a/floris/simulation/farm.py +++ b/floris/simulation/farm.py @@ -319,10 +319,9 @@ def expand_farm_properties( sorted_coord_indices, axis=2 ) - self.turbine_type_names_sorted = [turb["turbine_type"] for turb in self.turbine_definitions] self.turbine_type_map_sorted = np.take_along_axis( np.reshape( - self.turbine_type_names_sorted * n_wind_directions, + [turb["turbine_type"] for turb in self.turbine_definitions] * n_wind_directions, np.shape(sorted_coord_indices) ), sorted_coord_indices, From e3ebe1d9224c24ac16e162c100f88fc90c677c46 Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Thu, 1 Jun 2023 09:44:21 -0500 Subject: [PATCH 4/5] Add comments requesting more info --- floris/simulation/farm.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/floris/simulation/farm.py b/floris/simulation/farm.py index e2dabef4f..53f404bc7 100644 --- a/floris/simulation/farm.py +++ b/floris/simulation/farm.py @@ -314,6 +314,8 @@ def expand_farm_properties( sorted_coord_indices, axis=2 ) + + # NOTE: Tilt angles are sorted twice - here and in initialize() self.tilt_angles_sorted = np.take_along_axis( self.tilt_angles * template_shape, sorted_coord_indices, @@ -378,6 +380,10 @@ def finalize(self, unsorted_indices): unsorted_indices[:,:,:,0,0], axis=2 ) + # TODO: do these need to be unsorted? Maybe we should just for completeness... + # self.ref_density_cp_cts_sorted = np.take_along_axis( + # self.ref_tilt_cp_cts_sorted = np.take_along_axis( + # self.correct_cp_ct_for_tilt_sorted = np.take_along_axis( self.pPs = np.take_along_axis( self.pPs_sorted, unsorted_indices[:,:,:,0,0], From 09aee6315a390b38e05d3ff44e2588528f3096b7 Mon Sep 17 00:00:00 2001 From: Rafael M Mudafort Date: Thu, 1 Jun 2023 10:33:54 -0500 Subject: [PATCH 5/5] Bug fix: unsort arrays --- floris/simulation/farm.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/floris/simulation/farm.py b/floris/simulation/farm.py index 53f404bc7..211032ce1 100644 --- a/floris/simulation/farm.py +++ b/floris/simulation/farm.py @@ -381,9 +381,21 @@ def finalize(self, unsorted_indices): axis=2 ) # TODO: do these need to be unsorted? Maybe we should just for completeness... - # self.ref_density_cp_cts_sorted = np.take_along_axis( - # self.ref_tilt_cp_cts_sorted = np.take_along_axis( - # self.correct_cp_ct_for_tilt_sorted = np.take_along_axis( + self.ref_density_cp_cts = np.take_along_axis( + self.ref_density_cp_cts_sorted, + unsorted_indices[:,:,:,0,0], + axis=2 + ) + self.ref_tilt_cp_cts = np.take_along_axis( + self.ref_tilt_cp_cts_sorted, + unsorted_indices[:,:,:,0,0], + axis=2 + ) + self.correct_cp_ct_for_tilt = np.take_along_axis( + self.correct_cp_ct_for_tilt_sorted, + unsorted_indices[:,:,:,0,0], + axis=2 + ) self.pPs = np.take_along_axis( self.pPs_sorted, unsorted_indices[:,:,:,0,0],