ecoengine 3.1.1__tar.gz → 3.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ecoengine-3.1.1 → ecoengine-3.1.2}/PKG-INFO +1 -1
- {ecoengine-3.1.1 → ecoengine-3.1.2}/pyproject.toml +1 -1
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/interfaces/EcosizerEngine.py +53 -5
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/MP_RTPInSeriesSystem.py +2 -2
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/SP_RTPInParallelSystem.py +1 -1
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/SP_RTPInSeriesSystem.py +2 -2
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/utils.py +10 -6
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/simulation/SimulationRun.py +1 -1
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine.egg-info/PKG-INFO +1 -1
- {ecoengine-3.1.1 → ecoengine-3.1.2}/README.md +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/setup.cfg +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/constants/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/constants/constants.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/DryBulbTemperatures_ByClimateZone.csv +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/InletWaterTemperatures_ByClimateZone.csv +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/WeatherStation_ClimateZone_Lookup.csv +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/ZipCode_ClimateZone_Lookup.csv +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/kGperkWh_ByClimateZone.csv +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/apartment.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/elementary_school.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/food_service_a.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/food_service_b.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/junior_high.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/mens_dorm.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/motel.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/multi_family.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/nursing_home.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/office_building.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/senior_high.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/load_shapes/womens_dorm.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/maps.json +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/GenericHPWH3_SP_bounds.pkl +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/GenericHPWH3_SP_capacity_interpolator.pkl +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/GenericHPWH3_SP_power_in_interpolator.pkl +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/GenericHPWH4_MP_bounds.pkl +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/GenericHPWH4_MP_capacity_interpolator.pkl +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/GenericHPWH4_MP_power_in_interpolator.pkl +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/preformanceMaps/pkls/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/interfaces/Simulator.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/interfaces/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/building/Building.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/building/ClimateZone.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/building/UtilityCostTracker.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/building/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/heating/Controls.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/heating/PerformanceMap.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/heating/WaterHeater.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/heating/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/EnergyTank.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/MixedStorageTank.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/SlugOverlayTank.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/StorageTank.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/StratifiedTank.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/DHWSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/InstantWHSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/MPNoRecircSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/ParallelLoopSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/RecircSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/SwingDualFuelSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/SwingERTrdOffSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/SwingSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/MultiPassRTPSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/RTPSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/SinglePassRTPSystem.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/simulation/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/__init__.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_buildings.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_dhw_system.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_ecosizer_engine_dual_fuel.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_mixing_valve.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_performance_map.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_sp_rtp_in_series.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_sprtp_simulation.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_storage_tanks.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/tests/test_utility_cost_tracker.py +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine.egg-info/SOURCES.txt +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine.egg-info/dependency_links.txt +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine.egg-info/requires.txt +0 -0
- {ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine.egg-info/top_level.txt +0 -0
|
@@ -1351,7 +1351,7 @@ class EcosizerEngine:
|
|
|
1351
1351
|
|
|
1352
1352
|
if self.schematic in ["primary_no_recirc", "singlepass_norecirc"]:
|
|
1353
1353
|
from ecoengine.objects.dhwsystems.DHWSystem import DHWSystem
|
|
1354
|
-
|
|
1354
|
+
system = DHWSystem(
|
|
1355
1355
|
water_heaters=water_heaters,
|
|
1356
1356
|
storage_tank=_primary_tank(),
|
|
1357
1357
|
supply_temp_f=self.supply_temp_f,
|
|
@@ -1359,6 +1359,9 @@ class EcosizerEngine:
|
|
|
1359
1359
|
max_daily_run_hr=self.max_daily_run_hr,
|
|
1360
1360
|
defrost_factor=self.defrost_factor,
|
|
1361
1361
|
)
|
|
1362
|
+
system._minimum_capacity_kbtuh = self.heating_capacity_kbtuh
|
|
1363
|
+
system._minimum_storage_storageT_gal = self.storage_volume_storageT_gal
|
|
1364
|
+
return system
|
|
1362
1365
|
|
|
1363
1366
|
if self.schematic in ["parallel_loop", "paralleltank"]:
|
|
1364
1367
|
from ecoengine.objects.dhwsystems.recirc_systems.ParallelLoopSystem import ParallelLoopSystem
|
|
@@ -1373,7 +1376,7 @@ class EcosizerEngine:
|
|
|
1373
1376
|
off_trigger_t_f=self.tm_off_temp_f,
|
|
1374
1377
|
outlet_temp_f=self.tm_off_temp_f,
|
|
1375
1378
|
)
|
|
1376
|
-
|
|
1379
|
+
system = ParallelLoopSystem(
|
|
1377
1380
|
water_heaters=water_heaters,
|
|
1378
1381
|
storage_tank=_primary_tank(),
|
|
1379
1382
|
supply_temp_f=self.supply_temp_f,
|
|
@@ -1390,6 +1393,11 @@ class EcosizerEngine:
|
|
|
1390
1393
|
max_daily_run_hr=self.max_daily_run_hr,
|
|
1391
1394
|
defrost_factor=self.defrost_factor,
|
|
1392
1395
|
)
|
|
1396
|
+
system._minimum_capacity_kbtuh = self.heating_capacity_kbtuh
|
|
1397
|
+
system._minimum_storage_storageT_gal = self.storage_volume_storageT_gal
|
|
1398
|
+
system._minimum_tm_volume_gal = self.tm_storage_vol
|
|
1399
|
+
system._minimum_tm_capacity_kbtuh = self.tm_capacity_kbtuh
|
|
1400
|
+
return system
|
|
1393
1401
|
|
|
1394
1402
|
if self.schematic in ["swing_tank", "swingtank"]:
|
|
1395
1403
|
from ecoengine.objects.dhwsystems.recirc_systems.SwingSystem import SwingSystem, _ELEMENT_DEADBAND_F
|
|
@@ -1415,6 +1423,10 @@ class EcosizerEngine:
|
|
|
1415
1423
|
max_daily_run_hr=self.max_daily_run_hr,
|
|
1416
1424
|
defrost_factor=self.defrost_factor,
|
|
1417
1425
|
)
|
|
1426
|
+
system._minimum_capacity_kbtuh = self.heating_capacity_kbtuh
|
|
1427
|
+
system._minimum_storage_storageT_gal = self.storage_volume_storageT_gal
|
|
1428
|
+
system._minimum_tm_volume_gal = self.tm_storage_vol
|
|
1429
|
+
system._minimum_tm_capacity_kbtuh = self.tm_capacity_kbtuh
|
|
1418
1430
|
system.tm_storage_tank = MixedStorageTank(total_volume_gal=self.tm_storage_vol)
|
|
1419
1431
|
system.tm_water_heater = self._build_tm_water_heater(tm_controls, force_electric_resistance = True)
|
|
1420
1432
|
return system
|
|
@@ -1426,7 +1438,7 @@ class EcosizerEngine:
|
|
|
1426
1438
|
from ecoengine.objects.components.storage.EnergyTank import EnergyTank
|
|
1427
1439
|
self._require_recirc_params()
|
|
1428
1440
|
cold_temp_f = self._building.get_design_inlet_water_temp_f() or 50.0
|
|
1429
|
-
|
|
1441
|
+
system = SinglePassRTPSystem(
|
|
1430
1442
|
water_heaters=water_heaters,
|
|
1431
1443
|
storage_tank=EnergyTank(
|
|
1432
1444
|
total_volume_gal=self.storage_volume_storageT_gal,
|
|
@@ -1442,6 +1454,9 @@ class EcosizerEngine:
|
|
|
1442
1454
|
defrost_factor=self.defrost_factor,
|
|
1443
1455
|
tm_safety_factor=self.tm_safety_factor,
|
|
1444
1456
|
)
|
|
1457
|
+
system._minimum_capacity_kbtuh = self.heating_capacity_kbtuh
|
|
1458
|
+
system._minimum_storage_storageT_gal = self.storage_volume_storageT_gal
|
|
1459
|
+
return system
|
|
1445
1460
|
|
|
1446
1461
|
if self.schematic in ["multi_pass_rtp", "mprtp"]:
|
|
1447
1462
|
from ecoengine.objects.dhwsystems.rtp_systems.MultiPassRTPSystem import (
|
|
@@ -1450,7 +1465,7 @@ class EcosizerEngine:
|
|
|
1450
1465
|
from ecoengine.objects.components.storage.SlugOverlayTank import SlugOverlayTank
|
|
1451
1466
|
self._require_recirc_params()
|
|
1452
1467
|
cold_temp_f = self._building.get_design_inlet_water_temp_f() or 50.0
|
|
1453
|
-
|
|
1468
|
+
system = MultiPassRTPSystem(
|
|
1454
1469
|
water_heaters=water_heaters,
|
|
1455
1470
|
storage_tank=SlugOverlayTank(
|
|
1456
1471
|
total_volume_gal=self.storage_volume_storageT_gal,
|
|
@@ -1468,6 +1483,9 @@ class EcosizerEngine:
|
|
|
1468
1483
|
defrost_factor=self.defrost_factor,
|
|
1469
1484
|
tm_safety_factor=self.tm_safety_factor,
|
|
1470
1485
|
)
|
|
1486
|
+
system._minimum_capacity_kbtuh = self.heating_capacity_kbtuh
|
|
1487
|
+
system._minimum_storage_storageT_gal = self.storage_volume_storageT_gal
|
|
1488
|
+
return system
|
|
1471
1489
|
|
|
1472
1490
|
if self.schematic == "instant_wh":
|
|
1473
1491
|
from ecoengine.objects.dhwsystems.InstantWHSystem import InstantWHSystem
|
|
@@ -1636,6 +1654,8 @@ class EcosizerEngine:
|
|
|
1636
1654
|
)
|
|
1637
1655
|
system._minimum_capacity_kbtuh = self.heating_capacity_kbtuh
|
|
1638
1656
|
system._minimum_storage_storageT_gal = self.storage_volume_storageT_gal
|
|
1657
|
+
system._minimum_tm_volume_gal = self.tm_storage_vol
|
|
1658
|
+
system._minimum_tm_capacity_kbtuh = self.tm_capacity_kbtuh
|
|
1639
1659
|
system.tm_storage_tank = MixedStorageTank(total_volume_gal=self.tm_storage_vol)
|
|
1640
1660
|
system.tm_water_heater = self._build_tm_water_heater(tm_controls, force_electric_resistance=True)
|
|
1641
1661
|
return system
|
|
@@ -1808,6 +1828,7 @@ class EcosizerEngine:
|
|
|
1808
1828
|
strat_slope: float = 2.8,
|
|
1809
1829
|
return_as_div: bool = False,
|
|
1810
1830
|
return_with_x_y_points: bool = False,
|
|
1831
|
+
highlight_x_value: float | None = None,
|
|
1811
1832
|
):
|
|
1812
1833
|
"""
|
|
1813
1834
|
Return a Plotly figure of the sizing curve for the built system.
|
|
@@ -1852,6 +1873,15 @@ class EcosizerEngine:
|
|
|
1852
1873
|
instead of just the figure/div, where ``x_values`` and ``y_values``
|
|
1853
1874
|
are the plot coordinates and ``start_index`` is the recommended
|
|
1854
1875
|
slider position. Default False.
|
|
1876
|
+
highlight_x_value : float, optional
|
|
1877
|
+
If provided, highlight the curve point whose x-value is closest
|
|
1878
|
+
to this value instead of the engine's own recommended point.
|
|
1879
|
+
Units match the returned ``x_values`` for the curve type being
|
|
1880
|
+
plotted (storage gallons for normal and dual-fuel curves,
|
|
1881
|
+
percent for load-shift curves). Useful for re-rendering a curve
|
|
1882
|
+
for a point the caller already chose (e.g. from an earlier,
|
|
1883
|
+
interactive rendering of the same curve). Default None (use the
|
|
1884
|
+
engine's recommended point).
|
|
1855
1885
|
|
|
1856
1886
|
Returns
|
|
1857
1887
|
-------
|
|
@@ -1886,9 +1916,15 @@ class EcosizerEngine:
|
|
|
1886
1916
|
curve = self._dhw_system.get_sizing_curve(self._building, strat_slope=strat_slope)
|
|
1887
1917
|
if curve is None:
|
|
1888
1918
|
raise NotImplementedError(
|
|
1889
|
-
f"
|
|
1919
|
+
f"Supplementary sizing curve is not yet implemented for schematic "
|
|
1890
1920
|
f"{self.schematic!r} ({type(self._dhw_system).__name__})."
|
|
1891
1921
|
)
|
|
1922
|
+
if highlight_x_value is not None:
|
|
1923
|
+
curve = dict(curve)
|
|
1924
|
+
curve["recommended_index"] = min(
|
|
1925
|
+
range(len(curve["storages_gal"])),
|
|
1926
|
+
key=lambda i: abs(curve["storages_gal"][i] - highlight_x_value),
|
|
1927
|
+
)
|
|
1892
1928
|
x_vals = curve["storages_gal"]
|
|
1893
1929
|
y_vals = curve["capacities_kbtuh"]
|
|
1894
1930
|
start_index = curve["recommended_index"]
|
|
@@ -1903,12 +1939,24 @@ class EcosizerEngine:
|
|
|
1903
1939
|
strat_slope = strat_slope,
|
|
1904
1940
|
load_shift_percent = self.load_shift_percent,
|
|
1905
1941
|
)
|
|
1942
|
+
if highlight_x_value is not None:
|
|
1943
|
+
curve = dict(curve)
|
|
1944
|
+
curve["recommended_index"] = min(
|
|
1945
|
+
range(len(curve["load_shift_percent"])),
|
|
1946
|
+
key=lambda i: abs(curve["load_shift_percent"][i] * 100.0 - highlight_x_value),
|
|
1947
|
+
)
|
|
1906
1948
|
x_vals = [p * 100.0 for p in curve["load_shift_percent"]]
|
|
1907
1949
|
y_vals = curve["storage_storageT_gal"]
|
|
1908
1950
|
start_index = curve["recommended_index"]
|
|
1909
1951
|
fig = self._dhw_system._build_sizing_curve_figure(curve, is_ls, title, filepath)
|
|
1910
1952
|
else:
|
|
1911
1953
|
curve = self._dhw_system.get_sizing_curve(self._building, strat_slope=strat_slope)
|
|
1954
|
+
if highlight_x_value is not None:
|
|
1955
|
+
curve = dict(curve)
|
|
1956
|
+
curve["recommended_index"] = min(
|
|
1957
|
+
range(len(curve["storage_storageT_gal"])),
|
|
1958
|
+
key=lambda i: abs(curve["storage_storageT_gal"][i] - highlight_x_value),
|
|
1959
|
+
)
|
|
1912
1960
|
x_vals = curve["storage_storageT_gal"][::-1]
|
|
1913
1961
|
y_vals = curve["capacity_kbtuh"][::-1]
|
|
1914
1962
|
start_index = len(x_vals) - 1 - curve["recommended_index"]
|
|
@@ -251,14 +251,14 @@ class MP_RTPInSeriesSystem(MultiPassRTPSystem):
|
|
|
251
251
|
"""
|
|
252
252
|
if not getattr(self, "outage_volume_gal", None):
|
|
253
253
|
raise RuntimeError(
|
|
254
|
-
"
|
|
254
|
+
"In Series outage data is not available. Call from_size() first."
|
|
255
255
|
)
|
|
256
256
|
return get_ashrae_sizing_curve(self.outage_volume_gal, self.outage_temp_delta_f)
|
|
257
257
|
|
|
258
258
|
def plot_sizing_curve(
|
|
259
259
|
self,
|
|
260
260
|
building: Building,
|
|
261
|
-
title: str = "
|
|
261
|
+
title: str = "In Series Sizing Curve — MP RTP In-Series",
|
|
262
262
|
) -> "plotly.graph_objects.Figure":
|
|
263
263
|
"""
|
|
264
264
|
Return a Plotly sizing-curve figure for the gas backup system.
|
|
@@ -356,7 +356,7 @@ class SP_RTPInParallelSystem(SinglePassRTPSystem):
|
|
|
356
356
|
def plot_sizing_curve(
|
|
357
357
|
self,
|
|
358
358
|
building: Building,
|
|
359
|
-
title: str = "
|
|
359
|
+
title: str = "Parallel Heating Sizing Curve — SP RTP In-Parallel",
|
|
360
360
|
) -> "plotly.graph_objects.Figure":
|
|
361
361
|
"""
|
|
362
362
|
TODO: revisit. See ``get_sizing_curve``.
|
|
@@ -254,14 +254,14 @@ class SP_RTPInSeriesSystem(SinglePassRTPSystem):
|
|
|
254
254
|
"""
|
|
255
255
|
if not getattr(self, "outage_volume_gal", None):
|
|
256
256
|
raise RuntimeError(
|
|
257
|
-
"
|
|
257
|
+
"In series outage data is not available. Call from_size() first."
|
|
258
258
|
)
|
|
259
259
|
return get_ashrae_sizing_curve(self.outage_volume_gal, self.outage_temp_delta_f)
|
|
260
260
|
|
|
261
261
|
def plot_sizing_curve(
|
|
262
262
|
self,
|
|
263
263
|
building: Building,
|
|
264
|
-
title: str = "
|
|
264
|
+
title: str = "In Series Sizing Curve — SP RTP In-Series",
|
|
265
265
|
) -> "plotly.graph_objects.Figure":
|
|
266
266
|
"""
|
|
267
267
|
Return a Plotly sizing-curve figure for the gas backup system.
|
|
@@ -324,7 +324,7 @@ def size_supplemental_heating_and_storage(
|
|
|
324
324
|
best_outage_temp_delta_f = run_temp_delta_f
|
|
325
325
|
|
|
326
326
|
building.avg_load_shape = _original_avg_load_shape
|
|
327
|
-
|
|
327
|
+
|
|
328
328
|
total_outage_min = sum(1 for v in best_outage_volume_gal if v > 0.0)
|
|
329
329
|
if total_outage_min <= _MIN_OUTAGE_MIN and best_max_delta <= _MIN_DEFICIT_F:
|
|
330
330
|
raise ValueError(
|
|
@@ -459,7 +459,7 @@ def get_ashrae_sizing_curve(
|
|
|
459
459
|
|
|
460
460
|
def plot_ashrae_sizing_curve(
|
|
461
461
|
curve: dict,
|
|
462
|
-
title: str = "
|
|
462
|
+
title: str = "Supplementary Sizing Curve",
|
|
463
463
|
) -> "plotly.graph_objects.Figure":
|
|
464
464
|
"""
|
|
465
465
|
Build a Plotly sizing-curve figure from the dict returned by
|
|
@@ -500,8 +500,8 @@ def plot_ashrae_sizing_curve(
|
|
|
500
500
|
|
|
501
501
|
hover = (
|
|
502
502
|
"Window: <b>%{customdata} min</b><br>"
|
|
503
|
-
"
|
|
504
|
-
"
|
|
503
|
+
"Supplementary storage: <b>%{x:.1f} gal</b><br>"
|
|
504
|
+
"Supplementary capacity: <b>%{y:.1f} kBTU/hr</b>"
|
|
505
505
|
"<extra></extra>"
|
|
506
506
|
)
|
|
507
507
|
|
|
@@ -540,10 +540,14 @@ def plot_ashrae_sizing_curve(
|
|
|
540
540
|
args=[{"visible": visibility}],
|
|
541
541
|
))
|
|
542
542
|
|
|
543
|
+
axis_label_type="Supplementary"
|
|
544
|
+
if "Swing Tank" in title:
|
|
545
|
+
axis_label_type="Swing Tank"
|
|
546
|
+
|
|
543
547
|
fig.update_layout(
|
|
544
548
|
title=title,
|
|
545
|
-
xaxis_title="
|
|
546
|
-
yaxis_title="
|
|
549
|
+
xaxis_title=f"{axis_label_type} Storage Volume (gal)",
|
|
550
|
+
yaxis_title=f"{axis_label_type} Heating Capacity (kBTU/hr)",
|
|
547
551
|
showlegend=False,
|
|
548
552
|
sliders=[dict(
|
|
549
553
|
steps=steps,
|
|
@@ -478,7 +478,7 @@ class SimulationRun:
|
|
|
478
478
|
]
|
|
479
479
|
fig.add_trace(
|
|
480
480
|
go.Scatter(x=gas_time, y=gas_gph,
|
|
481
|
-
name="
|
|
481
|
+
name="Suppl. Heater Generation (gal/hr at Supply Temperature)",
|
|
482
482
|
line=dict(color="darkorange", width=1)),
|
|
483
483
|
secondary_y=False,
|
|
484
484
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/ZipCode_ClimateZone_Lookup.csv
RENAMED
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/data/climate_data/kGperkWh_ByClimateZone.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/heating/PerformanceMap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/MixedStorageTank.py
RENAMED
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/SlugOverlayTank.py
RENAMED
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/components/storage/StratifiedTank.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/RecircSystem.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/SwingSystem.py
RENAMED
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/recirc_systems/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/RTPSystem.py
RENAMED
|
File without changes
|
|
File without changes
|
{ecoengine-3.1.1 → ecoengine-3.1.2}/src/ecoengine/objects/dhwsystems/rtp_systems/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|