From 67ec98cb4702d44aee64d0c7d68ecf6bee312868 Mon Sep 17 00:00:00 2001 From: adfarth Date: Wed, 28 Dec 2022 15:38:01 -0500 Subject: [PATCH 01/10] initial set of name changes, additions, removals --- job/models.py | 167 +++++++++++++++++----------------- job/test/test_job_endpoint.py | 2 +- 2 files changed, 83 insertions(+), 86 deletions(-) diff --git a/job/models.py b/job/models.py index 92b725ca0..05697589a 100644 --- a/job/models.py +++ b/job/models.py @@ -409,19 +409,19 @@ class SiteOutputs(BaseModel, models.Model): "The denominator is calculated as total annual electricity consumption plus total annual thermal steam/hot water load." ) ) - year_one_emissions_tonnes_CO2 = models.FloatField( + annual_emissions_tonnes_CO2 = models.FloatField( null=True, blank=True, help_text="Total tons of CO2 emissions associated with the site's energy consumption in year one." ) - year_one_emissions_tonnes_NOx = models.FloatField( + annual_emissions_tonnes_NOx = models.FloatField( null=True, blank=True, help_text="Total tons of NOx emissions associated with the site's energy consumption in year one." ) - year_one_emissions_tonnes_SO2 = models.FloatField( + annual_emissions_tonnes_SO2 = models.FloatField( null=True, blank=True, help_text="Total tons of SO2 emissions associated with the site's energy consumption in year one." ) - year_one_emissions_tonnes_PM25 = models.FloatField( + annual_emissions_tonnes_PM25 = models.FloatField( null=True, blank=True, help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in year one." ) @@ -499,19 +499,19 @@ class SiteOutputs(BaseModel, models.Model): "The denominator is calculated as total annual electricity consumption plus total annual thermal steam/hot water load." ) ) - year_one_emissions_tonnes_CO2_bau = models.FloatField( + annual_emissions_tonnes_CO2_bau = models.FloatField( null=True, blank=True, help_text="Total tons of CO2 emissions associated with the site's energy consumption in year one in the BAU case." ) - year_one_emissions_tonnes_NOx_bau = models.FloatField( + annual_emissions_tonnes_NOx_bau = models.FloatField( null=True, blank=True, help_text="Total tons of NOx emissions associated with the site's energy consumption in year one in the BAU case." ) - year_one_emissions_tonnes_SO2_bau = models.FloatField( + annual_emissions_tonnes_SO2_bau = models.FloatField( null=True, blank=True, help_text="Total tons of SO2 emissions associated with the site's energy consumption in year one in the BAU case." ) - year_one_emissions_tonnes_PM25_bau = models.FloatField( + annual_emissions_tonnes_PM25_bau = models.FloatField( null=True, blank=True, help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in year one in the BAU case." ) @@ -1718,78 +1718,78 @@ class ElectricUtilityOutputs(BaseModel, models.Model): primary_key=True ) - year_one_to_load_series_kw = ArrayField( + production_to_load_series_kw = ArrayField( models.FloatField( blank=True ), default=list, blank=True, help_text=("Optimal year one grid to load time series") ) - year_one_to_load_series_kw_bau = ArrayField( + production_to_load_series_kw_bau = ArrayField( models.FloatField( blank=True ), default=list, blank=True, help_text=("Business as usual year one grid to load time series") ) - year_one_to_battery_series_kw = ArrayField( + production_to_battery_series_kw = ArrayField( models.FloatField( blank=True ), default=list, blank=True, help_text=("Optimal year one grid to battery time series") ) - year_one_energy_supplied_kwh = models.FloatField( + annual_energy_supplied_kwh = models.FloatField( null=True, blank=True, help_text=("Year one energy supplied from grid to load") ) - year_one_energy_supplied_kwh_bau = models.FloatField( + annual_energy_supplied_kwh_bau = models.FloatField( null=True, blank=True, help_text=("Year one energy supplied from grid to load") ) - year_one_emissions_tonnes_CO2 = models.FloatField( + annual_emissions_tonnes_CO2 = models.FloatField( null=True, blank=True, help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in year one. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_CO2_bau = models.FloatField( + annual_emissions_tonnes_CO2_bau = models.FloatField( null=True, blank=True, help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in year one in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_NOx = models.FloatField( + annual_emissions_tonnes_NOx = models.FloatField( null=True, blank=True, help_text=("Total tons of NOx emissions associated with the site's grid-purchased electricity in year one. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_NOx_bau = models.FloatField( + annual_emissions_tonnes_NOx_bau = models.FloatField( null=True, blank=True, help_text=("Total tons of NOx emissions associated with the site's grid-purchased electricity in year one in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_SO2 = models.FloatField( + annual_emissions_tonnes_SO2 = models.FloatField( null=True, blank=True, help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in year one. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_SO2_bau = models.FloatField( + annual_emissions_tonnes_SO2_bau = models.FloatField( null=True, blank=True, help_text=("Total tons of SO2 emissions associated with the site's grid-purchased electricity in year one in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_PM25 = models.FloatField( + annual_emissions_tonnes_PM25 = models.FloatField( null=True, blank=True, help_text=("Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in year one. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) - year_one_emissions_tonnes_PM25_bau = models.FloatField( + annual_emissions_tonnes_PM25_bau = models.FloatField( null=True, blank=True, help_text=("Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in year one in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " @@ -2378,24 +2378,24 @@ class PVOutputs(BaseModel, models.Model): # station_latitude = models.FloatField(null=True, blank=True) # station_longitude = models.FloatField(null=True, blank=True) # station_distance_km = models.FloatField(null=True, blank=True) - average_annual_energy_produced_kwh = models.FloatField(null=True, blank=True) - average_annual_energy_produced_kwh_bau = models.FloatField(null=True, blank=True) + annual_energy_produced_kwh = models.FloatField(null=True, blank=True) + annual_energy_produced_kwh_bau = models.FloatField(null=True, blank=True) average_annual_energy_exported_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh_bau = models.FloatField(null=True, blank=True) - year_one_to_battery_series_kw = ArrayField( + production_to_battery_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) - year_one_to_load_series_kw = ArrayField( + production_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) - year_one_to_grid_series_kw = ArrayField( + production_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) - year_one_curtailed_production_series_kw = ArrayField( + production_curtailed_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) @@ -2697,16 +2697,16 @@ class WindOutputs(BaseModel, models.Model): size_kw = models.FloatField(null=True, blank=True) lifecycle_om_cost_after_tax = models.FloatField(null=True, blank=True) year_one_om_cost_before_tax = models.FloatField(null=True, blank=True) - average_annual_energy_produced_kwh = models.FloatField(null=True, blank=True) + annual_energy_produced_kwh = models.FloatField(null=True, blank=True) average_annual_energy_exported_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) - year_one_to_battery_series_kw = ArrayField( + production_to_battery_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) - year_one_to_load_series_kw = ArrayField( + production_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) - year_one_to_grid_series_kw = ArrayField( + production_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) - year_one_curtailed_production_series_kw = ArrayField( + production_curtailed_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) lcoe_per_kwh = models.FloatField(null=True, blank=True) @@ -2922,11 +2922,11 @@ class ElectricStorageOutputs(BaseModel, models.Model): ) size_kw = models.FloatField(null=True, blank=True) size_kwh = models.FloatField(null=True, blank=True) - year_one_soc_series_fraction = ArrayField( + soc_series_fraction = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) - year_one_to_load_series_kw = ArrayField( + storage_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) @@ -3304,32 +3304,29 @@ class GeneratorOutputs(BaseModel, models.Model): primary_key=True ) - average_annual_fuel_used_gal = models.FloatField(null=True, blank=True) - fuel_used_gal_bau = models.FloatField(null=True, blank=True) + annual_fuel_consumption_gal = models.FloatField(null=True, blank=True) + fuel_used_gal_bau = models.FloatField(null=True, blank=True) # TODO: is this a REopt output? Should it be annual_fuel_consumption_gal? size_kw = models.FloatField(null=True, blank=True) - average_annual_energy_produced_kwh = models.FloatField(null=True, blank=True) - average_annual_energy_exported_kwh = models.FloatField(null=True, blank=True) + annual_energy_produced_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) - year_one_to_battery_series_kw = ArrayField( + production_to_battery_series_kw = ArrayField( models.FloatField(null=True, blank=True), null=True, blank=True) - year_one_to_load_series_kw = ArrayField( + production_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), null=True, blank=True, default=list) - year_one_to_grid_series_kw = ArrayField( + production_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), null=True, blank=True, default=list) year_one_variable_om_cost_before_tax = models.FloatField(null=True, blank=True) - year_one_variable_om_cost_bau = models.FloatField(null=True, blank=True) + year_one_variable_om_cost_before_tax_bau = models.FloatField(null=True, blank=True) year_one_fuel_cost_before_tax = models.FloatField(null=True, blank=True) - year_one_fuel_cost_bau = models.FloatField(null=True, blank=True) + year_one_fuel_cost_before_tax_bau = models.FloatField(null=True, blank=True) # TODO why didn't this error when it was year_one_fuel_cost_bau year_one_fixed_om_cost_before_tax = models.FloatField(null=True, blank=True) - year_one_fixed_om_cost_bau = models.FloatField(null=True, blank=True) + year_one_fixed_om_cost_before_taxbau = models.FloatField(null=True, blank=True) lifecycle_variable_om_cost_after_tax = models.FloatField(null=True, blank=True) - lifecycle_variable_om_cost_bau = models.FloatField(null=True, blank=True) + lifecycle_variable_om_cost_after_tax_bau = models.FloatField(null=True, blank=True) lifecycle_fuel_cost_after_tax = models.FloatField(null=True, blank=True) - lifecycle_fuel_cost_bau = models.FloatField(null=True, blank=True) + lifecycle_fuel_cost_after_tax_bau = models.FloatField(null=True, blank=True) lifecycle_fixed_om_cost_after_tax = models.FloatField(null=True, blank=True) - lifecycle_fixed_om_cost_bau = models.FloatField(null=True, blank=True) - year_one_emissions_lb_C02 = models.FloatField(null=True, blank=True) - year_one_emissions_bau_lb_C02 = models.FloatField(null=True, blank=True) + lifecycle_fixed_om_cost_after_tax_bau = models.FloatField(null=True, blank=True) class CHPInputs(BaseModel, models.Model): key = "CHP" @@ -3848,87 +3845,87 @@ class CHPOutputs(BaseModel, models.Model): null=True, blank=True, help_text="Power capacity of CHP supplementary firing system [kW]" ) - year_one_fuel_used_mmbtu = models.FloatField( + annual_fuel_consumption_mmbtu = models.FloatField( null=True, blank=True, - help_text="Fuel consumed in year one [MMBtu]" + help_text="Fuel consumed in a year [MMBtu]" ) - year_one_electric_energy_produced_kwh = models.FloatField( + annual_electric_production_kwh = models.FloatField( null=True, blank=True, - help_text="Electric energy produced in year one [kWh]" + help_text="Electric energy produced in a year [kWh]" ) - year_one_thermal_energy_produced_mmbtu = models.FloatField( + annual_thermal_production_mmbtu = models.FloatField( null=True, blank=True, - help_text="Thermal energy produced in year one [MMBtu]" + help_text="Thermal energy produced in a year [MMBtu]" ) - year_one_electric_production_series_kw = ArrayField( + electric_production_series_kw = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, help_text="Electric power production time-series array [kW]" ) - year_one_to_grid_series_kw = ArrayField( + electric_to_grid_series_kw = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, help_text="Electric power exported time-series array [kW]" ) - year_one_to_battery_series_kw = ArrayField( + electric_to_battery_series_kw = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, help_text="Electric power to charge the battery storage time-series array [kW]" ) - year_one_to_load_series_kw = ArrayField( + electric_to_load_series_kw = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, - help_text="Electric power to serve the electric load time-series array [kW]" + help_text="Electric power serving the electric load time-series array [kW]" ) - year_one_thermal_to_tes_series_mmbtu_per_hour = ArrayField( + thermal_to_tes_series_mmbtu_per_hour = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, help_text="Thermal power to TES time-series array [MMBtu/hr]" ) - year_one_thermal_to_waste_series_mmbtu_per_hour = ArrayField( + thermal_curtailed_series_mmbtu_per_hour = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, help_text="Thermal power wasted/unused/vented time-series array [MMBtu/hr]" ) - year_one_thermal_to_load_series_mmbtu_per_hour = ArrayField( + thermal_to_load_series_mmbtu_per_hour = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, help_text="Thermal power to serve the heating load time-series array [MMBtu/hr]" ) - year_one_thermal_to_steamturbine_series_mmbtu_per_hour = ArrayField( + thermal_to_steamturbine_series_mmbtu_per_hour = ArrayField( models.FloatField( null=True, blank=True ), default=list, blank=True, - help_text="Thermal power to TES time-series array [MMBtu/hr]" + help_text="Thermal power to steam turbine time-series array [MMBtu/hr]" ) - year_one_chp_fuel_cost_before_tax = models.FloatField( + year_one_fuel_cost_before_tax = models.FloatField( null=True, blank=True, help_text="Cost of fuel consumed by the CHP system in year one [\$]" ) - lifecycle_chp_fuel_cost_after_tax = models.FloatField( + lifecycle_fuel_cost_after_tax = models.FloatField( null=True, blank=True, help_text="Present value of cost of fuel consumed by the CHP system, after tax [\$]" ) - year_one_chp_standby_cost_before_tax = models.FloatField( + year_one_standby_cost_before_tax = models.FloatField( null=True, blank=True, help_text="CHP standby charges in year one [\$]" ) - lifecycle_chp_standby_cost_after_tax = models.FloatField( + lifecycle_standby_cost_after_tax = models.FloatField( null=True, blank=True, help_text="Present value of all CHP standby charges, after tax." ) @@ -4191,7 +4188,7 @@ class ExistingChillerOutputs(BaseModel, models.Model): primary_key=True ) - year_one_to_tes_series_ton = ArrayField( + production_to_tes_series_ton = ArrayField( models.FloatField( blank=True ), @@ -4201,7 +4198,7 @@ class ExistingChillerOutputs(BaseModel, models.Model): help_text=("Year one hourly time series of electric chiller thermal to cold TES [Ton]") ) - year_one_to_load_series_ton = ArrayField( + production_to_load_series_ton = ArrayField( models.FloatField( blank=True ), @@ -4211,7 +4208,7 @@ class ExistingChillerOutputs(BaseModel, models.Model): help_text=("Year one hourly time series of electric chiller thermal to cooling load [Ton]") ) - year_one_electric_consumption_series_kw = ArrayField( + electric_consumption_series_kw = ArrayField( models.FloatField( blank=True ), @@ -4221,13 +4218,13 @@ class ExistingChillerOutputs(BaseModel, models.Model): help_text=("Year one hourly time series of chiller electric consumption [kW]") ) - year_one_electric_consumption_kwh = models.FloatField( + annual_electric_consumption_kwh = models.FloatField( null=True, blank=True, help_text=("Year one chiller electric consumption [kWh]") ) - year_one_thermal_production_tonhour = models.FloatField( + annual_thermal_production_tonhour = models.FloatField( null=True, blank=True, help_text=("Year one chiller thermal production [Ton Hour") @@ -4404,33 +4401,33 @@ class ExistingBoilerOutputs(BaseModel, models.Model): primary_key=True ) - year_one_fuel_consumption_mmbtu = models.FloatField(null=True, blank=True) + annual_fuel_consumption_mmbtu = models.FloatField(null=True, blank=True) - year_one_fuel_consumption_series_mmbtu_per_hour = ArrayField( + fuel_consumption_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default=list, ) lifecycle_fuel_cost_after_tax = models.FloatField(null=True, blank=True) lifecycle_fuel_cost_after_tax_bau = models.FloatField(null=True, blank=True) - year_one_thermal_production_mmbtu = models.FloatField(null=True, blank=True) + annual_thermal_production_mmbtu = models.FloatField(null=True, blank=True) year_one_fuel_cost_before_tax = models.FloatField(null=True, blank=True) - year_one_thermal_to_tes_series_mmbtu_per_hour = ArrayField( + thermal_to_tes_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default = list, ) - year_one_thermal_to_steamturbine_series_mmbtu_per_hour = ArrayField( + thermal_to_steamturbine_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default = list, ) - year_one_thermal_production_series_mmbtu_per_hour = ArrayField( + thermal_production_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default = list, ) - year_one_thermal_to_load_series_mmbtu_per_hour = ArrayField( + thermal_to_load_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default = list, ) @@ -4585,9 +4582,9 @@ def clean(self): # primary_key=True # ) -# year_one_fuel_consumption_mmbtu = models.FloatField(null=True, blank=True) +# annual_fuel_consumption_mmbtu = models.FloatField(null=True, blank=True) -# year_one_fuel_consumption_mmbtu_per_hour = ArrayField( +# fuel_consumption_series_mmbtu_per_hour = ArrayField( # models.FloatField(null=True, blank=True), # default=list, # ) @@ -4595,7 +4592,7 @@ def clean(self): # lifecycle_fuel_cost = models.FloatField(null=True, blank=True) # lifecycle_per_unit_prod_om_costs = models.FloatField(null=True, blank=True) # lifecycle_fuel_cost_bau = models.FloatField(null=True, blank=True) -# year_one_thermal_production_mmbtu = models.FloatField(null=True, blank=True) +# annual_thermal_production_mmbtu = models.FloatField(null=True, blank=True) # year_one_fuel_cost = models.FloatField(null=True, blank=True) # thermal_to_tes_series_mmbtu_per_hour = ArrayField( @@ -4606,7 +4603,7 @@ def clean(self): # models.FloatField(null=True, blank=True), # default = list, # ) -# year_one_thermal_to_load_series_mmbtu_per_hour = ArrayField( +# thermal_to_load_series_mmbtu_per_hour = ArrayField( # models.FloatField(null=True, blank=True), # default = list, # ) diff --git a/job/test/test_job_endpoint.py b/job/test/test_job_endpoint.py index 4ef75823a..1d6e8ffd0 100644 --- a/job/test/test_job_endpoint.py +++ b/job/test/test_job_endpoint.py @@ -112,7 +112,7 @@ def test_pv_battery_and_emissions_defaults_from_julia(self): self.assertAlmostEqual(results["ElectricStorage"]["size_kw"], 55.9, places=1) self.assertAlmostEqual(results["ElectricStorage"]["size_kwh"], 78.9, places=1) self.assertIsNotNone(results["Site"]["total_renewable_energy_fraction"]) - self.assertIsNotNone(results["Site"]["year_one_emissions_tonnes_CO2"]) + self.assertIsNotNone(results["Site"]["annual_emissions_tonnes_CO2"]) self.assertIsNotNone(results["Site"]["lifecycle_emissions_tonnes_NOx"]) #test that emissions inputs got updated in the database with the defaults determined in REopt julia package From 67a8e97302ca24a99ea06b49d0fae412cf641ed2 Mon Sep 17 00:00:00 2001 From: adfarth Date: Wed, 28 Dec 2022 16:14:22 -0500 Subject: [PATCH 02/10] additional name changes and removals --- job/models.py | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/job/models.py b/job/models.py index 0d8cb0631..79f5e000a 100644 --- a/job/models.py +++ b/job/models.py @@ -425,19 +425,19 @@ class SiteOutputs(BaseModel, models.Model): null=True, blank=True, help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in year one." ) - year_one_emissions_from_fuelburn_tonnes_CO2 = models.FloatField( + annual_emissions_from_fuelburn_tonnes_CO2 = models.FloatField( null=True, blank=True, help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in year one." ) - year_one_emissions_from_fuelburn_tonnes_NOx = models.FloatField( + annual_emissions_from_fuelburn_tonnes_NOx = models.FloatField( null=True, blank=True, help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in year one." ) - year_one_emissions_from_fuelburn_tonnes_SO2 = models.FloatField( + annual_emissions_from_fuelburn_tonnes_SO2 = models.FloatField( null=True, blank=True, help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in year one." ) - year_one_emissions_from_fuelburn_tonnes_PM25 = models.FloatField( + annual_emissions_from_fuelburn_tonnes_PM25 = models.FloatField( null=True, blank=True, help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in year one." ) @@ -515,19 +515,19 @@ class SiteOutputs(BaseModel, models.Model): null=True, blank=True, help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in year one in the BAU case." ) - year_one_emissions_from_fuelburn_tonnes_CO2_bau = models.FloatField( + annual_emissions_from_fuelburn_tonnes_CO2_bau = models.FloatField( null=True, blank=True, help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in year one in the BAU case." ) - year_one_emissions_from_fuelburn_tonnes_NOx_bau = models.FloatField( + annual_emissions_from_fuelburn_tonnes_NOx_bau = models.FloatField( null=True, blank=True, help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in year one in the BAU case." ) - year_one_emissions_from_fuelburn_tonnes_SO2_bau = models.FloatField( + annual_emissions_from_fuelburn_tonnes_SO2_bau = models.FloatField( null=True, blank=True, help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in year one in the BAU case." ) - year_one_emissions_from_fuelburn_tonnes_PM25_bau = models.FloatField( + annual_emissions_from_fuelburn_tonnes_PM25_bau = models.FloatField( null=True, blank=True, help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in year one in the BAU case." ) @@ -569,6 +569,7 @@ class SiteOutputs(BaseModel, models.Model): ) """ +# TODO: Remove this commented out text? # TODO should we move the emissions_calculator to Julia? # Or is it supplanted by new emissions capabilities (not in develop/master as of 21.09.02)? @@ -1952,20 +1953,6 @@ class ElectricTariffOutputs(BaseModel, models.Model): null=True, blank=True, help_text="Business as usual year one value of exported energy" ) - year_one_energy_cost_series_per_kwh = ArrayField( - models.FloatField( - blank=True - ), - default=list, blank=True, - help_text="Optimal year one hourly energy costs" - ) - year_one_demand_cost_series_per_kw = ArrayField( - models.FloatField( - blank=True - ), - default=list, blank=True, - help_text="Optimal year one hourly demand costs" - ) year_one_coincident_peak_cost_before_tax = models.FloatField( null=True, blank=True, help_text="Optimal year one coincident peak charges" @@ -2380,7 +2367,7 @@ class PVOutputs(BaseModel, models.Model): # station_distance_km = models.FloatField(null=True, blank=True) annual_energy_produced_kwh = models.FloatField(null=True, blank=True) annual_energy_produced_kwh_bau = models.FloatField(null=True, blank=True) - average_annual_energy_exported_kwh = models.FloatField(null=True, blank=True) + annual_energy_exported_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh_bau = models.FloatField(null=True, blank=True) production_to_battery_series_kw = ArrayField( @@ -2698,7 +2685,7 @@ class WindOutputs(BaseModel, models.Model): lifecycle_om_cost_after_tax = models.FloatField(null=True, blank=True) year_one_om_cost_before_tax = models.FloatField(null=True, blank=True) annual_energy_produced_kwh = models.FloatField(null=True, blank=True) - average_annual_energy_exported_kwh = models.FloatField(null=True, blank=True) + annual_energy_exported_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) production_to_battery_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) @@ -3304,8 +3291,10 @@ class GeneratorOutputs(BaseModel, models.Model): primary_key=True ) + ## TODO: check all BAU outputs throughout. + annual_fuel_consumption_gal = models.FloatField(null=True, blank=True) - fuel_used_gal_bau = models.FloatField(null=True, blank=True) # TODO: is this a REopt output? Should it be annual_fuel_consumption_gal? + annual_fuel_consumption_gal_bau = models.FloatField(null=True, blank=True) size_kw = models.FloatField(null=True, blank=True) annual_energy_produced_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) @@ -4766,11 +4755,11 @@ class HotThermalStorageOutputs(BaseModel, models.Model): primary_key=True ) size_gal = models.FloatField(null=True, blank=True) - year_one_soc_series_fraction = ArrayField( + soc_series_fraction = ArrayField( models.FloatField(null=True, blank=True), default = list, ) - year_one_to_load_series_mmbtu_per_hour = ArrayField( + storage_to_load_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default = list, ) @@ -4937,11 +4926,11 @@ class ColdThermalStorageOutputs(BaseModel, models.Model): primary_key=True ) size_gal = models.FloatField(null=True, blank=True) - year_one_soc_series_fraction = ArrayField( + soc_series_fraction = ArrayField( models.FloatField(null=True, blank=True), default = list, ) - year_one_to_load_series_ton = ArrayField( + storage_to_load_series_ton = ArrayField( models.FloatField(null=True, blank=True), default = list, ) From 138f2eb84ac1957104c8061424f821ae1e34cc54 Mon Sep 17 00:00:00 2001 From: adfarth Date: Wed, 28 Dec 2022 16:25:56 -0500 Subject: [PATCH 03/10] Update year one help text --- job/models.py | 62 +++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/job/models.py b/job/models.py index 79f5e000a..e1c6da6f2 100644 --- a/job/models.py +++ b/job/models.py @@ -411,35 +411,35 @@ class SiteOutputs(BaseModel, models.Model): ) annual_emissions_tonnes_CO2 = models.FloatField( null=True, blank=True, - help_text="Total tons of CO2 emissions associated with the site's energy consumption in year one." + help_text="Total tons of CO2 emissions associated with the site's energy consumption in an one." ) annual_emissions_tonnes_NOx = models.FloatField( null=True, blank=True, - help_text="Total tons of NOx emissions associated with the site's energy consumption in year one." + help_text="Total tons of NOx emissions associated with the site's energy consumption in an average year." ) annual_emissions_tonnes_SO2 = models.FloatField( null=True, blank=True, - help_text="Total tons of SO2 emissions associated with the site's energy consumption in year one." + help_text="Total tons of SO2 emissions associated with the site's energy consumption in an average year." ) annual_emissions_tonnes_PM25 = models.FloatField( null=True, blank=True, - help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in year one." + help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in an average year." ) annual_emissions_from_fuelburn_tonnes_CO2 = models.FloatField( null=True, blank=True, - help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in year one." + help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in an average year." ) annual_emissions_from_fuelburn_tonnes_NOx = models.FloatField( null=True, blank=True, - help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in year one." + help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in an average year." ) annual_emissions_from_fuelburn_tonnes_SO2 = models.FloatField( null=True, blank=True, - help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in year one." + help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in an average year." ) annual_emissions_from_fuelburn_tonnes_PM25 = models.FloatField( null=True, blank=True, - help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in year one." + help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in an average year." ) lifecycle_emissions_tonnes_CO2 = models.FloatField( null=True, blank=True, @@ -501,35 +501,35 @@ class SiteOutputs(BaseModel, models.Model): ) annual_emissions_tonnes_CO2_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of CO2 emissions associated with the site's energy consumption in year one in the BAU case." + help_text="Total tons of CO2 emissions associated with the site's energy consumption in an average year in the BAU case." ) annual_emissions_tonnes_NOx_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of NOx emissions associated with the site's energy consumption in year one in the BAU case." + help_text="Total tons of NOx emissions associated with the site's energy consumption in an average year in the BAU case." ) annual_emissions_tonnes_SO2_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of SO2 emissions associated with the site's energy consumption in year one in the BAU case." + help_text="Total tons of SO2 emissions associated with the site's energy consumption in an average year in the BAU case." ) annual_emissions_tonnes_PM25_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in year one in the BAU case." + help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in an average year in the BAU case." ) annual_emissions_from_fuelburn_tonnes_CO2_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in year one in the BAU case." + help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in an average year in the BAU case." ) annual_emissions_from_fuelburn_tonnes_NOx_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in year one in the BAU case." + help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in an average year in the BAU case." ) annual_emissions_from_fuelburn_tonnes_SO2_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in year one in the BAU case." + help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in an average year in the BAU case." ) annual_emissions_from_fuelburn_tonnes_PM25_bau = models.FloatField( null=True, blank=True, - help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in year one in the BAU case." + help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in an average year in the BAU case." ) lifecycle_emissions_tonnes_CO2_bau = models.FloatField( null=True, blank=True, @@ -1724,75 +1724,75 @@ class ElectricUtilityOutputs(BaseModel, models.Model): blank=True ), default=list, blank=True, - help_text=("Optimal year one grid to load time series") + help_text=("Optimal average annual grid to load time series") ) production_to_load_series_kw_bau = ArrayField( models.FloatField( blank=True ), default=list, blank=True, - help_text=("Business as usual year one grid to load time series") + help_text=("Business as usual average annual grid to load time series") ) production_to_battery_series_kw = ArrayField( models.FloatField( blank=True ), default=list, blank=True, - help_text=("Optimal year one grid to battery time series") + help_text=("Optimal average annual grid to battery time series") ) annual_energy_supplied_kwh = models.FloatField( null=True, blank=True, - help_text=("Year one energy supplied from grid to load") + help_text=("Average annual energy supplied from grid to load") ) annual_energy_supplied_kwh_bau = models.FloatField( null=True, blank=True, - help_text=("Year one energy supplied from grid to load") + help_text=("Average annual energy supplied from grid to load") ) annual_emissions_tonnes_CO2 = models.FloatField( null=True, blank=True, - help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in year one. " + help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in an average year. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_CO2_bau = models.FloatField( null=True, blank=True, - help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in year one in the BAU case. " + help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in an average year in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_NOx = models.FloatField( null=True, blank=True, - help_text=("Total tons of NOx emissions associated with the site's grid-purchased electricity in year one. " + help_text=("Total tons of NOx emissions associated with the site's grid-purchased electricity in an average year. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_NOx_bau = models.FloatField( null=True, blank=True, - help_text=("Total tons of NOx emissions associated with the site's grid-purchased electricity in year one in the BAU case. " + help_text=("Total tons of NOx emissions associated with the site's grid-purchased electricity in an average year in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_SO2 = models.FloatField( null=True, blank=True, - help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in year one. " + help_text=("Total tons of CO2 emissions associated with the site's grid-purchased electricity in an average year. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_SO2_bau = models.FloatField( null=True, blank=True, - help_text=("Total tons of SO2 emissions associated with the site's grid-purchased electricity in year one in the BAU case. " + help_text=("Total tons of SO2 emissions associated with the site's grid-purchased electricity in an average year in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_PM25 = models.FloatField( null=True, blank=True, - help_text=("Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in year one. " + help_text=("Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in an average year. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) annual_emissions_tonnes_PM25_bau = models.FloatField( null=True, blank=True, - help_text=("Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in year one in the BAU case. " + help_text=("Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in an average year in the BAU case. " "If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. " "Otherwise, it accounts for emissions offset from any export to the grid.") ) @@ -3307,9 +3307,9 @@ class GeneratorOutputs(BaseModel, models.Model): year_one_variable_om_cost_before_tax = models.FloatField(null=True, blank=True) year_one_variable_om_cost_before_tax_bau = models.FloatField(null=True, blank=True) year_one_fuel_cost_before_tax = models.FloatField(null=True, blank=True) - year_one_fuel_cost_before_tax_bau = models.FloatField(null=True, blank=True) # TODO why didn't this error when it was year_one_fuel_cost_bau + year_one_fuel_cost_before_tax_bau = models.FloatField(null=True, blank=True) year_one_fixed_om_cost_before_tax = models.FloatField(null=True, blank=True) - year_one_fixed_om_cost_before_taxbau = models.FloatField(null=True, blank=True) + year_one_fixed_om_cost_before_tax_bau = models.FloatField(null=True, blank=True) lifecycle_variable_om_cost_after_tax = models.FloatField(null=True, blank=True) lifecycle_variable_om_cost_after_tax_bau = models.FloatField(null=True, blank=True) lifecycle_fuel_cost_after_tax = models.FloatField(null=True, blank=True) From bc0cb6d8e27cdd4b344da814f3a0f848d3ce3d85 Mon Sep 17 00:00:00 2001 From: adfarth Date: Wed, 28 Dec 2022 16:50:08 -0500 Subject: [PATCH 04/10] Update CHANGELOG.md --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1081ee1f1..72088d411 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,16 @@ Classify the change according to the following categories: ##### Removed ### Patches - +## Develop - 2022-12-28 +### Minor Updates + ### Changed + - In job/ app (v3): Name changes for many outputs/results. Generally, changes are for energy outputs (not costs) that include "year_one", and are changed to annual_ for scalars and to production_to_, thermal_to_ etc. for time series. + - In job/ app (v3): Changed some _bau outputs to align with REopt.jl outputs + ### Added + - In job/ app (v3): Added **thermal_production_series_mmbtu_per_hour** to CHP results. +##### Removed +- In job/ app (v3): Removed outputs not reported by REopt.jl + ## v2.5.0 ### Minor Updates ##### Added From 55c3a3d594fef33a3df4d17ea1b0c1c56823dcdd Mon Sep 17 00:00:00 2001 From: adfarth Date: Fri, 30 Dec 2022 21:17:44 -0500 Subject: [PATCH 05/10] update output names --- job/models.py | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/job/models.py b/job/models.py index e1c6da6f2..25927e959 100644 --- a/job/models.py +++ b/job/models.py @@ -1309,7 +1309,7 @@ class ElectricLoadOutputs(BaseModel, models.Model): null=True, blank=True ), default=list, - help_text="Year one hourly time series of electric load" + help_text="Annual hourly time series of electric load" ) critical_load_series_kw = ArrayField( models.FloatField( @@ -1719,21 +1719,21 @@ class ElectricUtilityOutputs(BaseModel, models.Model): primary_key=True ) - production_to_load_series_kw = ArrayField( + electric_to_load_series_kw = ArrayField( models.FloatField( blank=True ), default=list, blank=True, help_text=("Optimal average annual grid to load time series") ) - production_to_load_series_kw_bau = ArrayField( + electric_to_load_series_kw_bau = ArrayField( models.FloatField( blank=True ), default=list, blank=True, help_text=("Business as usual average annual grid to load time series") ) - production_to_battery_series_kw = ArrayField( + electric_to_storage_series_kw = ArrayField( models.FloatField( blank=True ), @@ -2288,7 +2288,7 @@ class PV_LOCATION_CHOICES(models.TextChoices): ], blank=True, null=True, - help_text="PV system tilt. If PV system type is rooftop-fixed, then tilt=10 degrees, else abs(site.latitude)" + help_text="PV system tilt. If PV system type is rooftop-fixed, then tilt=10 degrees, else tilt=abs(site.latitude)" ) location = models.TextField( default=PV_LOCATION_CHOICES.BOTH, @@ -2370,15 +2370,15 @@ class PVOutputs(BaseModel, models.Model): annual_energy_exported_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh_bau = models.FloatField(null=True, blank=True) - production_to_battery_series_kw = ArrayField( + electric_to_storage_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) - production_to_load_series_kw = ArrayField( + electric_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) - production_to_grid_series_kw = ArrayField( + electric_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) @@ -2687,11 +2687,11 @@ class WindOutputs(BaseModel, models.Model): annual_energy_produced_kwh = models.FloatField(null=True, blank=True) annual_energy_exported_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) - production_to_battery_series_kw = ArrayField( + electric_to_storage_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) - production_to_load_series_kw = ArrayField( + electric_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) - production_to_grid_series_kw = ArrayField( + electric_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) production_curtailed_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) @@ -3298,11 +3298,11 @@ class GeneratorOutputs(BaseModel, models.Model): size_kw = models.FloatField(null=True, blank=True) annual_energy_produced_kwh = models.FloatField(null=True, blank=True) year_one_energy_produced_kwh = models.FloatField(null=True, blank=True) - production_to_battery_series_kw = ArrayField( + electric_to_storage_series_kw = ArrayField( models.FloatField(null=True, blank=True), null=True, blank=True) - production_to_load_series_kw = ArrayField( + electric_to_load_series_kw = ArrayField( models.FloatField(null=True, blank=True), null=True, blank=True, default=list) - production_to_grid_series_kw = ArrayField( + electric_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), null=True, blank=True, default=list) year_one_variable_om_cost_before_tax = models.FloatField(null=True, blank=True) year_one_variable_om_cost_before_tax_bau = models.FloatField(null=True, blank=True) @@ -3860,7 +3860,7 @@ class CHPOutputs(BaseModel, models.Model): default=list, blank=True, help_text="Electric power exported time-series array [kW]" ) - electric_to_battery_series_kw = ArrayField( + electric_to_storage_series_kw = ArrayField( models.FloatField( null=True, blank=True ), @@ -3874,7 +3874,7 @@ class CHPOutputs(BaseModel, models.Model): default=list, blank=True, help_text="Electric power serving the electric load time-series array [kW]" ) - thermal_to_tes_series_mmbtu_per_hour = ArrayField( + thermal_to_storage_series_mmbtu_per_hour = ArrayField( models.FloatField( null=True, blank=True ), @@ -4177,24 +4177,24 @@ class ExistingChillerOutputs(BaseModel, models.Model): primary_key=True ) - production_to_tes_series_ton = ArrayField( + thermal_to_storage_series_ton = ArrayField( models.FloatField( blank=True ), default=list, blank=True, null=True, - help_text=("Year one hourly time series of electric chiller thermal to cold TES [Ton]") + help_text=("Annual hourly time series of electric chiller thermal to cold TES [Ton]") ) - production_to_load_series_ton = ArrayField( + thermal_to_load_series_ton = ArrayField( models.FloatField( blank=True ), default=list, blank=True, null=True, - help_text=("Year one hourly time series of electric chiller thermal to cooling load [Ton]") + help_text=("Annual hourly time series of electric chiller thermal to cooling load [Ton]") ) electric_consumption_series_kw = ArrayField( @@ -4204,19 +4204,19 @@ class ExistingChillerOutputs(BaseModel, models.Model): default=list, blank=True, null=True, - help_text=("Year one hourly time series of chiller electric consumption [kW]") + help_text=("Annual hourly time series of chiller electric consumption [kW]") ) annual_electric_consumption_kwh = models.FloatField( null=True, blank=True, - help_text=("Year one chiller electric consumption [kWh]") + help_text=("Annual chiller electric consumption [kWh]") ) annual_thermal_production_tonhour = models.FloatField( null=True, blank=True, - help_text=("Year one chiller thermal production [Ton Hour") + help_text=("Annual chiller thermal production [Ton Hour") ) def clean(self): @@ -4401,7 +4401,7 @@ class ExistingBoilerOutputs(BaseModel, models.Model): lifecycle_fuel_cost_after_tax_bau = models.FloatField(null=True, blank=True) annual_thermal_production_mmbtu = models.FloatField(null=True, blank=True) year_one_fuel_cost_before_tax = models.FloatField(null=True, blank=True) - thermal_to_tes_series_mmbtu_per_hour = ArrayField( + thermal_to_storage_series_mmbtu_per_hour = ArrayField( models.FloatField(null=True, blank=True), default = list, ) @@ -4584,7 +4584,7 @@ def clean(self): # annual_thermal_production_mmbtu = models.FloatField(null=True, blank=True) # year_one_fuel_cost = models.FloatField(null=True, blank=True) -# thermal_to_tes_series_mmbtu_per_hour = ArrayField( +# thermal_to_storage_series_mmbtu_per_hour = ArrayField( # models.FloatField(null=True, blank=True), # default = list, # ) From 858846ae6b5016d4d4ef3f14017a97c060a63e4f Mon Sep 17 00:00:00 2001 From: adfarth Date: Wed, 4 Jan 2023 17:06:28 -0700 Subject: [PATCH 06/10] Create 0018_rename_year_one_electric_production_series_kw_chpoutputs_electric_production_series_kw_and_more.py --- ..._electric_production_series_kw_and_more.py | 648 ++++++++++++++++++ 1 file changed, 648 insertions(+) create mode 100644 job/migrations/0018_rename_year_one_electric_production_series_kw_chpoutputs_electric_production_series_kw_and_more.py diff --git a/job/migrations/0018_rename_year_one_electric_production_series_kw_chpoutputs_electric_production_series_kw_and_more.py b/job/migrations/0018_rename_year_one_electric_production_series_kw_chpoutputs_electric_production_series_kw_and_more.py new file mode 100644 index 000000000..7d397d271 --- /dev/null +++ b/job/migrations/0018_rename_year_one_electric_production_series_kw_chpoutputs_electric_production_series_kw_and_more.py @@ -0,0 +1,648 @@ +# Generated by Django 4.0.7 on 2023-01-04 23:47 + +import django.contrib.postgres.fields +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('job', '0017_merge_20230102_1621'), + ] + + operations = [ + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_electric_production_series_kw', + new_name='electric_production_series_kw', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_to_grid_series_kw', + new_name='electric_to_grid_series_kw', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_to_battery_series_kw', + new_name='electric_to_storage_series_kw', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='lifecycle_chp_fuel_cost_after_tax', + new_name='lifecycle_fuel_cost_after_tax', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='lifecycle_chp_standby_cost_after_tax', + new_name='lifecycle_standby_cost_after_tax', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_thermal_to_waste_series_mmbtu_per_hour', + new_name='thermal_curtailed_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_thermal_to_load_series_mmbtu_per_hour', + new_name='thermal_to_load_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_thermal_to_tes_series_mmbtu_per_hour', + new_name='thermal_to_storage_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_chp_fuel_cost_before_tax', + new_name='year_one_fuel_cost_before_tax', + ), + migrations.RenameField( + model_name='chpoutputs', + old_name='year_one_chp_standby_cost_before_tax', + new_name='year_one_standby_cost_before_tax', + ), + migrations.RenameField( + model_name='coldthermalstorageoutputs', + old_name='year_one_soc_series_fraction', + new_name='soc_series_fraction', + ), + migrations.RenameField( + model_name='coldthermalstorageoutputs', + old_name='year_one_to_load_series_ton', + new_name='storage_to_load_series_ton', + ), + migrations.RenameField( + model_name='electricstorageoutputs', + old_name='year_one_soc_series_fraction', + new_name='soc_series_fraction', + ), + migrations.RenameField( + model_name='electricstorageoutputs', + old_name='year_one_to_load_series_kw', + new_name='storage_to_load_series_kw', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='year_one_fuel_consumption_mmbtu', + new_name='annual_fuel_consumption_mmbtu', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='year_one_thermal_production_mmbtu', + new_name='annual_thermal_production_mmbtu', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='year_one_fuel_consumption_series_mmbtu_per_hour', + new_name='fuel_consumption_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='year_one_thermal_production_series_mmbtu_per_hour', + new_name='thermal_production_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='year_one_thermal_to_load_series_mmbtu_per_hour', + new_name='thermal_to_load_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='year_one_thermal_to_steamturbine_series_mmbtu_per_hour', + new_name='thermal_to_steamturbine_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='existingboileroutputs', + old_name='thermal_to_tes_series_mmbtu_per_hour', + new_name='thermal_to_storage_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='average_annual_fuel_used_gal', + new_name='annual_fuel_consumption_gal', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='fuel_used_gal_bau', + new_name='annual_fuel_consumption_gal_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='year_one_to_grid_series_kw', + new_name='electric_to_grid_series_kw', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='year_one_to_load_series_kw', + new_name='electric_to_load_series_kw', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='year_one_to_battery_series_kw', + new_name='electric_to_storage_series_kw', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='lifecycle_fixed_om_cost_bau', + new_name='lifecycle_fixed_om_cost_after_tax_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='lifecycle_fuel_cost_bau', + new_name='lifecycle_fuel_cost_after_tax_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='lifecycle_variable_om_cost_bau', + new_name='lifecycle_variable_om_cost_after_tax_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='year_one_fixed_om_cost_bau', + new_name='year_one_fixed_om_cost_before_tax_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='year_one_fuel_cost_bau', + new_name='year_one_fuel_cost_before_tax_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='year_one_variable_om_cost_bau', + new_name='year_one_variable_om_cost_before_tax_bau', + ), + migrations.RenameField( + model_name='generatoroutputs', + old_name='average_annual_energy_produced_kwh', + new_name='annual_energy_produced_kwh', + ), + migrations.RenameField( + model_name='hotthermalstorageoutputs', + old_name='year_one_soc_series_fraction', + new_name='soc_series_fraction', + ), + migrations.RenameField( + model_name='hotthermalstorageoutputs', + old_name='year_one_to_load_series_mmbtu_per_hour', + new_name='storage_to_load_series_mmbtu_per_hour', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='average_annual_energy_exported_kwh', + new_name='annual_energy_exported_kwh', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='average_annual_energy_produced_kwh', + new_name='annual_energy_produced_kwh', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='average_annual_energy_produced_kwh_bau', + new_name='annual_energy_produced_kwh_bau', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='year_one_to_grid_series_kw', + new_name='electric_to_grid_series_kw', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='year_one_to_load_series_kw', + new_name='electric_to_load_series_kw', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='year_one_to_battery_series_kw', + new_name='electric_to_storage_series_kw', + ), + migrations.RenameField( + model_name='pvoutputs', + old_name='year_one_curtailed_production_series_kw', + new_name='production_curtailed_series_kw', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='average_annual_energy_exported_kwh', + new_name='annual_energy_exported_kwh', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='average_annual_energy_produced_kwh', + new_name='annual_energy_produced_kwh', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='year_one_to_grid_series_kw', + new_name='electric_to_grid_series_kw', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='year_one_to_load_series_kw', + new_name='electric_to_load_series_kw', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='year_one_to_battery_series_kw', + new_name='electric_to_storage_series_kw', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='year_one_curtailed_production_series_kw', + new_name='production_curtailed_series_kw', + ), + migrations.RemoveField( + model_name='chpoutputs', + name='year_one_electric_energy_produced_kwh', + ), + migrations.RemoveField( + model_name='chpoutputs', + name='year_one_fuel_used_mmbtu', + ), + migrations.RemoveField( + model_name='chpoutputs', + name='year_one_thermal_energy_produced_mmbtu', + ), + migrations.RemoveField( + model_name='chpoutputs', + name='year_one_thermal_to_steamturbine_series_mmbtu_per_hour', + ), + migrations.RemoveField( + model_name='chpoutputs', + name='year_one_to_load_series_kw', + ), + migrations.RemoveField( + model_name='electrictariffoutputs', + name='year_one_demand_cost_series_per_kw', + ), + migrations.RemoveField( + model_name='electrictariffoutputs', + name='year_one_energy_cost_series_per_kwh', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_CO2', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_CO2_bau', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_NOx', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_NOx_bau', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_PM25', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_PM25_bau', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_SO2', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_emissions_tonnes_SO2_bau', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_energy_supplied_kwh', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_energy_supplied_kwh_bau', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_to_battery_series_kw', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_to_load_series_kw', + ), + migrations.RemoveField( + model_name='electricutilityoutputs', + name='year_one_to_load_series_kw_bau', + ), + migrations.RemoveField( + model_name='existingboileroutputs', + name='year_one_thermal_to_tes_series_mmbtu_per_hour', + ), + migrations.RemoveField( + model_name='existingchilleroutputs', + name='year_one_electric_consumption_kwh', + ), + migrations.RemoveField( + model_name='existingchilleroutputs', + name='year_one_electric_consumption_series_kw', + ), + migrations.RemoveField( + model_name='existingchilleroutputs', + name='year_one_thermal_production_tonhour', + ), + migrations.RemoveField( + model_name='existingchilleroutputs', + name='year_one_to_load_series_ton', + ), + migrations.RemoveField( + model_name='existingchilleroutputs', + name='year_one_to_tes_series_ton', + ), + migrations.RemoveField( + model_name='generatoroutputs', + name='average_annual_energy_exported_kwh', + ), + migrations.RemoveField( + model_name='generatoroutputs', + name='year_one_emissions_bau_lb_C02', + ), + migrations.RemoveField( + model_name='generatoroutputs', + name='year_one_emissions_lb_C02', + ), + migrations.RemoveField( + model_name='generatoroutputs', + name='year_one_energy_produced_kwh', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_CO2', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_CO2_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_NOx', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_NOx_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_PM25', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_PM25_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_SO2', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_from_fuelburn_tonnes_SO2_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_CO2', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_CO2_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_NOx', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_NOx_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_PM25', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_PM25_bau', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_SO2', + ), + migrations.RemoveField( + model_name='siteoutputs', + name='year_one_emissions_tonnes_SO2_bau', + ), + migrations.RemoveField( + model_name='windoutputs', + name='year_one_energy_produced_kwh', + ), + migrations.AddField( + model_name='chpoutputs', + name='annual_electric_production_kwh', + field=models.FloatField(blank=True, help_text='Electric energy produced in a year [kWh]', null=True), + ), + migrations.AddField( + model_name='chpoutputs', + name='annual_fuel_consumption_mmbtu', + field=models.FloatField(blank=True, help_text='Fuel consumed in a year [MMBtu]', null=True), + ), + migrations.AddField( + model_name='chpoutputs', + name='annual_thermal_production_mmbtu', + field=models.FloatField(blank=True, help_text='Thermal energy produced in a year [MMBtu]', null=True), + ), + migrations.AddField( + model_name='chpoutputs', + name='electric_to_load_series_kw', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True, null=True), blank=True, default=list, help_text='Electric power serving the electric load time-series array [kW]', size=None), + ), + migrations.AddField( + model_name='chpoutputs', + name='thermal_to_steamturbine_series_mmbtu_per_hour', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True, null=True), blank=True, default=list, help_text='Thermal power to steam turbine time-series array [MMBtu/hr]', size=None), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_CO2', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's grid-purchased electricity in an average year. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_CO2_bau', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's grid-purchased electricity in an average year in the BAU case. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_NOx', + field=models.FloatField(blank=True, help_text="Total tons of NOx emissions associated with the site's grid-purchased electricity in an average year. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_NOx_bau', + field=models.FloatField(blank=True, help_text="Total tons of NOx emissions associated with the site's grid-purchased electricity in an average year in the BAU case. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_PM25', + field=models.FloatField(blank=True, help_text="Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in an average year. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_PM25_bau', + field=models.FloatField(blank=True, help_text="Total tons of PM2.5 emissions associated with the site's grid-purchased electricity in an average year in the BAU case. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_SO2', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's grid-purchased electricity in an average year. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_emissions_tonnes_SO2_bau', + field=models.FloatField(blank=True, help_text="Total tons of SO2 emissions associated with the site's grid-purchased electricity in an average year in the BAU case. If include_exported_elec_emissions_in_total is False, this value only reflects grid purchaes. Otherwise, it accounts for emissions offset from any export to the grid.", null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_energy_supplied_kwh', + field=models.FloatField(blank=True, help_text='Average annual energy supplied from grid to load', null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='annual_energy_supplied_kwh_bau', + field=models.FloatField(blank=True, help_text='Average annual energy supplied from grid to load', null=True), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='electric_to_load_series_kw', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True), blank=True, default=list, help_text='Optimal average annual grid to load time series', size=None), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='electric_to_load_series_kw_bau', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True), blank=True, default=list, help_text='Business as usual average annual grid to load time series', size=None), + ), + migrations.AddField( + model_name='electricutilityoutputs', + name='electric_to_storage_series_kw', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True), blank=True, default=list, help_text='Optimal average annual grid to battery time series', size=None), + ), + migrations.AddField( + model_name='existingchilleroutputs', + name='annual_electric_consumption_kwh', + field=models.FloatField(blank=True, help_text='Annual chiller electric consumption [kWh]', null=True), + ), + migrations.AddField( + model_name='existingchilleroutputs', + name='annual_thermal_production_tonhour', + field=models.FloatField(blank=True, help_text='Annual chiller thermal production [Ton Hour', null=True), + ), + migrations.AddField( + model_name='existingchilleroutputs', + name='electric_consumption_series_kw', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True), blank=True, default=list, help_text='Annual hourly time series of chiller electric consumption [kW]', null=True, size=None), + ), + migrations.AddField( + model_name='existingchilleroutputs', + name='thermal_to_load_series_ton', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True), blank=True, default=list, help_text='Annual hourly time series of electric chiller thermal to cooling load [Ton]', null=True, size=None), + ), + migrations.AddField( + model_name='existingchilleroutputs', + name='thermal_to_storage_series_ton', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True), blank=True, default=list, help_text='Annual hourly time series of electric chiller thermal to cold TES [Ton]', null=True, size=None), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_CO2', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_CO2_bau', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's onsite fuel burn in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_NOx', + field=models.FloatField(blank=True, help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_NOx_bau', + field=models.FloatField(blank=True, help_text="Total tons of NOx emissions associated with the site's onsite fuel burn in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_PM25', + field=models.FloatField(blank=True, help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_PM25_bau', + field=models.FloatField(blank=True, help_text="Total tons of PM2.5 emissions associated with the site's onsite fuel burn in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_SO2', + field=models.FloatField(blank=True, help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_from_fuelburn_tonnes_SO2_bau', + field=models.FloatField(blank=True, help_text="Total tons of SO2 emissions associated with the site's onsite fuel burn in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_CO2', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's energy consumption in an one.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_CO2_bau', + field=models.FloatField(blank=True, help_text="Total tons of CO2 emissions associated with the site's energy consumption in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_NOx', + field=models.FloatField(blank=True, help_text="Total tons of NOx emissions associated with the site's energy consumption in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_NOx_bau', + field=models.FloatField(blank=True, help_text="Total tons of NOx emissions associated with the site's energy consumption in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_PM25', + field=models.FloatField(blank=True, help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_PM25_bau', + field=models.FloatField(blank=True, help_text="Total tons of PM2.5 emissions associated with the site's energy consumption in an average year in the BAU case.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_SO2', + field=models.FloatField(blank=True, help_text="Total tons of SO2 emissions associated with the site's energy consumption in an average year.", null=True), + ), + migrations.AddField( + model_name='siteoutputs', + name='annual_emissions_tonnes_SO2_bau', + field=models.FloatField(blank=True, help_text="Total tons of SO2 emissions associated with the site's energy consumption in an average year in the BAU case.", null=True), + ), + migrations.AlterField( + model_name='electricloadoutputs', + name='load_series_kw', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True, null=True), default=list, help_text='Annual hourly time series of electric load', size=None), + ), + migrations.AlterField( + model_name='pvinputs', + name='tilt', + field=models.FloatField(blank=True, help_text='PV system tilt. If PV system type is rooftop-fixed, then tilt=10 degrees, else tilt=abs(site.latitude)', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(90)]), + ), + ] From bcc0dc5b0a8f360b57a3dd4724eacc11ea783d53 Mon Sep 17 00:00:00 2001 From: adfarth Date: Thu, 5 Jan 2023 13:00:30 -0700 Subject: [PATCH 07/10] temp update to Manifest.toml --- julia_src/Manifest.toml | 80 ++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 50 deletions(-) diff --git a/julia_src/Manifest.toml b/julia_src/Manifest.toml index 88492d891..8e48cf67b 100644 --- a/julia_src/Manifest.toml +++ b/julia_src/Manifest.toml @@ -1,6 +1,6 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.3" +julia_version = "1.7.1" manifest_format = "2.0" project_hash = "c2cdadb4ef175368e043d03d8dd75e25e020ef11" @@ -24,7 +24,6 @@ version = "0.9.3" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" [[deps.Arrow_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Lz4_jll", "Pkg", "Thrift_jll", "Zlib_jll", "boost_jll", "snappy_jll"] @@ -75,9 +74,9 @@ version = "0.4.2" [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "SentinelArrays", "SnoopPrecompile", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] -git-tree-sha1 = "8c73e96bd6817c2597cfd5615b91fca5deccf1af" +git-tree-sha1 = "c700cce799b51c9045473de751e9319bdd1c6e94" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.10.8" +version = "0.10.9" [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] @@ -111,9 +110,9 @@ version = "0.11.4" [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] -git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322" +git-tree-sha1 = "600cc5508d66b78aae350f7accdb58763ac18589" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.9.9" +version = "0.9.10" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] @@ -141,7 +140,6 @@ version = "4.5.0" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "0.5.2+0" [[deps.ConstructionBase]] deps = ["LinearAlgebra"] @@ -157,9 +155,9 @@ version = "0.1.0" [[deps.CoolProp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "00a315eb9652c16094b57e052b6c47355aec5f8a" +git-tree-sha1 = "6b492e9aafcd6016d5aca105567ed2271c423015" uuid = "3351c21f-4feb-5f29-afb9-f4fcb0e27549" -version = "6.4.2+0" +version = "6.4.3+0" [[deps.DataAPI]] git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" @@ -199,9 +197,9 @@ version = "1.12.2" [[deps.DiskArrays]] deps = ["OffsetArrays"] -git-tree-sha1 = "bd0543363fc8ceac0c9fb24d38783ffffd95c20c" +git-tree-sha1 = "27ebdcf03ca847fa484f28273db57de3c8514920" uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" -version = "0.3.7" +version = "0.3.8" [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] @@ -214,9 +212,8 @@ uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" version = "0.9.3" [[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +deps = ["ArgTools", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -247,9 +244,6 @@ git-tree-sha1 = "e27c4ebe80e8699540f2d6c805cc12203b614f12" uuid = "48062228-2e41-5def-b9a4-89aafe57970f" version = "0.9.20" -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - [[deps.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" @@ -268,15 +262,15 @@ uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" [[deps.GDAL]] deps = ["CEnum", "GDAL_jll", "NetworkOptions", "PROJ_jll"] -git-tree-sha1 = "0027ae257eae94ffe1757c038b6e7b56b65565b3" +git-tree-sha1 = "aa6f8ca2f7a0eb46f4d8353eb725c717de40da6e" uuid = "add2ef01-049f-52c4-9ee2-e494f65e021a" -version = "1.5.0" +version = "1.5.1" [[deps.GDAL_jll]] deps = ["Arrow_jll", "Artifacts", "Expat_jll", "GEOS_jll", "HDF5_jll", "JLLWrappers", "LibCURL_jll", "LibPQ_jll", "Libdl", "Libtiff_jll", "NetCDF_jll", "OpenJpeg_jll", "PROJ_jll", "Pkg", "SQLite_jll", "Zlib_jll", "Zstd_jll", "libgeotiff_jll"] -git-tree-sha1 = "fbead7c60556297f540ecfa6e06d1bb64919a56f" +git-tree-sha1 = "46641669463e45077ea6f08e5c8bd07189173acf" uuid = "a7073274-a066-55f0-b90d-d619367d196c" -version = "301.600.0+0" +version = "301.600.100+0" [[deps.GEOS_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -319,10 +313,10 @@ uuid = "c8ec2601-a99c-407f-b158-e79c03c2f5f7" version = "0.1.0" [[deps.HDF5]] -deps = ["Compat", "HDF5_jll", "Libdl", "Mmap", "Random", "Requires"] -git-tree-sha1 = "19effd6b5af759c8aaeb9c77f89422d3f975ab65" +deps = ["Compat", "HDF5_jll", "Libdl", "Mmap", "Random", "Requires", "UUIDs"] +git-tree-sha1 = "b5df7c3cab3a00c33c2e09c6bd23982a75e2fbb2" uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" -version = "0.16.12" +version = "0.16.13" [[deps.HDF5_jll]] deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "OpenSSL_jll", "Pkg", "Zlib_jll"] @@ -441,12 +435,10 @@ version = "2.10.1+0" [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.3" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "7.84.0+0" [[deps.LibGit2]] deps = ["Base64", "NetworkOptions", "Printf", "SHA"] @@ -461,7 +453,6 @@ version = "14.3.0+1" [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.10.2+0" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" @@ -545,7 +536,6 @@ version = "1.1.7" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" [[deps.Memento]] deps = ["Dates", "Distributed", "Requires", "Serialization", "Sockets", "Test", "UUIDs"] @@ -564,7 +554,6 @@ version = "0.3.4" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" [[deps.MutableArithmetics]] deps = ["LinearAlgebra", "SparseArrays", "Test"] @@ -586,7 +575,6 @@ version = "400.902.5+1" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" [[deps.OffsetArrays]] deps = ["Adapt"] @@ -597,7 +585,6 @@ version = "1.12.8" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" [[deps.OpenJpeg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libtiff_jll", "LittleCMS_jll", "Pkg", "libpng_jll"] @@ -608,7 +595,6 @@ version = "2.4.0+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -641,14 +627,13 @@ version = "0.5.11" [[deps.Parsers]] deps = ["Dates", "SnoopPrecompile"] -git-tree-sha1 = "b64719e8b4504983c7fca6cc9db3ebc8acc2a4d6" +git-tree-sha1 = "6466e524967496866901a78fca3f2e9ea445a559" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.5.1" +version = "2.5.2" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.8.0" [[deps.PolyhedralRelaxations]] deps = ["DataStructures", "ForwardDiff", "JuMP", "Logging", "LoggingExtras"] @@ -664,9 +649,9 @@ version = "1.4.2" [[deps.PowerModelsDistribution]] deps = ["CSV", "Dates", "FilePaths", "Glob", "InfrastructureModels", "JSON", "JuMP", "LinearAlgebra", "Logging", "LoggingExtras", "PolyhedralRelaxations", "Statistics"] -git-tree-sha1 = "ae1eb6eed3e17fce8893e77fa02965b1622a0fb4" +git-tree-sha1 = "497384070b047898b763a7e9c883c5bc196582ad" uuid = "d7431456-977f-11e9-2de3-97ff7677985e" -version = "0.14.4" +version = "0.14.5" [[deps.Preferences]] deps = ["TOML"] @@ -688,7 +673,9 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.REopt]] deps = ["ArchGDAL", "CoolProp", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"] -git-tree-sha1 = "92e8055867af9460faba381c44778d7634d54b7b" +git-tree-sha1 = "f52c47043f05c89c083ec20315bb31c5d76c50a1" +repo-rev = "year-one-naming" +repo-url = "https://github.com/NREL/REopt.jl.git" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" version = "0.23.0" @@ -726,7 +713,6 @@ version = "2.0.8" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" [[deps.SQLite_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] @@ -775,9 +761,9 @@ version = "0.1.1" [[deps.StaticArrays]] deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] -git-tree-sha1 = "ffc098086f35909741f71ce21d03dadf0d2bfa76" +git-tree-sha1 = "6954a456979f23d05085727adb17c4551c19ecd1" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.5.11" +version = "1.5.12" [[deps.StaticArraysCore]] git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" @@ -791,7 +777,6 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -808,7 +793,6 @@ version = "1.10.0" [[deps.Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.1" [[deps.TensorCore]] deps = ["LinearAlgebra"] @@ -822,9 +806,9 @@ uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.TestEnv]] deps = ["Pkg"] -git-tree-sha1 = "e458e63fc410c725194e7705c0960bd3d910063a" +git-tree-sha1 = "df6f1b5f13936504ba45088e13a62a6930cdabf7" uuid = "1e6cf692-eddd-4d53-88a5-2d735e33781b" -version = "1.8.1" +version = "1.7.4" [[deps.Thrift_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "boost_jll"] @@ -869,9 +853,9 @@ version = "1.6.1" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" +git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.9.14+0" +version = "2.10.3+0" [[deps.Xpress]] deps = ["Libdl", "LinearAlgebra", "MathOptInterface", "SparseArrays"] @@ -882,7 +866,6 @@ version = "0.15.5" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -899,7 +882,6 @@ version = "1.76.0+1" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.1.1+0" [[deps.libgeotiff_jll]] deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "Libtiff_jll", "PROJ_jll", "Pkg"] @@ -916,12 +898,10 @@ version = "1.6.38+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.48.0+0" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" [[deps.snappy_jll]] deps = ["Artifacts", "JLLWrappers", "LZO_jll", "Libdl", "Pkg", "Zlib_jll"] From cde31e3e6a1fd088d3be0a18122709aeb0559df2 Mon Sep 17 00:00:00 2001 From: adfarth Date: Thu, 5 Jan 2023 16:25:42 -0700 Subject: [PATCH 08/10] update production_curtailed to electric_curtailed --- ...s_electric_curtailed_series_kw_and_more.py | 23 +++++++++++++++++++ job/models.py | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 job/migrations/0019_rename_production_curtailed_series_kw_pvoutputs_electric_curtailed_series_kw_and_more.py diff --git a/job/migrations/0019_rename_production_curtailed_series_kw_pvoutputs_electric_curtailed_series_kw_and_more.py b/job/migrations/0019_rename_production_curtailed_series_kw_pvoutputs_electric_curtailed_series_kw_and_more.py new file mode 100644 index 000000000..9c58fc6fd --- /dev/null +++ b/job/migrations/0019_rename_production_curtailed_series_kw_pvoutputs_electric_curtailed_series_kw_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.7 on 2023-01-05 23:25 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('job', '0018_rename_year_one_electric_production_series_kw_chpoutputs_electric_production_series_kw_and_more'), + ] + + operations = [ + migrations.RenameField( + model_name='pvoutputs', + old_name='production_curtailed_series_kw', + new_name='electric_curtailed_series_kw', + ), + migrations.RenameField( + model_name='windoutputs', + old_name='production_curtailed_series_kw', + new_name='electric_curtailed_series_kw', + ), + ] diff --git a/job/models.py b/job/models.py index bbc486144..759521c61 100644 --- a/job/models.py +++ b/job/models.py @@ -2349,7 +2349,7 @@ class PVOutputs(BaseModel, models.Model): models.FloatField(null=True, blank=True), blank=True, default=list ) - production_curtailed_series_kw = ArrayField( + electric_curtailed_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list ) @@ -2659,7 +2659,7 @@ class WindOutputs(BaseModel, models.Model): models.FloatField(null=True, blank=True), blank=True, default=list) electric_to_grid_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) - production_curtailed_series_kw = ArrayField( + electric_curtailed_series_kw = ArrayField( models.FloatField(null=True, blank=True), blank=True, default=list) lcoe_per_kwh = models.FloatField(null=True, blank=True) From 98736b2e7cd4d0366d3d5498deb5664a13d5f273 Mon Sep 17 00:00:00 2001 From: adfarth Date: Thu, 5 Jan 2023 16:32:18 -0700 Subject: [PATCH 09/10] add missing chp output field --- ...hermal_production_series_mmbtu_per_hour.py | 19 +++++++++++++++++++ job/models.py | 4 ++++ 2 files changed, 23 insertions(+) create mode 100644 job/migrations/0020_chpoutputs_thermal_production_series_mmbtu_per_hour.py diff --git a/job/migrations/0020_chpoutputs_thermal_production_series_mmbtu_per_hour.py b/job/migrations/0020_chpoutputs_thermal_production_series_mmbtu_per_hour.py new file mode 100644 index 000000000..80c8a19f8 --- /dev/null +++ b/job/migrations/0020_chpoutputs_thermal_production_series_mmbtu_per_hour.py @@ -0,0 +1,19 @@ +# Generated by Django 4.0.7 on 2023-01-05 23:31 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('job', '0019_rename_production_curtailed_series_kw_pvoutputs_electric_curtailed_series_kw_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='chpoutputs', + name='thermal_production_series_mmbtu_per_hour', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True, null=True), default=list, size=None), + ), + ] diff --git a/job/models.py b/job/models.py index 759521c61..2861775aa 100644 --- a/job/models.py +++ b/job/models.py @@ -3883,6 +3883,10 @@ class CHPOutputs(BaseModel, models.Model): null=True, blank=True, help_text="Present value of all CHP standby charges, after tax." ) + thermal_production_series_mmbtu_per_hour = ArrayField( + models.FloatField(null=True, blank=True), + default = list, + ) def clean(): pass From 908fba523acb23ec08a3de38b4e163227f939199 Mon Sep 17 00:00:00 2001 From: adfarth Date: Fri, 6 Jan 2023 14:59:42 -0700 Subject: [PATCH 10/10] update Manifest to latest REopt v0.24.0 --- julia_src/Manifest.toml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/julia_src/Manifest.toml b/julia_src/Manifest.toml index 8e48cf67b..c33e0737d 100644 --- a/julia_src/Manifest.toml +++ b/julia_src/Manifest.toml @@ -673,11 +673,9 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.REopt]] deps = ["ArchGDAL", "CoolProp", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"] -git-tree-sha1 = "f52c47043f05c89c083ec20315bb31c5d76c50a1" -repo-rev = "year-one-naming" -repo-url = "https://github.com/NREL/REopt.jl.git" +git-tree-sha1 = "9c5a19161f6ae306782dc613a8d6c1360247a377" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" -version = "0.23.0" +version = "0.24.0" [[deps.Random]] deps = ["SHA", "Serialization"]