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 }
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
log_directory = "./logs" log_level = "INFO" sc_points = "[REQUIRED]" trans_table = "[REQUIRED]" sc_capacity_col = "capacity_ac_mw" fixed_charge_rate = "[REQUIRED]" simple = true avail_cap_frac = 1 line_limited = false consider_friction = true 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",] [execution_control] option = "local" allocation = "[REQUIRED IF ON HPC]" walltime = "[REQUIRED IF ON HPC]" qos = "normal"
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 toNone
) 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), andERROR
(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 themeta
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 capacityac_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 defaultNone
.- 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 orreVX 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.