From 550c9b462e92755dd265f8934475dc222c2b9dd3 Mon Sep 17 00:00:00 2001
From: GillisHommen <98752265+GillisHommen@users.noreply.github.com>
Date: Thu, 7 Aug 2025 17:00:55 +0200
Subject: [PATCH] Added I_HeatingAsset interface to clearly 'label' heating
assets, helps simplify connectToJ_EA
---
Zero_engine.alpx | 5 +++
.../Agents/GridConnection/Code/Functions.java | 45 ++++---------------
_alp/Classes/Class.I_HeatingAsset.java | 4 ++
.../Class.J_EAConversionElectricHeater.java | 2 +-
.../Class.J_EAConversionGasBurner.java | 2 +-
_alp/Classes/Class.J_EAConversionGasCHP.java | 2 +-
.../Class.J_EAConversionHeatDeliverySet.java | 2 +-
.../Classes/Class.J_EAConversionHeatPump.java | 2 +-
.../Class.J_EAConversionHydrogenBurner.java | 2 +-
_alp/Classes/Class.J_EAEV.java | 2 +-
...Class.J_HeatingManagementNeighborhood.java | 2 +-
11 files changed, 26 insertions(+), 44 deletions(-)
create mode 100644 _alp/Classes/Class.I_HeatingAsset.java
diff --git a/Zero_engine.alpx b/Zero_engine.alpx
index 1b452e7b..225734ef 100644
--- a/Zero_engine.alpx
+++ b/Zero_engine.alpx
@@ -1881,6 +1881,11 @@
1753194088788
+
+ 1754578019724
+
+ 1752677832758
+
com.anylogic.libraries.modules.markup_descriptors
diff --git a/_alp/Agents/GridConnection/Code/Functions.java b/_alp/Agents/GridConnection/Code/Functions.java
index 2f2b1eb8..c0f3ff2a 100644
--- a/_alp/Agents/GridConnection/Code/Functions.java
+++ b/_alp/Agents/GridConnection/Code/Functions.java
@@ -562,6 +562,13 @@ else if (p_primaryHeatingAsset== null && p_secondaryHeatingAsset != null && v_ha
energyModel.c_energyAssets.add(j_ea);
c_energyAssets.add(j_ea);
+if (j_ea instanceof I_HeatingAsset) {
+ c_heatingAssets.add((J_EAConversion)j_ea);
+ if (p_heatingManagement != null) {
+ p_heatingManagement.notInitialized();
+ }
+}
+
if (j_ea instanceof J_EAVehicle) {
J_EAVehicle vehicle = (J_EAVehicle)j_ea;
if (vehicle instanceof J_EADieselVehicle) {
@@ -571,7 +578,6 @@ else if (p_primaryHeatingAsset== null && p_secondaryHeatingAsset != null && v_ha
} else if (vehicle instanceof J_EAEV) {
c_vehiclesAvailableForCharging.add((J_EAEV)vehicle);
energyModel.c_EVs.add((J_EAEV)vehicle);
- //c_EvAssets.add(j_ea);
}
c_vehicleAssets.add(vehicle);
J_ActivityTrackerTrips tripTracker = vehicle.getTripTracker();
@@ -601,18 +607,11 @@ else if (p_primaryHeatingAsset== null && p_secondaryHeatingAsset != null && v_ha
if (j_ea.energyAssetType == OL_EnergyAssetType.HOT_WATER_CONSUMPTION) {
p_DHWAsset = (J_EAConsumption)j_ea;
}
- if( j_ea.energyAssetType == OL_EnergyAssetType.ELECTRICITY_DEMAND ) {
- //c_fixedConsumptionElectricAssets.add(j_ea);
- }
- if( j_ea.energyAssetType == OL_EnergyAssetType.ELECTRIC_HOB ) {
- //c_electricHobAssets.add(j_ea);
- }
} else if (j_ea instanceof J_EAProduction) {
c_productionAssets.add((J_EAProduction)j_ea);
//energyModel.c_productionAssets.add((J_EAProduction)j_ea);
if (j_ea.energyAssetType == OL_EnergyAssetType.PHOTOVOLTAIC) {
- //v_liveAssetsMetaData.hasPV = true;
double capacity_kW = ((J_EAProduction)j_ea).getCapacityElectric_kW();
v_liveAssetsMetaData.totalInstalledPVPower_kW += capacity_kW;
if ( p_parentNodeElectric != null ) {
@@ -620,10 +619,8 @@ else if (p_primaryHeatingAsset== null && p_secondaryHeatingAsset != null && v_ha
}
c_parentCoops.forEach( coop -> coop.v_liveAssetsMetaData.totalInstalledPVPower_kW += capacity_kW);
energyModel.v_liveAssetsMetaData.totalInstalledPVPower_kW += capacity_kW;
- //c_pvAssets.add(j_ea);
}
else if (j_ea.energyAssetType == OL_EnergyAssetType.WINDMILL) {
- //v_liveAssetsMetaData.hasWindturbine = true;
double capacity_kW = ((J_EAProduction)j_ea).getCapacityElectric_kW();
v_liveAssetsMetaData.totalInstalledWindPower_kW += capacity_kW;
if ( p_parentNodeElectric != null ) {
@@ -631,44 +628,23 @@ else if (j_ea.energyAssetType == OL_EnergyAssetType.WINDMILL) {
}
c_parentCoops.forEach( coop -> coop.v_liveAssetsMetaData.totalInstalledWindPower_kW += capacity_kW);
energyModel.v_liveAssetsMetaData.totalInstalledWindPower_kW += capacity_kW;
- //c_windAssets.add(j_ea);
}
else if (j_ea.energyAssetType == OL_EnergyAssetType.PHOTOTHERMAL){
- //v_liveAssetsMetaData.hasPT = true;
- //c_ptAssets.add(j_ea);
if (p_heatingManagement != null) {
p_heatingManagement.notInitialized();
}
}
} else if (j_ea instanceof J_EAConversion) {
c_conversionAssets.add((J_EAConversion)j_ea);
- // Non Heating Assets
if ( j_ea.energyAssetType == OL_EnergyAssetType.GAS_PIT || j_ea.energyAssetType == OL_EnergyAssetType.ELECTRIC_HOB){
- if (j_ea.energyAssetType == OL_EnergyAssetType.ELECTRIC_HOB) {
- //c_electricHobAssets.add(j_ea);
- //c_conversionElectricAssets.add(j_ea);
- }
if (p_cookingTracker == null) {
int rowIndex = uniform_discr(2, 300);
p_cookingTracker = new J_ActivityTrackerCooking(energyModel.p_cookingPatternCsv, rowIndex, (energyModel.t_h-energyModel.p_runStartTime_h)*60, (J_EAConversion)j_ea );
} else {
p_cookingTracker.HOB = (J_EAConversion)j_ea;
}
- } else if (j_ea instanceof J_EAConversionElectrolyser) {
- //c_electrolyserAssets.add(j_ea);
- } else {
- // Heating Assets
- c_heatingAssets.add((J_EAConversion)j_ea);
- if (p_heatingManagement != null) {
- p_heatingManagement.notInitialized();
- }
- // Special Heating Assets
- if (j_ea instanceof J_EAConversionHeatPump) {
- energyModel.c_ambientDependentAssets.add(j_ea);
- //c_electricHeatpumpAssets.add(j_ea);
- } else if (j_ea instanceof J_EAConversionGasCHP) {
- //c_chpAssets.add(j_ea);
- }
+ } else if (j_ea instanceof J_EAConversionHeatPump) {
+ energyModel.c_ambientDependentAssets.add(j_ea);
}
} else if (j_ea instanceof J_EAStorage) {
c_storageAssets.add((J_EAStorage)j_ea);
@@ -691,7 +667,6 @@ else if (j_ea.energyAssetType == OL_EnergyAssetType.PHOTOTHERMAL){
p_gasBuffer = (J_EAStorageGas)j_ea;
} else if (j_ea instanceof J_EAStorageElectric) {
p_batteryAsset = (J_EAStorageElectric)j_ea;
- //c_batteryAssets.add(j_ea);
double capacity_MWh = ((J_EAStorageElectric)j_ea).getStorageCapacity_kWh()/1000;
v_liveAssetsMetaData.totalInstalledBatteryStorageCapacity_MWh += capacity_MWh;
c_parentCoops.forEach( coop -> coop.v_liveAssetsMetaData.totalInstalledBatteryStorageCapacity_MWh += capacity_MWh);
@@ -699,13 +674,11 @@ else if (j_ea.energyAssetType == OL_EnergyAssetType.PHOTOTHERMAL){
}
} else if (j_ea instanceof J_EAProfile) {
- //p_energyProfile = (J_EAProfile)j_ea;
c_profileAssets.add((J_EAProfile)j_ea);
} else if (j_ea instanceof J_EADieselTractor) {
c_profileAssets.add((J_EAProfile)j_ea);
} else if (j_ea instanceof J_EACharger) {
c_chargers.add((J_EACharger)j_ea);
- //c_EvAssets.add(j_ea);
} else {
if (!(this instanceof GCHouse && j_ea instanceof J_EAAirco)) {
traceln("Unrecognized energy asset %s in gridconnection %s", j_ea, this);
diff --git a/_alp/Classes/Class.I_HeatingAsset.java b/_alp/Classes/Class.I_HeatingAsset.java
new file mode 100644
index 00000000..46fad080
--- /dev/null
+++ b/_alp/Classes/Class.I_HeatingAsset.java
@@ -0,0 +1,4 @@
+public interface I_HeatingAsset
+{
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.J_EAConversionElectricHeater.java b/_alp/Classes/Class.J_EAConversionElectricHeater.java
index dcb1714a..69c3f2cc 100644
--- a/_alp/Classes/Class.J_EAConversionElectricHeater.java
+++ b/_alp/Classes/Class.J_EAConversionElectricHeater.java
@@ -1,7 +1,7 @@
/**
* J_EAConversionElectricHeater
*/
-public class J_EAConversionElectricHeater extends J_EAConversion implements Serializable {
+public class J_EAConversionElectricHeater extends J_EAConversion implements Serializable, I_HeatingAsset {
protected double outputTemperature_degC;
/**
diff --git a/_alp/Classes/Class.J_EAConversionGasBurner.java b/_alp/Classes/Class.J_EAConversionGasBurner.java
index abeb4774..0bd6d780 100644
--- a/_alp/Classes/Class.J_EAConversionGasBurner.java
+++ b/_alp/Classes/Class.J_EAConversionGasBurner.java
@@ -1,7 +1,7 @@
/**
* J_EAConversionGasBurner
*/
-public class J_EAConversionGasBurner extends zero_engine.J_EAConversion implements Serializable {
+public class J_EAConversionGasBurner extends zero_engine.J_EAConversion implements Serializable, I_HeatingAsset {
protected double outputTemperature_degC;
diff --git a/_alp/Classes/Class.J_EAConversionGasCHP.java b/_alp/Classes/Class.J_EAConversionGasCHP.java
index 68d8adcf..3077c347 100644
--- a/_alp/Classes/Class.J_EAConversionGasCHP.java
+++ b/_alp/Classes/Class.J_EAConversionGasCHP.java
@@ -1,7 +1,7 @@
/**
* J_EAConversionGasCHP
*/
-public class J_EAConversionGasCHP extends zero_engine.J_EAConversion implements Serializable {
+public class J_EAConversionGasCHP extends zero_engine.J_EAConversion implements Serializable, I_HeatingAsset {
protected double outputTemperature_degC;
protected double outputHeatCapacity_kW;
diff --git a/_alp/Classes/Class.J_EAConversionHeatDeliverySet.java b/_alp/Classes/Class.J_EAConversionHeatDeliverySet.java
index 625396db..212cd771 100644
--- a/_alp/Classes/Class.J_EAConversionHeatDeliverySet.java
+++ b/_alp/Classes/Class.J_EAConversionHeatDeliverySet.java
@@ -1,7 +1,7 @@
/**
* J_EAConversionHeatDeliverySet
*/
-public class J_EAConversionHeatDeliverySet extends zero_engine.J_EAConversion implements Serializable {
+public class J_EAConversionHeatDeliverySet extends zero_engine.J_EAConversion implements Serializable, I_HeatingAsset {
protected double outputTemperature_degC;
/**
diff --git a/_alp/Classes/Class.J_EAConversionHeatPump.java b/_alp/Classes/Class.J_EAConversionHeatPump.java
index 27d2feec..8ad74fc9 100644
--- a/_alp/Classes/Class.J_EAConversionHeatPump.java
+++ b/_alp/Classes/Class.J_EAConversionHeatPump.java
@@ -1,7 +1,7 @@
/**
* J_EAConversionHeatPump
*/
-public class J_EAConversionHeatPump extends zero_engine.J_EAConversion implements Serializable {
+public class J_EAConversionHeatPump extends zero_engine.J_EAConversion implements Serializable, I_HeatingAsset {
private double COP_r;
private double belowZeroHeatpumpEtaReductionFactor;
protected double outputTemperature_degC;
diff --git a/_alp/Classes/Class.J_EAConversionHydrogenBurner.java b/_alp/Classes/Class.J_EAConversionHydrogenBurner.java
index a1d86785..a342ab22 100644
--- a/_alp/Classes/Class.J_EAConversionHydrogenBurner.java
+++ b/_alp/Classes/Class.J_EAConversionHydrogenBurner.java
@@ -1,7 +1,7 @@
/**
* J_EAConversionGasBurner
*/
-public class J_EAConversionHydrogenBurner extends zero_engine.J_EAConversion implements Serializable {
+public class J_EAConversionHydrogenBurner extends zero_engine.J_EAConversion implements Serializable, I_HeatingAsset {
protected double outputTemperature_degC;
/**
diff --git a/_alp/Classes/Class.J_EAEV.java b/_alp/Classes/Class.J_EAEV.java
index bfec036c..1a1b8cac 100644
--- a/_alp/Classes/Class.J_EAEV.java
+++ b/_alp/Classes/Class.J_EAEV.java
@@ -112,7 +112,7 @@ public boolean startTrip() {
traceln("Trip not started because EV not available!");
return false; // Trip not started because EV not available!
}
- }
+ }
@Override
public boolean endTrip(double tripDist_km) {
diff --git a/_alp/Classes/Class.J_HeatingManagementNeighborhood.java b/_alp/Classes/Class.J_HeatingManagementNeighborhood.java
index af2d5dc1..b6ddd567 100644
--- a/_alp/Classes/Class.J_HeatingManagementNeighborhood.java
+++ b/_alp/Classes/Class.J_HeatingManagementNeighborhood.java
@@ -182,7 +182,7 @@ public void initializeAssets() {
heatDeliverySet = null;
hydrogenBurner = null;
- for (J_EAConversion heatingAsset : gc.c_heatingAssets) {
+ for (J_EA heatingAsset : gc.c_heatingAssets) {
if (heatingAsset instanceof J_EAConversionGasBurner) {
if (gasBurner != null) {
throw new RuntimeException(this.getClass() + " does not support two gasburners");