foxes 1.5__py3-none-any.whl → 1.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of foxes might be problematic. Click here for more details.

@@ -114,93 +114,95 @@ if __name__ == "__main__":
114
114
  wake_deflection=args.deflection,
115
115
  partial_wakes=args.pwakes,
116
116
  mbook=mbook,
117
- engine=args.engine,
117
+ )
118
+
119
+ with foxes.Engine.new(
120
+ engine_type=args.engine,
118
121
  n_procs=args.n_cpus,
119
122
  chunk_size_states=args.chunksize_states,
120
123
  chunk_size_points=args.chunksize_points,
121
- )
124
+ ):
125
+ # calculate farm results
126
+ farm_results = algo.calc_farm()
127
+ print("\nResults data:\n", farm_results)
122
128
 
123
- # calculate farm results
124
- farm_results = algo.calc_farm()
125
- print("\nResults data:\n", farm_results)
126
-
127
- if not args.nofig:
128
- # xy horizontal flow plot
129
- print("\nHorizontal flow figure output:")
130
- o = foxes.output.FlowPlots2D(algo, farm_results)
131
- g = o.gen_states_fig_xy(
132
- args.var, resolution=10, xmin=-500, xmax=3000, rotor_color="red"
133
- )
134
- fig = next(g)
135
- plt.show()
136
- plt.close(fig)
129
+ if not args.nofig:
130
+ # xy horizontal flow plot
131
+ print("\nHorizontal flow figure output:")
132
+ o = foxes.output.FlowPlots2D(algo, farm_results)
133
+ g = o.gen_states_fig_xy(
134
+ args.var, resolution=10, xmin=-500, xmax=3000, rotor_color="red"
135
+ )
136
+ fig = next(g)
137
+ plt.show()
138
+ plt.close(fig)
137
139
 
138
- # yz flow plot
139
- print("\nVertical flow figure output:")
140
- o = foxes.output.FlowPlots2D(algo, farm_results)
141
- g = o.gen_states_fig_yz(
142
- args.var,
143
- resolution=5,
144
- x=750,
145
- ymin=-200,
146
- ymax=200,
147
- zmin=0,
148
- zmax=250,
149
- rotor_color="red",
150
- verbosity=0,
151
- )
152
- fig = next(g)
153
- plt.show()
154
- plt.close(fig)
140
+ # yz flow plot
141
+ print("\nVertical flow figure output:")
142
+ o = foxes.output.FlowPlots2D(algo, farm_results)
143
+ g = o.gen_states_fig_yz(
144
+ args.var,
145
+ resolution=5,
146
+ x=750,
147
+ ymin=-200,
148
+ ymax=200,
149
+ zmin=0,
150
+ zmax=250,
151
+ rotor_color="red",
152
+ verbosity=0,
153
+ )
154
+ fig = next(g)
155
+ plt.show()
156
+ plt.close(fig)
155
157
 
156
- # add capacity and efficiency to farm results
157
- o = foxes.output.FarmResultsEval(farm_results)
158
- o.add_capacity(algo)
159
- o.add_capacity(algo, ambient=True)
160
- o.add_efficiency()
158
+ # add capacity and efficiency to farm results
159
+ o = foxes.output.FarmResultsEval(farm_results)
160
+ o.add_capacity(algo)
161
+ o.add_capacity(algo, ambient=True)
162
+ o.add_efficiency()
161
163
 
162
- # state-turbine results
163
- farm_df = farm_results.to_dataframe()
164
- print("\nFarm results data:\n")
165
- print(
166
- farm_df[
167
- [
168
- FV.X,
169
- FV.AMB_REWS,
170
- FV.REWS,
171
- FV.AMB_TI,
172
- FV.TI,
173
- FV.AMB_P,
174
- FV.P,
175
- FV.WD,
176
- FV.YAW,
177
- FV.YAWM,
164
+ # state-turbine results
165
+ farm_df = farm_results.to_dataframe()
166
+ print("\nFarm results data:\n")
167
+ print(
168
+ farm_df[
169
+ [
170
+ FV.X,
171
+ FV.AMB_REWS,
172
+ FV.REWS,
173
+ FV.AMB_TI,
174
+ FV.TI,
175
+ FV.AMB_P,
176
+ FV.P,
177
+ FV.WD,
178
+ FV.YAW,
179
+ FV.YAWM,
180
+ ]
178
181
  ]
179
- ]
180
- )
181
- print()
182
+ )
183
+ print()
182
184
 
183
- # results by turbine
184
- turbine_results = o.reduce_states(
185
- {
186
- FV.AMB_P: "weights",
187
- FV.P: "weights",
188
- FV.AMB_CAP: "weights",
189
- FV.CAP: "weights",
190
- }
191
- )
192
- turbine_results[FV.AMB_YLD] = o.calc_turbine_yield(
193
- algo=algo, annual=True, ambient=True
194
- )
195
- turbine_results[FV.YLD] = o.calc_turbine_yield(algo=algo, annual=True)
196
- turbine_results[FV.EFF] = turbine_results[FV.P] / turbine_results[FV.AMB_P]
197
- print("\nResults by turbine:\n")
198
- print(turbine_results)
185
+ # results by turbine
186
+ turbine_results = o.reduce_states(
187
+ {
188
+ FV.AMB_P: "weights",
189
+ FV.P: "weights",
190
+ FV.AMB_CAP: "weights",
191
+ FV.CAP: "weights",
192
+ }
193
+ )
194
+ turbine_results[FV.AMB_YLD] = o.calc_turbine_yield(
195
+ algo=algo, annual=True, ambient=True
196
+ )
197
+ turbine_results[FV.YLD] = o.calc_turbine_yield(algo=algo, annual=True)
198
+ turbine_results[FV.EFF] = turbine_results[FV.P] / turbine_results[FV.AMB_P]
199
+ print("\nResults by turbine:\n")
200
+ print(turbine_results)
199
201
 
200
- # power results
201
- P0 = o.calc_mean_farm_power(ambient=True)
202
- P = o.calc_mean_farm_power()
203
- print(f"\nFarm power : {P / 1000:.1f} MW")
204
- print(f"Farm ambient power: {P0 / 1000:.1f} MW")
205
- print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
206
- print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
202
+ # power results
203
+ P0 = o.calc_mean_farm_power(ambient=True)
204
+ P = o.calc_mean_farm_power()
205
+ print(f"\nFarm power : {P / 1000:.1f} MW")
206
+ print(f"Farm ambient power: {P0 / 1000:.1f} MW")
207
+ print(f"Farm efficiency : {o.calc_farm_efficiency() * 100:.2f} %")
208
+ print(f"Annual farm yield : {turbine_results[FV.YLD].sum():.2f} GWh.")
foxes/core/algorithm.py CHANGED
@@ -912,6 +912,7 @@ class Algorithm(Model):
912
912
  isel=isel,
913
913
  **kwargs,
914
914
  )
915
+ self.reset_chunk_store(chunk_store)
915
916
 
916
917
  # reset to not running:
917
918
  self.unset_running(
foxes/engines/pool.py CHANGED
@@ -187,6 +187,7 @@ class PoolEngine(Engine):
187
187
  The model results
188
188
 
189
189
  """
190
+
190
191
  # subset selection:
191
192
  model_data, farm_data, point_data = self.select_subsets(
192
193
  model_data, farm_data, point_data, sel=sel, isel=isel
@@ -31,24 +31,32 @@ def write_nc(
31
31
  Additional parameters for xarray.to_netcdf
32
32
 
33
33
  """
34
+
35
+ def _round(x, v, d):
36
+ """Helper function to round values"""
37
+ if d is not None:
38
+ if verbosity > 1:
39
+ print(f"File {fpath.name}: Rounding {v} to {d} decimals")
40
+ try:
41
+ x = x.astype(np.float32)
42
+ except ValueError:
43
+ pass
44
+ try:
45
+ return np.round(x, d)
46
+ except Exception:
47
+ pass
48
+ return x
49
+
34
50
  fpath = Path(fpath)
35
51
  if round is not None:
36
52
  crds = {}
37
- for v in ds.coords.keys():
53
+ for v, x in ds.coords.items():
38
54
  d = round.get(v, get_default_digits(v))
39
- if d is not None:
40
- if verbosity > 1:
41
- print(f"File {fpath.name}: Rounding {v} to {d} decimals")
42
- crds[v] = np.round(ds[v].to_numpy(), d)
43
- else:
44
- crds[v] = ds[v].to_numpy()
55
+ crds[v] = _round(x.to_numpy(), v, d)
45
56
  dvrs = {}
46
- for v in ds.data_vars.keys():
57
+ for v, x in ds.data_vars.items():
47
58
  d = round.get(v, get_default_digits(v))
48
- if d is not None:
49
- if verbosity > 1:
50
- print(f"File {fpath.name}: Rounding {v} to {d} decimals")
51
- dvrs[v] = (ds[v].dims, np.round(ds[v].to_numpy(), d))
59
+ dvrs[v] = (x.dims, _round(x.to_numpy(), v, d))
52
60
  ds = Dataset(coords=crds, data_vars=dvrs)
53
61
 
54
62
  enc = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: foxes
3
- Version: 1.5
3
+ Version: 1.5.1
4
4
  Summary: Farm Optimization and eXtended yield Evaluation Software
5
5
  Author: Jonas Schulte
6
6
  Maintainer: Jonas Schulte
@@ -1,26 +1,26 @@
1
1
  docs/source/conf.py,sha256=vJI7sGh52LTnDRfKhQFWOMxheU4Vnq7_lWqL7G4OQAM,12351
2
- examples/abl_states/run.py,sha256=NUyNTRzPb2mW_oiWj3NWgHb2lx-6F_CZ27g9Y9_a_to,4598
2
+ examples/abl_states/run.py,sha256=DhFge87Sx6PK0n9BRU7vsGN-0F5V0I8ZqVTOWxwHyrM,4853
3
3
  examples/compare_rotors_pwakes/run.py,sha256=yGvSGguLcgJmYNwTUGKJDRBxRRFFRYKF4v4VLUo9Wfw,6642
4
4
  examples/compare_wakes/run.py,sha256=uS3svL5UYcttvtSW6jCUyS0_qW0-ArBkY-msYfvJSkE,7353
5
- examples/dyn_wakes/run.py,sha256=7L9Ao-U2TIxE8VT1ZT1rFCHrOBlsBeV1Vck0QDzH9Ak,9364
6
- examples/field_data_nc/run.py,sha256=fWD8h905psa1ijSuNdVk9N_oJxBDtPKtiVPCvW9BlSM,3568
5
+ examples/dyn_wakes/run.py,sha256=OdrRgR1MXeAfwKErhGLN7bCAtd6aCAVeSSQWltQYSJ0,9689
6
+ examples/field_data_nc/run.py,sha256=RIVoNtPM3ewhfCJLBFZ1m8F9sKbFAwS7m2JUf4sBQ1s,3671
7
7
  examples/induction/run.py,sha256=Vqrjuw1_inqseihl-8_qgp4rq-7kc2NawsKa39Ux7V4,6340
8
- examples/multi_height/run.py,sha256=9Gbx-FiMro1pxiMHMO8pomP8tgBbuW6w-jaJW_S5zMA,3294
8
+ examples/multi_height/run.py,sha256=qnx2mAJZ1aY7N6wSmczjkSNcAsvQibzHh4e0Bf_mQ3o,3345
9
9
  examples/power_mask/run.py,sha256=BXR0V_9y1aebzLnj2bXIFXMHQ1veaCMAPLRAH8EMOhY,7596
10
10
  examples/quickstart/run.py,sha256=fo8A_oioPyUtNs4EiHZE1fCHH6DRuXFQzWJyHHd_oiI,427
11
11
  examples/random_timeseries/run.py,sha256=ASpLTZkG9tLVbG34vyiBK1zJgvvAfl45EhA6r6jHDxM,6111
12
- examples/scan_row/run.py,sha256=ti3XCL4MSyL5b0qMsbJOZfpLNOm6OiMwHd_sN5939tg,5850
13
- examples/sector_management/run.py,sha256=WQvrHqtC7_u6JvZfbRsVSb3SPYDjCp-ZJpC-nZsQf5M,4451
12
+ examples/scan_row/run.py,sha256=N9UX_Fb5ZGTLEzKZsv_paHt2Wk6RAanHKfEL6liuMj8,6197
13
+ examples/sector_management/run.py,sha256=aNT22eIsRlgOy0aN3TVWsVNc3wCfNa6keg7gfwD6hl8,4626
14
14
  examples/sequential/run.py,sha256=pd7L3obYyqNZXzDxntRKsfhqunG0SIjZslbD42WcveI,6758
15
15
  examples/single_state/run.py,sha256=VfZD5Ev4jLo6LQ7antKmZFU8SDfezeI9ERSf4ASvKsU,6162
16
- examples/states_lookup_table/run.py,sha256=XZkntAbHfZwozQ0GFOQiKl4yjm7v4TjC4lwSsF1Ixgs,3922
17
- examples/streamline_wakes/run.py,sha256=weBGjuHxZJQFOFK9Anct0UK0gwd-4dnrZIHYjiVNlqU,4698
16
+ examples/states_lookup_table/run.py,sha256=IJu6SJOq1S9VvJIv785hJVXn7zpjDRp41Cj-mN7ZQZ4,3965
17
+ examples/streamline_wakes/run.py,sha256=mzuxLGzajazIGfzWDCzDU2zRUODQmstYUlqzK46aA-U,4749
18
18
  examples/tab_file/run.py,sha256=xe4VUwyl3eYMUGtyS7kuieGeoYo9mEq_ZvQ6E1rZ1uE,4370
19
- examples/timelines/run.py,sha256=ca1koiA6qX8LVrAGrYMJRJY7xChwwjHndP6AB5LNlqA,8261
20
- examples/timeseries/run.py,sha256=QN6xXXUOZFh12FBZ6to_WC1rnLkCzebay2ORiLp1X10,5399
19
+ examples/timelines/run.py,sha256=Tc37gtvV9q5ALoCuT5p1N8m2X7J8UK0E7qXn0YZunpA,8688
20
+ examples/timeseries/run.py,sha256=3aAf_qC4IlEr_QhMUoZIV5A4K_jnnizy5H9-HBFTdjE,5571
21
21
  examples/timeseries_slurm/run.py,sha256=4yHi4SXr7rff4tbJNQEUa9Dd7Dvli2XrJExu-xdE2Us,5587
22
- examples/wind_rose/run.py,sha256=QeV6tbJcJcDD8vC1kQqRgyyeRjACzTmYkedLQ9eqYe0,4253
23
- examples/yawed_wake/run.py,sha256=msw7_xkxH45gegvUn9_0-lAB7D1gpmzvtMDd6kGKfVo,6531
22
+ examples/wind_rose/run.py,sha256=CU7pzOSlWHifFvdtKl_t9gufaAKw2TkjwvklDZRaawM,4380
23
+ examples/yawed_wake/run.py,sha256=X-cxmhC0rCRHyB00kXrsnqQ9fufSY7L35lozls7Nxuw,6882
24
24
  foxes/__init__.py,sha256=1RPU7w3WJ3jFb2aJdZKRy-6Fje9qAaH85WYcOCiDvwk,1375
25
25
  foxes/constants.py,sha256=jQcyeU53V629Tf8qQWc2F4Xw1rV3ywtJiT-g1JWenNg,3842
26
26
  foxes/variables.py,sha256=sK58u3HJRsWo-fbE7GPlQUhF0YUhY-qSg6Vl8Pv1Eo8,6144
@@ -48,7 +48,7 @@ foxes/algorithms/sequential/models/seq_state.py,sha256=al7XhLKLQSGhfUZw--Bz4RNNb
48
48
  foxes/config/__init__.py,sha256=M2FrI1gO6SZUUPsQe1KL_-JNyUUt_Lk4nOw7cyNpHew,223
49
49
  foxes/config/config.py,sha256=e3HhitD2Xleqm3utoXLGAu8Vg16app35Cpx4nBhnZm8,4318
50
50
  foxes/core/__init__.py,sha256=iMuUuPsFERvjY2PQa7PCEsxrZYRJ8IORJs3k3OoerFw,1985
51
- foxes/core/algorithm.py,sha256=xRED8Y7c3xqr3Biurf5jJrZpbpcF-Xq0sEBPikSOFZs,27450
51
+ foxes/core/algorithm.py,sha256=EZPXOXAS-IjhWHatxZO-tvQch4yPMIPkdDHWtpATEmQ,27494
52
52
  foxes/core/axial_induction_model.py,sha256=sGbTHFMjEYKiVjElLP_SCRulKatcK0wsEXf30zty2Vc,1023
53
53
  foxes/core/data.py,sha256=sYkL-kZnWU9wdKkbSS85KS66BMUXToloCNkWGPE7C3s,25280
54
54
  foxes/core/data_calc_model.py,sha256=c96fv7HrLK29WD5SRc4WFXjT24lNImnLflQJvIMACn8,1488
@@ -103,7 +103,7 @@ foxes/engines/futures.py,sha256=_VQXNLb0AxTtTouy96LhBnwPldHiG0xldHjpChKyNxs,1503
103
103
  foxes/engines/mpi.py,sha256=XR9xFX6Spw8OKQ7x4qYOSeUlxcFWkwndNRiQ3IomkdM,650
104
104
  foxes/engines/multiprocess.py,sha256=X4S-AnhnYuONpfZ3pKWi4VH9mm68ZMNm43ELPoeb-Ek,1328
105
105
  foxes/engines/numpy.py,sha256=yljXIiVZgQjw97jmhpz_vKOh1TW3RxSI4SxN7rQnC4M,5806
106
- foxes/engines/pool.py,sha256=CFKwrmwWXNqKzwRXNYsvChSiKwiIi0pzQvwwGT8ysSY,8708
106
+ foxes/engines/pool.py,sha256=SxJCH45mqFSwvq9YtLDoamu_5AWnVPH-VDZkDI5Tfiw,8709
107
107
  foxes/engines/ray.py,sha256=Otlc1ZfoTiNE6sq9rq1y212tVbaVDfxryqAl4T0AM_A,1622
108
108
  foxes/engines/single.py,sha256=Z0tun1ZKQD-LMdSK291AUagBDJiHnexJL5ysrkP04tY,4725
109
109
  foxes/input/__init__.py,sha256=JodEdc77y5I-CsgfT5HadMK7DH5EKcr9uGLEVcgM-wY,157
@@ -282,7 +282,7 @@ foxes/utils/two_circles.py,sha256=xkj-SA_x-VXY7KtmSU4lcV4gFdplyhU3sBAC9vTdkF4,28
282
282
  foxes/utils/weibull.py,sha256=2fUWt-vZVMu55fFrXuo0M3B771xtoWeVVmqE7Nr5yXM,656
283
283
  foxes/utils/wind_dir.py,sha256=6W0njWDvnIdOOjwqcMr64MW9ApjdtFA75blVUxirPMo,2823
284
284
  foxes/utils/wrg_utils.py,sha256=QzaASvn50Pzegk2NoCJhC9WozO95KiQPIwiWGNMeA4w,3604
285
- foxes/utils/xarray_utils.py,sha256=pqtBkCzSXJMlTM0VTI-Su4SGxOP57sYVlZORBr7Z2qw,1880
285
+ foxes/utils/xarray_utils.py,sha256=ddnjrZ6HLMqIE1JpP_yCx4tKeSDjNRsSI6c5CL2neJo,1961
286
286
  foxes/utils/abl/__init__.py,sha256=yDbyZodXZ_dsmIJ4QH981CZ7xvVQyLneGzjOgYB7ZNE,179
287
287
  foxes/utils/abl/neutral.py,sha256=E4DEhvXvw74BPrYr1MjQjeIaoz6ZOTWVlqScKflm-0M,1358
288
288
  foxes/utils/abl/sheared.py,sha256=nS6gxa5cR7B7XcZbEk3rwOvbF6m4cinXAIhhn9gGBBs,446
@@ -295,7 +295,7 @@ foxes/utils/geom2d/example_intersection.py,sha256=4e6sjpZEk_bNc462YvwKPzwxdV1B90
295
295
  foxes/utils/geom2d/example_union.py,sha256=BKfLt1mtQcSto-qExeMQkq8tQ6kfFXVJ93Cc7DhOal8,1750
296
296
  foxes/utils/geom2d/half_plane.py,sha256=kzZD6pkZxZ03MK9WAboWzXb5Ws5dWLQY9GIahD4D9mA,6167
297
297
  foxes/utils/geom2d/polygon.py,sha256=Xj7triA5Pe4-48sNSAvGxEXlQGptV161LUpKKCf3YOY,5535
298
- foxes-1.5.dist-info/licenses/LICENSE,sha256=bBCH6mYTPzSepk2s2UUZ3II_ZYXrn1bnSqB85-aZHxU,1071
298
+ foxes-1.5.1.dist-info/licenses/LICENSE,sha256=bBCH6mYTPzSepk2s2UUZ3II_ZYXrn1bnSqB85-aZHxU,1071
299
299
  tests/0_consistency/iterative/test_iterative.py,sha256=lzagmJ1y241l6Szw4Cu80S8S1ATHIyD7ukr1vVBrusY,2637
300
300
  tests/0_consistency/partial_wakes/test_partial_wakes.py,sha256=7rdg2lcUYUzxwCdGhue7A4QYCJQGrOO4E0bytgatYj4,2584
301
301
  tests/1_verification/flappy_0_6/PCt_files/test_PCt_files.py,sha256=8tIqifsykvxMCd9eD-mZWxRwT56sKjIxrGf3hf8aCFA,2530
@@ -321,8 +321,8 @@ tests/1_verification/flappy_0_6_2/row_Bastankhah_Crespo/flappy/run.py,sha256=nwI
321
321
  tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/test_row_Bastankhah_linear_centre.py,sha256=QUULW3AJJq8zvUIdIQHkXiNZpaysVYIALh5HOJ6-428,2595
322
322
  tests/1_verification/flappy_0_6_2/row_Bastankhah_linear_centre/flappy/run.py,sha256=1paRjCe71AIM8igK4_f0FFH1xiIETvuBwnZAATiwWUU,2102
323
323
  tests/3_examples/test_examples.py,sha256=9_PtvlYA6ELsQGHt-xAnsjCYdGj1ekX237ymWvEJaCk,732
324
- foxes-1.5.dist-info/METADATA,sha256=3SO55BIVmGwr2wJ-TWDMqSdqAQ9vJgzJOXRZHrQ0C1Y,8121
325
- foxes-1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
326
- foxes-1.5.dist-info/entry_points.txt,sha256=KuS44FRH5NnMw201A8Btr76eNRKr2UOoKHjejAsqKwE,123
327
- foxes-1.5.dist-info/top_level.txt,sha256=G7oHApEz5nc-iP__XsPcvjYe_NyXGmKMUMPHi3C3x6I,26
328
- foxes-1.5.dist-info/RECORD,,
324
+ foxes-1.5.1.dist-info/METADATA,sha256=zRir9XRuTKME-eYx3K7yLKrD9wqWTah5-PTPWIKvEjw,8123
325
+ foxes-1.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
326
+ foxes-1.5.1.dist-info/entry_points.txt,sha256=KuS44FRH5NnMw201A8Btr76eNRKr2UOoKHjejAsqKwE,123
327
+ foxes-1.5.1.dist-info/top_level.txt,sha256=G7oHApEz5nc-iP__XsPcvjYe_NyXGmKMUMPHi3C3x6I,26
328
+ foxes-1.5.1.dist-info/RECORD,,
File without changes