def main():
    # API documentation for downloading a subset:
    # https://confluence.ecmwf.int/display/CKB/Global+data%3A+Download+data+from+ECMWF+for+a+particular+area+and+resolution
    # https://retostauffer.org/code/Download-ERA5/

    download_dir = create_folder("wind_velocity_usa_era5", prefix=INPUT_DIR)

    setup_logging()

    turbines = load_turbines()
    north, west, south, east = calc_bounding_box_usa(turbines)

    # Format for downloading ERA5: North/West/South/East
    bounding_box = "{}/{}/{}/{}".format(north, west, south, east)

    logging.info(
        "Downloading bounding_box=%s for years=%s and months=%s",
        bounding_box,
        YEARS,
        MONTHS,
    )

    with Pool(processes=NUM_WORKERS) as pool:
        for year in YEARS:
            for month in MONTHS:
                pool.apply_async(
                    download_one_month,
                    (
                        bounding_box,
                        download_dir,
                        month,
                        year,
                    ),
                )

        pool.close()
        pool.join()
from dask.diagnostics import ProgressBar

from src.config import MONTHS
from src.config import YEARS
from src.config import REFERENCE_HUB_HEIGHT_M
from src.util import create_folder
from src.load_data import (
    load_turbines,
    load_generated_energy_gwh,
)
from src.load_data import load_wind_velocity
from src.calculations import calc_wind_speed_at_turbines

from src.logging_config import setup_logging

setup_logging()

turbines = load_turbines()
generated_energy_gwh = load_generated_energy_gwh()

output_folder = create_folder("wind_speed")

for height in (None, REFERENCE_HUB_HEIGHT_M):
    logging.info(f"Calculating wind speed at turbines with height={height}...")

    height_name = "hubheight" if height is None else height

    for year in YEARS:
        logging.info(f"year={year}...")
        wind_velocity = load_wind_velocity(year, MONTHS)
        with ProgressBar():