Skip to content
Merged
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
98 changes: 80 additions & 18 deletions _alp/Classes/Class.J_BatteryManagementPeakShavingForecast.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,32 +65,94 @@ private double[] getNettoBalanceForecast_kW() {
int startTimeDayIndex = roundToInt(hour_of_simulation_year/p_timestep_h);
int endTimeDayIndex = roundToInt((hour_of_simulation_year + 24)/p_timestep_h);

List<J_EAProfile> profileAssets = new ArrayList<J_EAProfile>();
List<J_EAConsumption> consumptionAssets = new ArrayList<J_EAConsumption>();
List<J_EAProduction> productionAssets = new ArrayList<J_EAProduction>();
List<J_EAProfile> elecConsumptionProfiles = new ArrayList<J_EAProfile>(); //survey inkoop profile data
List<J_EAProfile> elecHeatPumpProfiles = new ArrayList<J_EAProfile>(); //survey WP profile data
List<J_EAProfile> elecEVProfiles = new ArrayList<J_EAProfile>(); //Custom EV profile data
List<J_EAProfile> surveyHeatDemandProfiles = new ArrayList<J_EAProfile>(); //survey gas to heat builing profiles
List<J_EAConsumption> genericHeatDemandProfiles = new ArrayList<J_EAConsumption>(); //Generic gas to heat builing profiles
List<J_EAConsumption> genericBuildingProfiles = new ArrayList<J_EAConsumption>(); //Generic inkoop builing profiles
List<J_EAProduction> productionAssetProfiles = new ArrayList<J_EAProduction>(); // Production profiles

for (GridConnection GC : c_targetGridConnections){
profileAssets.addAll(findAll(GC.c_profileAssets, profile -> profile.assetFlowCategory == OL_AssetFlowCategories.fixedConsumptionElectric_kW));
consumptionAssets.addAll(findAll(GC.c_consumptionAssets, cons -> cons.energyAssetType == OL_EnergyAssetType.ELECTRICITY_DEMAND));
productionAssets.addAll(findAll(GC.c_productionAssets, prod -> prod.energyAssetType == OL_EnergyAssetType.PHOTOVOLTAIC || prod.energyAssetType == OL_EnergyAssetType.WINDMILL));
for (GridConnection GC : c_targetGridConnections){
elecConsumptionProfiles.addAll(findAll(GC.c_profileAssets, profile -> profile.assetFlowCategory == OL_AssetFlowCategories.fixedConsumptionElectric_kW));
elecHeatPumpProfiles.addAll(findAll(GC.c_profileAssets, profile -> profile.assetFlowCategory == OL_AssetFlowCategories.heatPumpElectricityConsumption_kW));
elecEVProfiles.addAll(findAll(GC.c_profileAssets, profile -> profile.assetFlowCategory == OL_AssetFlowCategories.evChargingPower_kW));
if(GC.f_getCurrentHeatingType() == OL_GridConnectionHeatingType.ELECTRIC_HEATPUMP && !(GC.p_heatingManagement instanceof J_HeatingManagementGhost)) {
surveyHeatDemandProfiles.addAll(findAll(GC.c_profileAssets, profile -> profile.energyCarrier == OL_EnergyCarriers.HEAT));
genericHeatDemandProfiles.addAll(findAll(GC.c_consumptionAssets, cons -> cons.energyAssetType == OL_EnergyAssetType.HEAT_DEMAND));
}
genericBuildingProfiles.addAll(findAll(GC.c_consumptionAssets, cons -> cons.energyAssetType == OL_EnergyAssetType.ELECTRICITY_DEMAND));
productionAssetProfiles.addAll(findAll(GC.c_productionAssets, prod -> prod.energyAssetType == OL_EnergyAssetType.PHOTOVOLTAIC || prod.energyAssetType == OL_EnergyAssetType.WINDMILL));
}

for(J_EAProfile profileAsset : profileAssets) {
double[] tempNettoBalance_kW = ZeroMath.arrayMultiply(Arrays.copyOfRange(profileAsset.a_energyProfile_kWh, startTimeDayIndex, endTimeDayIndex), 1/p_timestep_h);
for (int i = 0; i < tempNettoBalance_kW.length; i++) {
nettoBalanceTotal_kW[i] += tempNettoBalance_kW[i];

for(J_EAProfile elecConsumptionProfile : elecConsumptionProfiles) {
if(elecConsumptionProfile != null){
double[] tempNettoBalance_kW = ZeroMath.arrayMultiply(Arrays.copyOfRange(elecConsumptionProfile.a_energyProfile_kWh, startTimeDayIndex, endTimeDayIndex), 1/p_timestep_h);//, elecConsumptionProfile.getProfileScaling_fr());
for (int i = 0; i < tempNettoBalance_kW.length; i++) {
nettoBalanceTotal_kW[i] += tempNettoBalance_kW[i];
}
}
}
for(J_EAProfile elecHeatPumpProfile : elecHeatPumpProfiles) {
if(elecHeatPumpProfile != null){
double[] tempNettoBalance_kW = ZeroMath.arrayMultiply(Arrays.copyOfRange(elecHeatPumpProfile.a_energyProfile_kWh, startTimeDayIndex, endTimeDayIndex), 1/p_timestep_h);//, elecHeatPumpProfile.getProfileScaling_fr());
for (int i = 0; i < tempNettoBalance_kW.length; i++) {
nettoBalanceTotal_kW[i] += tempNettoBalance_kW[i];
}
}
}
for(J_EAProfile elecEVProfile : elecEVProfiles) {
if(elecEVProfile != null){
double[] tempNettoBalance_kW = ZeroMath.arrayMultiply(Arrays.copyOfRange(elecEVProfile.a_energyProfile_kWh, startTimeDayIndex, endTimeDayIndex), 1/p_timestep_h);//, elecEVProfile.getProfileScaling_fr());
for (int i = 0; i < tempNettoBalance_kW.length; i++) {
nettoBalanceTotal_kW[i] += tempNettoBalance_kW[i];
}
}
}
for(J_EAConsumption consumptionAsset : consumptionAssets) {
for(double time = energyModel_time_h; time < energyModel_time_h + 24; time += p_timestep_h){
nettoBalanceTotal_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] += consumptionAsset.getProfilePointer().getValue(time)*consumptionAsset.yearlyDemand_kWh*consumptionAsset.getConsumptionScaling_fr();
for(J_EAProfile surveyHeatDemandProfile : surveyHeatDemandProfiles) {
if(surveyHeatDemandProfile != null){
double[] heatPower_kW = ZeroMath.arrayMultiply(Arrays.copyOfRange(surveyHeatDemandProfile.a_energyProfile_kWh, startTimeDayIndex, endTimeDayIndex), 1/p_timestep_h);//, surveyHeatDemandProfile.getProfileScaling_fr());
//traceln(heatPower_kW);
double eta_r = parentGC.energyModel.avgc_data.p_avgEfficiencyHeatpump;
double outputTemperature_degC = parentGC.energyModel.avgc_data.p_avgOutputTemperatureHeatpump_degC;
for(double time = energyModel_time_h; time < energyModel_time_h + 24; time += p_timestep_h){
double baseTemperature_degC = parentGC.energyModel.pp_ambientTemperature_degC.getValue(time);
double COP_r = eta_r * ( 273.15 + outputTemperature_degC ) / ( outputTemperature_degC - baseTemperature_degC );
nettoBalanceTotal_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] += heatPower_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] / COP_r;
}
}
}
for(J_EAProduction productionAsset : productionAssets) {
for(double time = energyModel_time_h; time < energyModel_time_h + 24; time += p_timestep_h){
nettoBalanceTotal_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] -= productionAsset.getProfilePointer().getValue(time)*productionAsset.getCapacityElectric_kW();
for(J_EAConsumption genericHeatDemandProfile : genericHeatDemandProfiles) {
if(genericHeatDemandProfile != null){

double eta_r = parentGC.energyModel.avgc_data.p_avgEfficiencyHeatpump;
double outputTemperature_degC = parentGC.energyModel.avgc_data.p_avgOutputTemperatureHeatpump_degC;

for(double time = energyModel_time_h; time < energyModel_time_h + 24; time += p_timestep_h){
double baseTemperature_degC = parentGC.energyModel.pp_ambientTemperature_degC.getValue(time);
double COP_r = eta_r * ( 273.15 + outputTemperature_degC ) / ( outputTemperature_degC - baseTemperature_degC );

//traceln(genericHeatDemandProfile.getProfilePointer().getValue(time)*genericHeatDemandProfile.yearlyDemand_kWh);
nettoBalanceTotal_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] += genericHeatDemandProfile.getProfilePointer().getValue(time)*genericHeatDemandProfile.yearlyDemand_kWh*genericHeatDemandProfile.getConsumptionScaling_fr() / COP_r;
}
}
}
for(J_EAConsumption genericBuildingProfile : genericBuildingProfiles) {
if(genericBuildingProfile != null){ //table function
for(double time = energyModel_time_h; time < energyModel_time_h + 24; time += p_timestep_h){
nettoBalanceTotal_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] += genericBuildingProfile.getProfilePointer().getValue(time)*genericBuildingProfile.yearlyDemand_kWh*genericBuildingProfile.getConsumptionScaling_fr();
}
}
}
for(J_EAProduction productionAssetProfile : productionAssetProfiles) {
if (productionAssetProfile != null) { //table function
for(double time = energyModel_time_h; time < energyModel_time_h + 24; time += p_timestep_h){
nettoBalanceTotal_kW[roundToInt((time-energyModel_time_h)/p_timestep_h)] -= productionAssetProfile.getProfilePointer().getValue(time)*productionAssetProfile.getCapacityElectric_kW();
}
}
}


return nettoBalanceTotal_kW;
}

Expand Down