From 6d33321f060baccf78944120e0a35d1c5bf658ca Mon Sep 17 00:00:00 2001
From: GillisHommen <98752265+GillisHommen@users.noreply.github.com>
Date: Mon, 21 Jul 2025 17:37:28 +0200
Subject: [PATCH 1/3] J_rapidRunData now has addTimeStep() method, using
J_AssetFlows as input (among others)
Tested with L4L model, runs! Results look OK.
---
Zero_engine.alpx | 4 +
_alp/Agents/EnergyCoop/Code/Functions.java | 20 +-
_alp/Agents/EnergyCoop/Variables.xml | 22 ++
_alp/Agents/EnergyModel/Code/Functions.java | 88 ++++++--
_alp/Agents/EnergyModel/Code/Functions.xml | 2 +-
_alp/Agents/EnergyModel/Variables.xml | 22 ++
.../Agents/GridConnection/Code/Functions.java | 125 +++++++-----
_alp/Agents/GridConnection/Variables.xml | 32 ++-
_alp/Classes/Class.J_AssetFlows.java | 105 ++++++++++
_alp/Classes/Class.J_RapidRunData.java | 191 ++++++++++++++++++
10 files changed, 530 insertions(+), 81 deletions(-)
create mode 100644 _alp/Classes/Class.J_AssetFlows.java
diff --git a/Zero_engine.alpx b/Zero_engine.alpx
index b5e55d46..b0bcf775 100644
--- a/Zero_engine.alpx
+++ b/Zero_engine.alpx
@@ -1611,6 +1611,10 @@
1749651263461
+
+ 1753106536266
+
+
com.anylogic.libraries.modules.markup_descriptors
diff --git a/_alp/Agents/EnergyCoop/Code/Functions.java b/_alp/Agents/EnergyCoop/Code/Functions.java
index 2162866f..20b05c75 100644
--- a/_alp/Agents/EnergyCoop/Code/Functions.java
+++ b/_alp/Agents/EnergyCoop/Code/Functions.java
@@ -1525,9 +1525,24 @@ HashSet f_getAllChildCustomerGridConnections_recursion(HashSet f_getAllChildCustomerGridConnections_recursion(HashSet
+
+ 1753111072241
+
+ 60
+ 950
+
+ false
+ true
+ true
+
+
+
+
+
+
+
1669037234222
diff --git a/_alp/Agents/EnergyModel/Code/Functions.java b/_alp/Agents/EnergyModel/Code/Functions.java
index b8e98adc..b1765813 100644
--- a/_alp/Agents/EnergyModel/Code/Functions.java
+++ b/_alp/Agents/EnergyModel/Code/Functions.java
@@ -218,33 +218,77 @@
if (b_parallelizeGridConnections) {
c_gridConnections.parallelStream().forEach(gc -> gc.f_calculateEnergyBalance());
- for(GridConnection gc : c_gridConnections) { // Can't do this in parallel due to different threads writing to the same values!
-
- fm_currentBalanceFlows_kW.addFlows(gc.fm_currentBalanceFlows_kW);
- fm_currentProductionFlows_kW.addFlows(gc.fm_currentProductionFlows_kW);
- fm_currentConsumptionFlows_kW.addFlows(gc.fm_currentConsumptionFlows_kW);
-
- v_currentFinalEnergyConsumption_kW += gc.v_currentFinalEnergyConsumption_kW;
- v_currentPrimaryEnergyProduction_kW += gc.v_currentPrimaryEnergyProduction_kW;
- v_currentEnergyCurtailed_kW += gc.v_currentEnergyCurtailed_kW;
- v_currentPrimaryEnergyProductionHeatpumps_kW += gc.v_currentPrimaryEnergyProductionHeatpumps_kW;
- }
}
else {
for(GridConnection gc : c_gridConnections) {
gc.f_calculateEnergyBalance();
-
- fm_currentBalanceFlows_kW.addFlows(gc.fm_currentBalanceFlows_kW);
- fm_currentProductionFlows_kW.addFlows(gc.fm_currentProductionFlows_kW);
- fm_currentConsumptionFlows_kW.addFlows(gc.fm_currentConsumptionFlows_kW);
-
- v_currentFinalEnergyConsumption_kW += gc.v_currentFinalEnergyConsumption_kW;
- v_currentPrimaryEnergyProduction_kW += gc.v_currentPrimaryEnergyProduction_kW;
- v_currentEnergyCurtailed_kW += gc.v_currentEnergyCurtailed_kW;
- v_currentPrimaryEnergyProductionHeatpumps_kW += gc.v_currentPrimaryEnergyProductionHeatpumps_kW;
}
}
+double fixedConsumptionElectric_kW = 0;
+double heatPumpElectricityConsumption_kW = 0;
+double evChargingPowerElectric_kW = 0;
+double currentBatteriesConsumption_kW = 0;
+double hydrogenElectricityConsumption_kW = 0;
+double electricHobConsumption_kW = 0;
+double districtHeatDelivery_kW = 0;
+double pvProductionElectric_kW = 0;
+double windProductionElectric_kW = 0;
+double ptProductionHeat_kW = 0;
+double CHPProductionElectric_kW = 0;
+double currentBatteriesProduction_kW = 0;
+double currentV2GProduction_kW = 0;
+double currentStoredEnergyBatteries_MWh = 0;
+
+v_assetFlows.reset();
+for(GridConnection gc : c_gridConnections) { // Can't do this in parallel due to different threads writing to the same values!
+
+ fm_currentBalanceFlows_kW.addFlows(gc.fm_currentBalanceFlows_kW);
+ fm_currentProductionFlows_kW.addFlows(gc.fm_currentProductionFlows_kW);
+ fm_currentConsumptionFlows_kW.addFlows(gc.fm_currentConsumptionFlows_kW);
+
+ v_currentFinalEnergyConsumption_kW += gc.v_currentFinalEnergyConsumption_kW;
+ v_currentPrimaryEnergyProduction_kW += gc.v_currentPrimaryEnergyProduction_kW;
+ v_currentEnergyCurtailed_kW += gc.v_currentEnergyCurtailed_kW;
+ v_currentPrimaryEnergyProductionHeatpumps_kW += gc.v_currentPrimaryEnergyProductionHeatpumps_kW;
+
+ v_assetFlows.addFlows(gc.v_assetFlows);
+
+}
+ /*
+ fixedConsumptionElectric_kW += gc.v_fixedConsumptionElectric_kW;
+ heatPumpElectricityConsumption_kW += gc.v_heatPumpElectricityConsumption_kW;
+ evChargingPowerElectric_kW += max(0,gc.v_evChargingPowerElectric_kW);
+ currentBatteriesConsumption_kW += max(0,gc.v_batteryPowerElectric_kW);
+ hydrogenElectricityConsumption_kW += gc.v_hydrogenElectricityConsumption_kW;
+ electricHobConsumption_kW += gc.v_electricHobConsumption_kW;
+ districtHeatDelivery_kW += gc.v_districtHeatDelivery_kW;
+ pvProductionElectric_kW += gc.v_pvProductionElectric_kW;
+ windProductionElectric_kW += gc.v_windProductionElectric_kW;
+ ptProductionHeat_kW += gc.v_ptProductionHeat_kW;
+ CHPProductionElectric_kW += gc.v_CHPProductionElectric_kW;
+ currentBatteriesProduction_kW += max(0,-gc.v_batteryPowerElectric_kW);
+ currentV2GProduction_kW += max(0,-gc.v_evChargingPowerElectric_kW);
+ currentStoredEnergyBatteries_MWh += gc.v_batteryStoredEnergy_kWh/1000;
+ */
+
+
+/*v_assetFlows.setFlows(fixedConsumptionElectric_kW,
+ heatPumpElectricityConsumption_kW,
+ evChargingPowerElectric_kW,
+ currentBatteriesConsumption_kW,
+ hydrogenElectricityConsumption_kW,
+ electricHobConsumption_kW,
+ districtHeatDelivery_kW,
+ pvProductionElectric_kW,
+ windProductionElectric_kW,
+ ptProductionHeat_kW,
+ CHPProductionElectric_kW,
+ currentBatteriesProduction_kW,
+ currentV2GProduction_kW,
+ currentStoredEnergyBatteries_MWh);*/
+
+// TODO: Is this still needed??
for (GridConnection gc : c_subGridConnections) {
gc.f_calculateEnergyBalance();
}
@@ -1101,6 +1145,9 @@ EnergyCoop f_addConsumptionEnergyCarrier(OL_EnergyCarriers EC)
double f_rapidRunDataLogging()
{/*ALCODESTART::1741622740564*/
+v_rapidRunData.addTimeStep(fm_currentBalanceFlows_kW, fm_currentConsumptionFlows_kW, fm_currentProductionFlows_kW, v_currentPrimaryEnergyProduction_kW, v_currentFinalEnergyConsumption_kW, v_currentPrimaryEnergyProductionHeatpumps_kW, v_currentEnergyCurtailed_kW, v_assetFlows, this);
+
+/*
// Further Subdivision of asset types within energy carriers
double v_fixedConsumptionElectric_kW = sum(c_gridConnections, x->x.v_fixedConsumptionElectric_kW);
double v_heatPumpElectricityConsumption_kW = sum(c_gridConnections, x->x.v_heatPumpElectricityConsumption_kW);
@@ -1299,6 +1346,7 @@ EnergyCoop f_addConsumptionEnergyCarrier(OL_EnergyCarriers EC)
else{
v_rapidRunData.ts_dailyAverageBatteriesSOC_fr.addStep(0);
}
+*/
/*ALCODEEND*/}
diff --git a/_alp/Agents/EnergyModel/Code/Functions.xml b/_alp/Agents/EnergyModel/Code/Functions.xml
index 59a7c38b..d3ae5e0e 100644
--- a/_alp/Agents/EnergyModel/Code/Functions.xml
+++ b/_alp/Agents/EnergyModel/Code/Functions.xml
@@ -573,7 +573,7 @@
1741622740564
677
- 321
+ 322
+
+ 1753110053329
+
+ 840
+ 320
+
+ false
+ true
+ true
+
+
+
+
+
+
+
1658496701675
diff --git a/_alp/Agents/GridConnection/Code/Functions.java b/_alp/Agents/GridConnection/Code/Functions.java
index f0cd0043..d21db96c 100644
--- a/_alp/Agents/GridConnection/Code/Functions.java
+++ b/_alp/Agents/GridConnection/Code/Functions.java
@@ -1463,58 +1463,6 @@ else if (flowsMap.get(EC) > 0){
{/*ALCODESTART::1722518905501*/
v_maxConnectionLoad_fr = max(v_maxConnectionLoad_fr, abs(fm_currentBalanceFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) / v_liveConnectionMetaData.contractedDeliveryCapacity_kW ));
-double currentImport_kW = 0.0;
-double currentExport_kW = 0.0;
-for (OL_EnergyCarriers EC : v_activeEnergyCarriers) {
- double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
- v_rapidRunData.am_totalBalanceAccumulators_kW.get(EC).addStep( currentBalance_kW );
-
- if(v_activeConsumptionEnergyCarriers.contains(EC)){
- currentImport_kW += max( 0, currentBalance_kW );
- }
- if(v_activeProductionEnergyCarriers.contains(EC)){
- currentExport_kW += max( 0, -currentBalance_kW );
- }
-}
-
-// Daytime totals. Use overal-total minus daytime total to get nighttime totals.
-if(energyModel.b_isDaytime) {
-
- for (OL_EnergyCarriers EC : v_activeEnergyCarriers) {
- double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
- if(v_activeConsumptionEnergyCarriers.contains(EC)){
- v_rapidRunData.am_daytimeImports_kW.get(EC).addStep(max( 0, currentBalance_kW ));
- }
- if(v_activeProductionEnergyCarriers.contains(EC)){
- v_rapidRunData.am_daytimeExports_kW.get(EC).addStep(max( 0, -currentBalance_kW ));
- }
- }
-
- v_rapidRunData.acc_daytimeElectricityProduction_kW.addStep(fm_currentProductionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
- v_rapidRunData.acc_daytimeElectricityConsumption_kW.addStep(fm_currentConsumptionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
- v_rapidRunData.acc_daytimeEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
- v_rapidRunData.acc_daytimeFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
- v_rapidRunData.acc_daytimePrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
-}
-
-// Weekend totals. Use overal-totals minus weekend totals to get weekday totals.
-if (!energyModel.b_isWeekday) { //
- for (OL_EnergyCarriers EC : v_activeEnergyCarriers) {
- double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
- if(v_activeConsumptionEnergyCarriers.contains(EC)){
- v_rapidRunData.am_weekendImports_kW.get(EC).addStep(max( 0, currentBalance_kW ));
- }
- if(v_activeProductionEnergyCarriers.contains(EC)){
- v_rapidRunData.am_weekendExports_kW.get(EC).addStep(max( 0, -currentBalance_kW ));
- }
- }
- v_rapidRunData.acc_weekendElectricityProduction_kW.addStep(fm_currentProductionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
- v_rapidRunData.acc_weekendElectricityConsumption_kW.addStep(fm_currentConsumptionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
- v_rapidRunData.acc_weekendEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
- v_rapidRunData.acc_weekendFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
- v_rapidRunData.acc_weekendPrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
-}
-
// Further Subdivision of asset types within energy carriers
v_fixedConsumptionElectric_kW = 0;
for (J_EA j_ea : c_fixedConsumptionElectricAssets) {
@@ -1571,6 +1519,77 @@ else if (flowsMap.get(EC) > 0){
v_ptProductionHeat_kW -= j_ea.getLastFlows().get(OL_EnergyCarriers.HEAT);
}
+v_assetFlows.setFlows(v_fixedConsumptionElectric_kW,
+ v_heatPumpElectricityConsumption_kW,
+ max(0,v_evChargingPowerElectric_kW),
+ max(0,v_batteryPowerElectric_kW),
+ v_hydrogenElectricityConsumption_kW,
+ v_electricHobConsumption_kW,
+ v_districtHeatDelivery_kW,
+ v_pvProductionElectric_kW,
+ v_windProductionElectric_kW,
+ v_ptProductionHeat_kW,
+ v_CHPProductionElectric_kW,
+ max(0,-v_batteryPowerElectric_kW),
+ max(0,-v_evChargingPowerElectric_kW),
+ v_batteryStoredEnergy_kWh/1000);
+
+v_rapidRunData.addTimeStep(fm_currentBalanceFlows_kW, fm_currentConsumptionFlows_kW, fm_currentProductionFlows_kW, v_currentPrimaryEnergyProduction_kW, v_currentFinalEnergyConsumption_kW, v_currentPrimaryEnergyProductionHeatpumps_kW, v_currentEnergyCurtailed_kW, v_assetFlows, energyModel);
+
+/*
+double currentImport_kW = 0.0;
+double currentExport_kW = 0.0;
+for (OL_EnergyCarriers EC : v_activeEnergyCarriers) {
+ double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
+ v_rapidRunData.am_totalBalanceAccumulators_kW.get(EC).addStep( currentBalance_kW );
+
+ if(v_activeConsumptionEnergyCarriers.contains(EC)){
+ currentImport_kW += max( 0, currentBalance_kW );
+ }
+ if(v_activeProductionEnergyCarriers.contains(EC)){
+ currentExport_kW += max( 0, -currentBalance_kW );
+ }
+}
+
+// Daytime totals. Use overal-total minus daytime total to get nighttime totals.
+if(energyModel.b_isDaytime) {
+
+ for (OL_EnergyCarriers EC : v_activeEnergyCarriers) {
+ double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
+ if(v_activeConsumptionEnergyCarriers.contains(EC)){
+ v_rapidRunData.am_daytimeImports_kW.get(EC).addStep(max( 0, currentBalance_kW ));
+ }
+ if(v_activeProductionEnergyCarriers.contains(EC)){
+ v_rapidRunData.am_daytimeExports_kW.get(EC).addStep(max( 0, -currentBalance_kW ));
+ }
+ }
+
+ v_rapidRunData.acc_daytimeElectricityProduction_kW.addStep(fm_currentProductionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ v_rapidRunData.acc_daytimeElectricityConsumption_kW.addStep(fm_currentConsumptionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ v_rapidRunData.acc_daytimeEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ v_rapidRunData.acc_daytimeFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+ v_rapidRunData.acc_daytimePrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+}
+
+// Weekend totals. Use overal-totals minus weekend totals to get weekday totals.
+if (!energyModel.b_isWeekday) { //
+ for (OL_EnergyCarriers EC : v_activeEnergyCarriers) {
+ double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
+ if(v_activeConsumptionEnergyCarriers.contains(EC)){
+ v_rapidRunData.am_weekendImports_kW.get(EC).addStep(max( 0, currentBalance_kW ));
+ }
+ if(v_activeProductionEnergyCarriers.contains(EC)){
+ v_rapidRunData.am_weekendExports_kW.get(EC).addStep(max( 0, -currentBalance_kW ));
+ }
+ }
+ v_rapidRunData.acc_weekendElectricityProduction_kW.addStep(fm_currentProductionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ v_rapidRunData.acc_weekendElectricityConsumption_kW.addStep(fm_currentConsumptionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ v_rapidRunData.acc_weekendEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ v_rapidRunData.acc_weekendFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+ v_rapidRunData.acc_weekendPrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+}
+
+
//District heating
v_districtHeatDelivery_kW = max(0,fm_currentBalanceFlows_kW.get(OL_EnergyCarriers.HEAT));
@@ -1698,7 +1717,7 @@ else if (flowsMap.get(EC) > 0){
else{
v_rapidRunData.ts_dailyAverageBatteriesSOC_fr.addStep(0);
}
-
+*/
/*ALCODEEND*/}
double f_setActive(boolean setActive)
diff --git a/_alp/Agents/GridConnection/Variables.xml b/_alp/Agents/GridConnection/Variables.xml
index b68667f6..ee31c5f8 100644
--- a/_alp/Agents/GridConnection/Variables.xml
+++ b/_alp/Agents/GridConnection/Variables.xml
@@ -996,7 +996,7 @@
1741182119260
570
- 810
+ 790
+
+ 1753110629668
+
+ 570
+ 840
+
+ 10
+ 0
+
+ false
+ true
+ true
+
+
+
+
+
+
+
1658499438204
diff --git a/_alp/Classes/Class.J_AssetFlows.java b/_alp/Classes/Class.J_AssetFlows.java
new file mode 100644
index 00000000..90bb30ad
--- /dev/null
+++ b/_alp/Classes/Class.J_AssetFlows.java
@@ -0,0 +1,105 @@
+/**
+ * J_AssetFlows
+ */
+public class J_AssetFlows implements Serializable {
+
+ // Further Subdivision of asset types within energy carriers
+ public double fixedConsumptionElectric_kW;
+ public double heatPumpElectricityConsumption_kW;
+ public double evChargingPowerElectric_kW;
+ public double currentBatteriesConsumption_kW;
+ public double hydrogenElectricityConsumption_kW;
+ public double electricHobConsumption_kW;
+ public double districtHeatDelivery_kW;
+ public double pvProductionElectric_kW;
+ public double windProductionElectric_kW;
+ public double ptProductionHeat_kW;
+ public double CHPProductionElectric_kW;
+ public double currentBatteriesProduction_kW;
+ public double currentV2GProduction_kW;
+ public double currentStoredEnergyBatteries_MWh;
+
+ /**
+ * Default constructor
+ */
+ public J_AssetFlows() {
+ }
+
+ public void setFlows(
+ double fixedConsumptionElectric_kW,
+ double heatPumpElectricityConsumption_kW,
+ double evChargingPowerElectric_kW,
+ double currentBatteriesConsumption_kW,
+ double hydrogenElectricityConsumption_kW,
+ double electricHobConsumption_kW,
+ double districtHeatDelivery_kW,
+ double pvProductionElectric_kW,
+ double windProductionElectric_kW,
+ double ptProductionHeat_kW,
+ double CHPProductionElectric_kW,
+ double currentBatteriesProduction_kW,
+ double currentV2GProduction_kW,
+ double currentStoredEnergyBatteries_MWh) {
+ this.fixedConsumptionElectric_kW = fixedConsumptionElectric_kW;
+ this.heatPumpElectricityConsumption_kW = heatPumpElectricityConsumption_kW;
+ this.evChargingPowerElectric_kW = evChargingPowerElectric_kW;
+ this.currentBatteriesConsumption_kW = currentBatteriesConsumption_kW;
+ this.hydrogenElectricityConsumption_kW = hydrogenElectricityConsumption_kW;
+ this.electricHobConsumption_kW = electricHobConsumption_kW;
+ this.districtHeatDelivery_kW = districtHeatDelivery_kW;
+ this.pvProductionElectric_kW = pvProductionElectric_kW;
+ this.windProductionElectric_kW = windProductionElectric_kW;
+ this.ptProductionHeat_kW = ptProductionHeat_kW;
+ this.CHPProductionElectric_kW = CHPProductionElectric_kW;
+ this.currentBatteriesProduction_kW = currentBatteriesProduction_kW;
+ this.currentV2GProduction_kW = currentV2GProduction_kW;
+ this.currentStoredEnergyBatteries_MWh = currentStoredEnergyBatteries_MWh;
+ }
+
+ public void addFlows(J_AssetFlows assetFlows){
+ this.fixedConsumptionElectric_kW += fixedConsumptionElectric_kW;
+ this.heatPumpElectricityConsumption_kW += heatPumpElectricityConsumption_kW;
+ this.evChargingPowerElectric_kW += evChargingPowerElectric_kW;
+ this.currentBatteriesConsumption_kW += currentBatteriesConsumption_kW;
+ this.hydrogenElectricityConsumption_kW += hydrogenElectricityConsumption_kW;
+ this.electricHobConsumption_kW += electricHobConsumption_kW;
+ this.districtHeatDelivery_kW += districtHeatDelivery_kW;
+ this.pvProductionElectric_kW += pvProductionElectric_kW;
+ this.windProductionElectric_kW += windProductionElectric_kW;
+ this.ptProductionHeat_kW += ptProductionHeat_kW;
+ this.CHPProductionElectric_kW += CHPProductionElectric_kW;
+ this.currentBatteriesProduction_kW += currentBatteriesProduction_kW;
+ this.currentV2GProduction_kW += currentV2GProduction_kW;
+ this.currentStoredEnergyBatteries_MWh += currentStoredEnergyBatteries_MWh;
+ }
+
+
+ public void reset() {
+ fixedConsumptionElectric_kW = 0;
+ heatPumpElectricityConsumption_kW = 0;
+ evChargingPowerElectric_kW = 0;
+ currentBatteriesConsumption_kW = 0;
+ hydrogenElectricityConsumption_kW = 0;
+ electricHobConsumption_kW = 0;
+ districtHeatDelivery_kW = 0;
+ pvProductionElectric_kW = 0;
+ windProductionElectric_kW = 0;
+ ptProductionHeat_kW = 0;
+ CHPProductionElectric_kW = 0;
+ currentBatteriesProduction_kW = 0;
+ currentV2GProduction_kW = 0;
+ currentStoredEnergyBatteries_MWh = 0;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.J_RapidRunData.java b/_alp/Classes/Class.J_RapidRunData.java
index c9df3176..df656f74 100644
--- a/_alp/Classes/Class.J_RapidRunData.java
+++ b/_alp/Classes/Class.J_RapidRunData.java
@@ -480,6 +480,197 @@ public J_RapidRunData getClone() {
}
+ public void addTimeStep(J_FlowsMap fm_currentBalanceFlows_kW, J_FlowsMap fm_currentConsumptionFlows_kW, J_FlowsMap fm_currentProductionFlows_kW, double v_currentPrimaryEnergyProduction_kW, double v_currentFinalEnergyConsumption_kW, double v_currentPrimaryEnergyProductionHeatpumps_kW, double v_currentEnergyCurtailed_kW, J_AssetFlows assetFlows, EnergyModel energyModel) {
+ for (OL_EnergyCarriers EC : activeEnergyCarriers) {
+ this.am_totalBalanceAccumulators_kW.get(EC).addStep( fm_currentBalanceFlows_kW.get(EC) );
+ }
+
+ /*
+ // Further Subdivision of asset types within energy carriers
+ double v_fixedConsumptionElectric_kW = sum(c_gridConnections, x->x.v_fixedConsumptionElectric_kW);
+ double v_heatPumpElectricityConsumption_kW = sum(c_gridConnections, x->x.v_heatPumpElectricityConsumption_kW);
+ double v_evChargingPowerElectric_kW = sum(c_gridConnections, x->max(0,x.v_evChargingPowerElectric_kW));
+ double currentBatteriesConsumption_kW = sum(c_gridConnections, x->max(0,x.v_batteryPowerElectric_kW));
+ double v_hydrogenElectricityConsumption_kW = sum(c_gridConnections, x->x.v_hydrogenElectricityConsumption_kW);
+ double v_electricHobConsumption_kW = sum(c_gridConnections, x->x.v_electricHobConsumption_kW);
+ double v_districtHeatDelivery_kW = sum(c_gridConnections, x->x.v_districtHeatDelivery_kW);
+
+ double v_pvProductionElectric_kW = sum(c_gridConnections, x->x.v_pvProductionElectric_kW);
+ double v_windProductionElectric_kW = sum(c_gridConnections, x->x.v_windProductionElectric_kW);
+ double v_ptProductionHeat_kW = sum(c_gridConnections, x->x.v_ptProductionHeat_kW);
+ double currentBatteriesProduction_kW = sum(c_gridConnections, x->max(0,-x.v_batteryPowerElectric_kW));
+ double currentV2GProduction_kW = sum(c_gridConnections, x-> max(0, -x.v_evChargingPowerElectric_kW));
+ double v_CHPProductionElectric_kW = sum(c_gridConnections, x->x.v_CHPProductionElectric_kW);
+
+ double currentStoredEnergyBatteries_MWh = sum(c_gridConnections, x->x.v_batteryStoredEnergy_kWh)/1000;
+ */
+
+ // Daytime totals. Use overal-total minus daytime total to get nighttime totals.
+ if(energyModel.b_isDaytime) {
+
+ for (OL_EnergyCarriers EC : activeEnergyCarriers) {
+ double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
+ if(activeConsumptionEnergyCarriers.contains(EC)){
+ am_daytimeImports_kW.get(EC).addStep(max( 0, currentBalance_kW ));
+ }
+ if(activeProductionEnergyCarriers.contains(EC)){
+ am_daytimeExports_kW.get(EC).addStep(max( 0, -currentBalance_kW ));
+ }
+ }
+
+ acc_daytimeElectricityProduction_kW.addStep(fm_currentProductionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ acc_daytimeElectricityConsumption_kW.addStep(fm_currentConsumptionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ acc_daytimeEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ acc_daytimeFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+ acc_daytimePrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+
+ }
+
+ // Weekend totals. Use overal-totals minus weekend totals to get weekday totals.
+ if (!energyModel.b_isWeekday) { //
+ for (OL_EnergyCarriers EC : activeEnergyCarriers) {
+ double currentBalance_kW = fm_currentBalanceFlows_kW.get(EC);
+ if(activeConsumptionEnergyCarriers.contains(EC)){
+ am_weekendImports_kW.get(EC).addStep(max( 0, currentBalance_kW ));
+ }
+ if(activeProductionEnergyCarriers.contains(EC)){
+ am_weekendExports_kW.get(EC).addStep(max( 0, -currentBalance_kW ));
+ }
+ }
+
+ acc_weekendElectricityProduction_kW.addStep(fm_currentProductionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ acc_weekendElectricityConsumption_kW.addStep(fm_currentConsumptionFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) );
+ acc_weekendEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ acc_weekendFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+ acc_weekendPrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+ }
+
+ //========== SUMMER WEEK ==========//
+ if (energyModel.b_isSummerWeek){
+ for (OL_EnergyCarriers EC : activeEnergyCarriers) {
+ am_summerWeekBalanceAccumulators_kW.get(EC).addStep( fm_currentBalanceFlows_kW.get(EC) );
+ }
+ for (OL_EnergyCarriers EC : activeConsumptionEnergyCarriers) {
+ am_summerWeekConsumptionAccumulators_kW.get(EC).addStep( fm_currentConsumptionFlows_kW.get(EC) );
+
+ }
+ for (OL_EnergyCarriers EC : activeProductionEnergyCarriers) {
+ am_summerWeekProductionAccumulators_kW.get(EC).addStep( fm_currentProductionFlows_kW.get(EC) );
+ }
+
+ acc_summerWeekEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ acc_summerWeekFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+
+ acc_summerWeekEnergyCurtailed_kW.addStep(v_currentEnergyCurtailed_kW);
+ acc_summerWeekPrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+
+ acc_summerWeekDeliveryCapacity_kW.addStep( connectionMetaData.physicalCapacity_kW );
+ acc_summerWeekFeedinCapacity_kW.addStep( -connectionMetaData.physicalCapacity_kW );
+
+ acc_summerWeekBaseloadElectricityConsumption_kW.addStep( assetFlows.fixedConsumptionElectric_kW );
+ acc_summerWeekHeatPumpElectricityConsumption_kW.addStep( assetFlows.heatPumpElectricityConsumption_kW );
+
+ acc_summerWeekElectricVehicleConsumption_kW.addStep( max(0,assetFlows.evChargingPowerElectric_kW) );
+ acc_summerWeekBatteriesConsumption_kW.addStep( assetFlows.currentBatteriesConsumption_kW );
+ acc_summerWeekElectricCookingConsumption_kW.addStep( assetFlows.electricHobConsumption_kW );
+ acc_summerWeekElectrolyserElectricityConsumption_kW.addStep( max(0, assetFlows.hydrogenElectricityConsumption_kW) );
+ acc_summerWeekDistrictHeatingConsumption_kW.addStep( assetFlows.districtHeatDelivery_kW );
+ acc_summerWeekPVProduction_kW.addStep( assetFlows.pvProductionElectric_kW );
+ acc_summerWeekWindProduction_kW.addStep( assetFlows.windProductionElectric_kW );
+ acc_summerWeekPTProduction_kW.addStep( assetFlows.ptProductionHeat_kW );
+ acc_summerWeekV2GProduction_kW.addStep( max(0, -assetFlows.evChargingPowerElectric_kW) );
+ acc_summerWeekBatteriesProduction_kW.addStep( assetFlows.currentBatteriesProduction_kW );
+ acc_summerWeekCHPElectricityProduction_kW.addStep( assetFlows.CHPProductionElectric_kW );
+ ts_summerWeekBatteriesStoredEnergy_MWh.addStep(assetFlows.currentStoredEnergyBatteries_MWh);
+
+ if(assetsMetaData.totalInstalledBatteryStorageCapacity_MWh > 0){
+ ts_summerWeekBatteriesSOC_fr.addStep(assetFlows.currentStoredEnergyBatteries_MWh/assetsMetaData.totalInstalledBatteryStorageCapacity_MWh);
+ }
+ else{
+ ts_summerWeekBatteriesSOC_fr.addStep(0);
+ }
+ }
+
+ //========== WINTER WEEK ==========//
+ if (energyModel.b_isWinterWeek){
+ for (OL_EnergyCarriers EC : activeEnergyCarriers) {
+ am_winterWeekBalanceAccumulators_kW.get(EC).addStep( fm_currentBalanceFlows_kW.get(EC) );
+ }
+ for (OL_EnergyCarriers EC : activeConsumptionEnergyCarriers) {
+ am_winterWeekConsumptionAccumulators_kW.get(EC).addStep( fm_currentConsumptionFlows_kW.get(EC) );
+ }
+ for (OL_EnergyCarriers EC : activeProductionEnergyCarriers) {
+ am_winterWeekProductionAccumulators_kW.get(EC).addStep( fm_currentProductionFlows_kW.get(EC) );
+ }
+
+ acc_winterWeekEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ acc_winterWeekFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+
+ acc_winterWeekEnergyCurtailed_kW.addStep(v_currentEnergyCurtailed_kW);
+ acc_winterWeekPrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+
+ acc_winterWeekDeliveryCapacity_kW.addStep( connectionMetaData.physicalCapacity_kW );
+ acc_winterWeekFeedinCapacity_kW.addStep( -connectionMetaData.physicalCapacity_kW );
+
+ acc_winterWeekBaseloadElectricityConsumption_kW.addStep( assetFlows.fixedConsumptionElectric_kW );
+ acc_winterWeekHeatPumpElectricityConsumption_kW.addStep( assetFlows.heatPumpElectricityConsumption_kW );
+
+ acc_winterWeekElectricVehicleConsumption_kW.addStep( max(0,assetFlows.evChargingPowerElectric_kW) );
+ acc_winterWeekBatteriesConsumption_kW.addStep( assetFlows.currentBatteriesConsumption_kW );
+ acc_winterWeekElectricCookingConsumption_kW.addStep( assetFlows.electricHobConsumption_kW );
+ acc_winterWeekElectrolyserElectricityConsumption_kW.addStep( max(0, assetFlows.hydrogenElectricityConsumption_kW) );
+ acc_winterWeekDistrictHeatingConsumption_kW.addStep( assetFlows.districtHeatDelivery_kW );
+ acc_winterWeekPVProduction_kW.addStep( assetFlows.pvProductionElectric_kW );
+ acc_winterWeekWindProduction_kW.addStep( assetFlows.windProductionElectric_kW );
+ acc_winterWeekPTProduction_kW.addStep( assetFlows.ptProductionHeat_kW );
+ acc_winterWeekV2GProduction_kW.addStep( max(0, -assetFlows.evChargingPowerElectric_kW) );
+ acc_winterWeekBatteriesProduction_kW.addStep( assetFlows.currentBatteriesProduction_kW );
+ acc_winterWeekCHPElectricityProduction_kW.addStep( assetFlows.CHPProductionElectric_kW );
+ ts_winterWeekBatteriesStoredEnergy_MWh.addStep(assetFlows.currentStoredEnergyBatteries_MWh);
+
+ if(assetsMetaData.totalInstalledBatteryStorageCapacity_MWh > 0){
+ ts_winterWeekBatteriesSOC_fr.addStep(assetFlows.currentStoredEnergyBatteries_MWh/assetsMetaData.totalInstalledBatteryStorageCapacity_MWh);
+ }
+ else{
+ ts_winterWeekBatteriesSOC_fr.addStep(0);
+ }
+ }
+
+ //========== TOTALS / DAILY AVERAGES ==========//
+ for (OL_EnergyCarriers EC : activeConsumptionEnergyCarriers) {
+ am_dailyAverageConsumptionAccumulators_kW.get(EC).addStep( fm_currentConsumptionFlows_kW.get(EC) );
+ }
+ for (OL_EnergyCarriers EC : activeProductionEnergyCarriers) {
+ am_dailyAverageProductionAccumulators_kW.get(EC).addStep( fm_currentProductionFlows_kW.get(EC) );
+ }
+ acc_dailyAverageEnergyProduction_kW.addStep(v_currentPrimaryEnergyProduction_kW);
+ acc_dailyAverageFinalEnergyConsumption_kW.addStep(v_currentFinalEnergyConsumption_kW);
+ acc_totalEnergyCurtailed_kW.addStep(v_currentEnergyCurtailed_kW);
+ acc_totalPrimaryEnergyProductionHeatpumps_kW.addStep(v_currentPrimaryEnergyProductionHeatpumps_kW);
+ acc_dailyAverageBaseloadElectricityConsumption_kW.addStep( assetFlows.fixedConsumptionElectric_kW );
+ acc_dailyAverageHeatPumpElectricityConsumption_kW.addStep( assetFlows.heatPumpElectricityConsumption_kW );
+ acc_dailyAverageElectricVehicleConsumption_kW.addStep( max(0,assetFlows.evChargingPowerElectric_kW) );
+ acc_dailyAverageBatteriesConsumption_kW.addStep( assetFlows.currentBatteriesConsumption_kW );
+ acc_dailyAverageElectricCookingConsumption_kW.addStep( assetFlows.electricHobConsumption_kW );
+ acc_dailyAverageElectrolyserElectricityConsumption_kW.addStep( max(0, assetFlows.hydrogenElectricityConsumption_kW) );
+ acc_dailyAverageDistrictHeatingConsumption_kW.addStep( assetFlows.districtHeatDelivery_kW );
+ acc_dailyAveragePVProduction_kW.addStep( assetFlows.pvProductionElectric_kW );
+ acc_dailyAverageWindProduction_kW.addStep( assetFlows.windProductionElectric_kW );
+ acc_dailyAveragePTProduction_kW.addStep( assetFlows.ptProductionHeat_kW );
+ acc_dailyAverageV2GProduction_kW.addStep( max(0, -assetFlows.evChargingPowerElectric_kW) );
+ acc_dailyAverageBatteriesProduction_kW.addStep( assetFlows.currentBatteriesProduction_kW );
+ acc_dailyAverageCHPElectricityProduction_kW.addStep( assetFlows.CHPProductionElectric_kW );
+ ts_dailyAverageBatteriesStoredEnergy_MWh.addStep(assetFlows.currentStoredEnergyBatteries_MWh);
+
+ if(assetsMetaData.totalInstalledBatteryStorageCapacity_MWh > 0){
+ ts_dailyAverageBatteriesSOC_fr.addStep(assetFlows.currentStoredEnergyBatteries_MWh/assetsMetaData.totalInstalledBatteryStorageCapacity_MWh);
+ }
+ else{
+ ts_dailyAverageBatteriesSOC_fr.addStep(0);
+ }
+
+ }
+
public J_LoadDurationCurves getLoadDurationCurves(EnergyModel energyModel) {
return new J_LoadDurationCurves(this.am_totalBalanceAccumulators_kW.get(OL_EnergyCarriers.ELECTRICITY).getTimeSeries_kW(), energyModel);
}
From 355526b1f38d00924f80b9d8c8558ef3e941d182 Mon Sep 17 00:00:00 2001
From: GillisHommen <98752265+GillisHommen@users.noreply.github.com>
Date: Tue, 22 Jul 2025 17:44:13 +0200
Subject: [PATCH 2/3] J_AssetFlows now also used for J_LiveData
---
.../ConnectionOwner/Levels/Level.level.xml | 1 +
_alp/Agents/EnergyCoop/AOC.EnergyCoop.xml | 44 ++-
_alp/Agents/EnergyModel/AOC.EnergyModel.xml | 13 +-
_alp/Agents/EnergyModel/EmbeddedObjects.xml | 321 +-----------------
.../GridConnection/AOC.GridConnection.xml | 6 +-
.../Agents/GridConnection/Code/Functions.java | 173 ++++++----
_alp/Agents/GridConnection/Code/Functions.xml | 4 +-
.../AOC.ZeroAgent.xml} | 36 +-
_alp/Classes/Class.I_EnergyData.java | 4 +
_alp/Classes/Class.J_ActivityTracker.java | 1 -
_alp/Classes/Class.J_AssetFlows.java | 30 +-
_alp/Classes/Class.J_AssetsMetaData.java | 7 +
_alp/Classes/Class.J_ConnectionMetaData.java | 4 +
_alp/Classes/Class.J_EA.java | 3 +
_alp/Classes/Class.J_EAEV.java | 3 +
_alp/Classes/Class.J_EAVehicle.java | 11 +
_alp/Classes/Class.J_LiveData.java | 82 +++++
_alp/Classes/Class.J_ProfileForecaster.java | 12 +-
_alp/Classes/Class.J_ProfilePointer.java | 4 +
19 files changed, 329 insertions(+), 430 deletions(-)
rename _alp/Agents/{GovernmentLayer/AOC.GovernmentLayer.xml => ZeroAgent/AOC.ZeroAgent.xml} (86%)
diff --git a/_alp/Agents/ConnectionOwner/Levels/Level.level.xml b/_alp/Agents/ConnectionOwner/Levels/Level.level.xml
index 9175da5a..18a5c013 100644
--- a/_alp/Agents/ConnectionOwner/Levels/Level.level.xml
+++ b/_alp/Agents/ConnectionOwner/Levels/Level.level.xml
@@ -133,6 +133,7 @@
false
1675071708039
+ true
660
350
diff --git a/_alp/Agents/EnergyCoop/AOC.EnergyCoop.xml b/_alp/Agents/EnergyCoop/AOC.EnergyCoop.xml
index 84ee83ce..8eb5dff7 100644
--- a/_alp/Agents/EnergyCoop/AOC.EnergyCoop.xml
+++ b/_alp/Agents/EnergyCoop/AOC.EnergyCoop.xml
@@ -8,7 +8,11 @@
import zeroPackage.ZeroMath;
//import zeroPackage.ZeroAccumulator;
-import java.util.EnumSet;]]>
+import java.util.EnumSet;
+
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")]]>
zero_engine
Actor
@@ -20,11 +24,47 @@ import java.util.EnumSet;]]>
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
I_EnergyData
diff --git a/_alp/Agents/EnergyModel/AOC.EnergyModel.xml b/_alp/Agents/EnergyModel/AOC.EnergyModel.xml
index 745deee8..21ffa2d2 100644
--- a/_alp/Agents/EnergyModel/AOC.EnergyModel.xml
+++ b/_alp/Agents/EnergyModel/AOC.EnergyModel.xml
@@ -3,7 +3,7 @@
1658477103140
-
+//import zero_engine.J_EAConsumption;
+]]>
I_EnergyData
1658477103135
+ true
50
-50
@@ -169,6 +177,7 @@ v_liveData.assetsMetaData = v_liveAssetsMetaData;]]>
1696520909218
+ true
40
-180
diff --git a/_alp/Agents/EnergyModel/EmbeddedObjects.xml b/_alp/Agents/EnergyModel/EmbeddedObjects.xml
index 9395f603..5620aaac 100644
--- a/_alp/Agents/EnergyModel/EmbeddedObjects.xml
+++ b/_alp/Agents/EnergyModel/EmbeddedObjects.xml
@@ -368,9 +368,6 @@
-
-
-
@@ -383,12 +380,6 @@
-
-
-
-
-
-
true
@@ -446,84 +437,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
true
@@ -587,33 +512,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -678,19 +576,19 @@
-
+
-
+
-
+
-
+
-
+
@@ -720,10 +618,10 @@
-
+
-
+
true
@@ -788,24 +686,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -933,29 +813,16 @@
true
zero_engine
- GovernmentLayer
+ ZeroAgent
zero_engine
- GovernmentLayer
+ ZeroAgent
1660731364523
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
true
@@ -1052,21 +919,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1094,42 +949,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1139,18 +970,12 @@
-
-
-
-
-
-
true
@@ -1250,9 +1075,6 @@
-
-
-
@@ -1289,9 +1111,6 @@
-
-
-
@@ -1457,9 +1276,6 @@
-
-
-
@@ -1595,51 +1411,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -2114,9 +1888,6 @@
-
-
-
@@ -2492,9 +2263,6 @@
-
-
-
@@ -2570,27 +2338,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -2609,24 +2359,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
true
@@ -2772,42 +2504,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_alp/Agents/GridConnection/AOC.GridConnection.xml b/_alp/Agents/GridConnection/AOC.GridConnection.xml
index 4a7f4a2d..7d562ce2 100644
--- a/_alp/Agents/GridConnection/AOC.GridConnection.xml
+++ b/_alp/Agents/GridConnection/AOC.GridConnection.xml
@@ -20,7 +20,11 @@ import java.io.*;
import zeroPackage.ZeroMath;
//import zeroPackage.ZeroAccumulator;
-import javax.management.RuntimeErrorException;]]>
+import javax.management.RuntimeErrorException;
+
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")]]>
I_EnergyData
0){
//Current timestep
double currentTime_h = energyModel.t_h-energyModel.p_runStartTime_h;
+v_liveData.addTimeStep(currentTime_h,
+ fm_currentBalanceFlows_kW,
+ fm_currentConsumptionFlows_kW,
+ fm_currentProductionFlows_kW,
+ v_currentPrimaryEnergyProduction_kW,
+ v_currentFinalEnergyConsumption_kW,
+ v_currentPrimaryEnergyProductionHeatpumps_kW,
+ v_currentEnergyCurtailed_kW,
+ v_assetFlows
+);
+
+double currentSOC = 0;
+if(v_liveAssetsMetaData.totalInstalledBatteryStorageCapacity_MWh > 0){
+ currentSOC = (v_batteryStoredEnergy_kWh/1000)/v_liveAssetsMetaData.totalInstalledBatteryStorageCapacity_MWh;
+}
+v_liveData.data_batterySOC_fr.add(currentTime_h, roundToDecimal(currentSOC, 3));
+
+/*
//Energy carrier flows
for (OL_EnergyCarriers EC : v_activeConsumptionEnergyCarriers) {
v_liveData.dsm_liveDemand_kW.get(EC).add( currentTime_h, roundToDecimal(fm_currentConsumptionFlows_kW.get(EC), 3) );
@@ -1455,7 +1545,7 @@ else if (flowsMap.get(EC) > 0){
v_districtHeatDelivery_kW = max(0,fm_currentBalanceFlows_kW.get(OL_EnergyCarriers.HEAT));
//}
v_liveData.data_districtHeatDelivery_kW.add(currentTime_h, roundToDecimal(v_districtHeatDelivery_kW, 3));
-
+*/
/*ALCODEEND*/}
@@ -1463,78 +1553,15 @@ else if (flowsMap.get(EC) > 0){
{/*ALCODESTART::1722518905501*/
v_maxConnectionLoad_fr = max(v_maxConnectionLoad_fr, abs(fm_currentBalanceFlows_kW.get(OL_EnergyCarriers.ELECTRICITY) / v_liveConnectionMetaData.contractedDeliveryCapacity_kW ));
-// Further Subdivision of asset types within energy carriers
-v_fixedConsumptionElectric_kW = 0;
-for (J_EA j_ea : c_fixedConsumptionElectricAssets) {
- v_fixedConsumptionElectric_kW += j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_hydrogenElectricityConsumption_kW = 0;
-for (J_EA j_ea : c_electrolyserAssets) {
- v_hydrogenElectricityConsumption_kW += j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_heatPumpElectricityConsumption_kW = 0;
-for (J_EA j_ea : c_electricHeatpumpAssets) {
- v_heatPumpElectricityConsumption_kW += j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_evChargingPowerElectric_kW = 0;
-for (J_EA j_ea : c_EvAssets) {
- if (j_ea instanceof J_EAEV) {
- if (((J_EAEV)j_ea).vehicleScaling == 0) {
- continue;
- }
- }
- v_evChargingPowerElectric_kW += j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_batteryPowerElectric_kW = 0;
-v_batteryStoredEnergy_kWh = 0;
-for (J_EA j_ea : c_batteryAssets) {
- if (((J_EAStorageElectric)j_ea).getCapacityElectric_kW() != 0 && ((J_EAStorageElectric)j_ea).getStorageCapacity_kWh() != 0) {
- v_batteryPowerElectric_kW += j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
- v_batteryStoredEnergy_kWh += ((J_EAStorageElectric)j_ea).getStorageCapacity_kWh()*((J_EAStorageElectric)j_ea).getCurrentStateOfCharge();
-
- }
-}
-
-v_CHPProductionElectric_kW = 0;
-for (J_EA j_ea : c_chpAssets) {
- v_CHPProductionElectric_kW -= j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_pvProductionElectric_kW = 0;
-for (J_EA j_ea : c_pvAssets) {
- v_pvProductionElectric_kW -= j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_windProductionElectric_kW = 0;
-for (J_EA j_ea : c_windAssets) {
- v_windProductionElectric_kW -= j_ea.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY);
-}
-
-v_ptProductionHeat_kW = 0;
-for (J_EA j_ea : c_ptAssets) {
- v_ptProductionHeat_kW -= j_ea.getLastFlows().get(OL_EnergyCarriers.HEAT);
-}
-
-v_assetFlows.setFlows(v_fixedConsumptionElectric_kW,
- v_heatPumpElectricityConsumption_kW,
- max(0,v_evChargingPowerElectric_kW),
- max(0,v_batteryPowerElectric_kW),
- v_hydrogenElectricityConsumption_kW,
- v_electricHobConsumption_kW,
- v_districtHeatDelivery_kW,
- v_pvProductionElectric_kW,
- v_windProductionElectric_kW,
- v_ptProductionHeat_kW,
- v_CHPProductionElectric_kW,
- max(0,-v_batteryPowerElectric_kW),
- max(0,-v_evChargingPowerElectric_kW),
- v_batteryStoredEnergy_kWh/1000);
-
-v_rapidRunData.addTimeStep(fm_currentBalanceFlows_kW, fm_currentConsumptionFlows_kW, fm_currentProductionFlows_kW, v_currentPrimaryEnergyProduction_kW, v_currentFinalEnergyConsumption_kW, v_currentPrimaryEnergyProductionHeatpumps_kW, v_currentEnergyCurtailed_kW, v_assetFlows, energyModel);
+v_rapidRunData.addTimeStep(fm_currentBalanceFlows_kW,
+ fm_currentConsumptionFlows_kW,
+ fm_currentProductionFlows_kW,
+ v_currentPrimaryEnergyProduction_kW,
+ v_currentFinalEnergyConsumption_kW,
+ v_currentPrimaryEnergyProductionHeatpumps_kW,
+ v_currentEnergyCurtailed_kW,
+ v_assetFlows,
+ energyModel);
/*
double currentImport_kW = 0.0;
diff --git a/_alp/Agents/GridConnection/Code/Functions.xml b/_alp/Agents/GridConnection/Code/Functions.xml
index 80aa56e7..4028ed92 100644
--- a/_alp/Agents/GridConnection/Code/Functions.xml
+++ b/_alp/Agents/GridConnection/Code/Functions.xml
@@ -569,7 +569,7 @@
1722518225504
930
- 650
+ 670
10
0
@@ -585,7 +585,7 @@
1722518905501
930
- 670
+ 650
10
0
diff --git a/_alp/Agents/GovernmentLayer/AOC.GovernmentLayer.xml b/_alp/Agents/ZeroAgent/AOC.ZeroAgent.xml
similarity index 86%
rename from _alp/Agents/GovernmentLayer/AOC.GovernmentLayer.xml
rename to _alp/Agents/ZeroAgent/AOC.ZeroAgent.xml
index 5ec4ff74..a4aa9e09 100644
--- a/_alp/Agents/GovernmentLayer/AOC.GovernmentLayer.xml
+++ b/_alp/Agents/ZeroAgent/AOC.ZeroAgent.xml
@@ -1,25 +1,21 @@
1660731364525
-
-
- zero_engine
- Actor
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ true
+
false
1660731364523
@@ -115,6 +111,7 @@
1660731364520
+ true
50
-50
@@ -140,6 +137,7 @@
1660732002822
+ true
50
-100
diff --git a/_alp/Classes/Class.I_EnergyData.java b/_alp/Classes/Class.I_EnergyData.java
index f3a8387d..1739fcb8 100644
--- a/_alp/Classes/Class.I_EnergyData.java
+++ b/_alp/Classes/Class.I_EnergyData.java
@@ -1,3 +1,7 @@
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+
public interface I_EnergyData{
J_RapidRunData getRapidRunData();
J_LiveData getLiveData();
diff --git a/_alp/Classes/Class.J_ActivityTracker.java b/_alp/Classes/Class.J_ActivityTracker.java
index 7619e03f..4851b6e3 100644
--- a/_alp/Classes/Class.J_ActivityTracker.java
+++ b/_alp/Classes/Class.J_ActivityTracker.java
@@ -11,7 +11,6 @@ public class J_ActivityTracker implements Serializable {
public int nbActivities = 0;
public int v_eventIndex = 0;
protected int v_eventIndexStored =0;
-
/**
* Default constructor
diff --git a/_alp/Classes/Class.J_AssetFlows.java b/_alp/Classes/Class.J_AssetFlows.java
index 90bb30ad..1ad0ebc8 100644
--- a/_alp/Classes/Class.J_AssetFlows.java
+++ b/_alp/Classes/Class.J_AssetFlows.java
@@ -1,4 +1,4 @@
-/**
+ /**
* J_AssetFlows
*/
public class J_AssetFlows implements Serializable {
@@ -57,20 +57,20 @@ public void setFlows(
}
public void addFlows(J_AssetFlows assetFlows){
- this.fixedConsumptionElectric_kW += fixedConsumptionElectric_kW;
- this.heatPumpElectricityConsumption_kW += heatPumpElectricityConsumption_kW;
- this.evChargingPowerElectric_kW += evChargingPowerElectric_kW;
- this.currentBatteriesConsumption_kW += currentBatteriesConsumption_kW;
- this.hydrogenElectricityConsumption_kW += hydrogenElectricityConsumption_kW;
- this.electricHobConsumption_kW += electricHobConsumption_kW;
- this.districtHeatDelivery_kW += districtHeatDelivery_kW;
- this.pvProductionElectric_kW += pvProductionElectric_kW;
- this.windProductionElectric_kW += windProductionElectric_kW;
- this.ptProductionHeat_kW += ptProductionHeat_kW;
- this.CHPProductionElectric_kW += CHPProductionElectric_kW;
- this.currentBatteriesProduction_kW += currentBatteriesProduction_kW;
- this.currentV2GProduction_kW += currentV2GProduction_kW;
- this.currentStoredEnergyBatteries_MWh += currentStoredEnergyBatteries_MWh;
+ this.fixedConsumptionElectric_kW += assetFlows.fixedConsumptionElectric_kW;
+ this.heatPumpElectricityConsumption_kW += assetFlows.heatPumpElectricityConsumption_kW;
+ this.evChargingPowerElectric_kW += assetFlows.evChargingPowerElectric_kW;
+ this.currentBatteriesConsumption_kW += assetFlows.currentBatteriesConsumption_kW;
+ this.hydrogenElectricityConsumption_kW += assetFlows.hydrogenElectricityConsumption_kW;
+ this.electricHobConsumption_kW += assetFlows.electricHobConsumption_kW;
+ this.districtHeatDelivery_kW += assetFlows.districtHeatDelivery_kW;
+ this.pvProductionElectric_kW += assetFlows.pvProductionElectric_kW;
+ this.windProductionElectric_kW += assetFlows.windProductionElectric_kW;
+ this.ptProductionHeat_kW += assetFlows.ptProductionHeat_kW;
+ this.CHPProductionElectric_kW += assetFlows.CHPProductionElectric_kW;
+ this.currentBatteriesProduction_kW += assetFlows.currentBatteriesProduction_kW;
+ this.currentV2GProduction_kW += assetFlows.currentV2GProduction_kW;
+ this.currentStoredEnergyBatteries_MWh += assetFlows.currentStoredEnergyBatteries_MWh;
}
diff --git a/_alp/Classes/Class.J_AssetsMetaData.java b/_alp/Classes/Class.J_AssetsMetaData.java
index 431de031..8e1ca025 100644
--- a/_alp/Classes/Class.J_AssetsMetaData.java
+++ b/_alp/Classes/Class.J_AssetsMetaData.java
@@ -3,6 +3,9 @@
*/
import java.util.EnumSet;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
public class J_AssetsMetaData {
@@ -31,6 +34,10 @@ public class J_AssetsMetaData {
/**
* Default constructor
*/
+ public J_AssetsMetaData() {
+
+ }
+
public J_AssetsMetaData(Agent parentAgent) {
this.parentAgent = parentAgent;
}
diff --git a/_alp/Classes/Class.J_ConnectionMetaData.java b/_alp/Classes/Class.J_ConnectionMetaData.java
index 47161c9f..35077689 100644
--- a/_alp/Classes/Class.J_ConnectionMetaData.java
+++ b/_alp/Classes/Class.J_ConnectionMetaData.java
@@ -15,6 +15,10 @@ public class J_ConnectionMetaData implements Serializable {
/**
* Default constructor
*/
+ public J_ConnectionMetaData() {
+
+ }
+
public J_ConnectionMetaData( Agent parentAgent) {
this.parentAgent = parentAgent;
if (parentAgent instanceof GridConnection) {
diff --git a/_alp/Classes/Class.J_EA.java b/_alp/Classes/Class.J_EA.java
index fd64a68f..bfbe4d05 100644
--- a/_alp/Classes/Class.J_EA.java
+++ b/_alp/Classes/Class.J_EA.java
@@ -3,6 +3,9 @@
*/
import java.util.EnumSet;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
abstract public class J_EA implements Cloneable {
protected Agent parentAgent;
diff --git a/_alp/Classes/Class.J_EAEV.java b/_alp/Classes/Class.J_EAEV.java
index 57d46709..9e4bc208 100644
--- a/_alp/Classes/Class.J_EAEV.java
+++ b/_alp/Classes/Class.J_EAEV.java
@@ -1,6 +1,9 @@
/**
* J_EAEV
*/
+import com.fasterxml.jackson.annotation.JsonTypeName;
+
+//@JsonTypeName("J_EAEV")
public class J_EAEV extends J_EAVehicle implements Serializable {
diff --git a/_alp/Classes/Class.J_EAVehicle.java b/_alp/Classes/Class.J_EAVehicle.java
index 5e56c272..4fde3309 100644
--- a/_alp/Classes/Class.J_EAVehicle.java
+++ b/_alp/Classes/Class.J_EAVehicle.java
@@ -1,6 +1,17 @@
/**
* J_EAVehicle
*/
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "Type" // 👈 this will be the field name in your JSON
+ )
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
public abstract class J_EAVehicle extends J_EA implements Serializable {
public boolean available = true;
protected boolean availableStored = true;
diff --git a/_alp/Classes/Class.J_LiveData.java b/_alp/Classes/Class.J_LiveData.java
index 7967a5ce..9e995310 100644
--- a/_alp/Classes/Class.J_LiveData.java
+++ b/_alp/Classes/Class.J_LiveData.java
@@ -82,6 +82,88 @@ public void resetLiveDatasets(double startTime, double endTime, double timeStep_
}
}
+ public void addTimeStep(double currentTime_h, J_FlowsMap fm_currentBalanceFlows_kW, J_FlowsMap fm_currentConsumptionFlows_kW, J_FlowsMap fm_currentProductionFlows_kW, double v_currentPrimaryEnergyProduction_kW, double v_currentFinalEnergyConsumption_kW, double v_currentPrimaryEnergyProductionHeatpumps_kW, double v_currentEnergyCurtailed_kW, J_AssetFlows assetFlows) {
+ //Energy carrier flows
+ for (OL_EnergyCarriers EC : activeConsumptionEnergyCarriers) {
+ this.dsm_liveDemand_kW.get(EC).add( currentTime_h, roundToDecimal(fm_currentConsumptionFlows_kW.get(EC), 3) );
+ }
+ for (OL_EnergyCarriers EC : activeProductionEnergyCarriers) {
+ this.dsm_liveSupply_kW.get(EC).add( currentTime_h, roundToDecimal(fm_currentProductionFlows_kW.get(EC), 3) );
+ }
+
+ //Electricity balance
+ this.data_liveElectricityBalance_kW.add(currentTime_h, fm_currentBalanceFlows_kW.get(OL_EnergyCarriers.ELECTRICITY));
+
+
+ //Total demand and supply
+ this.data_totalDemand_kW.add(currentTime_h, v_currentFinalEnergyConsumption_kW);
+ this.data_totalSupply_kW.add(currentTime_h, v_currentPrimaryEnergyProduction_kW);
+
+
+ //Live capacity datasets
+ this.data_gridCapacityDemand_kW.add(currentTime_h, connectionMetaData.contractedDeliveryCapacity_kW);
+ this.data_gridCapacitySupply_kW.add(currentTime_h, -connectionMetaData.contractedFeedinCapacity_kW);
+
+
+ //// Gather specific electricity flows from corresponding energy assets
+
+ //Baseload electricity
+
+ this.data_baseloadElectricityDemand_kW.add(currentTime_h, roundToDecimal(assetFlows.fixedConsumptionElectric_kW,3));
+
+
+ //Cooking
+
+ this.data_cookingElectricityDemand_kW.add(currentTime_h, roundToDecimal(assetFlows.electricHobConsumption_kW, 3));
+
+
+ //Hydrogen elec consumption
+
+ this.data_hydrogenElectricityDemand_kW.add(currentTime_h, roundToDecimal(max(0, assetFlows.hydrogenElectricityConsumption_kW), 3));
+
+
+ //Heatpump elec consumption
+
+ this.data_heatPumpElectricityDemand_kW.add(currentTime_h, roundToDecimal(max(0, assetFlows.heatPumpElectricityConsumption_kW), 3));
+
+
+ //EVs
+
+ this.data_electricVehicleDemand_kW.add(currentTime_h, roundToDecimal(max(0,assetFlows.evChargingPowerElectric_kW), 3));
+ this.data_V2GSupply_kW.add(currentTime_h, roundToDecimal(max(0, -assetFlows.evChargingPowerElectric_kW), 3));
+
+
+ //Batteries
+ this.data_batteryCharging_kW.add(currentTime_h, roundToDecimal(assetFlows.currentBatteriesConsumption_kW, 3));
+ this.data_batteryDischarging_kW.add(currentTime_h, roundToDecimal(assetFlows.currentBatteriesProduction_kW, 3));
+ this.data_batteryStoredEnergyLiveWeek_MWh.add(currentTime_h, assetFlows.currentStoredEnergyBatteries_MWh);
+
+ //CHP production
+ this.data_CHPElectricityProductionLiveWeek_kW.add(currentTime_h, roundToDecimal(assetFlows.CHPProductionElectric_kW, 3));
+
+
+ //PV production
+ if (assetFlows.pvProductionElectric_kW < 0) {
+ throw new RuntimeException("Negative assetFlows.pvProductionElectric_kW! Curtailment error? Value: " + assetFlows.pvProductionElectric_kW );
+
+ //pauseSimulation();
+ }
+ this.data_PVGeneration_kW.add(currentTime_h, roundToDecimal(assetFlows.pvProductionElectric_kW , 3));
+
+
+ //Wind production
+ this.data_windGeneration_kW.add(currentTime_h, roundToDecimal(assetFlows.windProductionElectric_kW, 3));
+
+
+ //PT production
+ this.data_PTGeneration_kW.add(currentTime_h, roundToDecimal(assetFlows.ptProductionHeat_kW, 3));
+
+
+ //District heating
+ this.data_districtHeatDelivery_kW.add(currentTime_h, roundToDecimal(assetFlows.districtHeatDelivery_kW, 3));
+
+ }
+
public String toString() {
return super.toString();
}
diff --git a/_alp/Classes/Class.J_ProfileForecaster.java b/_alp/Classes/Class.J_ProfileForecaster.java
index fcd7dfa9..c4d91834 100644
--- a/_alp/Classes/Class.J_ProfileForecaster.java
+++ b/_alp/Classes/Class.J_ProfileForecaster.java
@@ -3,15 +3,19 @@
*/
public class J_ProfileForecaster implements Serializable {
- private String name = "";
- private J_ProfilePointer profilePointer;
- private double forecastTime_h = 0;
- private double timeStep_h = 0;
+ public String name = "";
+ public J_ProfilePointer profilePointer;
+ public double forecastTime_h = 0;
+ public double timeStep_h = 0;
private double currentForecast = 0;
/**
* Default constructor
*/
+ public J_ProfileForecaster() {
+
+ }
+
public J_ProfileForecaster(String forecastName, J_ProfilePointer pp, double forecastTime_h, double currentTime_h, double timeStep_h) {
if (forecastName == null) {
this.name = pp.name + " " + forecastTime_h + " h";
diff --git a/_alp/Classes/Class.J_ProfilePointer.java b/_alp/Classes/Class.J_ProfilePointer.java
index 53dba3f4..b2db6f37 100644
--- a/_alp/Classes/Class.J_ProfilePointer.java
+++ b/_alp/Classes/Class.J_ProfilePointer.java
@@ -9,6 +9,10 @@ public class J_ProfilePointer implements Serializable {
/**
* Default constructor
*/
+ public J_ProfilePointer() {
+
+ }
+
public J_ProfilePointer(String name, TableFunction tableFunction) {
this.name = name;
this.tableFunction = tableFunction;
From bd14985470ed36ce8d84ecf884faf8df5649a6d1 Mon Sep 17 00:00:00 2001
From: GillisHommen <98752265+GillisHommen@users.noreply.github.com>
Date: Thu, 24 Jul 2025 08:50:45 +0200
Subject: [PATCH 3/3] Added J_BatteryManagementSelfConsumptionGridNode
And many annotations for (de-)serialisation. Also had to set some objects to public instead of private. (mostly agent collections)
---
Zero_engine.alpx | 33 +
Zero_engine.original.alp | 61099 ++++++++++++++++
.../ConnectionOwner/AOC.ConnectionOwner.xml | 6 +-
_alp/Agents/EnergyCoop/AOC.EnergyCoop.xml | 40 +-
_alp/Agents/EnergyCoop/Code/Functions.java | 4 +-
_alp/Agents/EnergyCoop/Variables.xml | 4 +-
_alp/Agents/EnergyModel/AOC.EnergyModel.xml | 1 +
.../EnergyModel/Code/AdditionalClassCode.java | 16 +-
_alp/Agents/EnergyModel/EmbeddedObjects.xml | 267 +
_alp/Agents/EnergyModel/Variables.xml | 24 +-
.../AOC.GovernmentLayer.xml} | 20 -
.../GridConnection/AOC.GridConnection.xml | 25 +
.../Code/AdditionalClassCode.java | 17 +-
.../Agents/GridConnection/Code/Functions.java | 2 +-
_alp/Agents/GridNode/Code/Functions.java | 6 +-
_alp/Agents/GridNode/Variables.xml | 8 +
_alp/Agents/GridOperator/Variables.xml | 31 +-
_alp/Classes/Class.AgentMixin.java | 63 +
_alp/Classes/Class.DataSetMixin.java | 32 +
_alp/Classes/Class.EnergyModelMixin.java | 63 +
_alp/Classes/Class.I_BatteryManagement.java | 18 +
_alp/Classes/Class.IgnoreClassMixin.java | 56 +
_alp/Classes/Class.J_AccumulatorMap.java | 2 +
_alp/Classes/Class.J_ActivityTracker.java | 11 +
_alp/Classes/Class.J_AssetsMetaData.java | 2 +-
...ss.J_BatteryManagementSelfConsumption.java | 15 +
...teryManagementSelfConsumptionGridNode.java | 55 +
_alp/Classes/Class.J_Contract.java | 14 +
_alp/Classes/Class.J_DataSetMap.java | 3 +-
_alp/Classes/Class.J_DeliveryContract.java | 18 +-
_alp/Classes/Class.J_EA.java | 35 +
_alp/Classes/Class.J_EABuilding.java | 2 +
_alp/Classes/Class.J_EAVehicle.java | 7 -
_alp/Classes/Class.J_FlowsMap.java | 3 +-
_alp/Classes/Class.J_LiveData.java | 2 +
_alp/Classes/Class.J_ProfilePointer.java | 14 +
_alp/Classes/Class.J_RapidRunData.java | 2 +
_alp/Classes/Class.J_TaxContract.java | 3 +
_alp/Classes/Class.J_TransportContract.java | 5 +
_alp/Classes/Class.PopulationMixin.java | 53 +
_alp/Classes/Class.TableFunctionMixin.java | 29 +
_alp/Classes/Class.ZeroAccumulator.java | 3 +-
_alp/Classes/Class.ZeroTimeSeries.java | 2 +
43 files changed, 62030 insertions(+), 85 deletions(-)
create mode 100644 Zero_engine.original.alp
rename _alp/Agents/{ZeroAgent/AOC.ZeroAgent.xml => GovernmentLayer/AOC.GovernmentLayer.xml} (90%)
create mode 100644 _alp/Classes/Class.AgentMixin.java
create mode 100644 _alp/Classes/Class.DataSetMixin.java
create mode 100644 _alp/Classes/Class.EnergyModelMixin.java
create mode 100644 _alp/Classes/Class.IgnoreClassMixin.java
create mode 100644 _alp/Classes/Class.J_BatteryManagementSelfConsumptionGridNode.java
create mode 100644 _alp/Classes/Class.PopulationMixin.java
create mode 100644 _alp/Classes/Class.TableFunctionMixin.java
diff --git a/Zero_engine.alpx b/Zero_engine.alpx
index d81b2321..b7f9f053 100644
--- a/Zero_engine.alpx
+++ b/Zero_engine.alpx
@@ -970,6 +970,10 @@
1725879557284
+
@@ -2281,7 +2281,7 @@
true
ArrayList
- Agent
+ Actor
Object
diff --git a/_alp/Agents/EnergyModel/AOC.EnergyModel.xml b/_alp/Agents/EnergyModel/AOC.EnergyModel.xml
index 21ffa2d2..79ae2d90 100644
--- a/_alp/Agents/EnergyModel/AOC.EnergyModel.xml
+++ b/_alp/Agents/EnergyModel/AOC.EnergyModel.xml
@@ -18,6 +18,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import java.lang.reflect.Field;
import java.io.FileOutputStream;
import java.util.stream.Stream;
diff --git a/_alp/Agents/EnergyModel/Code/AdditionalClassCode.java b/_alp/Agents/EnergyModel/Code/AdditionalClassCode.java
index 265a0087..d9a439f9 100644
--- a/_alp/Agents/EnergyModel/Code/AdditionalClassCode.java
+++ b/_alp/Agents/EnergyModel/Code/AdditionalClassCode.java
@@ -1,4 +1,18 @@
public OL_ResultScope getScope(){return OL_ResultScope.ENERGYMODEL;}
public J_RapidRunData getRapidRunData(){return v_rapidRunData;}
public J_LiveData getLiveData(){return v_liveData;}
-public J_RapidRunData getPreviousRapidRunData(){return v_previousRunData;}
\ No newline at end of file
+public J_RapidRunData getPreviousRapidRunData(){return v_previousRunData;}
+
+public static void forceSetOwner(Agent agent, AgentArrayList pop) throws Exception {
+ Agent owner = pop.getOwner();
+ Field f = Agent.class.getDeclaredField("d");
+ f.setAccessible(true);
+ f.set(agent, owner);
+ Field ff = Agent.class.getDeclaredField("j");
+ ff.setAccessible(true);
+ ff.set(agent, pop);
+ /*Field c = Agent.class.getDeclaredField("c");
+ traceln("Field c: %s", c);
+ c.setAccessible(true);
+ c.toString();*/
+}
\ No newline at end of file
diff --git a/_alp/Agents/EnergyModel/EmbeddedObjects.xml b/_alp/Agents/EnergyModel/EmbeddedObjects.xml
index 8f2c54d2..c2e02fda 100644
--- a/_alp/Agents/EnergyModel/EmbeddedObjects.xml
+++ b/_alp/Agents/EnergyModel/EmbeddedObjects.xml
@@ -380,6 +380,15 @@
+
+
+
+
+
+
+
+
+
true
@@ -449,6 +458,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -518,6 +593,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -692,6 +794,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -979,6 +1099,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -1132,6 +1291,12 @@
+
+
+
+
+
+
true
@@ -1285,6 +1450,9 @@
+
+
+
true
@@ -1438,6 +1606,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -1897,6 +2107,9 @@
+
+
+
true
@@ -2380,6 +2593,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -2534,6 +2768,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
diff --git a/_alp/Agents/EnergyModel/Variables.xml b/_alp/Agents/EnergyModel/Variables.xml
index 93bf7d20..bc5d8b08 100644
--- a/_alp/Agents/EnergyModel/Variables.xml
+++ b/_alp/Agents/EnergyModel/Variables.xml
@@ -2435,7 +2435,7 @@
false
true
true
-
+
ArrayList
ConnectionOwner
String
@@ -2489,7 +2489,7 @@
false
true
true
-
+
ArrayList
GridConnection
String
@@ -2653,7 +2653,7 @@
false
true
true
-
+
ArrayList
Actor
String
@@ -2805,4 +2805,22 @@
String
+
+ 1753288831771
+
+ 87
+ -105
+
+ 10
+ 0
+
+ false
+ true
+ true
+
+ ArrayList
+ GridNode
+ String
+
+
diff --git a/_alp/Agents/ZeroAgent/AOC.ZeroAgent.xml b/_alp/Agents/GovernmentLayer/AOC.GovernmentLayer.xml
similarity index 90%
rename from _alp/Agents/ZeroAgent/AOC.ZeroAgent.xml
rename to _alp/Agents/GovernmentLayer/AOC.GovernmentLayer.xml
index 342bd3cf..14435dc5 100644
--- a/_alp/Agents/ZeroAgent/AOC.ZeroAgent.xml
+++ b/_alp/Agents/GovernmentLayer/AOC.GovernmentLayer.xml
@@ -138,26 +138,6 @@
END
-
-
- 1660732002822
-
- true
- 50
- -100
-
- 10
- 0
-
- false
- true
- true
-
- zero_engine
- EnergyModel
-
-
-
1660731364524
diff --git a/_alp/Agents/GridConnection/AOC.GridConnection.xml b/_alp/Agents/GridConnection/AOC.GridConnection.xml
index dddf8f1c..eb11f0dc 100644
--- a/_alp/Agents/GridConnection/AOC.GridConnection.xml
+++ b/_alp/Agents/GridConnection/AOC.GridConnection.xml
@@ -18,6 +18,7 @@ import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.io.*;
+import java.lang.reflect.Field;
import zeroPackage.ZeroMath;
//import zeroPackage.ZeroAccumulator;
@@ -25,6 +26,30 @@ import javax.management.RuntimeErrorException;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "type" // 👈 this will be the field name in your JSON
+ )
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = GCDistrictHeating.class, name = "GCDistrictHeating"),
+ @JsonSubTypes.Type(value = GCEnergyConversion.class, name = "GCEnergyConversion"),
+ @JsonSubTypes.Type(value = GCEnergyProduction.class, name = "GCEnergyProduction"),
+ @JsonSubTypes.Type(value = GCGridBattery.class, name = "GCGridBattery"),
+ @JsonSubTypes.Type(value = GCHouse.class, name = "GCHouse"),
+ @JsonSubTypes.Type(value = GCNeighborhood.class, name = "GCNeighborhood"),
+ @JsonSubTypes.Type(value = GCPublicCharger.class, name = "GCPublicCharger"),
+ @JsonSubTypes.Type(value = GCUtility.class, name = "GCUtility"),
+ //@JsonSubTypes.Type(value = J_EAEV.class, name = "J_EAEV"),
+ //@JsonSubTypes.Type(value = J_EADieselVehicle.class, name = "J_EADieselVehicle"),
+
+ // Add other known subtypes here if needed
+})
+
+@JsonIgnoreProperties({"va_gridConnection","_origin_VA","_pl_powerFlows_autoUpdateEvent_xjal","_SOC_plot_autoUpdateEvent_xjal"})
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")]]>
I_EnergyData
1718111623480
+ true
47
1010
@@ -716,6 +717,7 @@ geupdate vanuit
1718111623645
+ true
47
1030
@@ -735,6 +737,7 @@ geupdate vanuit
1718111623647
+ true
47
1050
@@ -754,6 +757,7 @@ geupdate vanuit
1718111623649
+ true
47
1070
@@ -773,6 +777,7 @@ geupdate vanuit
1718111623651
+ true
47
1090
@@ -792,6 +797,7 @@ geupdate vanuit
1718111623653
+ true
47
1110
@@ -811,6 +817,7 @@ geupdate vanuit
1718111623655
+ true
47
1130
@@ -830,6 +837,7 @@ geupdate vanuit
1718111623657
+ true
47
1150
diff --git a/_alp/Agents/GridOperator/Variables.xml b/_alp/Agents/GridOperator/Variables.xml
index 1e5fc77d..bbd5e43f 100644
--- a/_alp/Agents/GridOperator/Variables.xml
+++ b/_alp/Agents/GridOperator/Variables.xml
@@ -136,6 +136,7 @@
1675355743791
+ true
60
270
@@ -175,6 +176,29 @@
+
+ 1753281672894
+
+
+ 60
+ 150
+
+ 10
+ 0
+
+ false
+ true
+ true
+
+
+
+
+
+
+
1660736411315
@@ -378,9 +402,10 @@
1675688426540
-
- 60
- 140
+
+ true
+ 480
+ 270
10
0
diff --git a/_alp/Classes/Class.AgentMixin.java b/_alp/Classes/Class.AgentMixin.java
new file mode 100644
index 00000000..096ccc96
--- /dev/null
+++ b/_alp/Classes/Class.AgentMixin.java
@@ -0,0 +1,63 @@
+/**
+ * AgentMixin
+ */
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.PUBLIC_ONLY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+//@JsonIgnoreProperties({"connections"})
+@JsonIgnoreProperties({"_origin_VA",
+ "gisRegion","p_uniqueColor","p_defaultFillColor","p_defaultLineColor",
+ "data_liveLoad_kW","data_liveCapacitySupply_kW", "data_liveCapacityDemand_kW",
+ "data_totalLoad_kW",
+ "data_summerWeekLoad_kW",
+ "data_winterWeekLoad_kW",
+ "va_gridNode",
+ "_pl_powerFlows_autoUpdateEvent_xjal"})
+
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+public abstract class AgentMixin implements Serializable {
+
+ /*@JsonIgnore
+ public abstract void setLocation();
+
+ @JsonIgnore
+ public abstract void getLocation();
+
+
+ @JsonIgnore
+ public abstract void setNetworkNode();
+
+ @JsonIgnore
+ public abstract void getNetworkNode();*/
+
+
+ /**
+ * Default constructor
+ */
+ /*public PopuplationMixin() {
+ }*/
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.DataSetMixin.java b/_alp/Classes/Class.DataSetMixin.java
new file mode 100644
index 00000000..52f2c3ca
--- /dev/null
+++ b/_alp/Classes/Class.DataSetMixin.java
@@ -0,0 +1,32 @@
+/**
+ * DataSetMixin
+ */
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+//@JsonIgnoreProperties({"connections"})
+//@JsonIgnoreProperties({"_origin_VA", "pp_windProduction_fr","energyDataViewer"})
+
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+public abstract class DataSetMixin implements Serializable {
+
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.EnergyModelMixin.java b/_alp/Classes/Class.EnergyModelMixin.java
new file mode 100644
index 00000000..5c250a76
--- /dev/null
+++ b/_alp/Classes/Class.EnergyModelMixin.java
@@ -0,0 +1,63 @@
+/**
+ * EnergyModelMixin
+ */
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/*@JsonAutoDetect(
+ fieldVisibility = Visibility.PUBLIC_ONLY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)*/
+@JsonIgnoreProperties({"p_cookingPatternCsv","p_householdTripsCsv","p_truckTripsCsv","connections",
+ "pop_gridNodes","pop_gridConnections","Houses","pop_connectionOwners","pop_energySuppliers","pop_energyCoops","pop_gridOperators","pop_GIS_Objects","pop_GIS_Parcels","pop_GIS_Buildings",
+ "DistrictHeatingSystems",
+ "GridBatteries",
+ "EnergyProductionSites",
+ "UtilityConnections",
+ "EnergyConversionSites",
+ "PublicChargers",
+ "Neighborhoods",
+ "va_engine"})
+//JsonIgnoreProperties({"color","VA_engine","_origin_VA","energyDataViewer"})
+
+
+public abstract class EnergyModelMixin implements Serializable {
+
+ /*@JsonIgnore
+ public abstract void setLocation();
+
+ @JsonIgnore
+ public abstract void getLocation();
+
+
+ @JsonIgnore
+ public abstract void setNetworkNode();
+
+ @JsonIgnore
+ public abstract void getNetworkNode();*/
+ /**
+ * Default constructor
+ */
+ /*public PopuplationMixin() {
+ }*/
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.I_BatteryManagement.java b/_alp/Classes/Class.I_BatteryManagement.java
index aab20286..7ac4fa0e 100644
--- a/_alp/Classes/Class.I_BatteryManagement.java
+++ b/_alp/Classes/Class.I_BatteryManagement.java
@@ -1,3 +1,21 @@
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "type" // 👈 this will be the field name in your JSON
+ )
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = J_BatteryManagementOff.class, name = "I_BatteryManagementOff"),
+ @JsonSubTypes.Type(value = J_BatteryManagementPeakShaving.class, name = "I_BatteryManagementPeakShaving"),
+ @JsonSubTypes.Type(value = J_BatteryManagementPeakShavingForecast.class, name = "I_BatteryManagementPeakShavingForecast"),
+ @JsonSubTypes.Type(value = J_BatteryManagementPrice.class, name = "I_BatteryManagementPrice"),
+ @JsonSubTypes.Type(value = J_BatteryManagementSelfConsumption.class, name = "I_BatteryManagementSelfConsumption"),
+ @JsonSubTypes.Type(value = J_BatteryManagementSelfConsumptionGridNode.class, name = "I_BatteryManagementSelfConsumptionGridNode"),
+})
+
+ // Add other known subtypes here if needed
+
public interface I_BatteryManagement
{
void manageBattery();
diff --git a/_alp/Classes/Class.IgnoreClassMixin.java b/_alp/Classes/Class.IgnoreClassMixin.java
new file mode 100644
index 00000000..030204e1
--- /dev/null
+++ b/_alp/Classes/Class.IgnoreClassMixin.java
@@ -0,0 +1,56 @@
+/**
+ * IgnoreClassMixin
+ */
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+//import com.fasterxml.jackson.annotation.JsonIgnoreType;
+
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.NONE, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+ )
+//@JsonIgnoreProperties({"connections"})
+
+
+//@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+
+//@JsonIgnoreType
+public abstract class IgnoreClassMixin implements Serializable {
+
+ /*@JsonIgnore
+ public abstract void setLocation();
+
+ @JsonIgnore
+ public abstract void getLocation();
+
+
+ @JsonIgnore
+ public abstract void setNetworkNode();
+
+ @JsonIgnore
+ public abstract void getNetworkNode();*/
+ /**
+ * Default constructor
+ */
+ /*public PopuplationMixin() {
+ }*/
+
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.J_AccumulatorMap.java b/_alp/Classes/Class.J_AccumulatorMap.java
index 8d54399a..54207ab8 100644
--- a/_alp/Classes/Class.J_AccumulatorMap.java
+++ b/_alp/Classes/Class.J_AccumulatorMap.java
@@ -5,6 +5,8 @@
import java.util.EnumSet;
//import zeroPackage.ZeroAccumulator;
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class J_AccumulatorMap implements Serializable {
private ZeroAccumulator[] accumulatorArray = new ZeroAccumulator[OL_EnergyCarriers.values().length]; // Use array with size of all possible energyCarriers; more than strictly needed but memory footprint is negligable anyway.;
diff --git a/_alp/Classes/Class.J_ActivityTracker.java b/_alp/Classes/Class.J_ActivityTracker.java
index 4851b6e3..ed977431 100644
--- a/_alp/Classes/Class.J_ActivityTracker.java
+++ b/_alp/Classes/Class.J_ActivityTracker.java
@@ -1,6 +1,17 @@
/**
* J_ActivityTracker
*/
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY,
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+ )
+
public class J_ActivityTracker implements Serializable {
protected EnergyModel energyModel;
diff --git a/_alp/Classes/Class.J_AssetsMetaData.java b/_alp/Classes/Class.J_AssetsMetaData.java
index 8e1ca025..c6b22de9 100644
--- a/_alp/Classes/Class.J_AssetsMetaData.java
+++ b/_alp/Classes/Class.J_AssetsMetaData.java
@@ -5,8 +5,8 @@
import java.util.EnumSet;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
-@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
public class J_AssetsMetaData {
public Agent parentAgent;
diff --git a/_alp/Classes/Class.J_BatteryManagementSelfConsumption.java b/_alp/Classes/Class.J_BatteryManagementSelfConsumption.java
index 8bd32f86..ece43d58 100644
--- a/_alp/Classes/Class.J_BatteryManagementSelfConsumption.java
+++ b/_alp/Classes/Class.J_BatteryManagementSelfConsumption.java
@@ -1,6 +1,17 @@
/**
* J_BatteryManagementSelfConsumption
*/
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY,
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
public class J_BatteryManagementSelfConsumption implements I_BatteryManagement {
private GridConnection gc;
@@ -8,6 +19,10 @@ public class J_BatteryManagementSelfConsumption implements I_BatteryManagement {
/**
* Default constructor
*/
+ public J_BatteryManagementSelfConsumption() {
+
+ }
+
public J_BatteryManagementSelfConsumption( GridConnection gc ) {
this.gc = gc;
}
diff --git a/_alp/Classes/Class.J_BatteryManagementSelfConsumptionGridNode.java b/_alp/Classes/Class.J_BatteryManagementSelfConsumptionGridNode.java
new file mode 100644
index 00000000..565c3424
--- /dev/null
+++ b/_alp/Classes/Class.J_BatteryManagementSelfConsumptionGridNode.java
@@ -0,0 +1,55 @@
+/**
+ * J_BatteryManagementSelfConsumption1
+ */
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY,
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+
+public class J_BatteryManagementSelfConsumptionGridNode implements I_BatteryManagement {
+
+ private GridConnection gc;
+
+ /**
+ * Default constructor
+ */
+ public J_BatteryManagementSelfConsumptionGridNode() {
+
+ }
+
+ public J_BatteryManagementSelfConsumptionGridNode( GridConnection gc ) {
+ this.gc = gc;
+ }
+
+ /**
+ * One of the simplest battery algorithms.
+ * This algorithm tries to steer the GridConnection load towards 0.
+ * If there is overproduction and room in the battery it will charge.
+ * If there is more consumption than production it will discharge the battery to make up for the difference untill the battery is empty.
+ */
+ public void manageBattery() {
+ double nodePreviousLoad_kW = gc.p_parentNodeElectric.v_currentLoad_kW;
+ double chargeSetpoint_kW = -(nodePreviousLoad_kW - gc.p_batteryAsset.getLastFlows().get(OL_EnergyCarriers.ELECTRICITY));
+
+ gc.p_batteryAsset.f_updateAllFlows( chargeSetpoint_kW / gc.p_batteryAsset.getCapacityElectric_kW() );
+ }
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.J_Contract.java b/_alp/Classes/Class.J_Contract.java
index 6a3e6a44..cb4b7135 100644
--- a/_alp/Classes/Class.J_Contract.java
+++ b/_alp/Classes/Class.J_Contract.java
@@ -1,3 +1,17 @@
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "type" // 👈 this will be the field name in your JSON
+ )
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = J_DeliveryContract.class, name = "J_DeliveryContract"),
+ @JsonSubTypes.Type(value = J_ConnectionContract.class, name = "J_ConnectionContract"),
+ @JsonSubTypes.Type(value = J_TransportContract.class, name = "J_TransportContract"),
+ @JsonSubTypes.Type(value = J_TaxContract.class, name = "J_TaxContract"),
+})
public class J_Contract implements Serializable {
diff --git a/_alp/Classes/Class.J_DataSetMap.java b/_alp/Classes/Class.J_DataSetMap.java
index 3ef13c4b..04983290 100644
--- a/_alp/Classes/Class.J_DataSetMap.java
+++ b/_alp/Classes/Class.J_DataSetMap.java
@@ -3,7 +3,8 @@
*/
//import java.util.EnumMap;
import java.util.EnumSet;
-
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class J_DataSetMap implements Serializable {
private DataSet[] datasetArray = new DataSet[OL_EnergyCarriers.values().length]; // Use array with size of all possible energyCarriers; more than strictly needed but memory footprint is negligable anyway.;
private EnumSet energyCarrierList = EnumSet.noneOf(OL_EnergyCarriers.class);
diff --git a/_alp/Classes/Class.J_DeliveryContract.java b/_alp/Classes/Class.J_DeliveryContract.java
index 8a80b4a5..3df46881 100644
--- a/_alp/Classes/Class.J_DeliveryContract.java
+++ b/_alp/Classes/Class.J_DeliveryContract.java
@@ -1,18 +1,34 @@
/**
* J_DeliveryContract
*/
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.PROTECTED_AND_PUBLIC, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+ )
+
public class J_DeliveryContract extends zero_engine.J_Contract implements Serializable {
//public String contractScope; // Kan energySupplier of Coop zijn (dus kan niet specifieker zijn dan 'String' hier, tenzij we Interfaces gaan gebruiken. ('Implements energy supplier')
public OL_DeliveryContractType deliveryContractType; // Fixed of variable
public double deliveryPrice_eurpkWh;
public double feedinPrice_eurpkWh;
- public double idx;
+ //public double idx;
//public OL_EnergyCarriers energyCarrier;
/**
* Constructor initializing the fields
*/
+ public J_DeliveryContract() {
+
+ }
+
public J_DeliveryContract(String contractScope, OL_DeliveryContractType contractType, OL_EnergyCarriers energyCarrier, double deliveryPrice_eurpkWh, double feedinPrice_eurpkWh, double annualFee_eur ) {
this.contractScope = contractScope; // ID of actor that is the other 'end' of this contract.
this.deliveryContractType = contractType; // Fixed or variable energy price?
diff --git a/_alp/Classes/Class.J_EA.java b/_alp/Classes/Class.J_EA.java
index 12ced429..0a35b50a 100644
--- a/_alp/Classes/Class.J_EA.java
+++ b/_alp/Classes/Class.J_EA.java
@@ -5,6 +5,41 @@
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "type" // 👈 this will be the field name in your JSON
+ )
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = J_EABuilding.class, name = "J_EABuilding"),
+ @JsonSubTypes.Type(value = J_EAStorageElectric.class, name = "J_EAStorageElectric"),
+ @JsonSubTypes.Type(value = J_EAStorageHeat.class, name = "J_EAStorageHeat"),
+ @JsonSubTypes.Type(value = J_EAConsumption.class, name = "J_EAConsumption"),
+ @JsonSubTypes.Type(value = J_EAProduction.class, name = "J_EAProduction"),
+ @JsonSubTypes.Type(value = J_EAProfile.class, name = "J_EAProfile"),
+ @JsonSubTypes.Type(value = J_EAConversionGasBurner.class, name = "J_EAConversionGasBurner"),
+ @JsonSubTypes.Type(value = J_EAConversionHeatPump.class, name = "J_EAConversionHeatPump"),
+ @JsonSubTypes.Type(value = J_EAEV.class, name = "J_EAEV"),
+ @JsonSubTypes.Type(value = J_EADieselVehicle.class, name = "J_EADieselVehicle"),
+
+ // Add other known subtypes here if needed
+})
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
abstract public class J_EA implements Cloneable {
diff --git a/_alp/Classes/Class.J_EABuilding.java b/_alp/Classes/Class.J_EABuilding.java
index b366f702..487f8fef 100644
--- a/_alp/Classes/Class.J_EABuilding.java
+++ b/_alp/Classes/Class.J_EABuilding.java
@@ -1,6 +1,8 @@
/**
* J_EABuilding
*/
+//import com.fasterxml.jackson.annotation.JsonTypeName;
+//@JsonTypeName("J_EABuilding")
public class J_EABuilding extends zero_engine.J_EAStorageHeat implements Serializable {
//public OL_EAStorageTypes heatStorageType;
diff --git a/_alp/Classes/Class.J_EAVehicle.java b/_alp/Classes/Class.J_EAVehicle.java
index 4fde3309..0c32a40f 100644
--- a/_alp/Classes/Class.J_EAVehicle.java
+++ b/_alp/Classes/Class.J_EAVehicle.java
@@ -4,14 +4,7 @@
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-@JsonTypeInfo(
- use = JsonTypeInfo.Id.NAME,
- include = JsonTypeInfo.As.PROPERTY,
- property = "Type" // 👈 this will be the field name in your JSON
- )
-@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
public abstract class J_EAVehicle extends J_EA implements Serializable {
public boolean available = true;
protected boolean availableStored = true;
diff --git a/_alp/Classes/Class.J_FlowsMap.java b/_alp/Classes/Class.J_FlowsMap.java
index 350cdfad..e027a1e8 100644
--- a/_alp/Classes/Class.J_FlowsMap.java
+++ b/_alp/Classes/Class.J_FlowsMap.java
@@ -3,7 +3,8 @@
*/
import zeroPackage.ZeroMath;
import java.util.EnumSet;
-
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class J_FlowsMap implements Serializable {
private double[] valuesArray = new double[OL_EnergyCarriers.values().length]; // Use array with size of all possible energyCarriers; more than strictly needed but memory footprint is negligable anyway.;
diff --git a/_alp/Classes/Class.J_LiveData.java b/_alp/Classes/Class.J_LiveData.java
index 9e995310..a861f289 100644
--- a/_alp/Classes/Class.J_LiveData.java
+++ b/_alp/Classes/Class.J_LiveData.java
@@ -2,6 +2,8 @@
/**
* J_LiveData
*/
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class J_LiveData {
public Agent parentAgent;
diff --git a/_alp/Classes/Class.J_ProfilePointer.java b/_alp/Classes/Class.J_ProfilePointer.java
index b2db6f37..464da714 100644
--- a/_alp/Classes/Class.J_ProfilePointer.java
+++ b/_alp/Classes/Class.J_ProfilePointer.java
@@ -1,6 +1,20 @@
/**
* J_ProfilePointer
*/
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.PUBLIC_ONLY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+
public class J_ProfilePointer implements Serializable {
public String name = "";
private double currentValue = 0;
diff --git a/_alp/Classes/Class.J_RapidRunData.java b/_alp/Classes/Class.J_RapidRunData.java
index df656f74..6d2a1e18 100644
--- a/_alp/Classes/Class.J_RapidRunData.java
+++ b/_alp/Classes/Class.J_RapidRunData.java
@@ -3,6 +3,8 @@
/**
* J_RapidRunData
*/
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class J_RapidRunData {
public Agent parentAgent;
diff --git a/_alp/Classes/Class.J_TaxContract.java b/_alp/Classes/Class.J_TaxContract.java
index 597724b6..c95c3bb4 100644
--- a/_alp/Classes/Class.J_TaxContract.java
+++ b/_alp/Classes/Class.J_TaxContract.java
@@ -10,6 +10,9 @@ public class J_TaxContract extends zero_engine.J_Contract implements Serializabl
public double proportionalTax_pct;
public double idx;
//public OL_EnergyCarriers energyCarrier;
+ public J_TaxContract() {
+
+ }
/**
* Constructor initializing the fields
diff --git a/_alp/Classes/Class.J_TransportContract.java b/_alp/Classes/Class.J_TransportContract.java
index f9840ac3..6e3473b5 100644
--- a/_alp/Classes/Class.J_TransportContract.java
+++ b/_alp/Classes/Class.J_TransportContract.java
@@ -14,6 +14,11 @@ public class J_TransportContract extends zero_engine.J_Contract implements Seria
/**
* Constructor initializing the fields
*/
+
+ public J_TransportContract() {
+
+ }
+
public J_TransportContract(String contractScope, OL_TransportContractType transportContractType, OL_EnergyCarriers energyCarrier, double bandwidthTreshold_kW, double bandwidthTariff_eurpkWh, double annualFee_eur ) {
this.contractScope = contractScope; // ID of actor that is the other 'end' of this contract.
this.energyCarrier = energyCarrier;
diff --git a/_alp/Classes/Class.PopulationMixin.java b/_alp/Classes/Class.PopulationMixin.java
new file mode 100644
index 00000000..865cd96b
--- /dev/null
+++ b/_alp/Classes/Class.PopulationMixin.java
@@ -0,0 +1,53 @@
+/**
+ * PopulationMixin
+ */
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+@JsonIgnoreProperties({"connections"})
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+public abstract class PopulationMixin implements Serializable {
+
+ /*@JsonIgnore
+ public abstract void setLocation();
+
+ @JsonIgnore
+ public abstract void getLocation();
+
+
+ @JsonIgnore
+ public abstract void setNetworkNode();
+
+ @JsonIgnore
+ public abstract void getNetworkNode();*/
+ /**
+ * Default constructor
+ */
+ /*public PopuplationMixin() {
+ }*/
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.TableFunctionMixin.java b/_alp/Classes/Class.TableFunctionMixin.java
new file mode 100644
index 00000000..0e1be32c
--- /dev/null
+++ b/_alp/Classes/Class.TableFunctionMixin.java
@@ -0,0 +1,29 @@
+/**
+ * TableFunctionMixin
+ */
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonAutoDetect(
+ fieldVisibility = Visibility.ANY, // ✅ only public fields are serialized
+ getterVisibility = Visibility.NONE,
+ isGetterVisibility = Visibility.NONE,
+ setterVisibility = Visibility.NONE,
+ creatorVisibility = Visibility.NONE
+)
+@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id")
+public abstract class TableFunctionMixin implements Serializable {
+
+ /**
+ * Default constructor
+ */
+ /**
+ * This number is here for model snapshot storing purpose
+ * It needs to be changed when this class gets changed
+ */
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/_alp/Classes/Class.ZeroAccumulator.java b/_alp/Classes/Class.ZeroAccumulator.java
index 2492244d..de22a39b 100644
--- a/_alp/Classes/Class.ZeroAccumulator.java
+++ b/_alp/Classes/Class.ZeroAccumulator.java
@@ -6,7 +6,8 @@
import java.lang.Math;
import java.util.Arrays;
import java.lang.RuntimeException;
-
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class ZeroAccumulator {
public boolean hasTimeSeries = false;
private double[] timeSeries;
diff --git a/_alp/Classes/Class.ZeroTimeSeries.java b/_alp/Classes/Class.ZeroTimeSeries.java
index 2e17ca83..16376ad8 100644
--- a/_alp/Classes/Class.ZeroTimeSeries.java
+++ b/_alp/Classes/Class.ZeroTimeSeries.java
@@ -6,6 +6,8 @@
import java.lang.Math;
import java.util.Arrays;
import java.lang.RuntimeException;
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+@JsonIgnoreType
public class ZeroTimeSeries implements Serializable {
private double[] timeSeries;