From a55cb727ea80d440fc2464a45a661ccb28860f16 Mon Sep 17 00:00:00 2001 From: An Pham Date: Sun, 29 Sep 2024 22:10:31 -0600 Subject: [PATCH 01/14] updated REopt's GHX defaults to match with other NREL models --- ghpghx/models.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ghpghx/models.py b/ghpghx/models.py index 1f3f211fa..c10498a1f 100644 --- a/ghpghx/models.py +++ b/ghpghx/models.py @@ -26,16 +26,16 @@ class GHPGHXInputs(models.Model): # Single value inputs borehole_depth_ft = models.FloatField(blank=True, - default=400.0, validators=[MinValueValidator(10.0), MaxValueValidator(600.0)], + default=443.0, validators=[MinValueValidator(10.0), MaxValueValidator(600.0)], help_text="Vertical depth of each borehole [ft]") ghx_header_depth_ft = models.FloatField(blank=True, - default=4.0, validators=[MinValueValidator(0.1), MaxValueValidator(50.0)], + default=6.6, validators=[MinValueValidator(0.1), MaxValueValidator(50.0)], help_text="Depth under the ground of the GHX header pipe [ft]") borehole_spacing_ft = models.FloatField(blank=True, default=20.0, validators=[MinValueValidator(1.0), MaxValueValidator(100.0)], help_text="Distance from the centerline of each borehole to the centerline of its adjacent boreholes [ft]") borehole_diameter_inch = models.FloatField(blank=True, - default=5.0, validators=[MinValueValidator(0.25), MaxValueValidator(24.0)], + default=6.0, validators=[MinValueValidator(0.25), MaxValueValidator(24.0)], help_text="Diameter of the borehole/well drilled in the ground [in]") borehole_choices = [("rectangular", "rectangular"), ("hexagonal", "hexagonal")] @@ -49,10 +49,10 @@ class GHPGHXInputs(models.Model): default=0.16, validators=[MinValueValidator(0.01), MaxValueValidator(5.0)], help_text="Wall thickness of the GHX pipe [in]") ghx_pipe_thermal_conductivity_btu_per_hr_ft_f = models.FloatField(blank=True, - default=0.25, validators=[MinValueValidator(0.01), MaxValueValidator(10.0)], + default=0.23, validators=[MinValueValidator(0.01), MaxValueValidator(10.0)], help_text="Thermal conductivity of the GHX pipe [Btu/(hr-ft-degF)]") ghx_shank_space_inch = models.FloatField(blank=True, - default=2.5, validators=[MinValueValidator(0.5), MaxValueValidator(100.0)], + default=1.27, validators=[MinValueValidator(0.5), MaxValueValidator(100.0)], help_text="Distance between the centerline of the upwards and downwards u-tube legs [in]") # Default for ground_thermal_conductivity_btu_per_hr_ft_f varies by ASHRAE climate zone ground_thermal_conductivity_btu_per_hr_ft_f = models.FloatField(blank=True, @@ -65,7 +65,7 @@ class GHPGHXInputs(models.Model): default=0.211, validators=[MinValueValidator(0.01), MaxValueValidator(5.0)], help_text="Specific heat of the ground surrounding the borehole field") grout_thermal_conductivity_btu_per_hr_ft_f = models.FloatField(blank=True, - default=1.0, validators=[MinValueValidator(0.01), MaxValueValidator(10.0)], + default=0.75, validators=[MinValueValidator(0.01), MaxValueValidator(10.0)], help_text="Thermal conductivity of the grout material in a borehole [Btu/(hr-ft-degF)]") ghx_fluid_specific_heat_btu_per_lb_f = models.FloatField(blank=True, default=1.0, validators=[MinValueValidator(0.1), MaxValueValidator(10.0)], From 8b25298b6fd4cf1cabbdb795a7fa5cee37b47255 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Sat, 26 Oct 2024 22:44:08 -0600 Subject: [PATCH 02/14] Refactor ProcessHeatLoad input field industry to industrial --- ...puts_industrial_reference_name_and_more.py | 38 ++++++++++++++++++ reoptjl/models.py | 40 +++++++++---------- 2 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 reoptjl/migrations/0071_rename_industry_reference_name_processheatloadinputs_industrial_reference_name_and_more.py diff --git a/reoptjl/migrations/0071_rename_industry_reference_name_processheatloadinputs_industrial_reference_name_and_more.py b/reoptjl/migrations/0071_rename_industry_reference_name_processheatloadinputs_industrial_reference_name_and_more.py new file mode 100644 index 000000000..26db53ebd --- /dev/null +++ b/reoptjl/migrations/0071_rename_industry_reference_name_processheatloadinputs_industrial_reference_name_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 4.0.7 on 2024-10-27 04:32 + +import django.contrib.postgres.fields +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reoptjl', '0070_merge_20240925_0600'), + ] + + operations = [ + migrations.RenameField( + model_name='processheatloadinputs', + old_name='industry_reference_name', + new_name='industrial_reference_name', + ), + migrations.RemoveField( + model_name='processheatloadinputs', + name='blended_industry_reference_names', + ), + migrations.RemoveField( + model_name='processheatloadinputs', + name='blended_industry_reference_percents', + ), + migrations.AddField( + model_name='processheatloadinputs', + name='blended_industrial_reference_names', + field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField(blank=True, choices=[('Chemical', 'Chemical'), ('Warehouse', 'Warehouse'), ('FlatLoad', 'Flatload'), ('FlatLoad_24_5', 'Flatload 24 5'), ('FlatLoad_16_7', 'Flatload 16 7'), ('FlatLoad_16_5', 'Flatload 16 5'), ('FlatLoad_8_7', 'Flatload 8 7'), ('FlatLoad_8_5', 'Flatload 8 5')], null=True), blank=True, default=list, help_text='Used in concert with blended_industrial_reference_percents to create a blended load profile from multiple Industrial reference facility/sector types.', size=None), + ), + migrations.AddField( + model_name='processheatloadinputs', + name='blended_industrial_reference_percents', + field=django.contrib.postgres.fields.ArrayField(base_field=models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1.0)]), blank=True, default=list, help_text='Used in concert with blended_industrial_reference_names to create a blended load profile from multiple Industrial reference facility/sector types. Must sum to 1.0.', size=None), + ), + ] diff --git a/reoptjl/models.py b/reoptjl/models.py index 35c3d96d0..572e2675e 100644 --- a/reoptjl/models.py +++ b/reoptjl/models.py @@ -7138,14 +7138,14 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): possible_sets = [ ["fuel_loads_mmbtu_per_hour"], - ["industry_reference_name", "monthly_mmbtu"], - ["annual_mmbtu", "industry_reference_name"], - ["industry_reference_name"], - ["blended_industry_reference_names", "blended_industry_reference_percents"], + ["industrial_reference_name", "monthly_mmbtu"], + ["annual_mmbtu", "industrial_reference_name"], + ["industrial_reference_name"], + ["blended_industrial_reference_names", "blended_industrial_reference_percents"], [] ] - INDUSTRY_REFERENCE_NAME = models.TextChoices('INDUSTRY_REFERENCE_NAME', ( + INDUSTRIAL_REFERENCE_NAME = models.TextChoices('INDUSTRIAL_REFERENCE_NAME', ( 'Chemical ' 'Warehouse ' 'FlatLoad ' @@ -7167,10 +7167,10 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): "to scale simulated default industry load profile [MMBtu]") ) - industry_reference_name = models.TextField( + industrial_reference_name = models.TextField( null=True, blank=True, - choices=INDUSTRY_REFERENCE_NAME.choices, + choices=INDUSTRIAL_REFERENCE_NAME.choices, help_text=("Industrial process heat load reference facility/sector type") ) @@ -7199,19 +7199,19 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): ) ) - blended_industry_reference_names = ArrayField( + blended_industrial_reference_names = ArrayField( models.TextField( - choices=INDUSTRY_REFERENCE_NAME.choices, + choices=INDUSTRIAL_REFERENCE_NAME.choices, blank=True, null=True ), default=list, blank=True, - help_text=("Used in concert with blended_industry_reference_percents to create a blended load profile from multiple " + help_text=("Used in concert with blended_industrial_reference_percents to create a blended load profile from multiple " "Industrial reference facility/sector types.") ) - blended_industry_reference_percents = ArrayField( + blended_industrial_reference_percents = ArrayField( models.FloatField( null=True, blank=True, validators=[ @@ -7221,7 +7221,7 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): ), default=list, blank=True, - help_text=("Used in concert with blended_industry_reference_names to create a blended load profile from multiple " + help_text=("Used in concert with blended_industrial_reference_names to create a blended load profile from multiple " "Industrial reference facility/sector types. Must sum to 1.0.") ) @@ -7247,15 +7247,15 @@ def clean(self): error_messages["required inputs"] = \ "Must provide at least one set of valid inputs from {}.".format(self.possible_sets) - if len(self.blended_industry_reference_names) > 0 and self.industry_reference_name == "": - if len(self.blended_industry_reference_names) != len(self.blended_industry_reference_percents): - error_messages["blended_industry_reference_names"] = \ - "The number of blended_industry_reference_names must equal the number of blended_industry_reference_percents." - if not math.isclose(sum(self.blended_industry_reference_percents), 1.0): - error_messages["blended_industry_reference_percents"] = "Sum must = 1.0." + if len(self.blended_industrial_reference_names) > 0 and self.industrial_reference_name == "": + if len(self.blended_industrial_reference_names) != len(self.blended_industrial_reference_percents): + error_messages["blended_industrial_reference_names"] = \ + "The number of blended_industrial_reference_names must equal the number of blended_industrial_reference_percents." + if not math.isclose(sum(self.blended_industrial_reference_percents), 1.0): + error_messages["blended_industrial_reference_percents"] = "Sum must = 1.0." - if self.industry_reference_name != "" or \ - len(self.blended_industry_reference_names) > 0: + if self.industrial_reference_name != "" or \ + len(self.blended_industrial_reference_names) > 0: self.year = 2017 # the validator provides an "info" message regarding this) if self.addressable_load_fraction == None: From ce27753357e456ed964fa011a7f511b64ae9188d Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 14:05:04 -0600 Subject: [PATCH 03/14] Add normalize_and_scale_load_profile_input model field for electric and heating loads --- ...e_and_scale_load_profile_input_and_more.py | 33 +++++++++++++++++++ reoptjl/models.py | 22 +++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 reoptjl/migrations/0072_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py diff --git a/reoptjl/migrations/0072_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py b/reoptjl/migrations/0072_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py new file mode 100644 index 000000000..f8bdcf0d8 --- /dev/null +++ b/reoptjl/migrations/0072_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 4.0.7 on 2024-10-27 04:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reoptjl', '0071_rename_industry_reference_name_processheatloadinputs_industrial_reference_name_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='domestichotwaterloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=True, help_text='Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.'), + ), + migrations.AddField( + model_name='electricloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=True, help_text='Takes the input loads_kw and normalizes and scales it to annual or monthly energy inputs.'), + ), + migrations.AddField( + model_name='processheatloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=True, help_text='Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.'), + ), + migrations.AddField( + model_name='spaceheatingloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=True, help_text='Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.'), + ), + ] diff --git a/reoptjl/models.py b/reoptjl/models.py index 572e2675e..4008d72a1 100644 --- a/reoptjl/models.py +++ b/reoptjl/models.py @@ -1244,6 +1244,11 @@ class ElectricLoadInputs(BaseModel, models.Model): "equal to zero. " ) ) + normalize_and_scale_load_profile_input = models.BooleanField( + blank=True, + default=True, + help_text=("Takes the input loads_kw and normalizes and scales it to annual or monthly energy inputs.") + ) critical_loads_kw = ArrayField( models.FloatField(blank=True), default=list, blank=True, @@ -6896,6 +6901,12 @@ class SpaceHeatingLoadInputs(BaseModel, models.Model): ) ) + normalize_and_scale_load_profile_input = models.BooleanField( + blank=True, + default=True, + help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") + ) + blended_doe_reference_names = ArrayField( models.TextField( choices=DOE_REFERENCE_NAME.choices, @@ -7055,7 +7066,12 @@ class DomesticHotWaterLoadInputs(BaseModel, models.Model): "520 samples), or 15 minute (35,040 samples). All non-net load values must be greater than or " "equal to zero. " ) + ) + normalize_and_scale_load_profile_input = models.BooleanField( + blank=True, + default=True, + help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) blended_doe_reference_names = ArrayField( @@ -7199,6 +7215,12 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): ) ) + normalize_and_scale_load_profile_input = models.BooleanField( + blank=True, + default=True, + help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") + ) + blended_industrial_reference_names = ArrayField( models.TextField( choices=INDUSTRIAL_REFERENCE_NAME.choices, From f2e6d3ba0361e8d3246f8f346fc2e10aedd23ac7 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 19:14:19 -0600 Subject: [PATCH 04/14] Add year input to heating loads --- ...omestichotwaterloadinputs_year_and_more.py | 29 +++++++++++ reoptjl/models.py | 52 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 reoptjl/migrations/0073_domestichotwaterloadinputs_year_and_more.py diff --git a/reoptjl/migrations/0073_domestichotwaterloadinputs_year_and_more.py b/reoptjl/migrations/0073_domestichotwaterloadinputs_year_and_more.py new file mode 100644 index 000000000..9a9da4d6f --- /dev/null +++ b/reoptjl/migrations/0073_domestichotwaterloadinputs_year_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 4.0.7 on 2024-10-28 20:15 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reoptjl', '0072_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='domestichotwaterloadinputs', + name='year', + field=models.IntegerField(blank=True, default=2022, help_text="Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it is important that this year correlates with the electric load profile so that weekdays/weekends are determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka 'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.", null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(9999)]), + ), + migrations.AddField( + model_name='processheatloadinputs', + name='year', + field=models.IntegerField(blank=True, default=2022, help_text="Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it is important that this year correlates with the electric load profile so that weekdays/weekends are determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka 'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.", null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(9999)]), + ), + migrations.AddField( + model_name='spaceheatingloadinputs', + name='year', + field=models.IntegerField(blank=True, default=2022, help_text="Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it is important that this year correlates with the electric load profile so that weekdays/weekends are determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka 'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.", null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(9999)]), + ), + ] diff --git a/reoptjl/models.py b/reoptjl/models.py index 4008d72a1..eff4ee8fb 100644 --- a/reoptjl/models.py +++ b/reoptjl/models.py @@ -6906,6 +6906,19 @@ class SpaceHeatingLoadInputs(BaseModel, models.Model): default=True, help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) + + year = models.IntegerField( + default=2022, + validators=[ + MinValueValidator(1), + MaxValueValidator(9999) + ], + null=True, blank=True, + help_text=("Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it " + "is important that this year correlates with the electric load profile so that weekdays/weekends are " + "determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka " + "'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.") + ) blended_doe_reference_names = ArrayField( models.TextField( @@ -7074,6 +7087,19 @@ class DomesticHotWaterLoadInputs(BaseModel, models.Model): help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) + year = models.IntegerField( + default=2022, + validators=[ + MinValueValidator(1), + MaxValueValidator(9999) + ], + null=True, blank=True, + help_text=("Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it " + "is important that this year correlates with the electric load profile so that weekdays/weekends are " + "determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka " + "'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.") + ) + blended_doe_reference_names = ArrayField( models.TextField( choices=DOE_REFERENCE_NAME.choices, @@ -7215,11 +7241,37 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): ) ) + year = models.IntegerField( + default=2022, + validators=[ + MinValueValidator(1), + MaxValueValidator(9999) + ], + null=True, blank=True, + help_text=("Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it " + "is important that this year correlates with the electric load profile so that weekdays/weekends are " + "determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka " + "'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.") + ) + normalize_and_scale_load_profile_input = models.BooleanField( blank=True, default=True, help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) + + year = models.IntegerField( + default=2022, + validators=[ + MinValueValidator(1), + MaxValueValidator(9999) + ], + null=True, blank=True, + help_text=("Year of Custom Load Profile. If a custom load profile is uploaded via the fuel_loads_mmbtu_per_hour parameter, it " + "is important that this year correlates with the electric load profile so that weekdays/weekends are " + "determined correctly for the utility rate tariff. If a DOE Reference Building profile (aka " + "'simulated' profile) is used, the year is set to 2017 since the DOE profiles start on a Sunday.") + ) blended_industrial_reference_names = ArrayField( models.TextField( From ae07953200dd799ff3c13dcb42d21a5382ba3ced Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 19:16:09 -0600 Subject: [PATCH 05/14] Add new vector input to http.jl /simulated_load endpoint --- julia_src/http.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/julia_src/http.jl b/julia_src/http.jl index fc91cabc9..833cb5156 100644 --- a/julia_src/http.jl +++ b/julia_src/http.jl @@ -419,7 +419,7 @@ function simulated_load(req::HTTP.Request) # Convert vectors which come in as Vector{Any} to Vector{Float} (within Vector{<:Real}) vector_types = ["percent_share", "cooling_pct_share", "monthly_totals_kwh", "monthly_mmbtu", - "monthly_tonhour", "addressable_load_fraction"] + "monthly_tonhour", "addressable_load_fraction", "load_profile"] for key in vector_types if key in keys(d) && typeof(d[key]) <: Vector{} d[key] = convert(Vector{Real}, d[key]) From 2b609aa848949bf545970642db529ff9b0dff176 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 19:16:30 -0600 Subject: [PATCH 06/14] Add new inputs to all_inputs_test.json --- reoptjl/test/posts/all_inputs_test.json | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/reoptjl/test/posts/all_inputs_test.json b/reoptjl/test/posts/all_inputs_test.json index 5611d439a..4da22063c 100644 --- a/reoptjl/test/posts/all_inputs_test.json +++ b/reoptjl/test/posts/all_inputs_test.json @@ -41,7 +41,8 @@ "operating_reserve_required_fraction": 0.0, "min_load_met_annual_fraction": 1.0, "blended_doe_reference_names": [], - "blended_doe_reference_percents": [] + "blended_doe_reference_percents": [], + "normalize_and_scale_load_profile_input": false }, "Site": { "latitude": 38.96345294964369, @@ -265,12 +266,13 @@ }, "SpaceHeatingLoad": { "annual_mmbtu": null, - "year": 2017, "doe_reference_name": "MidriseApartment", "monthly_mmbtu": [], "fuel_loads_mmbtu_per_hour": [], "blended_doe_reference_names": [], - "blended_doe_reference_percents": [] + "blended_doe_reference_percents": [], + "normalize_and_scale_load_profile_input": false, + "year": 2017 }, "DomesticHotWaterLoad": { "annual_mmbtu": 8760.0, @@ -278,11 +280,19 @@ "monthly_mmbtu": [], "fuel_loads_mmbtu_per_hour": [], "blended_doe_reference_names": [], - "blended_doe_reference_percents": [] + "blended_doe_reference_percents": [], + "normalize_and_scale_load_profile_input": false, + "year": 2017 }, "ProcessHeatLoad": { "annual_mmbtu": 8760.0, - "industry_reference_name": "Warehouse" + "industrial_reference_name": "Chemical", + "monthly_mmbtu": [], + "fuel_loads_mmbtu_per_hour": [], + "blended_industrial_reference_names": [], + "blended_industrial_reference_percents": [], + "normalize_and_scale_load_profile_input": false, + "year": 2017 }, "Boiler": { "min_mmbtu_per_hour": 5.0, From d74db050a2a6eb41f02ae620873802f82b33d076 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 19:17:28 -0600 Subject: [PATCH 07/14] Add POST request option for /simulated_load to handle new load profile normalization and scaling --- reoptjl/views.py | 154 +++++++++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 64 deletions(-) diff --git a/reoptjl/views.py b/reoptjl/views.py index 2bd5e1651..8d53fc6ec 100644 --- a/reoptjl/views.py +++ b/reoptjl/views.py @@ -487,11 +487,11 @@ def get_ashp_defaults(request): if request.GET.get("load_served") not in [None, "", []]: inputs["load_served"] = request.GET.get("load_served") else: - return JsonResponse({"Error: Missing input load_served in get_ashp_defualts endpoint."}, status=400) + return JsonResponse({"Error: Missing input load_served in get_ashp_defaults endpoint."}, status=400) if request.GET.get("force_into_system") not in [None, "", []]: inputs["force_into_system"] = request.GET.get("force_into_system") else: - return JsonResponse({"Error: Missing input force_into_system in get_ashp_defualts endpoint."}, status=400) + return JsonResponse({"Error: Missing input force_into_system in get_ashp_defaults endpoint."}, status=400) try: julia_host = os.environ.get('JULIA_HOST', "julia") http_jl_response = requests.get("http://" + julia_host + ":8081/get_ashp_defaults/", json=inputs) @@ -516,70 +516,96 @@ def get_ashp_defaults(request): def simulated_load(request): - try: - valid_keys = ["doe_reference_name","latitude","longitude","load_type","percent_share","annual_kwh", - "monthly_totals_kwh","annual_mmbtu","annual_fraction","annual_tonhour","monthly_tonhour", - "monthly_mmbtu","monthly_fraction","max_thermal_factor_on_peak_load","chiller_cop", - "addressable_load_fraction", "cooling_doe_ref_name", "cooling_pct_share", "boiler_efficiency"] - for key in request.GET.keys(): - k = key - if "[" in key: - k = key.split('[')[0] - if k not in valid_keys: - raise ValueError("{} is not a valid input parameter".format(key)) + try: # Build inputs dictionary to send to http.jl /simulated_load endpoint inputs = {} - # Required - will throw a Missing Error if not included - inputs["latitude"] = float(request.GET['latitude']) # need float to convert unicode - inputs["longitude"] = float(request.GET['longitude']) - # Optional load_type - will default to "electric" - inputs["load_type"] = request.GET.get('load_type') - - # This parses the GET request way of sending a list/array for doe_reference_name, - # i.e. doe_reference_name[0], doe_reference_name[1], etc along with percent_share[0], percent_share[1] - if 'doe_reference_name' in request.GET.keys(): - inputs["doe_reference_name"] = str(request.GET.get('doe_reference_name')) - elif 'doe_reference_name[0]' in request.GET.keys(): - idx = 0 - doe_reference_name = [] - percent_share_list = [] - while 'doe_reference_name[{}]'.format(idx) in request.GET.keys(): - doe_reference_name.append(str(request.GET['doe_reference_name[{}]'.format(idx)])) - if 'percent_share[{}]'.format(idx) in request.GET.keys(): - percent_share_list.append(float(request.GET['percent_share[{}]'.format(idx)])) - idx += 1 - inputs["doe_reference_name"] = doe_reference_name - inputs["percent_share"] = percent_share_list - - # When wanting cooling profile based on building type(s) for cooling, need separate cooling building(s) - if 'cooling_doe_ref_name' in request.GET.keys(): - inputs["cooling_doe_ref_name"] = str(request.GET.get('cooling_doe_ref_name')) - elif 'cooling_doe_ref_name[0]' in request.GET.keys(): - idx = 0 - cooling_doe_ref_name = [] - cooling_pct_share_list = [] - while 'cooling_doe_ref_name[{}]'.format(idx) in request.GET.keys(): - cooling_doe_ref_name.append(str(request.GET['cooling_doe_ref_name[{}]'.format(idx)])) - if 'cooling_pct_share[{}]'.format(idx) in request.GET.keys(): - cooling_pct_share_list.append(float(request.GET['cooling_pct_share[{}]'.format(idx)])) - idx += 1 - inputs["cooling_doe_ref_name"] = cooling_doe_ref_name - inputs["cooling_pct_share"] = cooling_pct_share_list - - # Build the rest of inputs for http.jl /simulated_load endpoint - other_keys_types = ["annual", "monthly", "max_thermal_factor", "chiller_cop", "addressable"] - for key in valid_keys: - for key_type in other_keys_types: - if key_type in key: - if (key_type in ["monthly", "addressable"]) and request.GET.get(key + "[0]") is not None: - try: - monthly_list = [float(request.GET.get(key+'[{}]'.format(i))) for i in range(12)] - inputs[key] = monthly_list - except: - return JsonResponse({"Error. Monthly data does not contain 12 valid entries"}) - elif request.GET.get(key) is not None: - inputs[key] = float(request.GET.get(key)) - + + # Required for GET - will throw a Missing Error if not included + if request.method == "GET": + valid_keys = ["doe_reference_name","latitude","longitude","load_type","percent_share","annual_kwh", + "monthly_totals_kwh","annual_mmbtu","annual_fraction","annual_tonhour","monthly_tonhour", + "monthly_mmbtu","monthly_fraction","max_thermal_factor_on_peak_load","chiller_cop", + "addressable_load_fraction", "cooling_doe_ref_name", "cooling_pct_share", "boiler_efficiency", + "normalize_and_scale_load_profile_input", "year"] + for key in request.GET.keys(): + k = key + if "[" in key: + k = key.split('[')[0] + if k not in valid_keys: + raise ValueError("{} is not a valid input parameter".format(key)) + + inputs["latitude"] = float(request.GET['latitude']) # need float to convert unicode + inputs["longitude"] = float(request.GET['longitude']) + # Optional load_type - will default to "electric" + inputs["load_type"] = request.GET.get('load_type') + + # This parses the GET request way of sending a list/array for doe_reference_name, + # i.e. doe_reference_name[0], doe_reference_name[1], etc along with percent_share[0], percent_share[1] + if 'doe_reference_name' in request.GET.keys(): + inputs["doe_reference_name"] = str(request.GET.get('doe_reference_name')) + elif 'doe_reference_name[0]' in request.GET.keys(): + idx = 0 + doe_reference_name = [] + percent_share_list = [] + while 'doe_reference_name[{}]'.format(idx) in request.GET.keys(): + doe_reference_name.append(str(request.GET['doe_reference_name[{}]'.format(idx)])) + if 'percent_share[{}]'.format(idx) in request.GET.keys(): + percent_share_list.append(float(request.GET['percent_share[{}]'.format(idx)])) + idx += 1 + inputs["doe_reference_name"] = doe_reference_name + inputs["percent_share"] = percent_share_list + + # When wanting cooling profile based on building type(s) for cooling, need separate cooling building(s) + if 'cooling_doe_ref_name' in request.GET.keys(): + inputs["cooling_doe_ref_name"] = str(request.GET.get('cooling_doe_ref_name')) + elif 'cooling_doe_ref_name[0]' in request.GET.keys(): + idx = 0 + cooling_doe_ref_name = [] + cooling_pct_share_list = [] + while 'cooling_doe_ref_name[{}]'.format(idx) in request.GET.keys(): + cooling_doe_ref_name.append(str(request.GET['cooling_doe_ref_name[{}]'.format(idx)])) + if 'cooling_pct_share[{}]'.format(idx) in request.GET.keys(): + cooling_pct_share_list.append(float(request.GET['cooling_pct_share[{}]'.format(idx)])) + idx += 1 + inputs["cooling_doe_ref_name"] = cooling_doe_ref_name + inputs["cooling_pct_share"] = cooling_pct_share_list + + # Build the rest of inputs for http.jl /simulated_load endpoint + other_keys_types = ["annual", "monthly", "max_thermal_factor", "chiller_cop", "addressable"] + for key in valid_keys: + for key_type in other_keys_types: + if key_type in key: + if (key_type in ["monthly", "addressable"]) and request.GET.get(key + "[0]") is not None: + try: + monthly_list = [float(request.GET.get(key+'[{}]'.format(i))) for i in range(12)] + inputs[key] = monthly_list + except: + return JsonResponse({"Error. Monthly data does not contain 12 valid entries"}) + elif request.GET.get(key) is not None: + inputs[key] = float(request.GET.get(key)) + + if request.method == "POST": + data = json.loads(request.body) + required_post_fields = ["load_type", "normalize_and_scale_load_profile_input", "load_profile", "year"] + for field in required_post_fields: + # TODO make year optional? + inputs[field] = data[field] + if inputs["load_type"] == "electric": + for energy in ["annual_kwh", "monthly_totals_kwh"]: + if data.get(energy) is not None: + inputs[energy] = data.get(energy) + elif inputs["load_type"] in ["space_heating", "domestic_hot_water", "process_heat"]: + for energy in ["annual_mmbtu", "monthly_mmbtu"]: + if data.get(energy) is not None: + inputs[energy] = data.get(energy) + elif inputs["load_type"] == "cooling": + for energy in ["annual_tonhour", "monthly_tonhour"]: + if data.get(energy) is not None: + inputs[energy] = data.get(energy) + # TODO cooling, not in REopt.jl yet + + # TODO consider changing all requests to POST so that we don't have to do the weird array processing like percent_share[0], [1], etc? + # json.dump(inputs, open("sim_load_post.json", "w")) julia_host = os.environ.get('JULIA_HOST', "julia") http_jl_response = requests.get("http://" + julia_host + ":8081/simulated_load/", json=inputs) response = JsonResponse( From 6dcec34c47547c3c654cd79f268daed5ff54915a Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 19:17:50 -0600 Subject: [PATCH 08/14] Temp change REopt.jl version to #norm-scale-load --- julia_src/Manifest.toml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/julia_src/Manifest.toml b/julia_src/Manifest.toml index feddf4486..064cd9dcf 100644 --- a/julia_src/Manifest.toml +++ b/julia_src/Manifest.toml @@ -917,9 +917,11 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.REopt]] deps = ["ArchGDAL", "CSV", "CoolProp", "DataFrames", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"] -git-tree-sha1 = "32499f329265d270e9f77c8831892772b5fbf28f" +git-tree-sha1 = "2501f745dbe02232bd63603a91f639eaf2fcd668" +repo-rev = "norm-scale-load" +repo-url = "https://github.com/NREL/REopt.jl.git" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" -version = "0.48.0" +version = "0.48.1" [[deps.Random]] deps = ["SHA"] From 4d09775b400f098e1632fac2335eec29593e17f7 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 19:18:12 -0600 Subject: [PATCH 09/14] Update industry to industrial for ProcessHeatLoad input --- reoptjl/test/posts/test_thermal_in_results.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reoptjl/test/posts/test_thermal_in_results.json b/reoptjl/test/posts/test_thermal_in_results.json index 32231c119..b79102fa4 100644 --- a/reoptjl/test/posts/test_thermal_in_results.json +++ b/reoptjl/test/posts/test_thermal_in_results.json @@ -38,7 +38,7 @@ "annual_mmbtu": 500.0 }, "ProcessHeatLoad": { - "industry_reference_name": "FlatLoad", + "industrial_reference_name": "FlatLoad", "annual_mmbtu": 100 }, "ExistingBoiler": { From f6e59102dc020092a592abc1e32bf2764cd3bc6b Mon Sep 17 00:00:00 2001 From: bill-becker Date: Mon, 28 Oct 2024 22:14:45 -0600 Subject: [PATCH 10/14] Fix default for new input to false --- ...e_and_scale_load_profile_input_and_more.py | 33 +++++++++++++++++++ reoptjl/models.py | 10 +++--- 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 reoptjl/migrations/0074_alter_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py diff --git a/reoptjl/migrations/0074_alter_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py b/reoptjl/migrations/0074_alter_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py new file mode 100644 index 000000000..cb82df721 --- /dev/null +++ b/reoptjl/migrations/0074_alter_domestichotwaterloadinputs_normalize_and_scale_load_profile_input_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 4.0.7 on 2024-10-29 04:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reoptjl', '0073_domestichotwaterloadinputs_year_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='domestichotwaterloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=False, help_text='Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.'), + ), + migrations.AlterField( + model_name='electricloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=False, help_text='Takes the input loads_kw and normalizes and scales it to annual or monthly energy inputs.'), + ), + migrations.AlterField( + model_name='processheatloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=False, help_text='Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.'), + ), + migrations.AlterField( + model_name='spaceheatingloadinputs', + name='normalize_and_scale_load_profile_input', + field=models.BooleanField(blank=True, default=False, help_text='Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.'), + ), + ] diff --git a/reoptjl/models.py b/reoptjl/models.py index eff4ee8fb..f29d43060 100644 --- a/reoptjl/models.py +++ b/reoptjl/models.py @@ -1246,7 +1246,7 @@ class ElectricLoadInputs(BaseModel, models.Model): ) normalize_and_scale_load_profile_input = models.BooleanField( blank=True, - default=True, + default=False, help_text=("Takes the input loads_kw and normalizes and scales it to annual or monthly energy inputs.") ) critical_loads_kw = ArrayField( @@ -6903,7 +6903,7 @@ class SpaceHeatingLoadInputs(BaseModel, models.Model): normalize_and_scale_load_profile_input = models.BooleanField( blank=True, - default=True, + default=False, help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) @@ -7083,7 +7083,7 @@ class DomesticHotWaterLoadInputs(BaseModel, models.Model): normalize_and_scale_load_profile_input = models.BooleanField( blank=True, - default=True, + default=False, help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) @@ -7256,10 +7256,10 @@ class ProcessHeatLoadInputs(BaseModel, models.Model): normalize_and_scale_load_profile_input = models.BooleanField( blank=True, - default=True, + default=False, help_text=("Takes the input fuel_loads_mmbtu_per_hour and normalizes and scales it to annual or monthly energy inputs.") ) - + year = models.IntegerField( default=2022, validators=[ From 937d74dfe57db24d1aa358a001d5fa22c6600737 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Tue, 10 Dec 2024 09:03:11 -0700 Subject: [PATCH 11/14] Change /simulated_load for process_heat to industrial instead of doe name --- julia_src/http.jl | 2 +- reoptjl/views.py | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/julia_src/http.jl b/julia_src/http.jl index 833cb5156..90a3df764 100644 --- a/julia_src/http.jl +++ b/julia_src/http.jl @@ -411,7 +411,7 @@ function simulated_load(req::HTTP.Request) d = JSON.parse(String(req.body)) # Arrays in d are being parsed as type Vector{Any} instead of fixed type Vector{String or <:Real} without conversion - for key in ["doe_reference_name", "cooling_doe_ref_name"] + for key in ["doe_reference_name", "cooling_doe_ref_name", "industrial_reference_name"] if key in keys(d) && typeof(d[key]) <: Vector{} d[key] = convert(Vector{String}, d[key]) end diff --git a/reoptjl/views.py b/reoptjl/views.py index 8d53fc6ec..170a9781c 100644 --- a/reoptjl/views.py +++ b/reoptjl/views.py @@ -522,7 +522,7 @@ def simulated_load(request): # Required for GET - will throw a Missing Error if not included if request.method == "GET": - valid_keys = ["doe_reference_name","latitude","longitude","load_type","percent_share","annual_kwh", + valid_keys = ["doe_reference_name","industrial_reference_name","latitude","longitude","load_type","percent_share","annual_kwh", "monthly_totals_kwh","annual_mmbtu","annual_fraction","annual_tonhour","monthly_tonhour", "monthly_mmbtu","monthly_fraction","max_thermal_factor_on_peak_load","chiller_cop", "addressable_load_fraction", "cooling_doe_ref_name", "cooling_pct_share", "boiler_efficiency", @@ -539,20 +539,25 @@ def simulated_load(request): # Optional load_type - will default to "electric" inputs["load_type"] = request.GET.get('load_type') + if inputs["load_type"] == 'process_heat': + expected_reference_name = 'industrial_reference_name' + else: + expected_reference_name = 'doe_reference_name' + # This parses the GET request way of sending a list/array for doe_reference_name, # i.e. doe_reference_name[0], doe_reference_name[1], etc along with percent_share[0], percent_share[1] - if 'doe_reference_name' in request.GET.keys(): - inputs["doe_reference_name"] = str(request.GET.get('doe_reference_name')) - elif 'doe_reference_name[0]' in request.GET.keys(): + if expected_reference_name in request.GET.keys(): + inputs[expected_reference_name] = str(request.GET.get(expected_reference_name)) + elif f'{expected_reference_name}[0]' in request.GET.keys(): idx = 0 doe_reference_name = [] percent_share_list = [] - while 'doe_reference_name[{}]'.format(idx) in request.GET.keys(): - doe_reference_name.append(str(request.GET['doe_reference_name[{}]'.format(idx)])) + while '{}[{}]'.format(expected_reference_name, idx) in request.GET.keys(): + doe_reference_name.append(str(request.GET['{}[{}]'.format(expected_reference_name, idx)])) if 'percent_share[{}]'.format(idx) in request.GET.keys(): percent_share_list.append(float(request.GET['percent_share[{}]'.format(idx)])) idx += 1 - inputs["doe_reference_name"] = doe_reference_name + inputs[expected_reference_name] = doe_reference_name inputs["percent_share"] = percent_share_list # When wanting cooling profile based on building type(s) for cooling, need separate cooling building(s) From eca3cc756999f570f64f71184b826e757494d410 Mon Sep 17 00:00:00 2001 From: bill-becker Date: Tue, 10 Dec 2024 09:03:26 -0700 Subject: [PATCH 12/14] Update REopt.jl #mg-ravens --- julia_src/Manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/julia_src/Manifest.toml b/julia_src/Manifest.toml index 064cd9dcf..4ffdf3ea3 100644 --- a/julia_src/Manifest.toml +++ b/julia_src/Manifest.toml @@ -917,7 +917,7 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.REopt]] deps = ["ArchGDAL", "CSV", "CoolProp", "DataFrames", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"] -git-tree-sha1 = "2501f745dbe02232bd63603a91f639eaf2fcd668" +git-tree-sha1 = "e0ee281349a3e2fa423389a8ebb117745d1e7780" repo-rev = "norm-scale-load" repo-url = "https://github.com/NREL/REopt.jl.git" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" From e4abebab75891e2f487d08edc0ade9baecba873c Mon Sep 17 00:00:00 2001 From: bill-becker Date: Thu, 19 Dec 2024 12:27:45 -0700 Subject: [PATCH 13/14] Update REopt.jl#norm-scale-load after PR updates --- julia_src/Manifest.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/julia_src/Manifest.toml b/julia_src/Manifest.toml index 4ffdf3ea3..dff5ff2a1 100644 --- a/julia_src/Manifest.toml +++ b/julia_src/Manifest.toml @@ -917,11 +917,11 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.REopt]] deps = ["ArchGDAL", "CSV", "CoolProp", "DataFrames", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"] -git-tree-sha1 = "e0ee281349a3e2fa423389a8ebb117745d1e7780" +git-tree-sha1 = "0b1a830431e0b594fe06b041072f4516a7941b92" repo-rev = "norm-scale-load" repo-url = "https://github.com/NREL/REopt.jl.git" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" -version = "0.48.1" +version = "0.48.2" [[deps.Random]] deps = ["SHA"] From 4a992f9c7d7f4b82394b85af6c8f7125abab7fea Mon Sep 17 00:00:00 2001 From: bill-becker Date: Thu, 26 Dec 2024 14:41:27 -0700 Subject: [PATCH 14/14] Update REopt.jl to v0.49.0 --- julia_src/Manifest.toml | 392 ++++++++++++++++++++-------------------- 1 file changed, 198 insertions(+), 194 deletions(-) diff --git a/julia_src/Manifest.toml b/julia_src/Manifest.toml index dff5ff2a1..d86a44712 100644 --- a/julia_src/Manifest.toml +++ b/julia_src/Manifest.toml @@ -15,31 +15,38 @@ deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" -weakdeps = ["ChainRulesCore", "Test"] [deps.AbstractFFTs.extensions] AbstractFFTsChainRulesCoreExt = "ChainRulesCore" AbstractFFTsTestExt = "Test" + [deps.AbstractFFTs.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + [[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown", "Test"] -git-tree-sha1 = "c0d491ef0b135fd7d63cbc6404286bc633329425" +deps = ["CompositionsBase", "ConstructionBase", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown"] +git-tree-sha1 = "96bed9b1b57cf750cca50c311a197e306816a1cc" uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.36" +version = "0.1.39" [deps.Accessors.extensions] AccessorsAxisKeysExt = "AxisKeys" + AccessorsDatesExt = "Dates" AccessorsIntervalSetsExt = "IntervalSets" AccessorsStaticArraysExt = "StaticArrays" AccessorsStructArraysExt = "StructArrays" + AccessorsTestExt = "Test" AccessorsUnitfulExt = "Unitful" [deps.Accessors.weakdeps] AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" Requires = "ae029012-a4dd-5104-9daa-d747884805df" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [[deps.ArchGDAL]] @@ -71,9 +78,9 @@ uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" version = "1.5.0" [[deps.BitFlags]] -git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" +git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.8" +version = "0.1.9" [[deps.Blosc]] deps = ["Blosc_jll"] @@ -83,15 +90,15 @@ version = "0.7.3" [[deps.Blosc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "19b98ee7e3db3b4eff74c5c9c72bf32144e24f10" +git-tree-sha1 = "c5acdf7065862659dd4245494c40c90a66308651" uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" -version = "1.21.5+0" +version = "1.21.6+1" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +git-tree-sha1 = "35abeca13bc0425cff9e59e229d971f5231323bf" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+1" +version = "1.0.8+3" [[deps.CEnum]] git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" @@ -100,9 +107,9 @@ version = "0.4.2" [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] -git-tree-sha1 = "a44910ceb69b0d44fe262dd451ab11ead3ed0be8" +git-tree-sha1 = "deddd8725e5e1cc49ee205a1964256043720a6c3" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.10.13" +version = "0.10.15" [[deps.Cbc]] deps = ["Cbc_jll", "MathOptInterface", "SparseArrays"] @@ -122,16 +129,6 @@ git-tree-sha1 = "3e53a23c0bf96e8c0115777e351a04d5b0f52529" uuid = "3830e938-1dd0-5f3e-8b8e-b3ee43226782" version = "0.6000.600+0" -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "575cd02e080939a33b6df6c5853d14924c08e35b" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.23.0" -weakdeps = ["SparseArrays"] - - [deps.ChainRulesCore.extensions] - ChainRulesCoreSparseArraysExt = "SparseArrays" - [[deps.Clp_jll]] deps = ["Artifacts", "CoinUtils_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "MUMPS_seq_jll", "OpenBLAS32_jll", "Osi_jll", "Pkg"] git-tree-sha1 = "51861cd16c6c4e0018ad401b2afb36e51c7d4bcd" @@ -139,16 +136,16 @@ uuid = "06985876-5285-5a41-9fcb-8948a742cc53" version = "100.1700.700+1" [[deps.CodecBzip2]] -deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] -git-tree-sha1 = "9b1ca1aa6ce3f71b3d1840c538a8210a043625eb" +deps = ["Bzip2_jll", "TranscodingStreams"] +git-tree-sha1 = "84990fa864b7f2b4901901ca12736e45ee79068c" uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" -version = "0.8.2" +version = "0.8.5" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.4" +version = "0.7.6" [[deps.CoinUtils_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Pkg"] @@ -158,9 +155,9 @@ version = "200.1100.600+0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.4" +version = "0.11.5" [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] @@ -170,9 +167,9 @@ version = "0.9.10" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.10" +version = "0.12.11" [[deps.CommonSolve]] git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" @@ -180,16 +177,16 @@ uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" version = "0.2.4" [[deps.CommonSubexpressions]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.0" +version = "0.3.1" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "c955881e3c981181362ae4088b35995446298b80" +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.14.0" +version = "4.16.0" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -211,22 +208,23 @@ weakdeps = ["InverseFunctions"] [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] -git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +git-tree-sha1 = "f36e5e8fdffcb5646ea5da81495a5a7566005127" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.4.1" +version = "2.4.3" [[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "c53fc348ca4d40d7b371e71fd52251839080cbc9" +git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.4" +version = "1.5.8" [deps.ConstructionBase.extensions] ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" ConstructionBaseStaticArraysExt = "StaticArrays" [deps.ConstructionBase.weakdeps] IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.CoolProp]] @@ -252,16 +250,16 @@ uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.16.0" [[deps.DataFrames]] -deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "fb61b4812c49343d7ef0b533ba982c46021938a6" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.6.1" +version = "1.7.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "0f4b5d62a88d8f59003e43c25a8a90de9eb76317" +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.18" +version = "0.18.20" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -315,47 +313,56 @@ version = "1.6.0" [[deps.ExceptionUnwrapping]] deps = ["Test"] -git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" -version = "0.1.10" +version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c" +git-tree-sha1 = "f42a5b1e20e009a43c3646635ed81a9fcaccb287" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.5.0+0" +version = "2.6.4+2" [[deps.Extents]] -git-tree-sha1 = "2140cd04483da90b2da7f99b2add0750504fc39c" +git-tree-sha1 = "81023caa0021a41712685887db1fc03db26f41f5" uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" -version = "0.1.2" +version = "0.1.4" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "c5c28c245101bd59154f649e19b038d15901b5dc" +git-tree-sha1 = "2dd20384bf8c6d411b5c7370865b1e9b26cb2ea3" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.16.2" +version = "1.16.6" +weakdeps = ["HTTP"] + + [deps.FileIO.extensions] + HTTPExt = "HTTP" [[deps.FilePathsBase]] -deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] -git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +deps = ["Compat", "Dates"] +git-tree-sha1 = "7878ff7172a8e6beedd1dea14bd27c3c6340d361" uuid = "48062228-2e41-5def-b9a4-89aafe57970f" -version = "0.9.21" +version = "0.9.22" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FixedPointNumbers]] deps = ["Statistics"] -git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.4" +version = "0.8.5" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +git-tree-sha1 = "a2df1b776752e3f344e5116c06d75a10436ab853" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.36" +version = "0.10.38" [deps.ForwardDiff.extensions] ForwardDiffStaticArraysExt = "StaticArrays" @@ -396,10 +403,10 @@ uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f" version = "0.4.2" [[deps.GeoInterface]] -deps = ["Extents"] -git-tree-sha1 = "d4f85701f569584f2cff7ba67a137d03f0cfb7d0" +deps = ["DataAPI", "Extents", "GeoFormatTypes"] +git-tree-sha1 = "f4ee66b6b1872a4ca53303fbb51d158af1bf88d4" uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" -version = "1.3.3" +version = "1.4.0" [[deps.GeoInterfaceRecipes]] deps = ["GeoInterface", "RecipesBase"] @@ -416,9 +423,9 @@ version = "0.1.0" [[deps.Graphics]] deps = ["Colors", "LinearAlgebra", "NaNMath"] -git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" +git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c" uuid = "a2bd30eb-e257-5431-a919-1863eab51364" -version = "1.1.2" +version = "1.1.3" [[deps.H5Zblosc]] deps = ["Blosc", "HDF5"] @@ -428,9 +435,9 @@ version = "0.1.2" [[deps.HDF5]] deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "Requires", "UUIDs"] -git-tree-sha1 = "26407bd1c60129062cec9da63dc7d08251544d53" +git-tree-sha1 = "e856eef26cf5bf2b0f95f8f4fc37553c72c8641c" uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" -version = "0.17.1" +version = "0.17.2" [deps.HDF5.extensions] MPIExt = "MPI" @@ -464,9 +471,9 @@ version = "1.6.0+1" [[deps.Hwloc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "ca0f6bf568b4bfc807e7537f081c81e35ceca114" +git-tree-sha1 = "290232556f4ffb60ac3e476acf28e1a46e764742" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.10.0+0" +version = "2.11.2+2" [[deps.ImageCore]] deps = ["AbstractFFTs", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Graphics", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "Reexport"] @@ -475,10 +482,17 @@ uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" version = "0.9.4" [[deps.InlineStrings]] -deps = ["Parsers"] -git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +git-tree-sha1 = "45521d31238e87ee9f9732561bfee12d4eebd52d" uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" -version = "1.4.0" +version = "1.4.2" + + [deps.InlineStrings.extensions] + ArrowTypesExt = "ArrowTypes" + ParsersExt = "Parsers" + + [deps.InlineStrings.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" [[deps.InteractiveUtils]] deps = ["Markdown"] @@ -496,21 +510,25 @@ weakdeps = ["Random", "RecipesBase", "Statistics"] IntervalSetsStatisticsExt = "Statistics" [[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" [[deps.InvertedIndices]] -git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" -version = "1.3.0" +version = "1.3.1" [[deps.Ipopt_jll]] -deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "MUMPS_seq_jll", "OpenBLAS32_jll", "libblastrampoline_jll"] -git-tree-sha1 = "0d3939fb672b84082f3ee930b51de03df935be31" +deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "MUMPS_seq_jll", "SPRAL_jll", "libblastrampoline_jll"] +git-tree-sha1 = "4f55ad688c698a4f77d892a1cb673f7e8a30f178" uuid = "9cc047cb-c261-5740-88fc-0cf96f7bdcc7" -version = "300.1400.1200+0" +version = "300.1400.1700+0" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -529,15 +547,15 @@ version = "1.0.0" [[deps.JLD]] deps = ["Compat", "FileIO", "H5Zblosc", "HDF5", "Printf"] -git-tree-sha1 = "9e46670950251e88316a421b3bfa8f1190abe43a" +git-tree-sha1 = "e42f32690d41f758e126a48ee43459ef91179d1f" uuid = "4138dd39-2aa7-5051-a626-17a0bb65d9c8" -version = "0.13.4" +version = "0.13.5" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" +version = "1.7.0" [[deps.JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] @@ -547,9 +565,9 @@ version = "0.21.4" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3336abae9a713d2210bb57ab484b1e065edd7d23" +git-tree-sha1 = "3447a92280ecaad1bd93d3fce3d408b6cfff8913" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.0.2+0" +version = "3.1.0+1" [[deps.JuMP]] deps = ["LinearAlgebra", "MacroTools", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays"] @@ -571,9 +589,9 @@ version = "3.0.0+1" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" -version = "15.0.7+0" +version = "18.1.7+0" [[deps.LRUCache]] git-tree-sha1 = "b3cc6698599b10e652832c2f23db3cab99d51b59" @@ -585,9 +603,9 @@ weakdeps = ["Serialization"] SerializationExt = ["Serialization"] [[deps.LaTeXStrings]] -git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.1" +version = "1.4.0" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -644,9 +662,9 @@ version = "2.12.0+0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "18144f3e9cbe9b15b070288eef858f71b291ce37" +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.27" +version = "0.3.29" [deps.LogExpFunctions.extensions] LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -663,45 +681,45 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.0.3" +version = "1.1.0" [[deps.Lz4_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6c26c5e8a4203d43b5497be3ec5d4e0c3cde240a" +git-tree-sha1 = "dbd00758ab9d8f454b2feadb6071eb50af62c824" uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" -version = "1.9.4+0" +version = "1.10.0+2" [[deps.METIS_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "1fd0a97409e418b78c53fac671cf4622efdf0f21" +git-tree-sha1 = "1c20a46719c0dc4ec4e7021ca38f53e1ec9268d9" uuid = "d00139f3-1899-568f-a2f0-47f597d42d70" -version = "5.1.2+0" +version = "5.1.2+1" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "656036b9ed6f942d35e536e249600bc31d0f9df8" +git-tree-sha1 = "7715e65c47ba3941c502bffb7f266a41a7f54423" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.2.0+0" +version = "4.2.3+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] -git-tree-sha1 = "8f6af051b9e8ec597fa09d8885ed79fd582f33c9" +git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.10" +version = "0.1.11" [[deps.MPItrampoline_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "77c3bd69fdb024d75af38713e883d0f249ce19c2" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "4e6c1eb421039b0d26e0fd483fa87651da0f3f57" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.3.2+0" +version = "5.5.1+1" [[deps.MUMPS_seq_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "OpenBLAS32_jll", "Pkg", "libblastrampoline_jll"] -git-tree-sha1 = "f429d6bbe9ad015a2477077c9e89b978b8c26558" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "libblastrampoline_jll"] +git-tree-sha1 = "0eab12f94948ca67908aec14b9f2ebefd17463fe" uuid = "d7ed1dd3-d0ae-5e8e-bfb4-87a502085b8d" -version = "500.500.101+0" +version = "500.700.301+0" [[deps.MacroTools]] deps = ["Markdown", "Random"] @@ -737,15 +755,15 @@ version = "2.28.2+1" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" +git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.4+2" +version = "10.1.4+3" [[deps.Missings]] deps = ["DataAPI"] -git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.1.0" +version = "1.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" @@ -774,18 +792,18 @@ version = "1.0.2" [[deps.Ncurses_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "bd4eb207e17878ceec404e74130639b6dda8b63b" +git-tree-sha1 = "3690e6c58c16ba676bcc9b5654762fe8a05db1c7" uuid = "68e3532b-a499-55ff-9963-d1c0c0748b3a" -version = "6.4.1+0" +version = "6.5.0+1" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.OffsetArrays]] -git-tree-sha1 = "6a731f2b5c03157418a20c12195eb4b74c8f8621" +git-tree-sha1 = "5e1897147d1ff8d98883cda2be2187dcf57d8f0c" uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.13.0" +version = "1.15.0" [deps.OffsetArrays.extensions] OffsetArraysAdaptExt = "Adapt" @@ -794,10 +812,10 @@ version = "1.13.0" Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" [[deps.OpenBLAS32_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c6c2ed4b7acd2137b878eb96c68e63b76199d0f" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6065c4cff8fee6c6770b277af45d5082baacdba1" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.17+0" +version = "0.3.24+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] @@ -816,33 +834,33 @@ uuid = "05823500-19ac-5b8b-9628-191a04bc5112" version = "0.8.1+2" [[deps.OpenMPI_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "PMIx_jll", "TOML", "Zlib_jll", "libevent_jll", "prrte_jll"] -git-tree-sha1 = "f46caf663e069027a06942d00dced37f1eb3d8ad" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] +git-tree-sha1 = "2dace87e14256edb1dd0724ab7ba831c779b96bd" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.2+0" +version = "5.0.6+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "af81a32750ebc831ee28bdaaba6e1067decef51e" +git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.4.2" +version = "1.4.3" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" +git-tree-sha1 = "f58782a883ecbf9fb48dcd363f9ccd65f36c23a8" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+1" +version = "3.0.15+2" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +git-tree-sha1 = "418e63d434f5ca12b188bbb287dfbe10a5af1da4" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" +version = "0.5.5+1" [[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +git-tree-sha1 = "12f1439c4f986bb868acda6ea33ebc78e19b95ad" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" +version = "1.7.0" [[deps.Osi_jll]] deps = ["Artifacts", "CoinUtils_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Pkg"] @@ -850,12 +868,6 @@ git-tree-sha1 = "4f00d103782fb742e50886924eeea2fe722d3f7a" uuid = "7da25872-d9ce-5375-a4d3-7a845f58efdd" version = "0.10800.700+0" -[[deps.PMIx_jll]] -deps = ["Artifacts", "Hwloc_jll", "JLLWrappers", "Libdl", "Zlib_jll", "libevent_jll"] -git-tree-sha1 = "8b3b19351fa24791f94d7ae85faf845ca1362541" -uuid = "32165bc3-0280-59bc-8c0b-c33b6203efab" -version = "4.2.7+0" - [[deps.PROJ_jll]] deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "Libtiff_jll", "Pkg", "SQLite_jll"] git-tree-sha1 = "fcb3f39ae1184a056ecc415863d46d2109aa6947" @@ -899,9 +911,9 @@ version = "1.4.3" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "88b895d13d53b5577fd53379d913b9ab9ac82660" +git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.3.1" +version = "2.4.0" [[deps.Printf]] deps = ["Unicode"] @@ -917,11 +929,9 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.REopt]] deps = ["ArchGDAL", "CSV", "CoolProp", "DataFrames", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"] -git-tree-sha1 = "0b1a830431e0b594fe06b041072f4516a7941b92" -repo-rev = "norm-scale-load" -repo-url = "https://github.com/NREL/REopt.jl.git" +git-tree-sha1 = "46f6e38a47aaa93bfe5a6548d1e1ab9365f3415a" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" -version = "0.48.2" +version = "0.49.0" [[deps.Random]] deps = ["SHA"] @@ -934,9 +944,9 @@ version = "0.3.2" [[deps.Readline_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ncurses_jll"] -git-tree-sha1 = "9d70e0c890a6c7ca3eb1ca0eaabba4d34795b7fb" +git-tree-sha1 = "69684dc9c2c69f7c515097841991362cca0739ea" uuid = "05236dd9-4125-5232-aa7c-9ec0c9b2c25a" -version = "8.2.1+0" +version = "8.2.1+1" [[deps.RecipesBase]] deps = ["PrecompileTools"] @@ -956,18 +966,20 @@ uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" [[deps.Roots]] -deps = ["Accessors", "ChainRulesCore", "CommonSolve", "Printf"] -git-tree-sha1 = "6f6481a44ca53367383f15415dc27ab0c7422731" +deps = ["Accessors", "CommonSolve", "Printf"] +git-tree-sha1 = "8e3694d669323cdfb560e344dc872b984de23b71" uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.1.4" +version = "2.2.2" [deps.Roots.extensions] + RootsChainRulesCoreExt = "ChainRulesCore" RootsForwardDiffExt = "ForwardDiff" RootsIntervalRootFindingExt = "IntervalRootFinding" RootsSymPyExt = "SymPy" RootsSymPyPythonCallExt = "SymPyPythonCall" [deps.Roots.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" @@ -995,25 +1007,31 @@ version = "0.2.1+0" uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" +[[deps.SPRAL_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "Libdl", "METIS_jll", "libblastrampoline_jll"] +git-tree-sha1 = "11f3da4b25efacd1cec8e263421f2a9003a5e8e0" +uuid = "319450e9-13b8-58e8-aa9f-8fd1420848ab" +version = "2024.5.8+0" + [[deps.SQLite_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "75e28667a36b5650b5cc4baa266c5760c3672275" +git-tree-sha1 = "7b5b0b963000117848dfe9199bbe4f528e37c5fd" uuid = "76ed43ae-9a5d-5a62-8c75-30186b810ce8" -version = "3.45.0+0" +version = "3.47.2+1" [[deps.SentinelArrays]] deps = ["Dates", "Random"] -git-tree-sha1 = "0e7508ff27ba32f26cd459474ca2ede1bc10991f" +git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.1" +version = "1.4.8" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[deps.SimpleBufferStream]] -git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" -version = "1.1.0" +version = "1.2.0" [[deps.SnoopPrecompile]] deps = ["Preferences"] @@ -1037,14 +1055,16 @@ version = "1.10.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" +git-tree-sha1 = "64cca0c26b4f31ba18f13f6c12af7c85f478cfde" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.3.1" -weakdeps = ["ChainRulesCore"] +version = "2.5.0" [deps.SpecialFunctions.extensions] SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + [[deps.StackViews]] deps = ["OffsetArrays"] git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" @@ -1052,9 +1072,9 @@ uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" version = "0.1.1" [[deps.StaticArraysCore]] -git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.2" +version = "1.4.3" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] @@ -1063,9 +1083,9 @@ version = "1.10.0" [[deps.StringManipulation]] deps = ["PrecompileTools"] -git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +git-tree-sha1 = "a6b1675a536c5ad1a60e5a5153e1fee12eb146e3" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.3.4" +version = "0.4.0" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] @@ -1084,10 +1104,10 @@ uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" [[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] -git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "598cd7c1f68d1e205689b1c2fe65a9f85846f297" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.11.1" +version = "1.12.0" [[deps.Tar]] deps = ["ArgTools", "SHA"] @@ -1106,18 +1126,14 @@ uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.TestEnv]] deps = ["Pkg"] -git-tree-sha1 = "c35f69c951ac4f74b8b074f62dfb1e169b351497" +git-tree-sha1 = "2a57e05cb9854e7260c354f1bcdbe5190adba19f" uuid = "1e6cf692-eddd-4d53-88a5-2d735e33781b" -version = "1.101.1" +version = "1.102.0" [[deps.TranscodingStreams]] -git-tree-sha1 = "3caa21522e7efac1ba21834a03734c57b4611c7e" +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.4" -weakdeps = ["Random", "Test"] - - [deps.TranscodingStreams.extensions] - TestExt = ["Test", "Random"] +version = "0.11.3" [[deps.URIs]] git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" @@ -1133,9 +1149,9 @@ uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "3c793be6df9dd77a0cf49d80984ef9ff996948fa" +git-tree-sha1 = "01915bfcd62be15329c9a07235447a89d588327c" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.19.0" +version = "1.21.1" weakdeps = ["ConstructionBase", "InverseFunctions"] [deps.Unitful.extensions] @@ -1166,9 +1182,9 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" +git-tree-sha1 = "7dc5adc3f9bfb9b091b7952f4f6048b7e37acafc" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.5+0" +version = "1.5.6+2" [[deps.bliss_jll]] deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1184,21 +1200,15 @@ version = "1.76.0+1" [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "46bf7be2917b59b761247be3f317ddf75e50e997" +git-tree-sha1 = "648c439c8643710976b4c8b30dccbbe6439fb4db" uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.2+0" +version = "1.1.2+1" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" version = "5.8.0+1" -[[deps.libevent_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenSSL_jll"] -git-tree-sha1 = "f04ec6d9a186115fb38f858f05c0c4e1b7fc9dcb" -uuid = "1080aeaf-3a6a-583e-a51c-c537b09f60ec" -version = "2.1.13+1" - [[deps.libgeotiff_jll]] deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "Libtiff_jll", "PROJ_jll", "Pkg"] git-tree-sha1 = "13dfba87a1fe301c4b40f991d0ec990bbee59bbe" @@ -1207,9 +1217,9 @@ version = "100.700.100+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +git-tree-sha1 = "9c42636e3205e555e5785e902387be0061e7efc1" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.43+1" +version = "1.6.44+1" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] @@ -1218,17 +1228,11 @@ version = "1.52.0+1" [[deps.oneTBB_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f1dd5788210dae437db10a24ea0c660cf70d6412" +git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493" uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2021.9.0+0" +version = "2021.12.0+0" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.4.0+2" - -[[deps.prrte_jll]] -deps = ["Artifacts", "Hwloc_jll", "JLLWrappers", "Libdl", "PMIx_jll", "libevent_jll"] -git-tree-sha1 = "5adb2d7a18a30280feb66cad6f1a1dfdca2dc7b0" -uuid = "eb928a42-fffd-568d-ab9c-3f5d54fc65b9" -version = "3.0.2+0"