Project Config
TOML
Example
################## Project data ####################
[project]
name = "test1" # A short name in one word as project identifier
full_name = "Test Project 1"
description = "This is the first test project for PIPES using some of the LA100 data and configs as a test case"
assumptions = [
"We can use LA100 as a test project for the C2C data pipeline.",
"No effects of climate change on power system outside of increased demand for cooling are measured.",
"LADWP will need to achieve a 100% clean energy by 2030 or 2045 completely on its own (e.g., no other utilities will be trading energy).",
"Path to 100% is based off today's technology options.",
"https://maps.nrel.gov/la100/la100-study/topics/renewable-energy-pathways#renewable-energy-pathways-assumptions"
]
scheduled_start = "2022-09-27"
scheduled_end = "2024-01-01"
sensitivities = []
[[project.milestones]]
name = "Milestone 1"
description = "First test project milestone"
milestone_date = "2022-11-01"
[[project.milestones]]
name = "Milestone 2"
description = "Second test project milestone"
milestone_date = "2022-12-01"
[project.owner] # who will be the main POC for the project?
first_name = "Joe"
last_name = "Shmo"
email = "joe.shmo@nrel.gov"
username = "jshmo"
[project.requirements] # these are default requirements to be used unless otherwise specified at a project run level or for individual models
weather_years = [2012]
model_years = [2020, 2025, 2030, 2040, 2045]
geographic_extent = "LA City"
################# project scenario data ####################
[[project.scenarios]]
name = "sb100_high"
description = [
"100% clean energy by 2045.",
"Only scenario with a target based on retail sales, not generation.",
"Evaluated under High Load Electrification."
]
[project.scenarios.other]
color = "#1BC1AF"
[[project.scenarios]]
name = "sb100_moderate"
description = [
"100% clean energy by 2045.",
"Only scenario with a target based on retail sales, not generation.",
"Evaluated under Moderate Load Electrification."]
[project.scenarios.other]
color = "#FA6504"
[[project.scenarios]]
name = "sb100_stress"
description = [
"100% clean energy by 2045.",
"Only scenario with a target based on retail sales, not generation.",
"Evaluated under High Stress Load Electrification."]
[project.scenarios.other]
color = "#5369E5"
[[project.scenarios]]
name = "earlynobio_high"
description = [
"100% clean energy by 2035, 10 years sooner than other scenarios.",
"No natural gas generation or biofuels.",
"Allows existing nuclear and upgrades to transmission.",
"Evaluated under High Load Electrification."]
[[project.scenarios]]
name = "earlynobio_moderate"
description = [
"100% clean energy by 2035, 10 years sooner than other scenarios.",
"No natural gas generation or biofuels.",
"Allows existing nuclear and upgrades to transmission.",
"Evaluated under Moderate Load Electrification."]
[[project.scenarios]]
name = "trans_high"
description = [
"100% clean energy by 2045.",
"Only scenario that builds new transmission corridors.",
"No natural gas or nuclear generation.",
"Evaluated under High Load Electrification."]
[[project.scenarios]]
name = "trans_moderate"
description = [
"100% clean energy by 2045.",
"Only scenario that builds new transmission corridors.",
"No natural gas or nuclear generation.",
"Evaluated under Moderate Load Electrification."]
[[project.scenarios]]
name = "ltdnewtrans_high"
description = [
"100% clean by 2045.",
"Only scenario that does not allow upgrades to transmission beyond currently planned projects.",
"No natural gas or nuclear generation.",
"Evaluated under High Load Electrification."]
[[project.scenarios]]
name = "ltdnewtrans_moderate"
description = [
"100% clean by 2045.",
"Only scenario that does not allow upgrades to transmission beyond currently planned projects.",
"No natural gas or nuclear generation.",
"Evaluated under Moderate Load Electrification."]
######## pipeline data ################
# -------- Run 1 --------
[[project_runs]]
name = "1"
description = "Single scenario, single year, simple test"
assumptions = ["The single scenario, single year, simple tests assumes 1 scenario and 1 model year at the project run level which is different than the project level. The project run also has 2 models with one edge. Each model has its own example of a different model requirement for geographic_extent compared to the run-level."]
scenarios = ["earlynobio_moderate"]
scheduled_start = "2022-09-27"
scheduled_end = "2022-10-15"
[project_runs.requirements] # these become the new requirements for all datasets in this run
model_years = [2020]
[[project_runs.models]]
model = "dsgrid"
type = "Energy Demand" # This is used in pipeline as header to represent the category of model
description = "The Demand-Side Grid Model used for LA100 project Run 1"
assumptions = ["This is a dsgrid assumption"]
expected_scenarios = ["demand_moderate"] # scenarios we're expecting the model to checkin datasets under
scheduled_start = "2022-09-28"
scheduled_end = "2022-10-05"
[[project_runs.models.scenario_mappings]] # need to check that either all project scenarios are accounted for or that all project_run scenarios are accounted for if models.scenario_mappings are provided
model_scenario = "demand_moderate"
project_scenarios = ["earlynobio_moderate"] # one model scenario can map to multiple project scenarios.
description = [
"30% of passenger cars on the road in 2045 are plug-in electric.",
"Residential building equipment and appliance sales are distributed across all efficiency levels.",
"80% of new & retrofit equipment is 5 years ahead of California's Title 24 commercial building energy-efficiency code-minimum.",
"75% of residents have access to residential charging; 25% access to workplace charging."]
[project_runs.models.requirements] # model specific requirement that applies to this run
geographic_extent = "RS-A"
[[project_runs.models]]
model = "rpm"
type = "Capacity Expansion"
description = "Resource Planning Model for LADWP and WECC from the LA100 Project"
assumptions = ["LADWP is treated as an island"]
expected_scenarios = ["earlynobio_moderate"]
scheduled_start = "2022-10-05"
scheduled_end = "2022-10-15"
[project_runs.models.requirements]
geographic_extent = "RS-C"
[[project_runs.topology]]
from_model = "dsgrid"
to_model = "rpm"
[[project_runs.topology.handoffs]]
id = "handoff_id1"
description = "8760 system-level load profiles, including T&D losses, before distributed generation, at the RS nodal level"
scheduled_start = "" # some date
scheduled_end = "2023-06-30" # *Required* some date
notes = ""
[[project_runs.topology.handoffs]]
id = "handoff_id2"
description = "EV locations"
scheduled_start = "" # some date
scheduled_end = "2023-07-10" # *Required* some date
notes = ""
# -------- Run 2 --------
[[project_runs]]
name = "2"
description = "full set of scenarios more complex test"
assumptions = ["The full set of scenarios more complex test includes all project scenarios with two models having their own defintion that requires mappings back to the project level. This project run includes 3 models with more edges."]
scenarios = [
"sb100_moderate",
"sb100_high",
"sb100_stress",
"earlynobio_high",
"earlynobio_moderate",
"trans_high",
"trans_moderate",
"ltdnewtrans_high",
"ltdnewtrans_moderate"
]
scheduled_start = "2022-10-20"
scheduled_end = "2023-01-01"
[project_runs.requirements]
# Empty, inherits requirements from project
[[project_runs.models]]
model = "dsgrid" # This must be unique
model_team = "dsgrid" # *optional* if this isn't provided, the associated model team is looked up via the "model" property above
display_name = "dsGrid" # *optional* A display name, if different than "model" property above
type = "Energy Demand"
description = "The Demand-Side Grid Model used for LA100 project as an example for PIPES Test Project 1 Run 2"
expected_scenarios = ["demand_moderate", "demand_high", "demand_stress"]
scheduled_start = "2022-10-20"
scheduled_end = "2022-11-15"
[project_runs.models.requirements]
# None
[[project_runs.models.scenario_mappings]]
model_scenario = "demand_moderate"
project_scenarios = ["earlynobio_moderate", "sb100_moderate", "trans_moderate", "ltdnewtrans_moderate"]
description = [
"30% of passenger cars on the road in 2045 are plug-in electric.",
"Residential building equipment and appliance sales are distributed across all efficiency levels.",
"80% of new & retrofit equipment is 5 years ahead of California's Title 24 commercial building energy-efficiency code-minimum.",
"75% of residents have access to residential charging; 25% access to workplace charging."]
[[project_runs.models.scenario_mappings]]
model_scenario = "demand_high"
project_scenarios = ["earlynobio_high", "sb100_high", "trans_high", "ltdnewtrans_high"]
description = [
"Appliances, heating within buildings switch from natural gas to electric.",
"Residential building equipment and appliance sales are at highest efficiency available.",
"80% of passenger cars on the road in 2045 are plug-in electric.",
"60% of residents have access to residential charging; 50% access to workplace charging to encourage more daytime charging.",
"Demand is more flexible in its timing."]
[[project_runs.models.scenario_mappings]]
model_scenario = "demand_stress"
project_scenarios = ["sb100_stress"]
description = [
"All the electrification of High, but timing of demand is not aligned with renewable generation.",
"Energy efficiency adoption is lower than Moderate (matches LADWPs 2017 Strategic Long Term Resource Plan 10-year efficiency goals).",
"90% of residents have access to residential charging; 15% access to workplace charging to restrict daytime charging."]
[project_runs.models.requirements]
# None
[[project_runs.models]]
model = "dgen"
type = "Distributed Generation Adoption"
description = "The Distributed Generation Model (dGen) - A customer behind-the-meter adoption model for rooftop solar and distributed storage. Tuned for the LA100 project and used as an example for PIPES development."
expected_scenarios = ["dg_moderate", "dg_high"]
scheduled_start = "2022-11-15"
scheduled_end = "2022-11-30"
[project_runs.models.requirements]
# None
[[project_runs.models.scenario_mappings]]
model_scenario = "dg_moderate"
project_scenarios = ["sb100_moderate", "sb100_high", "sb100_stress", "trans_moderate", "trans_high"]
description = "net energy billing"
[[project_runs.models.scenario_mappings]]
model_scenario = "dg_high"
project_scenarios = ["earlynobio_moderate", "earlynobio_high", "ltdnewtrans_moderate", "ltdnewtrans_high"]
description = "net energy metering"
[[project_runs.models]] # Note: this model does not have any expected scenarios, so that means we expect all project-level scenarios
model = "rpm"
type = "Capacity Expansion"
description = "Resource Planning Model for LADWP and WECC from the LA100 Project"
assumptions = ["LADWP is treated as an island"]
scheduled_start = "2022-11-30"
scheduled_end = "2023-01-01"
[project_runs.models.requirements]
# None
# Note: no scenario mappings needed because rpm here uses the project scenarios by default
[[project_runs.topology]]
from_model = "dsgrid"
to_model = "rpm"
[[project_runs.topology.handoffs]]
id = "handoff_id3"
description = "8760 system-level load profiles, including T&D losses, before distributed generation, at the RS nodal level, including gap-system level loads but not including load shifting from demand response."
scheduled_start = "" # some date
scheduled_end = "2023-05-20" # *Required* some date
notes = ""
[[project_runs.topology]]
from_model = "dsgrid"
to_model = "dgen"
[[project_runs.topology.handoffs]]
id = "handoff_id4"
description = "8760 customer-level behind-the-meter load profiles (before distributed generation), at the agent level (i.e., property level). Includes residential building, commercial building, industrial, and gap-agent loads plus transportation of electric vehicles."
scheduled_start = "" # some date
scheduled_end = "2023-05-21" # *Required* some date
notes = ""
[[project_runs.topology]]
from_model = "dgen"
to_model = "rpm"
[[project_runs.topology.handoffs]]
id = "handoff_id5"
description = "Includes distributed PV generation 8760s at the RS nodal level for each dg scenario."
scheduled_start = "" # some date
scheduled_end = "2023-09-30" # *Required* some date
notes = ""
##################### modeling teams #####################
[[model_teams]]
name = "dsgrid"
[[model_teams.members]]
first_name = "Sam"
last_name = "Molnar"
email = "sam.molnar@nrel.gov"
username = "smolnar"
[[model_teams.members]]
first_name = "Meghan"
last_name = "Mooney"
email = "Meghan.Mooney@nrel.gov"
username = "mmooney"
[[model_teams]]
name = "dgen"
[[model_teams.members]]
first_name = "Jianli"
last_name = "Gu"
email = "Jianli.Gu@nrel.gov"
username = "jgu2"
[[model_teams.members]]
first_name = "Jacob"
last_name = "Nunemaker"
email = "Jacob.Nunemaker@nrel.gov"
username = "jnunemak"
[[model_teams]]
name = "rpm"
[[model_teams.members]]
first_name = "Kenny"
last_name = "Gruchalla"
email = "Kenny.Gruchalla@nrel.gov"
username = "kgruchal"
[[model_teams.members]]
first_name = "David"
last_name = "Rager"
email = "David.Rager@nrel.gov"
username = "drager"
Schema Reference
The Project config initializes the project, including schemas of project, project run, and model requirements/scenarios/assumptions/scheduling.
schemas
ProjectCreate
Attributes:
Name | Type | Description |
---|---|---|
assumptions |
list[str]
|
|
description |
str
|
|
leads |
set[UserCreate]
|
|
milestones |
list[Milestone]
|
|
name |
str
|
|
owner |
UserCreate
|
|
requirements |
dict
|
|
scenarios |
list[Scenario]
|
|
scheduled_end |
datetime
|
|
scheduled_start |
datetime
|
|
sensitivities |
list[Sensitivity]
|
|
title |
str
|
|
assumptions = Field(title='assumptions', default=[], description='project assumptions')
description = Field(title='description', default='', description='project description')
leads = Field(title='leads', default=[], description='list of project lead')
milestones = Field(title='milestones', default=[], description='project milestones')
name = Field(title='name', min_length=1, description='human-readable project id name, must be unique.')
owner = Field(title='owner', description='project owner')
requirements = Field(title='requirements', default={}, description='project requirements')
scenarios = Field(title='scenarios', default=[], description='project scenarios')
scheduled_end = Field(title='scheduled_end', description='format YYYY-MM-DD')
scheduled_start = Field(title='scheduled_start', description='project start datetime, format YYYY-MM-DD')
sensitivities = Field(title='sensitivities', default=[], description='project sensitivities')
title = Field(title='title', default='', description='Project title')
Milestone
Attributes:
Name | Type | Description |
---|---|---|
description |
str
|
|
milestone_date |
datetime
|
|
name |
str
|
|
description = Field(title='description', description='description of milestone')
milestone_date = Field(title='milestone_date', description='format YYYY-MM-DD, it must be within the dates of the project.')
name = Field(title='name', description='milestone name must be unique from each other.')
Scenario
Attributes:
Name | Type | Description |
---|---|---|
description |
list[str]
|
|
name |
str
|
|
other |
dict
|
|
description = Field(title='description', default='', description='scenario description')
name = Field(title='name', description='scenario name')
other = Field(title='other', default={}, description='other properties applied to scenario')
Sensitivity
Attributes:
Name | Type | Description |
---|---|---|
description |
list[str]
|
|
name |
str
|
|
description = Field(titleee='description', description='sensitivity description')
name = Field(title='name', description='sensitivity name')
schemas
ProjectRunCreate
Attributes:
Name | Type | Description |
---|---|---|
assumptions |
list[str]
|
|
description |
str
|
|
name |
str
|
|
requirements |
dict
|
|
scenarios |
list[str]
|
|
scheduled_end |
datetime
|
|
scheduled_start |
datetime
|
|
assumptions = Field(title='assumptions', description='Assumptions associated with project run that differ from project', default=[])
description = Field(title='description', description='the description of this project run', default='')
name = Field(title='name', min_length=1, description='Project run name')
requirements = Field(title='requirements', description='Requirements of the project run that differ from the project', default={})
scenarios = Field(title='scenarios', description='the scenarios of this prject run', default=[])
scheduled_end = Field(title='scheduled_end', description='Schedule project run end date in YYYY-MM-DD format')
scheduled_start = Field(title='scheduled_start', description='Schedule project run start date in YYYY-MM-DD format')
schemas
ModelCreate
Model schema
Attributes:
Name | Type | Description |
---|---|---|
assumptions |
list[str]
|
|
description |
list[str]
|
|
display_name |
str | None
|
|
expected_scenarios |
list[str]
|
|
modeling_team |
str
|
|
name |
str
|
|
other |
dict
|
|
requirements |
dict
|
|
scenario_mappings |
list[ScenarioMapping]
|
|
scheduled_end |
datetime
|
|
scheduled_start |
datetime
|
|
type |
str
|
|
assumptions = Field(title='assumptions', description='List of model assumptions', default=[])
description = Field(title='description', description='Description of the model')
display_name = Field(title='display_name', default=None, description='Display name for this model vertex.')
expected_scenarios = Field(title='assumptions', description='List of expected model scenarios', default=[])
modeling_team = Field(title='modeling_team', description='Which modeling team to link this model to.')
name = Field(title='model', min_length=1, description='the model name')
other = Field(title='other', default={}, description='other metadata info about the model in dictionary')
requirements = Field(title='requirements', default={}, description='Model specific requirements (if different from Project and Project-Run)')
scenario_mappings = Field(title='scenario_mappings', description='Model scenarios (if different) and how they map to the project scenarios', default=[])
scheduled_end = Field(title='scheduled_end', description='Schedule model end date in YYYY-MM-DD format')
scheduled_start = Field(title='scheduled_start', description='Schedule model start date in YYYY-MM-DD format')
type = Field(title='type', description="Type of model to use in graphic headers (e.g, 'Capacity Expansion')")
ScenarioMapping
Mapping model scenario to project scenarios
Attributes:
Name | Type | Description |
---|---|---|
description |
list[str]
|
|
model_scenario |
str
|
|
other |
dict
|
|
project_scenarios |
list[str]
|
|
description = Field(title='description', default=[], description='Model scenario description')
model_scenario = Field(title='model_scenario', description='The model scenario name')
other = Field(title='other', default={}, description='other metadata info about the model scenario mapping in dictionary')
project_scenarios = Field(title='project_scenarios', description='List of project scenario names that the model scenario maps to')
schemas
TeamCreate
Attributes:
Name | Type | Description |
---|---|---|
description |
str | None
|
|
members |
list[UserCreate]
|
|
name |
str
|
|
description = Field(title='description', default=None, description='The team description')
members = Field(title='members', default=[], description='List of users')
name = Field(title='name', description='The team name')
schemas
UserCreate
User base model
Attributes:
Name | Type | Description |
---|---|---|
email |
EmailStr
|
|
first_name |
str | None
|
|
last_name |
str | None
|
|
organization |
str | None
|
|