Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
198 changes: 191 additions & 7 deletions _alp/Agents/EnergyCoop/Code/Functions.java
Original file line number Diff line number Diff line change
Expand Up @@ -1137,12 +1137,19 @@
f_collectGridConnectionLiveData();

boolean allGCHaveRapidRun = true;
boolean allGCHaveOriginalRapidRun = true;
for(GridConnection GC : c_memberGridConnections){
if(GC.v_rapidRunData == null && GC.v_isActive){
allGCHaveRapidRun = false;
}
if(GC.v_originalRapidRunData == null && GC.v_isActive){
allGCHaveOriginalRapidRun = false;
}
if(!allGCHaveRapidRun && !allGCHaveOriginalRapidRun){
break;
}
}

if(allGCHaveRapidRun){

//Create rapid run data class used to store combined values of the members
Expand All @@ -1154,11 +1161,23 @@
//Calculate KPIs
f_calculateKPIs();
}

if(allGCHaveOriginalRapidRun){

//Create rapid run data class used to store combined values of the members
f_createAndInitializeOriginalRapidRunDataClass();

//Collect current totals
f_collectGridConnectionOriginalRapidRunData();

//Calculate orignial KPIs
f_getOriginalCumulativeIndividualGCValues();
}
/*ALCODEEND*/}

double f_getGroupContractDeliveryCapacity_kW()
double f_getGroupContractDeliveryCapacity_kW(J_RapidRunData rapidRunData)
{/*ALCODESTART::1740059187265*/
DataSet data_netbelastingDuurkromme_kW = v_rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW;
DataSet data_netbelastingDuurkromme_kW = rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW;
int arraySize = data_netbelastingDuurkromme_kW.size();
if (arraySize < 8760/energyModel.p_timeStep_h){
traceln("GroupContractDeliveryCapacity is zero because simulation is less than a full year long!");
Expand All @@ -1168,9 +1187,9 @@
}
/*ALCODEEND*/}

double f_getGroupContractFeedinCapacity_kW()
double f_getGroupContractFeedinCapacity_kW(J_RapidRunData rapidRunData)
{/*ALCODESTART::1740059261369*/
DataSet data_netbelastingDuurkromme_kW = v_rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW;
DataSet data_netbelastingDuurkromme_kW = rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW;
int arraySize = data_netbelastingDuurkromme_kW.size();
if (arraySize < 8760/energyModel.p_timeStep_h){
traceln("GroupContractDeliveryCapacity is zero because simulation is less than a full year long!");
Expand All @@ -1195,6 +1214,10 @@
v_cumulativeIndividualPeakDelivery_kW = 0;
v_cumulativeIndividualPeakFeedin_kW = 0;

v_cumulativeIndividualPeakDeliveryOriginal_kW = 0;
v_cumulativeIndividualPeakFeedinOriginal_kW = 0;


//Loop over membered grid connections
for(GridConnection GC : c_memberGridConnections){
if(GC.v_isActive){
Expand All @@ -1205,6 +1228,11 @@
//Add all peaks for member grid connections
v_cumulativeIndividualPeakDelivery_kW += GC.v_rapidRunData.getPeakDelivery_kW();
v_cumulativeIndividualPeakFeedin_kW += GC.v_rapidRunData.getPeakFeedin_kW();

if(v_originalRapidRunData != null && GC.v_originalRapidRunData != null){
v_cumulativeIndividualPeakDeliveryOriginal_kW += GC.v_originalRapidRunData.getPeakDelivery_kW();
v_cumulativeIndividualPeakFeedinOriginal_kW += GC.v_originalRapidRunData.getPeakFeedin_kW();
}
}
}

Expand All @@ -1215,9 +1243,14 @@
if (a instanceof EnergyCoop) {
EnergyCoop EC = (EnergyCoop)a;
EC.f_getCumulativeIndividualGCValues();
v_cumulativeIndividualSelfconsumptionElectricity_MWh = EC.v_cumulativeIndividualSelfconsumptionElectricity_MWh;
v_cumulativeIndividualPeakDelivery_kW = EC.v_cumulativeIndividualPeakDelivery_kW;
v_cumulativeIndividualPeakFeedin_kW = EC.v_cumulativeIndividualPeakFeedin_kW;
v_cumulativeIndividualSelfconsumptionElectricity_MWh += EC.v_cumulativeIndividualSelfconsumptionElectricity_MWh;
v_cumulativeIndividualPeakDelivery_kW += EC.v_cumulativeIndividualPeakDelivery_kW;
v_cumulativeIndividualPeakFeedin_kW += EC.v_cumulativeIndividualPeakFeedin_kW;

if(v_originalRapidRunData != null && EC.v_originalRapidRunData != null){
v_cumulativeIndividualPeakDeliveryOriginal_kW += EC.v_cumulativeIndividualPeakDeliveryOriginal_kW;
v_cumulativeIndividualPeakFeedinOriginal_kW += EC.v_cumulativeIndividualPeakFeedinOriginal_kW;
}
}
}

Expand Down Expand Up @@ -1616,3 +1649,154 @@ ArrayList<GridConnection> f_getMemberGridConnectionsCollectionPointer()
f_aggregatorBatteryManagement_EnergyCoop();
/*ALCODEEND*/}

double f_collectGridConnectionOriginalRapidRunData()
{/*ALCODESTART::1759144507495*/
// Make collective profiles, electricity per timestep, other energy carriers per day!

for (GridConnection gc : c_memberGridConnections) {
if(gc.v_isActive){
// Totals
v_originalRapidRunData.am_totalBalanceAccumulators_kW.add(gc.v_originalRapidRunData.am_totalBalanceAccumulators_kW);
v_originalRapidRunData.am_dailyAverageConsumptionAccumulators_kW.add(gc.v_originalRapidRunData.am_dailyAverageConsumptionAccumulators_kW);
v_originalRapidRunData.am_dailyAverageProductionAccumulators_kW.add(gc.v_originalRapidRunData.am_dailyAverageProductionAccumulators_kW);
v_originalRapidRunData.acc_dailyAverageEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_dailyAverageEnergyProduction_kW);
v_originalRapidRunData.acc_dailyAverageFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_dailyAverageFinalEnergyConsumption_kW);
v_originalRapidRunData.acc_totalEnergyCurtailed_kW.add(gc.v_originalRapidRunData.acc_totalEnergyCurtailed_kW);
v_originalRapidRunData.acc_totalPrimaryEnergyProductionHeatpumps_kW.add(gc.v_originalRapidRunData.acc_totalPrimaryEnergyProductionHeatpumps_kW);
v_originalRapidRunData.am_assetFlowsAccumulators_kW.add(gc.v_originalRapidRunData.am_assetFlowsAccumulators_kW);

// Daytime
v_originalRapidRunData.acc_daytimeElectricityConsumption_kW.add(gc.v_originalRapidRunData.acc_daytimeElectricityConsumption_kW);
v_originalRapidRunData.acc_daytimeElectricityProduction_kW.add(gc.v_originalRapidRunData.acc_daytimeElectricityProduction_kW);
v_originalRapidRunData.acc_daytimeEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_daytimeEnergyProduction_kW);
v_originalRapidRunData.acc_daytimeFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_daytimeFinalEnergyConsumption_kW);
v_originalRapidRunData.am_daytimeImports_kW.add(gc.v_originalRapidRunData.am_daytimeImports_kW);
v_originalRapidRunData.am_daytimeExports_kW.add(gc.v_originalRapidRunData.am_daytimeExports_kW);

// Weekend
v_originalRapidRunData.acc_weekendElectricityConsumption_kW.add(gc.v_originalRapidRunData.acc_weekendElectricityConsumption_kW);
v_originalRapidRunData.acc_weekendElectricityProduction_kW.add(gc.v_originalRapidRunData.acc_weekendElectricityProduction_kW);
v_originalRapidRunData.acc_weekendEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_weekendEnergyProduction_kW);
v_originalRapidRunData.acc_weekendFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_weekendFinalEnergyConsumption_kW);
v_originalRapidRunData.am_weekendImports_kW.add(gc.v_originalRapidRunData.am_weekendImports_kW);
v_originalRapidRunData.am_weekendExports_kW.add(gc.v_originalRapidRunData.am_weekendExports_kW);

// Summerweek
v_originalRapidRunData.am_summerWeekBalanceAccumulators_kW.add(gc.v_originalRapidRunData.am_summerWeekBalanceAccumulators_kW);
v_originalRapidRunData.am_summerWeekConsumptionAccumulators_kW.add(gc.v_originalRapidRunData.am_summerWeekConsumptionAccumulators_kW);
v_originalRapidRunData.am_summerWeekProductionAccumulators_kW.add(gc.v_originalRapidRunData.am_summerWeekProductionAccumulators_kW);
v_originalRapidRunData.acc_summerWeekEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_summerWeekEnergyProduction_kW);
v_originalRapidRunData.acc_summerWeekFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_summerWeekFinalEnergyConsumption_kW);
v_originalRapidRunData.acc_summerWeekEnergyCurtailed_kW.add(gc.v_originalRapidRunData.acc_summerWeekEnergyCurtailed_kW);
v_originalRapidRunData.acc_summerWeekPrimaryEnergyProductionHeatpumps_kW.add(gc.v_originalRapidRunData.acc_summerWeekPrimaryEnergyProductionHeatpumps_kW);
v_originalRapidRunData.am_assetFlowsSummerWeek_kW.add(gc.v_originalRapidRunData.am_assetFlowsSummerWeek_kW);

// Winterweek
v_originalRapidRunData.am_winterWeekBalanceAccumulators_kW.add(gc.v_originalRapidRunData.am_winterWeekBalanceAccumulators_kW);
v_originalRapidRunData.am_winterWeekConsumptionAccumulators_kW.add(gc.v_originalRapidRunData.am_winterWeekConsumptionAccumulators_kW);
v_originalRapidRunData.am_winterWeekProductionAccumulators_kW.add(gc.v_originalRapidRunData.am_winterWeekProductionAccumulators_kW);
v_originalRapidRunData.acc_winterWeekEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_winterWeekEnergyProduction_kW);
v_originalRapidRunData.acc_winterWeekFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_winterWeekFinalEnergyConsumption_kW);
v_originalRapidRunData.acc_winterWeekEnergyCurtailed_kW.add(gc.v_originalRapidRunData.acc_winterWeekEnergyCurtailed_kW);
v_originalRapidRunData.acc_winterWeekPrimaryEnergyProductionHeatpumps_kW.add(gc.v_originalRapidRunData.acc_winterWeekPrimaryEnergyProductionHeatpumps_kW);
v_originalRapidRunData.am_assetFlowsWinterWeek_kW.add(gc.v_originalRapidRunData.am_assetFlowsWinterWeek_kW);
}
}

//Calculate cumulative asset capacities
f_getTotalInstalledCapacityOfAssets_originalRapidRun();

/*ALCODEEND*/}

double f_getTotalInstalledCapacityOfAssets_originalRapidRun()
{/*ALCODESTART::1759144507497*/
//Collect rapid run asset totals
v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW = 0.0;
v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW = 0.0;
v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh = 0.0;

//Add all battery storage capacities of gc
for(GridConnection GC : c_memberGridConnections){
if(GC.v_isActive){
v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW += GC.v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW;
v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW += GC.v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW;
v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh += GC.v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh;
}
}

//Do this also for the 'child' coops
for(Agent a : c_coopMembers ) { // Take 'behind the meter' production and consumption!
if (a instanceof EnergyCoop) {
EnergyCoop EC = (EnergyCoop)a;
EC.f_getTotalInstalledCapacityOfAssets_rapidRun();
v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW += EC.v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW;
v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW += EC.v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW;
v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh += EC.v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh;
}
}
/*ALCODEEND*/}

double f_createAndInitializeOriginalRapidRunDataClass()
{/*ALCODESTART::1759144507499*/
//Create rapid run data class used to collect rapid run data of other gc
v_originalRapidRunData = new J_RapidRunData(this);
v_originalRapidRunData.assetsMetaData = v_liveAssetsMetaData.getClone();

EnumSet<OL_EnergyCarriers> activeEnergyCarriers_rapidRun = EnumSet.copyOf(v_liveData.activeEnergyCarriers);
EnumSet<OL_EnergyCarriers> activeConsumptionEnergyCarriers_rapidRun = EnumSet.copyOf(v_liveData.activeConsumptionEnergyCarriers);
EnumSet<OL_EnergyCarriers> activeProductionEnergyCarriers_rapidRun = EnumSet.copyOf(v_liveData.activeProductionEnergyCarriers);
EnumSet<OL_AssetFlowCategories> activeAssetFlows_rapidRun = EnumSet.copyOf(v_liveAssetsMetaData.activeAssetFlows);
//Need to do this, for if the sliders have changed, otherwise potential errors/missing data ????
boolean storeTotalAssetFlows = true;
for(GridConnection GC : c_memberGridConnections){
if(GC.v_isActive){
activeEnergyCarriers_rapidRun.addAll(GC.v_originalRapidRunData.activeEnergyCarriers);
activeConsumptionEnergyCarriers_rapidRun.addAll(GC.v_originalRapidRunData.activeConsumptionEnergyCarriers);
activeProductionEnergyCarriers_rapidRun.addAll(GC.v_originalRapidRunData.activeProductionEnergyCarriers);

v_originalRapidRunData.assetsMetaData.activeAssetFlows.addAll(GC.v_originalRapidRunData.assetsMetaData.activeAssetFlows);

if(GC.v_rapidRunData.getStoreTotalAssetFlows() == false){
storeTotalAssetFlows = false;
}
}
}

//Adjust StoreTotalAssetFlows accordingly to the member data
v_originalRapidRunData.setStoreTotalAssetFlows(storeTotalAssetFlows);

//For now assumed to stay the same even after slider change: can't see rapid run graphs anyway after slider change
v_originalRapidRunData.connectionMetaData = v_liveConnectionMetaData.getClone();

//Initialize the rapid run data
v_originalRapidRunData.initializeAccumulators(energyModel.p_runEndTime_h - energyModel.p_runStartTime_h, energyModel.p_timeStep_h, activeEnergyCarriers_rapidRun, activeConsumptionEnergyCarriers_rapidRun, activeProductionEnergyCarriers_rapidRun, activeAssetFlows_rapidRun);

/*ALCODEEND*/}

double f_getOriginalCumulativeIndividualGCValues()
{/*ALCODESTART::1759155380190*/
v_cumulativeIndividualPeakDeliveryOriginal_kW = 0;
v_cumulativeIndividualPeakFeedinOriginal_kW = 0;

//Loop over membered grid connections
for(GridConnection GC : c_memberGridConnections){
if(GC.v_isActive){
//Add all peaks for member grid connections
v_cumulativeIndividualPeakDeliveryOriginal_kW += GC.v_originalRapidRunData.getPeakDelivery_kW();
v_cumulativeIndividualPeakFeedinOriginal_kW += GC.v_originalRapidRunData.getPeakFeedin_kW();
}
}

for(Agent a : c_coopMembers ) { // Take 'behind the meter' production and consumption!
if (a instanceof EnergyCoop) {
EnergyCoop EC = (EnergyCoop)a;
EC.f_getOriginalCumulativeIndividualGCValues();

if(v_originalRapidRunData != null && EC.v_originalRapidRunData != null){
v_cumulativeIndividualPeakDeliveryOriginal_kW += EC.v_cumulativeIndividualPeakDeliveryOriginal_kW;
v_cumulativeIndividualPeakFeedinOriginal_kW += EC.v_cumulativeIndividualPeakFeedinOriginal_kW;
}
}
}
/*ALCODEEND*/}

82 changes: 77 additions & 5 deletions _alp/Agents/EnergyCoop/Code/Functions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@
<ReturnType>double</ReturnType>
<Id>1739970817879</Id>
<Name><![CDATA[f_collectGridConnectionRapidRunData]]></Name>
<X>990</X>
<X>1010</X>
<Y>230</Y>
<Label>
<X>10</X>
Expand Down Expand Up @@ -393,6 +393,10 @@
<PublicFlag>false</PublicFlag>
<PresentationFlag>true</PresentationFlag>
<ShowLabel>true</ShowLabel>
<Parameter>
<Name><![CDATA[rapidRunData]]></Name>
<Type><![CDATA[J_RapidRunData]]></Type>
</Parameter>
<Body xmlns:al="http://anylogic.com"/>
</Function>
<Function AccessType="public" StaticFunction="false">
Expand All @@ -409,6 +413,10 @@
<PublicFlag>false</PublicFlag>
<PresentationFlag>true</PresentationFlag>
<ShowLabel>true</ShowLabel>
<Parameter>
<Name><![CDATA[rapidRunData]]></Name>
<Type><![CDATA[J_RapidRunData]]></Type>
</Parameter>
<Body xmlns:al="http://anylogic.com"/>
</Function>
<Function AccessType="default" StaticFunction="false">
Expand All @@ -417,7 +425,7 @@
<Id>1740475013848</Id>
<Name><![CDATA[f_getCumulativeIndividualGCValues]]></Name>
<X>1430</X>
<Y>730</Y>
<Y>710</Y>
<Label>
<X>10</X>
<Y>0</Y>
Expand All @@ -432,7 +440,7 @@
<ReturnType>double</ReturnType>
<Id>1740480839774</Id>
<Name><![CDATA[f_getTotalInstalledCapacityOfAssets_rapidRun]]></Name>
<X>1010</X>
<X>1030</X>
<Y>250</Y>
<Label>
<X>10</X>
Expand Down Expand Up @@ -716,7 +724,7 @@
<Id>1756207893357</Id>
<Name><![CDATA[f_aggregatorBatteryManagement_EnergyCoop]]></Name>
<X>670</X>
<Y>690</Y>
<Y>710</Y>
<Label>
<X>10</X>
<Y>0</Y>
Expand Down Expand Up @@ -752,7 +760,71 @@
<Id>1756207893363</Id>
<Name><![CDATA[f_aggregatorManagement_EnergyCoop]]></Name>
<X>650</X>
<Y>670</Y>
<Y>690</Y>
<Label>
<X>10</X>
<Y>0</Y>
</Label>
<PublicFlag>false</PublicFlag>
<PresentationFlag>true</PresentationFlag>
<ShowLabel>true</ShowLabel>
<Body xmlns:al="http://anylogic.com"/>
</Function>
<Function AccessType="default" StaticFunction="false">
<ReturnModificator>VOID</ReturnModificator>
<ReturnType>double</ReturnType>
<Id>1759144507495</Id>
<Name><![CDATA[f_collectGridConnectionOriginalRapidRunData]]></Name>
<X>1010</X>
<Y>300</Y>
<Label>
<X>10</X>
<Y>0</Y>
</Label>
<PublicFlag>false</PublicFlag>
<PresentationFlag>true</PresentationFlag>
<ShowLabel>true</ShowLabel>
<Body xmlns:al="http://anylogic.com"/>
</Function>
<Function AccessType="default" StaticFunction="false">
<ReturnModificator>VOID</ReturnModificator>
<ReturnType>double</ReturnType>
<Id>1759144507497</Id>
<Name><![CDATA[f_getTotalInstalledCapacityOfAssets_originalRapidRun]]></Name>
<X>1030</X>
<Y>320</Y>
<Label>
<X>10</X>
<Y>0</Y>
</Label>
<PublicFlag>false</PublicFlag>
<PresentationFlag>true</PresentationFlag>
<ShowLabel>true</ShowLabel>
<Body xmlns:al="http://anylogic.com"/>
</Function>
<Function AccessType="default" StaticFunction="false">
<ReturnModificator>VOID</ReturnModificator>
<ReturnType>double</ReturnType>
<Id>1759144507499</Id>
<Name><![CDATA[f_createAndInitializeOriginalRapidRunDataClass]]></Name>
<X>990</X>
<Y>280</Y>
<Label>
<X>10</X>
<Y>0</Y>
</Label>
<PublicFlag>false</PublicFlag>
<PresentationFlag>true</PresentationFlag>
<ShowLabel>true</ShowLabel>
<Body xmlns:al="http://anylogic.com"/>
</Function>
<Function AccessType="default" StaticFunction="false">
<ReturnModificator>VOID</ReturnModificator>
<ReturnType>double</ReturnType>
<Id>1759155380190</Id>
<Name><![CDATA[f_getOriginalCumulativeIndividualGCValues]]></Name>
<X>1430</X>
<Y>925</Y>
<Label>
<X>10</X>
<Y>0</Y>
Expand Down
2 changes: 1 addition & 1 deletion _alp/Agents/EnergyCoop/Levels/Level.level.xml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@
<Id>1740403817351</Id>
<Name><![CDATA[txt_cumulativeIndividualGCValues]]></Name>
<X>1420</X>
<Y>700</Y>
<Y>680</Y>
<Label>
<X>0</X>
<Y>-10</Y>
Expand Down
Loading