From 57df1b935ca3294916ad9af04a9d1d1d1cc14712 Mon Sep 17 00:00:00 2001 From: Ate Hempenius Date: Fri, 2 May 2025 18:29:42 +0200 Subject: [PATCH] Coop have a better null check for v_rapidRun now, and added a reset method to the J_LiveData which can be used by unpaused gc to reset the datasets. --- _alp/Agents/EnergyCoop/Code/Functions.java | 8 +++- .../Agents/GridConnection/Code/Functions.java | 8 ++++ _alp/Classes/Class.J_LiveData.java | 40 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/_alp/Agents/EnergyCoop/Code/Functions.java b/_alp/Agents/EnergyCoop/Code/Functions.java index 985872a7..daac1158 100644 --- a/_alp/Agents/EnergyCoop/Code/Functions.java +++ b/_alp/Agents/EnergyCoop/Code/Functions.java @@ -1175,7 +1175,13 @@ //Collect live datasets f_collectGridConnectionLiveData(); -if(energyModel.v_rapidRunData != null){ +boolean allGCHaveRapidRun = true; +for(GridConnection GC : c_memberGridConnections){ + if(GC.v_rapidRunData == null){ + allGCHaveRapidRun = false; + } +} +if(allGCHaveRapidRun){ //Create rapid run data class used to collect rapid run data of other gc v_rapidRunData = new J_RapidRunData(this); v_rapidRunData.initializeAccumulators(energyModel.p_runEndTime_h - energyModel.p_runStartTime_h, energyModel.p_timeStep_h, EnumSet.copyOf(v_activeEnergyCarriers), EnumSet.copyOf(v_activeConsumptionEnergyCarriers), EnumSet.copyOf(v_activeProductionEnergyCarriers)); diff --git a/_alp/Agents/GridConnection/Code/Functions.java b/_alp/Agents/GridConnection/Code/Functions.java index 87a19f44..7f53e6fa 100644 --- a/_alp/Agents/GridConnection/Code/Functions.java +++ b/_alp/Agents/GridConnection/Code/Functions.java @@ -2543,6 +2543,7 @@ else if (flowsMap.get(EC) > 0){ f_nfatoSetConnectionCapacity(false); v_liveAssetsMetaData.updateActiveAssetData(new ArrayList<>(List.of(this))); + // update GN parents' wind / solar totals (will be wrong if you changed your totals while paused) l_parentNodeElectric.getConnectedAgent().f_updateTotalInstalledProductionAssets(OL_EnergyAssetType.PHOTOVOLTAIC, v_liveAssetsMetaData.totalInstalledPVPower_kW, true); l_parentNodeElectric.getConnectedAgent().f_updateTotalInstalledProductionAssets(OL_EnergyAssetType.WINDMILL, v_liveAssetsMetaData.totalInstalledWindPower_kW, true); @@ -2555,6 +2556,13 @@ else if (flowsMap.get(EC) > 0){ coop.v_liveAssetsMetaData.totalInstalledWindPower_kW += v_liveAssetsMetaData.totalInstalledWindPower_kW; coop.v_liveAssetsMetaData.totalInstalledBatteryStorageCapacity_MWh += v_liveAssetsMetaData.totalInstalledBatteryStorageCapacity_MWh; } + + + //Initialize/reset dataset maps to 0 + double startTime = energyModel.v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMin(); + double endTime = energyModel.v_liveData.dsm_liveDemand_kW.get(OL_EnergyCarriers.ELECTRICITY).getXMax(); + v_liveData.resetLiveDatasets(startTime, endTime, energyModel.p_timeStep_h); + } //Update the 'isActive' variable diff --git a/_alp/Classes/Class.J_LiveData.java b/_alp/Classes/Class.J_LiveData.java index c4de2283..91a8223a 100644 --- a/_alp/Classes/Class.J_LiveData.java +++ b/_alp/Classes/Class.J_LiveData.java @@ -40,6 +40,46 @@ public J_LiveData(Agent parentAgent) { this.parentAgent = parentAgent; } + public void resetLiveDatasets(double startTime, double endTime, double timeStep_h) { + for(OL_EnergyCarriers EC : activeConsumptionEnergyCarriers){ + DataSet dsDemand = new DataSet( (int)(168 / timeStep_h) ); + for (double t = startTime; t <= endTime; t += timeStep_h) { + dsDemand.add( t, 0); + } + dsm_liveDemand_kW.put( EC, dsDemand); + } + + for(OL_EnergyCarriers EC : activeProductionEnergyCarriers){ + DataSet dsSupply = new DataSet( (int)(168 / timeStep_h) ); + for (double t = startTime; t <= endTime; t += timeStep_h) { + dsSupply.add( t, 0); + } + dsm_liveSupply_kW.put( EC, dsSupply); + } + + for (double t = startTime; t <= endTime; t += timeStep_h) { + data_baseloadElectricityDemand_kW.add( t, 0); + data_hydrogenElectricityDemand_kW.add( t, 0); + data_heatPumpElectricityDemand_kW.add( t, 0); + data_electricVehicleDemand_kW.add( t, 0); + data_batteryCharging_kW.add( t, 0); + data_PVGeneration_kW.add( t, 0); + data_windGeneration_kW.add( t, 0); + data_batteryDischarging_kW.add( t, 0); + data_V2GSupply_kW.add( t, 0); + data_CHPElectricityProductionLiveWeek_kW.add( t, 0); + data_totalDemand_kW.add( t, 0); + data_totalSupply_kW.add( t, 0); + data_liveElectricityBalance_kW.add( t, 0); + data_gridCapacityDemand_kW.add( t, 0); + data_gridCapacitySupply_kW.add( t, 0); + data_cookingElectricityDemand_kW.add( t, 0); + data_districtHeatDelivery_kW.add( t, 0); + data_batteryStoredEnergyLiveWeek_MWh.add( t, 0); + data_batterySOC_fr.add( t, 0); + } + } + public String toString() { return super.toString(); }