reV supply-curve

Execute the supply-curve step from a config file.

reV supply curve computes the transmission costs associated with each supply curve point output by reV supply curve aggregation. Transmission costs can either be computed competitively (where total capacity remaining on the transmission grid is tracked and updated after each new connection) or non-competitively (where the cheapest connections for each supply curve point are allowed regardless of the remaining transmission grid capacity). In both cases, the permutation of transmission costs between supply curve points and transmission grid features should be computed using the reVX Least Cost Transmission Paths utility.

The general structure for calling this CLI command is given below (add --help to print help info to the terminal).

reV supply-curve [OPTIONS]

Options

-c, --config_file <config_file>

Required Path to the supply-curve configuration file. Below is a sample template config

{
    "execution_control": {
        "option": "local",
        "allocation": "[REQUIRED IF ON HPC]",
        "walltime": "[REQUIRED IF ON HPC]",
        "qos": "normal",
        "memory": null,
        "queue": null,
        "feature": null,
        "conda_env": null,
        "module": null,
        "sh_script": null,
        "num_test_nodes": null,
        "max_workers": null
    },
    "log_directory": "./logs",
    "log_level": "INFO",
    "sc_points": "[REQUIRED]",
    "trans_table": "[REQUIRED]",
    "sc_features": null,
    "sc_capacity_col": "capacity_ac_mw",
    "fixed_charge_rate": "[REQUIRED]",
    "simple": true,
    "avail_cap_frac": 1,
    "line_limited": false,
    "transmission_costs": null,
    "consider_friction": true,
    "sort_on": null,
    "columns": [
        "trans_gid",
        "trans_type",
        "count_num_parallel_trans",
        "dist_spur_km",
        "cost_total_trans_usd_per_mw",
        "lcot_usd_per_mwh",
        "lcoe_all_in_usd_per_mwh",
        "dist_export_km",
        "dist_reinforcement_km",
        "cost_spur_usd_per_mw",
        "cost_poi_usd_per_mw",
        "cost_export_usd_per_mw",
        "cost_reinforcement_usd_per_mw",
        "latitude_poi",
        "longitude_poi",
        "latitude_reinforcement_poi",
        "longitude_reinforcement_poi"
    ],
    "competition": null
}

Parameters

execution_controldict

Dictionary containing execution control arguments. Allowed arguments are:

option:

({‘local’, ‘kestrel’, ‘eagle’, ‘awspc’, ‘slurm’, ‘peregrine’}) Hardware run option. Determines the type of job scheduler to use as well as the base AU cost. The “slurm” option is a catchall for HPC systems that use the SLURM scheduler and should only be used if desired hardware is not listed above. If “local”, no other HPC-specific keys in are required in execution_control (they are ignored if provided).

allocation:

(str) HPC project (allocation) handle.

walltime:

(int) Node walltime request in hours.

qos:

(str, optional) Quality-of-service specifier. For Kestrel users: This should be one of {‘standby’, ‘normal’, ‘high’}. Note that ‘high’ priority doubles the AU cost. By default, "normal".

memory:

(int, optional) Node memory max limit (in GB). By default, None, which uses the scheduler’s default memory limit. For Kestrel users: If you would like to use the full node memory, leave this argument unspecified (or set to None) if you are running on standard nodes. However, if you would like to use the bigmem nodes, you must specify the full upper limit of memory you would like for your job, otherwise you will be limited to the standard node memory size (250GB).

max_workers:

(int, optional) Number of workers to use to compute LCOT. If > 1, computation is run in parallel. If None, computation uses all available CPU’s. By default, None.

queue:

(str, optional; PBS ONLY) HPC queue to submit job to. Examples include: ‘debug’, ‘short’, ‘batch’, ‘batch-h’, ‘long’, etc. By default, None, which uses “test_queue”.

feature:

(str, optional) Additional flags for SLURM job (e.g. “-p debug”). By default, None, which does not specify any additional flags.

conda_env:

(str, optional) Name of conda environment to activate. By default, None, which does not load any environments.

module:

(str, optional) Module to load. By default, None, which does not load any modules.

sh_script:

(str, optional) Extra shell script to run before command call. By default, None, which does not run any scripts.

num_test_nodes:

(str, optional) Number of nodes to submit before terminating the submission process. This can be used to test a new submission configuration without sumbitting all nodes (i.e. only running a handful to ensure the inputs are specified correctly and the outputs look reasonable). By default, None, which submits all node jobs.

Only the option key is required for local execution. For execution on the HPC, the allocation and walltime keys are also required. All other options are populated with default values, as seen above.

log_directorystr

Path to directory where logs should be written. Path can be relative and does not have to exist on disk (it will be created if missing). By default, "./logs".

log_level{“DEBUG”, “INFO”, “WARNING”, “ERROR”}

String representation of desired logger verbosity. Suitable options are DEBUG (most verbose), INFO (moderately verbose), WARNING (only log warnings and errors), and ERROR (only log errors). By default, "INFO".

sc_pointsstr | pandas.DataFrame

Path to CSV or JSON or DataFrame containing supply curve point summary. Can also be a filepath to a reV bespoke HDF5 output file where the meta dataset has the same format as the supply curve aggregation output.

Note

If executing reV from the command line, this input can also be "PIPELINE" to parse the output of the previous pipeline step and use it as input to this call. However, note that duplicate executions of any preceding commands within the pipeline may invalidate this parsing, meaning the sc_points input will have to be specified manually.

trans_tablestr | pandas.DataFrame | list

Path to CSV or JSON or DataFrame containing supply curve transmission mapping. This can also be a list of transmission tables with different line voltage (capacity) ratings. See the reVX Least Cost Transmission Paths utility to generate these input tables.

sc_featuresstr | pandas.DataFrame, optional

Path to CSV or JSON or DataFrame containing additional supply curve features (e.g. transmission multipliers, regions, etc.). These features will be merged to the sc_points input table on ALL columns that both have in common. If None, no extra supply curve features are added. By default, None.

sc_capacity_colstr, optional

Name of capacity column in trans_sc_table. The values in this column determine the size of transmission lines built. The transmission capital costs per MW and the reinforcement costs per MW will be returned in terms of these capacity values. Note that if this column != “capacity”, then “capacity” must also be included in trans_sc_table since those values match the “mean_cf” data (which is used to calculate LCOT and Total LCOE). This input can be used to, e.g., size transmission lines based on solar AC capacity ( sc_capacity_col="capacity_ac"). By default, "capacity".

fixed_charge_ratefloat

Fixed charge rate, (in decimal form: 5% = 0.05). This value is used to compute LCOT.

simplebool, optional

Option to run the simple sort (does not keep track of capacity available on the existing transmission grid). If False, a full transmission sort (where connections are limited based on available transmission capacity) is run. Note that the full transmission sort requires the avail_cap_frac and line_limited inputs. By default, True.

avail_cap_fracint, optional

This input has no effect if simple=True. Fraction of transmissions features capacity ac_cap to make available for connection to supply curve points. By default, 1.

line_limitedbool, optional

This input has no effect if simple=True. Flag to have substation connection limited by maximum capacity of the attached lines. This is a legacy method. By default, False.

transmission_costsstr | dict, optional

Dictionary of transmission feature costs or path to JSON file containing a dictionary of transmission feature costs. These costs are used to compute transmission capital cost if the input transmission tables do not have a "trans_cap_cost" column (this input is ignored otherwise). The dictionary must include:

  • line_tie_in_cost

  • line_cost

  • station_tie_in_cost

  • center_tie_in_cost

  • sink_tie_in_cost

By default, None.

consider_frictionbool, optional

Flag to add a new "total_lcoe_friction" column to the supply curve output that contains the sum of the computed "total_lcoe" value and the input "mean_lcoe_friction" values. If "mean_lcoe_friction" is not in the sc_points input, this option is ignored. By default, True.

sort_onstr, optional

Column label to sort the supply curve table on. This affects the build priority when doing a “full” sort - connections with the lowest value in this column will be built first. For a “simple” sort, only connections with the lowest value in this column will be considered. If None, the sort is performed on the total LCOE without any reinforcement costs added (this is typically what you want - it avoids unrealistically long spur-line connections). By default None.

columnslist | tuple, optional

Columns to preserve in output supply curve dataframe. By default, DEFAULT_COLUMNS.

competitiondict, optional

Optional dictionary of arguments for competitive wind farm exclusions, which removes supply curve points upwind (and optionally downwind) of the lowest LCOE supply curves. If None, no competition is applied. Otherwise, this dictionary can have up to four keys:

  • wind_dirs (required) : A path to a CSV file or reVX ProminentWindDirections output with the neighboring supply curve point gids and power-rose values at each cardinal direction.

  • n_dirs (optional) : An integer representing the number of prominent directions to use during wind farm competition. By default, 2.

  • downwind (optional) : A flag indicating that downwind neighbors should be removed in addition to upwind neighbors during wind farm competition. By default, False.

  • offshore_compete (optional) : A flag indicating that offshore farms should be included during wind farm competition. By default, False.

By default None.

Note that you may remove any keys with a null value if you do not intend to update them yourself.