|
1137 | 1137 | f_collectGridConnectionLiveData(); |
1138 | 1138 |
|
1139 | 1139 | boolean allGCHaveRapidRun = true; |
| 1140 | +boolean allGCHaveOriginalRapidRun = true; |
1140 | 1141 | for(GridConnection GC : c_memberGridConnections){ |
1141 | 1142 | if(GC.v_rapidRunData == null && GC.v_isActive){ |
1142 | 1143 | allGCHaveRapidRun = false; |
| 1144 | + } |
| 1145 | + if(GC.v_originalRapidRunData == null && GC.v_isActive){ |
| 1146 | + allGCHaveOriginalRapidRun = false; |
| 1147 | + } |
| 1148 | + if(!allGCHaveRapidRun && !allGCHaveOriginalRapidRun){ |
1143 | 1149 | break; |
1144 | 1150 | } |
1145 | 1151 | } |
| 1152 | + |
1146 | 1153 | if(allGCHaveRapidRun){ |
1147 | 1154 |
|
1148 | 1155 | //Create rapid run data class used to store combined values of the members |
|
1154 | 1161 | //Calculate KPIs |
1155 | 1162 | f_calculateKPIs(); |
1156 | 1163 | } |
| 1164 | + |
| 1165 | +if(allGCHaveOriginalRapidRun){ |
| 1166 | + |
| 1167 | + //Create rapid run data class used to store combined values of the members |
| 1168 | + f_createAndInitializeOriginalRapidRunDataClass(); |
| 1169 | + |
| 1170 | + //Collect current totals |
| 1171 | + f_collectGridConnectionOriginalRapidRunData(); |
| 1172 | + |
| 1173 | + //Calculate orignial KPIs |
| 1174 | + f_getOriginalCumulativeIndividualGCValues(); |
| 1175 | +} |
1157 | 1176 | /*ALCODEEND*/} |
1158 | 1177 |
|
1159 | | -double f_getGroupContractDeliveryCapacity_kW() |
| 1178 | +double f_getGroupContractDeliveryCapacity_kW(J_RapidRunData rapidRunData) |
1160 | 1179 | {/*ALCODESTART::1740059187265*/ |
1161 | | -DataSet data_netbelastingDuurkromme_kW = v_rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW; |
| 1180 | +DataSet data_netbelastingDuurkromme_kW = rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW; |
1162 | 1181 | int arraySize = data_netbelastingDuurkromme_kW.size(); |
1163 | 1182 | if (arraySize < 8760/energyModel.p_timeStep_h){ |
1164 | 1183 | traceln("GroupContractDeliveryCapacity is zero because simulation is less than a full year long!"); |
|
1168 | 1187 | } |
1169 | 1188 | /*ALCODEEND*/} |
1170 | 1189 |
|
1171 | | -double f_getGroupContractFeedinCapacity_kW() |
| 1190 | +double f_getGroupContractFeedinCapacity_kW(J_RapidRunData rapidRunData) |
1172 | 1191 | {/*ALCODESTART::1740059261369*/ |
1173 | | -DataSet data_netbelastingDuurkromme_kW = v_rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW; |
| 1192 | +DataSet data_netbelastingDuurkromme_kW = rapidRunData.getLoadDurationCurves(energyModel).ds_loadDurationCurveTotal_kW; |
1174 | 1193 | int arraySize = data_netbelastingDuurkromme_kW.size(); |
1175 | 1194 | if (arraySize < 8760/energyModel.p_timeStep_h){ |
1176 | 1195 | traceln("GroupContractDeliveryCapacity is zero because simulation is less than a full year long!"); |
|
1195 | 1214 | v_cumulativeIndividualPeakDelivery_kW = 0; |
1196 | 1215 | v_cumulativeIndividualPeakFeedin_kW = 0; |
1197 | 1216 |
|
| 1217 | +v_cumulativeIndividualPeakDeliveryOriginal_kW = 0; |
| 1218 | +v_cumulativeIndividualPeakFeedinOriginal_kW = 0; |
| 1219 | + |
| 1220 | + |
1198 | 1221 | //Loop over membered grid connections |
1199 | 1222 | for(GridConnection GC : c_memberGridConnections){ |
1200 | 1223 | if(GC.v_isActive){ |
|
1205 | 1228 | //Add all peaks for member grid connections |
1206 | 1229 | v_cumulativeIndividualPeakDelivery_kW += GC.v_rapidRunData.getPeakDelivery_kW(); |
1207 | 1230 | v_cumulativeIndividualPeakFeedin_kW += GC.v_rapidRunData.getPeakFeedin_kW(); |
| 1231 | + |
| 1232 | + if(v_originalRapidRunData != null && GC.v_originalRapidRunData != null){ |
| 1233 | + v_cumulativeIndividualPeakDeliveryOriginal_kW += GC.v_originalRapidRunData.getPeakDelivery_kW(); |
| 1234 | + v_cumulativeIndividualPeakFeedinOriginal_kW += GC.v_originalRapidRunData.getPeakFeedin_kW(); |
| 1235 | + } |
1208 | 1236 | } |
1209 | 1237 | } |
1210 | 1238 |
|
|
1215 | 1243 | if (a instanceof EnergyCoop) { |
1216 | 1244 | EnergyCoop EC = (EnergyCoop)a; |
1217 | 1245 | EC.f_getCumulativeIndividualGCValues(); |
1218 | | - v_cumulativeIndividualSelfconsumptionElectricity_MWh = EC.v_cumulativeIndividualSelfconsumptionElectricity_MWh; |
1219 | | - v_cumulativeIndividualPeakDelivery_kW = EC.v_cumulativeIndividualPeakDelivery_kW; |
1220 | | - v_cumulativeIndividualPeakFeedin_kW = EC.v_cumulativeIndividualPeakFeedin_kW; |
| 1246 | + v_cumulativeIndividualSelfconsumptionElectricity_MWh += EC.v_cumulativeIndividualSelfconsumptionElectricity_MWh; |
| 1247 | + v_cumulativeIndividualPeakDelivery_kW += EC.v_cumulativeIndividualPeakDelivery_kW; |
| 1248 | + v_cumulativeIndividualPeakFeedin_kW += EC.v_cumulativeIndividualPeakFeedin_kW; |
| 1249 | + |
| 1250 | + if(v_originalRapidRunData != null && EC.v_originalRapidRunData != null){ |
| 1251 | + v_cumulativeIndividualPeakDeliveryOriginal_kW += EC.v_cumulativeIndividualPeakDeliveryOriginal_kW; |
| 1252 | + v_cumulativeIndividualPeakFeedinOriginal_kW += EC.v_cumulativeIndividualPeakFeedinOriginal_kW; |
| 1253 | + } |
1221 | 1254 | } |
1222 | 1255 | } |
1223 | 1256 |
|
@@ -1616,3 +1649,154 @@ ArrayList<GridConnection> f_getMemberGridConnectionsCollectionPointer() |
1616 | 1649 | f_aggregatorBatteryManagement_EnergyCoop(); |
1617 | 1650 | /*ALCODEEND*/} |
1618 | 1651 |
|
| 1652 | +double f_collectGridConnectionOriginalRapidRunData() |
| 1653 | +{/*ALCODESTART::1759144507495*/ |
| 1654 | +// Make collective profiles, electricity per timestep, other energy carriers per day! |
| 1655 | + |
| 1656 | +for (GridConnection gc : c_memberGridConnections) { |
| 1657 | + if(gc.v_isActive){ |
| 1658 | + // Totals |
| 1659 | + v_originalRapidRunData.am_totalBalanceAccumulators_kW.add(gc.v_originalRapidRunData.am_totalBalanceAccumulators_kW); |
| 1660 | + v_originalRapidRunData.am_dailyAverageConsumptionAccumulators_kW.add(gc.v_originalRapidRunData.am_dailyAverageConsumptionAccumulators_kW); |
| 1661 | + v_originalRapidRunData.am_dailyAverageProductionAccumulators_kW.add(gc.v_originalRapidRunData.am_dailyAverageProductionAccumulators_kW); |
| 1662 | + v_originalRapidRunData.acc_dailyAverageEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_dailyAverageEnergyProduction_kW); |
| 1663 | + v_originalRapidRunData.acc_dailyAverageFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_dailyAverageFinalEnergyConsumption_kW); |
| 1664 | + v_originalRapidRunData.acc_totalEnergyCurtailed_kW.add(gc.v_originalRapidRunData.acc_totalEnergyCurtailed_kW); |
| 1665 | + v_originalRapidRunData.acc_totalPrimaryEnergyProductionHeatpumps_kW.add(gc.v_originalRapidRunData.acc_totalPrimaryEnergyProductionHeatpumps_kW); |
| 1666 | + v_originalRapidRunData.am_assetFlowsAccumulators_kW.add(gc.v_originalRapidRunData.am_assetFlowsAccumulators_kW); |
| 1667 | + |
| 1668 | + // Daytime |
| 1669 | + v_originalRapidRunData.acc_daytimeElectricityConsumption_kW.add(gc.v_originalRapidRunData.acc_daytimeElectricityConsumption_kW); |
| 1670 | + v_originalRapidRunData.acc_daytimeElectricityProduction_kW.add(gc.v_originalRapidRunData.acc_daytimeElectricityProduction_kW); |
| 1671 | + v_originalRapidRunData.acc_daytimeEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_daytimeEnergyProduction_kW); |
| 1672 | + v_originalRapidRunData.acc_daytimeFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_daytimeFinalEnergyConsumption_kW); |
| 1673 | + v_originalRapidRunData.am_daytimeImports_kW.add(gc.v_originalRapidRunData.am_daytimeImports_kW); |
| 1674 | + v_originalRapidRunData.am_daytimeExports_kW.add(gc.v_originalRapidRunData.am_daytimeExports_kW); |
| 1675 | + |
| 1676 | + // Weekend |
| 1677 | + v_originalRapidRunData.acc_weekendElectricityConsumption_kW.add(gc.v_originalRapidRunData.acc_weekendElectricityConsumption_kW); |
| 1678 | + v_originalRapidRunData.acc_weekendElectricityProduction_kW.add(gc.v_originalRapidRunData.acc_weekendElectricityProduction_kW); |
| 1679 | + v_originalRapidRunData.acc_weekendEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_weekendEnergyProduction_kW); |
| 1680 | + v_originalRapidRunData.acc_weekendFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_weekendFinalEnergyConsumption_kW); |
| 1681 | + v_originalRapidRunData.am_weekendImports_kW.add(gc.v_originalRapidRunData.am_weekendImports_kW); |
| 1682 | + v_originalRapidRunData.am_weekendExports_kW.add(gc.v_originalRapidRunData.am_weekendExports_kW); |
| 1683 | + |
| 1684 | + // Summerweek |
| 1685 | + v_originalRapidRunData.am_summerWeekBalanceAccumulators_kW.add(gc.v_originalRapidRunData.am_summerWeekBalanceAccumulators_kW); |
| 1686 | + v_originalRapidRunData.am_summerWeekConsumptionAccumulators_kW.add(gc.v_originalRapidRunData.am_summerWeekConsumptionAccumulators_kW); |
| 1687 | + v_originalRapidRunData.am_summerWeekProductionAccumulators_kW.add(gc.v_originalRapidRunData.am_summerWeekProductionAccumulators_kW); |
| 1688 | + v_originalRapidRunData.acc_summerWeekEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_summerWeekEnergyProduction_kW); |
| 1689 | + v_originalRapidRunData.acc_summerWeekFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_summerWeekFinalEnergyConsumption_kW); |
| 1690 | + v_originalRapidRunData.acc_summerWeekEnergyCurtailed_kW.add(gc.v_originalRapidRunData.acc_summerWeekEnergyCurtailed_kW); |
| 1691 | + v_originalRapidRunData.acc_summerWeekPrimaryEnergyProductionHeatpumps_kW.add(gc.v_originalRapidRunData.acc_summerWeekPrimaryEnergyProductionHeatpumps_kW); |
| 1692 | + v_originalRapidRunData.am_assetFlowsSummerWeek_kW.add(gc.v_originalRapidRunData.am_assetFlowsSummerWeek_kW); |
| 1693 | + |
| 1694 | + // Winterweek |
| 1695 | + v_originalRapidRunData.am_winterWeekBalanceAccumulators_kW.add(gc.v_originalRapidRunData.am_winterWeekBalanceAccumulators_kW); |
| 1696 | + v_originalRapidRunData.am_winterWeekConsumptionAccumulators_kW.add(gc.v_originalRapidRunData.am_winterWeekConsumptionAccumulators_kW); |
| 1697 | + v_originalRapidRunData.am_winterWeekProductionAccumulators_kW.add(gc.v_originalRapidRunData.am_winterWeekProductionAccumulators_kW); |
| 1698 | + v_originalRapidRunData.acc_winterWeekEnergyProduction_kW.add(gc.v_originalRapidRunData.acc_winterWeekEnergyProduction_kW); |
| 1699 | + v_originalRapidRunData.acc_winterWeekFinalEnergyConsumption_kW.add(gc.v_originalRapidRunData.acc_winterWeekFinalEnergyConsumption_kW); |
| 1700 | + v_originalRapidRunData.acc_winterWeekEnergyCurtailed_kW.add(gc.v_originalRapidRunData.acc_winterWeekEnergyCurtailed_kW); |
| 1701 | + v_originalRapidRunData.acc_winterWeekPrimaryEnergyProductionHeatpumps_kW.add(gc.v_originalRapidRunData.acc_winterWeekPrimaryEnergyProductionHeatpumps_kW); |
| 1702 | + v_originalRapidRunData.am_assetFlowsWinterWeek_kW.add(gc.v_originalRapidRunData.am_assetFlowsWinterWeek_kW); |
| 1703 | + } |
| 1704 | +} |
| 1705 | + |
| 1706 | +//Calculate cumulative asset capacities |
| 1707 | +f_getTotalInstalledCapacityOfAssets_originalRapidRun(); |
| 1708 | + |
| 1709 | +/*ALCODEEND*/} |
| 1710 | + |
| 1711 | +double f_getTotalInstalledCapacityOfAssets_originalRapidRun() |
| 1712 | +{/*ALCODESTART::1759144507497*/ |
| 1713 | +//Collect rapid run asset totals |
| 1714 | +v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW = 0.0; |
| 1715 | +v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW = 0.0; |
| 1716 | +v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh = 0.0; |
| 1717 | + |
| 1718 | +//Add all battery storage capacities of gc |
| 1719 | +for(GridConnection GC : c_memberGridConnections){ |
| 1720 | + if(GC.v_isActive){ |
| 1721 | + v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW += GC.v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW; |
| 1722 | + v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW += GC.v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW; |
| 1723 | + v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh += GC.v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh; |
| 1724 | + } |
| 1725 | +} |
| 1726 | + |
| 1727 | +//Do this also for the 'child' coops |
| 1728 | +for(Agent a : c_coopMembers ) { // Take 'behind the meter' production and consumption! |
| 1729 | + if (a instanceof EnergyCoop) { |
| 1730 | + EnergyCoop EC = (EnergyCoop)a; |
| 1731 | + EC.f_getTotalInstalledCapacityOfAssets_rapidRun(); |
| 1732 | + v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW += EC.v_originalRapidRunData.assetsMetaData.totalInstalledWindPower_kW; |
| 1733 | + v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW += EC.v_originalRapidRunData.assetsMetaData.totalInstalledPVPower_kW; |
| 1734 | + v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh += EC.v_originalRapidRunData.assetsMetaData.totalInstalledBatteryStorageCapacity_MWh; |
| 1735 | + } |
| 1736 | +} |
| 1737 | +/*ALCODEEND*/} |
| 1738 | + |
| 1739 | +double f_createAndInitializeOriginalRapidRunDataClass() |
| 1740 | +{/*ALCODESTART::1759144507499*/ |
| 1741 | +//Create rapid run data class used to collect rapid run data of other gc |
| 1742 | +v_originalRapidRunData = new J_RapidRunData(this); |
| 1743 | +v_originalRapidRunData.assetsMetaData = v_liveAssetsMetaData.getClone(); |
| 1744 | + |
| 1745 | +EnumSet<OL_EnergyCarriers> activeEnergyCarriers_rapidRun = EnumSet.copyOf(v_liveData.activeEnergyCarriers); |
| 1746 | +EnumSet<OL_EnergyCarriers> activeConsumptionEnergyCarriers_rapidRun = EnumSet.copyOf(v_liveData.activeConsumptionEnergyCarriers); |
| 1747 | +EnumSet<OL_EnergyCarriers> activeProductionEnergyCarriers_rapidRun = EnumSet.copyOf(v_liveData.activeProductionEnergyCarriers); |
| 1748 | +EnumSet<OL_AssetFlowCategories> activeAssetFlows_rapidRun = EnumSet.copyOf(v_liveAssetsMetaData.activeAssetFlows); |
| 1749 | +//Need to do this, for if the sliders have changed, otherwise potential errors/missing data ???? |
| 1750 | +boolean storeTotalAssetFlows = true; |
| 1751 | +for(GridConnection GC : c_memberGridConnections){ |
| 1752 | + if(GC.v_isActive){ |
| 1753 | + activeEnergyCarriers_rapidRun.addAll(GC.v_originalRapidRunData.activeEnergyCarriers); |
| 1754 | + activeConsumptionEnergyCarriers_rapidRun.addAll(GC.v_originalRapidRunData.activeConsumptionEnergyCarriers); |
| 1755 | + activeProductionEnergyCarriers_rapidRun.addAll(GC.v_originalRapidRunData.activeProductionEnergyCarriers); |
| 1756 | + |
| 1757 | + v_originalRapidRunData.assetsMetaData.activeAssetFlows.addAll(GC.v_originalRapidRunData.assetsMetaData.activeAssetFlows); |
| 1758 | + |
| 1759 | + if(GC.v_rapidRunData.getStoreTotalAssetFlows() == false){ |
| 1760 | + storeTotalAssetFlows = false; |
| 1761 | + } |
| 1762 | + } |
| 1763 | +} |
| 1764 | + |
| 1765 | +//Adjust StoreTotalAssetFlows accordingly to the member data |
| 1766 | +v_originalRapidRunData.setStoreTotalAssetFlows(storeTotalAssetFlows); |
| 1767 | + |
| 1768 | +//For now assumed to stay the same even after slider change: can't see rapid run graphs anyway after slider change |
| 1769 | +v_originalRapidRunData.connectionMetaData = v_liveConnectionMetaData.getClone(); |
| 1770 | + |
| 1771 | +//Initialize the rapid run data |
| 1772 | +v_originalRapidRunData.initializeAccumulators(energyModel.p_runEndTime_h - energyModel.p_runStartTime_h, energyModel.p_timeStep_h, activeEnergyCarriers_rapidRun, activeConsumptionEnergyCarriers_rapidRun, activeProductionEnergyCarriers_rapidRun, activeAssetFlows_rapidRun); |
| 1773 | + |
| 1774 | +/*ALCODEEND*/} |
| 1775 | + |
| 1776 | +double f_getOriginalCumulativeIndividualGCValues() |
| 1777 | +{/*ALCODESTART::1759155380190*/ |
| 1778 | +v_cumulativeIndividualPeakDeliveryOriginal_kW = 0; |
| 1779 | +v_cumulativeIndividualPeakFeedinOriginal_kW = 0; |
| 1780 | + |
| 1781 | +//Loop over membered grid connections |
| 1782 | +for(GridConnection GC : c_memberGridConnections){ |
| 1783 | + if(GC.v_isActive){ |
| 1784 | + //Add all peaks for member grid connections |
| 1785 | + v_cumulativeIndividualPeakDeliveryOriginal_kW += GC.v_originalRapidRunData.getPeakDelivery_kW(); |
| 1786 | + v_cumulativeIndividualPeakFeedinOriginal_kW += GC.v_originalRapidRunData.getPeakFeedin_kW(); |
| 1787 | + } |
| 1788 | +} |
| 1789 | + |
| 1790 | +for(Agent a : c_coopMembers ) { // Take 'behind the meter' production and consumption! |
| 1791 | + if (a instanceof EnergyCoop) { |
| 1792 | + EnergyCoop EC = (EnergyCoop)a; |
| 1793 | + EC.f_getOriginalCumulativeIndividualGCValues(); |
| 1794 | + |
| 1795 | + if(v_originalRapidRunData != null && EC.v_originalRapidRunData != null){ |
| 1796 | + v_cumulativeIndividualPeakDeliveryOriginal_kW += EC.v_cumulativeIndividualPeakDeliveryOriginal_kW; |
| 1797 | + v_cumulativeIndividualPeakFeedinOriginal_kW += EC.v_cumulativeIndividualPeakFeedinOriginal_kW; |
| 1798 | + } |
| 1799 | + } |
| 1800 | +} |
| 1801 | +/*ALCODEEND*/} |
| 1802 | + |
0 commit comments