Skip to content

wind cf correction factors do sometimes not converge #129

@julian-belina

Description

@julian-belina

When passing a correction factor, the output cf is corrected via an adaptation of the wind speeds, with remaining errors being corrected iteratively until a tolerance is met, i.e. the sim cf is close enough to the target cf. In some case, this seems not to work though. Two case have been observed: Either the capacity factor deviation from target cf converges to a value which is not 1.0, or it does not converge at all (whilst interestingly enough, it approaches a factor of 2.0 ergo absolute error=1.0x target cf from time to time to then diverge again). In some cases, it also becomes nan during the iterations.

I have prepared shps with sample locations and workflow arguments for all cases, below a code snippets to reproduce the bug. Use the following input shp paths to reproduce the individual failure cases:

  1. Location cf converges towards wrong number (not 1.0 deviation factor)

test_loc_shp = "/fast/home/c-winkler/temp/20240531_RESkit_convergence/convergency_test_singleloc.shp"

  1. Location cfs become nan during iteration

test_loc_shp = "/fast/home/c-winkler/temp/20240531_RESkit_convergence/convergency_test_noconv_nandeviation.shp"

  1. Location cfs do not converge

test_loc_shp = "/fast/home/c-winkler/temp/20240531_RESkit_convergence/convergency_test_noconv.shp"
(It should be noted that the number of placements that exceed the tolerance is VERY slowly reduced when a longer list of placements with convergence issues is tested. Use this test file to see the reduction of the number/share of cfs exceeding tolerance, the then remaining problem cases are saved separately under above ..._noconv.shp file: "/fast/home/c-winkler/temp/20240531_RESkit_convergence/convergency_test_noconv_all.shp")

import reskit as rk
import geokit as gk

# define test input file
test_loc_shp = ... # see above

# execute workflow
# load placement that converges to a wrong number under given conditions
placements_df = gk.vector.extractFeatures(test_loc_shp).drop(columns="source")

# execute workflow with that placement
results = rk.execute_workflow_iteratively(
    workflow=rk.wind.wind_era5_2023,
    weather_path_varname="era5_path",
    zoom=4,
    placements=placements_df,
    era5_path="/benchtop/shared_data/weather_data/processed_weather_data/ERA5_global_processed_V2022.02/4/<X-TILE>/<Y-TILE>/2018/reanalysis-era5-single-levels.z4.x<X-TILE>.y<Y-TILE>.y2018.*.nc",
    gwa_100m_path="/benchtop/internal/home/c-winkler/Research/01_Dissertation/03_RESkit/01_preprocessing/01_expand_GWA_to_EEZ/01_avg_annual_windspeed_100m_GWA_ERA5_interpolated.tif",
    esa_cci_path="/benchtop/shared_data/2023_gears/geography/landcover/esa_cci_v2.1.1/C3S-LC-L4-LCCS-Map-300m-P1Y-2018-v2.1.1.tif",
    output_netcdf_path=None,
    output_variables=None,
    nodata_fallback=None,
    correction_factor="/benchtop/projects/2023_c-winkler_iea/04_global_potentials/01_code/02_Energy/input_data/corr_factor_0.25.tif", #1.0,
    max_batch_size=15000,
    wake_reduction_curve_name="dena_mean",
    availability_factor=0.98,
    era5_lra_path=None,
)

This issue was originally created by: @chrisjwin

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions