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");