diff --git a/CHANGELOG.md b/CHANGELOG.md index 02fd96a46..a388481b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,11 @@ Classify the change according to the following categories: ##### Removed ### Patches +## add-pvdensity +### Minor Updates +### Added +- Add inputs: **PV.acres_per_kw** and **PV.kw_per_square_footw** + ## v3.12.0 ### Major Updates ### Added diff --git a/reoptjl/migrations/0081_pvinputs_acres_per_kw_pvinputs_kw_per_square_foot.py b/reoptjl/migrations/0081_pvinputs_acres_per_kw_pvinputs_kw_per_square_foot.py new file mode 100644 index 000000000..a3069968c --- /dev/null +++ b/reoptjl/migrations/0081_pvinputs_acres_per_kw_pvinputs_kw_per_square_foot.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.7 on 2025-03-04 16:40 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('reoptjl', '0080_electricloadoutputs_annual_electric_load_with_thermal_conversions_kwh_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='pvinputs', + name='acres_per_kw', + field=models.FloatField(blank=True, default=0.006, help_text='The acres per kW-DC for ground-mount PV systems in acres per kW, accounting for setbacks, row spacing, etc. The recommended PV system size is constrained based on the sum of land area available, assuming the ground-mount power density specified here, and roofspace available, assuming the specified rooftop power density.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10)]), + ), + migrations.AddField( + model_name='pvinputs', + name='kw_per_square_foot', + field=models.FloatField(blank=True, default=0.01, help_text='The installed power density for rooftop PV systems in kW per square foot, accounting for setbacks, row spacing, etc. The recommended PV system size is constrained based on the sum of land area available, assuming the specified ground-mount power density, and roofspace available, assuming the rooftop power density specified here.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10)]), + ), + ] diff --git a/reoptjl/models.py b/reoptjl/models.py index 47d088f7a..ae16bab83 100644 --- a/reoptjl/models.py +++ b/reoptjl/models.py @@ -2895,6 +2895,26 @@ class PV_LOCATION_CHOICES(models.TextChoices): blank=True, help_text="Where PV can be deployed. One of [roof, ground, both] with default as both." ) + kw_per_square_foot = models.FloatField( + default=0.01, + validators=[ + MinValueValidator(0), + MaxValueValidator(10) + ], + blank=True, + help_text=("The installed power density for rooftop PV systems in kW per square foot, accounting for setbacks, row spacing, etc. The recommended PV system size is constrained " + "based on the sum of land area available, assuming the specified ground-mount power density, and roofspace available, assuming the rooftop power density specified here.") + ) + acres_per_kw = models.FloatField( + default=0.006, + validators=[ + MinValueValidator(0), + MaxValueValidator(10) + ], + blank=True, + help_text=("The acres per kW-DC for ground-mount PV systems in acres per kW, accounting for setbacks, row spacing, etc. The recommended PV system size is constrained " + "based on the sum of land area available, assuming the ground-mount power density specified here, and roofspace available, assuming the specified rooftop power density.") + ) production_factor_series = ArrayField( models.FloatField( blank=True