From 050a8a4dd5d5e083f1f904189e24b6436505bc89 Mon Sep 17 00:00:00 2001 From: Luc-Sol Date: Wed, 18 Feb 2026 17:03:52 +0100 Subject: [PATCH] Cleanup & Bugfix - [Cleanup] f_startAfterDeserialisation on the energyModel now again calls the functions on the GC and Coop with the same name. - [Bugfix] After deserialisation the live week datasets are correctly cleared to be empty instead of containing zeros. - [Cleanup] Functions that create datasets with zeros when new energycarriers or assetflowcategories are added now look at timeVariables for the time instead of another dataset. --- _alp/Agents/EnergyCoop/Code/Functions.java | 55 +++++++-------- _alp/Agents/EnergyCoop/Code/Functions.xml | 12 ++++ _alp/Agents/EnergyModel/Code/Functions.java | 59 ++++------------ .../Agents/GridConnection/Code/Functions.java | 70 +++++++++++-------- _alp/Agents/GridConnection/Code/Functions.xml | 29 +++++++- ...J_ChargingManagementMaxAvailablePower.java | 2 +- _alp/Classes/Class.J_LiveData.java | 12 +++- 7 files changed, 127 insertions(+), 112 deletions(-) diff --git a/_alp/Agents/EnergyCoop/Code/Functions.java b/_alp/Agents/EnergyCoop/Code/Functions.java index 0981973..96e8cdb 100644 --- a/_alp/Agents/EnergyCoop/Code/Functions.java +++ b/_alp/Agents/EnergyCoop/Code/Functions.java @@ -1434,37 +1434,28 @@ HashSet f_getAllChildCustomerGridConnections_recursion(HashSet + + + + @@ -687,6 +691,10 @@ + + + + @@ -711,6 +719,10 @@ + + + + diff --git a/_alp/Agents/EnergyModel/Code/Functions.java b/_alp/Agents/EnergyModel/Code/Functions.java index 933dd5b..fa37150 100644 --- a/_alp/Agents/EnergyModel/Code/Functions.java +++ b/_alp/Agents/EnergyModel/Code/Functions.java @@ -824,8 +824,9 @@ EnergyCoop f_addConsumptionEnergyCarrier(OL_EnergyCarriers EC) DataSet dsDemand = new DataSet( (int)(168 / p_timeParameters.getTimeStep_h()) ); - double startTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); - double endTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); + double endTime = p_timeVariables.getAnyLogicTime_h(); + double startTime = max(0, p_timeVariables.getAnyLogicTime_h() - 168); + for (double t = startTime; t <= endTime; t += p_timeParameters.getTimeStep_h()) { dsDemand.add( t, 0); } @@ -858,8 +859,10 @@ EnergyCoop f_addProductionEnergyCarrier(OL_EnergyCarriers EC) v_liveData.activeProductionEnergyCarriers.add(EC); DataSet dsSupply = new DataSet( (int)(168 / p_timeParameters.getTimeStep_h()) ); - double startTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); - double endTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); + + double endTime = p_timeVariables.getAnyLogicTime_h(); + double startTime = max(0, p_timeVariables.getAnyLogicTime_h() - 168); + for (double t = startTime; t <= endTime; t += p_timeParameters.getTimeStep_h()) { dsSupply.add( t, 0); } @@ -1063,50 +1066,13 @@ EnergyCoop f_addProductionEnergyCarrier(OL_EnergyCarriers EC) fm_consumptionForHeating_kW = new J_FlowsMap(); // Reconstruct the LiveData class in the EnergyCoops -for (EnergyCoop ec : pop_energyCoops) { - /*ec.v_liveData = new J_LiveData(ec); - ec.v_liveData.activeEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); - ec.v_liveData.activeProductionEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); - ec.v_liveData.activeConsumptionEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); - - ec.v_liveData.connectionMetaData = ec.v_liveConnectionMetaData; - ec.v_liveData.assetsMetaData = ec.v_liveAssetsMetaData; - */ - ec.v_liveData.resetLiveDatasets(p_timeParameters); - - ec.fm_currentProductionFlows_kW = new J_FlowsMap(); - ec.fm_currentConsumptionFlows_kW = new J_FlowsMap(); - ec.fm_currentBalanceFlows_kW = new J_FlowsMap(); - ec.fm_currentAssetFlows_kW = new J_ValueMap(OL_AssetFlowCategories.class); - ec.fm_heatFromEnergyCarrier_kW = new J_FlowsMap(); - ec.fm_consumptionForHeating_kW = new J_FlowsMap(); - ec.f_startAfterDeserialisation(p_timeParameters); -} +pop_energyCoops.forEach(ec -> ec.f_startAfterDeserialisation(p_timeParameters)); // Reconstruct the LiveData class in the GridConnections and add EnergyCarriers List allGridConnections = new ArrayList<>(c_gridConnections); allGridConnections.addAll(c_pausedGridConnections); -for (GridConnection gc : allGridConnections) { - /*gc.v_liveData = new J_LiveData(gc); - gc.v_liveData.activeEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); - gc.v_liveData.activeProductionEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); - gc.v_liveData.activeConsumptionEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); - - gc.v_liveData.connectionMetaData = gc.v_liveConnectionMetaData; - gc.v_liveData.assetsMetaData = gc.v_liveAssetsMetaData; - */ - gc.v_liveData.resetLiveDatasets(p_timeParameters); - - gc.fm_currentProductionFlows_kW = new J_FlowsMap(); - gc.fm_currentConsumptionFlows_kW = new J_FlowsMap(); - gc.fm_currentBalanceFlows_kW = new J_FlowsMap(); - gc.fm_currentAssetFlows_kW = new J_ValueMap(OL_AssetFlowCategories.class); - gc.fm_heatFromEnergyCarrier_kW = new J_FlowsMap(); - gc.fm_consumptionForHeating_kW = new J_FlowsMap(); - /*for (J_EA j_ea : gc.c_energyAssets) { - gc.f_addEnergyCarriersAndAssetCategoriesFromEA(j_ea); - }*/ -} + +allGridConnections.forEach(gc -> gc.f_startAfterDeserialisation(p_timeParameters, p_timeVariables)); // Initialize time and date //v_hourOfYearStart=hourOfYearPerMonth[getMonth()] + (getDayOfMonth()-1)*24; @@ -1198,8 +1164,9 @@ EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC) DataSet dsAsset = new DataSet( (int)(168 / p_timeParameters.getTimeStep_h()) ); - double startTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); - double endTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); + double endTime = p_timeVariables.getAnyLogicTime_h(); + double startTime = max(0, p_timeVariables.getAnyLogicTime_h() - 168); + for (double t = startTime; t <= endTime; t += p_timeParameters.getTimeStep_h()) { dsAsset.add( t, 0); } diff --git a/_alp/Agents/GridConnection/Code/Functions.java b/_alp/Agents/GridConnection/Code/Functions.java index ebda288..2c8d863 100644 --- a/_alp/Agents/GridConnection/Code/Functions.java +++ b/_alp/Agents/GridConnection/Code/Functions.java @@ -173,7 +173,7 @@ double f_connectToJ_EA_default(J_EA j_ea,J_TimeParameters timeParameters) {/*ALCODESTART::1692799608559*/ -f_addEnergyCarriersAndAssetCategoriesFromEA(j_ea, timeParameters); +f_addEnergyCarriersAndAssetCategoriesFromEA(j_ea, timeParameters, energyModel.p_timeVariables); energyModel.c_energyAssets.add(j_ea); c_energyAssets.add(j_ea); @@ -840,7 +840,7 @@ else if (flowPacket.flowsMap.get(EC) > 0){ v_isActive = setActive; // v_isActive must be true before calling updateActiveAssetData! v_liveAssetsMetaData.updateActiveAssetData(new ArrayList<>(List.of(this))); v_liveAssetsMetaData.activeAssetFlows.forEach(x->energyModel.f_addAssetFlow(x)); - v_liveAssetsMetaData.activeAssetFlows.forEach(x-> c_parentCoops.forEach(coop -> coop.f_addAssetFlow(x, energyModel.p_timeParameters))); + v_liveAssetsMetaData.activeAssetFlows.forEach(x-> c_parentCoops.forEach(coop -> coop.f_addAssetFlow(x, energyModel.p_timeParameters, timeVariables))); // update GN parents' wind / solar totals (will be wrong if you changed your totals while paused) p_parentNodeElectric.f_updateTotalInstalledProductionAssets(OL_EnergyAssetType.PHOTOVOLTAIC, v_liveAssetsMetaData.totalInstalledPVPower_kW, true); @@ -900,28 +900,31 @@ else if (flowPacket.flowsMap.get(EC) > 0){ } /*ALCODEEND*/} -double f_startAfterDeserialisation() +double f_startAfterDeserialisation(J_TimeParameters timeParameters,J_TimeVariables timeVariables) {/*ALCODESTART::1753348699140*/ -v_liveData = new J_LiveData(this); +fm_currentProductionFlows_kW = new J_FlowsMap(); +fm_currentConsumptionFlows_kW = new J_FlowsMap(); +fm_currentBalanceFlows_kW = new J_FlowsMap(); +fm_currentAssetFlows_kW = new J_ValueMap(OL_AssetFlowCategories.class); +fm_heatFromEnergyCarrier_kW = new J_FlowsMap(); +fm_consumptionForHeating_kW = new J_FlowsMap(); + +v_liveData = new J_LiveData(); v_liveData.activeEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); v_liveData.activeProductionEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); -v_liveData.activeConsumptionEnergyCarriers= EnumSet.of(OL_EnergyCarriers.ELECTRICITY); +v_liveData.activeConsumptionEnergyCarriers = EnumSet.of(OL_EnergyCarriers.ELECTRICITY); -//v_liveConnectionMetaData = new J_ConnectionMetaData(this); -//v_liveAssetsMetaData = new J_AssetsMetaData(this); v_liveData.connectionMetaData = v_liveConnectionMetaData; v_liveData.assetsMetaData = v_liveAssetsMetaData; -v_liveData.resetLiveDatasets(energyModel.p_runStartTime_h, energyModel.p_runStartTime_h + 24 * 7, energyModel.p_timeStep_h); +v_liveData.dsm_liveDemand_kW.createEmptyDataSets(v_liveData.activeConsumptionEnergyCarriers, roundToInt(168/timeParameters.getTimeStep_h())); +v_liveData.dsm_liveSupply_kW.createEmptyDataSets(v_liveData.activeProductionEnergyCarriers, roundToInt(168/timeParameters.getTimeStep_h())); +v_liveData.dsm_liveAssetFlows_kW.createEmptyDataSets(v_liveData.assetsMetaData.activeAssetFlows, roundToInt(168/timeParameters.getTimeStep_h())); for (J_EA j_ea : c_energyAssets) { - f_addEnergyCarriersAndAssetCategoriesFromEA(j_ea); + f_addEnergyCarriersAndAssetCategoriesFromEA(j_ea, timeParameters, timeVariables); } -fm_currentProductionFlows_kW = new J_FlowsMap(); -fm_currentConsumptionFlows_kW = new J_FlowsMap(); -fm_currentBalanceFlows_kW = new J_FlowsMap(); -fm_currentAssetFlows_kW = new J_ValueMap(OL_AssetFlowCategories.class); /*ALCODEEND*/} double f_removeAllHeatingAssets() @@ -993,15 +996,16 @@ OL_GridConnectionHeatingType f_getCurrentHeatingType() } /*ALCODEEND*/} -EnergyCoop f_addConsumptionEnergyCarrier(OL_EnergyCarriers EC,J_TimeParameters timeParameters) +EnergyCoop f_addConsumptionEnergyCarrier(OL_EnergyCarriers EC,J_TimeParameters timeParameters,J_TimeVariables timeVariables) {/*ALCODESTART::1754380684463*/ v_liveData.activeEnergyCarriers.add(EC); v_liveData.activeConsumptionEnergyCarriers.add(EC); DataSet dsDemand = new DataSet( (int)(168 / timeParameters.getTimeStep_h()) ); -double startTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); -double endTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); +double endTime = timeVariables.getAnyLogicTime_h(); +double startTime = max(0, timeVariables.getAnyLogicTime_h() - 168); + for (double t = startTime; t <= endTime; t += timeParameters.getTimeStep_h()) { dsDemand.add( t, 0); } @@ -1009,14 +1013,16 @@ EnergyCoop f_addConsumptionEnergyCarrier(OL_EnergyCarriers EC,J_TimeParameters t /*ALCODEEND*/} -EnergyCoop f_addProductionEnergyCarrier(OL_EnergyCarriers EC,J_TimeParameters timeParameters) +EnergyCoop f_addProductionEnergyCarrier(OL_EnergyCarriers EC,J_TimeParameters timeParameters,J_TimeVariables timeVariables) {/*ALCODESTART::1754380684465*/ v_liveData.activeEnergyCarriers.add(EC); v_liveData.activeProductionEnergyCarriers.add(EC); DataSet dsSupply = new DataSet( (int)(168 / timeParameters.getTimeStep_h()) ); -double startTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); -double endTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); + +double endTime = timeVariables.getAnyLogicTime_h(); +double startTime = max(0, timeVariables.getAnyLogicTime_h() - 168); + for (double t = startTime; t <= endTime; t += timeParameters.getTimeStep_h()) { dsSupply.add( t, 0); } @@ -1024,14 +1030,16 @@ EnergyCoop f_addProductionEnergyCarrier(OL_EnergyCarriers EC,J_TimeParameters ti /*ALCODEEND*/} -EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC,J_TimeParameters timeParameters) +EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC,J_TimeParameters timeParameters,J_TimeVariables timeVariables) {/*ALCODESTART::1754380684467*/ if (!v_liveAssetsMetaData.activeAssetFlows.contains(AC)) { v_liveAssetsMetaData.activeAssetFlows.add(AC); DataSet dsAsset = new DataSet( (int)(168 / timeParameters.getTimeStep_h()) ); - double startTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); - double endTime = v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); + + double endTime = timeVariables.getAnyLogicTime_h(); + double startTime = max(0, timeVariables.getAnyLogicTime_h() - 168); + for (double t = startTime; t <= endTime; t += timeParameters.getTimeStep_h()) { dsAsset.add( t, 0); } @@ -1055,17 +1063,17 @@ EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC,J_TimeParameters timeParamet } //Add asset flow also to aggregators - c_parentCoops.forEach(x -> x.f_addAssetFlow(AC, timeParameters)); + c_parentCoops.forEach(x -> x.f_addAssetFlow(AC, timeParameters, timeVariables)); energyModel.f_addAssetFlow(AC); } /*ALCODEEND*/} -double f_activateV2GChargingMode(boolean enableV2G,J_TimeParameters timeParameters) +double f_activateV2GChargingMode(boolean enableV2G,J_TimeParameters timeParameters,J_TimeVariables timeVariables) {/*ALCODESTART::1754582754934*/ if(energyModel.b_isInitialized){ p_chargingManagement.setV2GActive(enableV2G); if (enableV2G){ - f_addAssetFlow(OL_AssetFlowCategories.V2GPower_kW, timeParameters); + f_addAssetFlow(OL_AssetFlowCategories.V2GPower_kW, timeParameters, timeVariables); } } /*ALCODEEND*/} @@ -1125,17 +1133,17 @@ EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC,J_TimeParameters timeParamet } /*ALCODEEND*/} -double f_addEnergyCarriersAndAssetCategoriesFromEA(J_EA j_ea,J_TimeParameters timeParameters) +double f_addEnergyCarriersAndAssetCategoriesFromEA(J_EA j_ea,J_TimeParameters timeParameters,J_TimeVariables timeVariables) {/*ALCODESTART::1756977865503*/ for (OL_EnergyCarriers EC : j_ea.getActiveConsumptionEnergyCarriers()) { if (!v_liveData.activeConsumptionEnergyCarriers.contains(EC)) { v_liveData.activeConsumptionEnergyCarriers.add(EC); v_liveData.activeEnergyCarriers.add(EC); if (energyModel.b_isInitialized && v_isActive) { - f_addConsumptionEnergyCarrier(EC, timeParameters); + f_addConsumptionEnergyCarrier(EC, timeParameters, timeVariables); //Add EC to energyModel energyModel.f_addConsumptionEnergyCarrier(EC); - c_parentCoops.forEach(x -> x.f_addConsumptionEnergyCarrier(EC, timeParameters)); + c_parentCoops.forEach(x -> x.f_addConsumptionEnergyCarrier(EC, timeParameters, timeVariables)); } } } @@ -1145,10 +1153,10 @@ EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC,J_TimeParameters timeParamet v_liveData.activeProductionEnergyCarriers.add(EC); v_liveData.activeEnergyCarriers.add(EC); if (energyModel.b_isInitialized && v_isActive) { - f_addProductionEnergyCarrier(EC, timeParameters); + f_addProductionEnergyCarrier(EC, timeParameters, timeVariables); //Add EC to energyModel energyModel.f_addProductionEnergyCarrier(EC); - c_parentCoops.forEach(x -> x.f_addProductionEnergyCarrier(EC, timeParameters)); + c_parentCoops.forEach(x -> x.f_addProductionEnergyCarrier(EC, timeParameters, timeVariables)); } } } @@ -1156,7 +1164,7 @@ EnergyCoop f_addAssetFlow(OL_AssetFlowCategories AC,J_TimeParameters timeParamet if(j_ea.assetFlowCategory != null &&!v_liveAssetsMetaData.activeAssetFlows.contains(j_ea.assetFlowCategory)) { // add live dataset OL_AssetFlowCategories AC = j_ea.assetFlowCategory; if (energyModel.b_isInitialized && v_isActive) { - f_addAssetFlow(AC, timeParameters); + f_addAssetFlow(AC, timeParameters, timeVariables); } else{ v_liveAssetsMetaData.activeAssetFlows.add(AC); diff --git a/_alp/Agents/GridConnection/Code/Functions.xml b/_alp/Agents/GridConnection/Code/Functions.xml index e73f4ad..43ac928 100644 --- a/_alp/Agents/GridConnection/Code/Functions.xml +++ b/_alp/Agents/GridConnection/Code/Functions.xml @@ -551,7 +551,6 @@ double 1753348699140 - true 1030 50 @@ -642,6 +649,10 @@ + + + + @@ -666,6 +677,10 @@ + + + + @@ -690,6 +705,10 @@ + + + + @@ -714,6 +733,10 @@ + + + + @@ -759,6 +782,10 @@ + + + + diff --git a/_alp/Classes/Class.J_ChargingManagementMaxAvailablePower.java b/_alp/Classes/Class.J_ChargingManagementMaxAvailablePower.java index 68ea61f..4a25ad0 100644 --- a/_alp/Classes/Class.J_ChargingManagementMaxAvailablePower.java +++ b/_alp/Classes/Class.J_ChargingManagementMaxAvailablePower.java @@ -27,7 +27,7 @@ public J_ChargingManagementMaxAvailablePower( ) { } - public J_ChargingManagementMaxAvailablePower( GridConnection g, J_TimeParameters timeParametersc) { + public J_ChargingManagementMaxAvailablePower( GridConnection gc, J_TimeParameters timeParameters) { this.gc = gc; this.timeParameters = timeParameters; } diff --git a/_alp/Classes/Class.J_LiveData.java b/_alp/Classes/Class.J_LiveData.java index 39c75e3..0913e9e 100644 --- a/_alp/Classes/Class.J_LiveData.java +++ b/_alp/Classes/Class.J_LiveData.java @@ -35,15 +35,21 @@ public J_LiveData() { public void clearLiveDatasets() { for(OL_EnergyCarriers EC : activeConsumptionEnergyCarriers){ - dsm_liveDemand_kW.get(EC).reset(); + if (dsm_liveDemand_kW.get(EC) != null ) { + dsm_liveDemand_kW.get(EC).reset(); + } } for(OL_EnergyCarriers EC : activeProductionEnergyCarriers){ - dsm_liveSupply_kW.get(EC).reset(); + if (dsm_liveSupply_kW.get(EC) != null ) { + dsm_liveSupply_kW.get(EC).reset(); + } } for (OL_AssetFlowCategories AC : assetsMetaData.activeAssetFlows) { // First add missing assetFlow datasets if there are any - dsm_liveAssetFlows_kW.get(AC).reset(); + if (dsm_liveAssetFlows_kW.get(AC) != null ) { + dsm_liveAssetFlows_kW.get(AC).reset(); + } } data_totalDemand_kW.reset();