diff --git a/_alp/Agents/EnergyModel/AOC.EnergyModel.xml b/_alp/Agents/EnergyModel/AOC.EnergyModel.xml index bebfbc2f..267da7c0 100644 --- a/_alp/Agents/EnergyModel/AOC.EnergyModel.xml +++ b/_alp/Agents/EnergyModel/AOC.EnergyModel.xml @@ -138,326 +138,9 @@ v_liveData.assetsMetaData = v_liveAssetsMetaData;]]> 1658477103139 1658477103135 - - - 1661516161016 - - true - -840 - 810 - - false - true - true - - NONE - MANUALLY - - - SECOND - - 1661587200000 - - - 1661529224106 - - true - -840 - 830 - - false - true - true - - NONE - MANUALLY - - - SECOND - - 1661587200000 - - - 1663238746791 - - true - -840 - 850 - - false - true - true - - NONE - MANUALLY - - - SECOND - - 1663315200000 - - - 1663255244236 - - true - -840 - 930 - - false - true - true - - NONE - - - - ON_SIMULATION_END - - - SECOND - - 1663315200000 - - - 1666880542545 - - true - -840 - 870 - - false - true - true - - NONE - MANUALLY - - - SECOND - - 1666944000000 - - - 1672910222316 - - true - -840 - 890 - - false - true - true - - NONE - MANUALLY - - - SECOND - - 1666944000000 - - - 1679503183018 - - true - -840 - 910 - - false - true - true - - NONE - MANUALLY - - - SECOND - - 1666944000000 - - - - - 1659337941636 - - - -671 - 79 - - false - true - true - LINEAR - REPEATING - 0.0 - 1 - false - - - - - -// arguments and values - 0.0 - 0.0 - - - 1659337995740 - - - -671 - 99 - - false - true - true - LINEAR - REPEATING - 0.0 - 1 - false - - - - - -// arguments and values - 0.0 - 0.0 - - - 1659364114491 - - - -671 - 119 - - false - true - true - LINEAR - REPEATING - 0.0 - 1 - false - - - - - -// arguments and values - 0.0 - 0.0 - - - 1706010064113 - - -670 - 140 - - false - true - true - LINEAR - REPEATING - 0.0 - 1 - false - - - zero_engine - profiles - - - zero_engine - profiles - t_h - - - zero_engine - profiles - day_ahead_price_eur_mwh - - -// arguments and values - 0.0 - 0.0 - - - 1726146744634 - - true - -670 - 340 - - false - true - true - LINEAR - REPEATING - 0.0 - 1 - false - - - - - -// arguments and values - 0.0 - 0.0 - - 1658477103135 diff --git a/_alp/Agents/EnergyModel/Code/Functions.java b/_alp/Agents/EnergyModel/Code/Functions.java index 405825d6..de829a1c 100644 --- a/_alp/Agents/EnergyModel/Code/Functions.java +++ b/_alp/Agents/EnergyModel/Code/Functions.java @@ -1,367 +1,3 @@ -double f_returnKPIData(boolean writeToDisk) -{/*ALCODESTART::1661328014569*/ -traceln(""); -traceln("--------------------------"); -traceln("====== RUN FINISHED ======"); -traceln("--------------------------"); -traceln(""); - -f_calculateKPIs(); - -ObjectMapper mapper = new ObjectMapper(); - -//DataOut great_succes = new DataOut(); -j_dataOut.clearData(); - -// Collect actor data for all relevant actor groups en place in j_dataOut.actorData -for(ConnectionOwner c : pop_connectionOwners) { - try { - //traceln("ConnectionOwner v_ownedGridConnection: " + c.v_ownedGridConnection.p_gridConnectionID); -// traceln("ConnectionOwner v_energySupplierDistrictHeat: " + c.v_energySupplierDistrictHeat.toString()); - boolean b_methaneUsedWithoutContracts = c.v_methanePrice_eurpkWh == 0.0 & c.v_totalMethaneUsed_kWh > 0; - boolean b_hydrogenUsedWithoutContracts = c.v_hydrogenPrice_eurpkWh == 0.0 & c.v_totalHydrogenUsed_kWh > 0; - if (b_methaneUsedWithoutContracts) { - traceln("Connection Owner " + c.p_actorID + " used methane without the required contracts!") ; - } - String CoopString = c.p_CoopParent == null ? null : c.p_CoopParent.p_actorID; -// c.j_ActorData.updateData(c.p_actorID, c.p_actorType, c.p_parentActorID, c.p_energySupplier.toString(), c.v_ownedGridConnection.toString(), c.v_energySupplierDistrictHeat.toString(), roundToDecimal( c.v_electricityVolume_kWh, 2 ), roundToDecimal( c.v_heatVolume_kWh, 2), roundToDecimal( c.v_methaneVolume_kWh, 2), roundToDecimal( c.v_hydrogenVolume_kWh, 2 ), c.v_electricityContractType.toString(), c.v_heatContractType.toString(), c.v_methaneContractType.toString(), c.v_hydrogenContractType.toString(), roundToDecimal( c.v_balanceElectricity_eur, 2), roundToDecimal( c.v_balanceHeat_eur, 2), roundToDecimal( c.v_balanceMethane_eur, 2), roundToDecimal( c.v_balanceHydrogen_eur, 2)); - - //traceln("actor : "+ c.p_actorID); - c.j_ActorData.updateData( - c.p_actorID, c.p_actorType, c.p_gridOperator.p_actorID, CoopString, c.p_electricitySupplier.p_actorID, c.v_ownedGridConnection.p_gridConnectionID, - null, roundToDecimal( c.v_totalElectricityUsed_kWh, 2 ), roundToDecimal( c.v_totalHeatUsed_kWh, 2), roundToDecimal( c.v_totalMethaneUsed_kWh, 2), - roundToDecimal( c.v_totalHydrogenUsed_kWh, 2 ), roundToDecimal( c.v_totalDieselUsed_kWh, 2 ), - roundToDecimal( c.v_balanceElectricity_eur, 2), roundToDecimal( c.v_balanceElectricityDelivery_eur, 2), - roundToDecimal( c.v_balanceElectricityTransport_eur, 2), roundToDecimal( c.v_balanceElectricityTax_eur, 2), - c.v_contractDelivery.contractScope, c.v_contractTransport.contractScope, c.v_contractTax.contractScope, - b_methaneUsedWithoutContracts, b_hydrogenUsedWithoutContracts); - - //c.v_electricityContractType.toString(), c.v_heatContractType.toString(), c.v_methaneContractType.toString(), c.v_hydrogenContractType.toString(), - //null, null, null, null, - - J_ActorData data = c.j_ActorData; - j_dataOut.actorData.add(data); - } catch (Exception e) { - e.printStackTrace(); - } - - // Collect contracts with correnspondings energy/euro totals - if (b_anylogicCostsForAllContracts) { // Account everything within anylogic, so that for all contracts only financialTransactionVolumes are non-zero, energyVolumes all zero. - f_calculateContractCosts(c); - } else { // Old method, which relies on cost-benefit module to calculate financial transactions for methane, hydrogen, diesel and heat. - for(J_Contract co: c.c_actorContracts) { - co.contractHolder = c.p_actorID; - if(co.energyCarrier == OL_EnergyCarriers.ELECTRICITY) { - if(co.contractType.equals(OL_ContractType.DELIVERY)) { - co.FinancialTransactionVolume_eur = c.v_balanceElectricityDelivery_eur; - } else if(co.contractType.equals(OL_ContractType.TRANSPORT)) { - co.FinancialTransactionVolume_eur = c.v_balanceElectricityTransport_eur; - } else if(co.contractType.equals(OL_ContractType.TAX)) { - co.FinancialTransactionVolume_eur = c.v_balanceElectricityTax_eur; - } - } else if (co.energyCarrier == OL_EnergyCarriers.METHANE) { - co.EnergyTransactionVolume_kWh = -c.v_totalMethaneUsed_kWh; - } else if (co.energyCarrier == OL_EnergyCarriers.HYDROGEN) { - co.EnergyTransactionVolume_kWh = -c.v_totalHydrogenUsed_kWh; - } else if (co.energyCarrier == OL_EnergyCarriers.HEAT) { - co.EnergyTransactionVolume_kWh = -c.v_totalHeatUsed_kWh; - } else if (co.energyCarrier == OL_EnergyCarriers.DIESEL) { - co.EnergyTransactionVolume_kWh = -c.v_totalDieselUsed_kWh; - } - j_dataOut.contractData.add(co); - - } - } -//}); -} -traceln("Printing all contract data: " + j_dataOut.contractData); -for(EnergyCoop a : pop_energyCoops) { - a.f_totalFinances(); - try { - //traceln("ConnectionOwner v_ownedGridConnection: " + a.v_ownedGridConnection.p_gridConnectionID); - String CoopString = a.p_CoopParent == null ? null : a.p_CoopParent.toString(); - - a.j_ActorData.updateData(a.p_actorID, a.p_actorType, a.p_gridOperator.p_actorID, CoopString, a.p_electricitySupplier.p_actorID, a.p_gridNodeUnderResponsibility, - null, roundToDecimal( a.v_electricityImported_kWh-a.v_electricityExported_kWh, 2 ), roundToDecimal( a.v_heatImported_kWh-a.v_heatExported_kWh, 2), roundToDecimal( a.v_methaneImported_kWh-a.v_methaneExported_kWh, 2), roundToDecimal( a.v_hydrogenImported_kWh-a.v_hydrogenExported_kWh, 2 ), roundToDecimal( a.v_dieselImported_kWh, 2 ), - //a.v_electricityContractType.toString(), a.v_heatContractType.toString(), a.v_methaneContractType.toString(), a.v_hydrogenContractType.toString(), - //null, null, null, null, - roundToDecimal( a.v_balanceElectricity_eur, 2), roundToDecimal( a.v_balanceElectricityDelivery_eur, 2), roundToDecimal( a.v_balanceElectricityTransport_eur, 2), roundToDecimal( a.v_balanceElectricityTax_eur, 2), - a.v_contractDelivery.contractScope, a.v_contractTransport.contractScope, a.v_contractTax.contractScope, - false, false); - J_ActorData data = a.j_ActorData; - j_dataOut.actorData.add(data); - } catch (Exception e) { - e.printStackTrace(); - } - - if (b_anylogicCostsForAllContracts) { // Account everything within anylogic, so that for all contracts only financialTransactionVolumes are non-zero, energyVolumes all zero. - f_calculateContractCosts(a); - } else { // Old method, which relies on cost-benefit module to calculate financial transactions for methane, hydrogen, diesel and heat. - - for(J_Contract co: a.c_actorContracts) { - co.contractHolder = a.p_actorID; - if(co.energyCarrier == OL_EnergyCarriers.ELECTRICITY) { - if(co.contractType.equals(OL_ContractType.DELIVERY)) { - co.FinancialTransactionVolume_eur = a.v_balanceElectricityDelivery_eur; - } else if(co.contractType.equals(OL_ContractType.TRANSPORT)) { - co.FinancialTransactionVolume_eur = a.v_balanceElectricityTransport_eur; - } else if(co.contractType.equals(OL_ContractType.TAX)) { - co.FinancialTransactionVolume_eur = a.v_balanceElectricityTax_eur; - } - } else if (co.energyCarrier == OL_EnergyCarriers.METHANE) { - co.EnergyTransactionVolume_kWh = a.v_methaneImported_kWh-a.v_methaneExported_kWh; - } else if (co.energyCarrier == OL_EnergyCarriers.HYDROGEN) { - co.EnergyTransactionVolume_kWh = a.v_hydrogenImported_kWh-a.v_hydrogenExported_kWh; - } else if (co.energyCarrier == OL_EnergyCarriers.HEAT) { - co.EnergyTransactionVolume_kWh = a.v_heatImported_kWh-a.v_heatExported_kWh; - } else if (co.energyCarrier == OL_EnergyCarriers.DIESEL) { - co.EnergyTransactionVolume_kWh = a.v_dieselImported_kWh; - } - j_dataOut.contractData.add(co); - - } - } -//}); -} - - -// Bereken netvlak-data: -//f_sumGridNodeLoads(); -//traceln("Electricity imported: "+ v_totalElectricityImport_MWh + " MWh"); -//traceln("Electricity exported: "+ v_totalElectricityExport_MWh + " MWh"); - -/*//Total energy consumption and production -//traceln(""); -//traceln("__--** CONSUMPTION PER ASSET **--__"); -double energyProduced_MWh = 0; -double electricityProduced_MWh = 0; -double energyConsumed_MWh = 0; -//testing -double energyConsumed_thermalModels_MWh = 0; //tesing -double totalDistanceTrucks_km = 0; -double deltaThermalEnergySinceStart_MWh = 0; -double totalAmbientHeating_MWh = 0; - -for (J_EA e : c_energyAssets) { - double EnergyUsed_kWh = e.getEnergyUsed_kWh(); - double electricityProduced_kWh = 0; - - //energyConsumed_MWh += max(0,EnergyUsed_kWh)/1000; - //energyProduced_MWh +=max(0,-EnergyUsed_kWh)/1000; - if (EnergyUsed_kWh > 0) { - - if (e instanceof J_EAConversionCurtailer || e instanceof J_EAConversionCurtailerHeat) { - energyProduced_MWh -= EnergyUsed_kWh/1000; - v_totalEnergyCurtailed_MWh += EnergyUsed_kWh/1000; - } else if( e instanceof J_EAConversionGasCHP ) { - energyConsumed_MWh += EnergyUsed_kWh/1000; - electricityProduced_kWh = ((J_EAConversionGasCHP)e).getElectricityProduced_kWh(); - electricityProduced_MWh += electricityProduced_kWh/1000; - } - else { - energyConsumed_MWh += EnergyUsed_kWh/1000; - } - if( e instanceof J_EAStorageHeat && e.electricityConsumption_kW == 0) { - energyConsumed_thermalModels_MWh += EnergyUsed_kWh/1000; - } - if ( e instanceof J_EABuilding ) { - energyProduced_MWh += ((J_EABuilding)e).energyAbsorbed_kWh/1000; - deltaThermalEnergySinceStart_MWh += (((J_EABuilding)e).getCurrentTemperature()-20)*((J_EABuilding)e).getHeatCapacity_JpK()/3.6e9; - } - } else { - if( e.energyAssetType == OL_EnergyAssetType.PHOTOVOLTAIC || e.energyAssetType == OL_EnergyAssetType.WINDMILL){ - electricityProduced_MWh -= EnergyUsed_kWh/1000; - } - if( e.energyAssetType == OL_EnergyAssetType.METHANE_CHP ) { // Unreachable code; CHP will always have positive EnergyUsed_kWh! - //electricityProduced_MWh += roundToDecimal(e/1000,2); // Total electricity produced is not stored in CHP asset! - traceln("CHP electricity production not counted!"); - } - energyProduced_MWh -= EnergyUsed_kWh/1000; - } - if (e instanceof J_EABuilding) { - totalAmbientHeating_MWh += ((J_EABuilding)e).energyAbsorbed_kWh/1000; - } - if (e instanceof J_EAEV) { - v_totalEnergyChargedOutsideModel_MWh += ((J_EAEV)e).energyChargedOutsideModelArea_kWh/1000; - } -} - -traceln("Total energy absorbed from environment by buildings: %s MWh", totalAmbientHeating_MWh); -traceln("Delta thermal stored energy since start: %s MWh", deltaThermalEnergySinceStart_MWh); -//traceln("Trucks have traveled " + totalDistanceTrucks_km + " km"); - -traceln(""); -traceln("__--** Totals **--__"); -traceln("Energy consumed: "+ energyConsumed_MWh + " MWh"); -traceln("Energy consumed heatstorages: "+ energyConsumed_thermalModels_MWh + " MWh"); -traceln("Energy produced: "+ energyProduced_MWh + " MWh"); -//traceln("Electricity produced: "+ electricityProduced_MWh + " MWh (only by solar and wind"); - -traceln(""); -//Total selfconsumption, selfsufficiency - -if ( energyProduced_MWh > 0 ){ - v_modelSelfConsumption_fr = 1 - (v_totalElectricityExport_MWh + max(0,v_totalMethaneExport_MWh-v_totalMethaneImport_MWh) + max(0,v_totalHydrogenExport_MWh-v_totalHydrogenImport_MWh))/energyProduced_MWh; -} -traceln("Energy selfconsumption: " + v_modelSelfConsumption_fr*100 + "%"); -double totalElectricitySelfConsumption_fr = 0; -if ( electricityProduced_MWh > 0 ){ - totalElectricitySelfConsumption_fr = 1 - v_totalElectricityExport_MWh/electricityProduced_MWh; -} - -v_modelSelfSufficiency_fr = 1 - (v_totalElectricityImport_MWh + max(0,v_totalMethaneImport_MWh - v_totalMethaneExport_MWh) + -max(0,v_totalHydrogenImport_MWh - v_totalHydrogenExport_MWh) + v_totalDieselImport_MWh - v_batteryStoredEnergyDeltaSinceStart_MWh - deltaThermalEnergySinceStart_MWh) / energyConsumed_MWh; -traceln("Energy selfsufficiency (via import calc): %s %%", v_modelSelfSufficiency_fr*100); -double totalSelfSufficiency_fr_check = (energyProduced_MWh - (v_totalElectricityExport_MWh + max(0,v_totalMethaneExport_MWh-v_totalMethaneImport_MWh) + -max(0,v_totalHydrogenExport_MWh-v_totalHydrogenImport_MWh)))/energyConsumed_MWh; -traceln("Energy selfsufficiency (via export calc): %s %%", totalSelfSufficiency_fr_check*100); -// Remaining difference due to different temps of houses start vs end? - -traceln( "import electricity: " + v_totalElectricityImport_MWh + " MWh"); -traceln( "export electricity: " + v_totalElectricityExport_MWh + " MWh"); -traceln( "nett import methane: " + (v_totalMethaneImport_MWh-v_totalMethaneExport_MWh) + " MWh"); -traceln( "import diesel: " + v_totalDieselImport_MWh + " MWh"); - -traceln("MS node peak load: " + v_gridNodePeakLoadElectricityMSLS_kW + " kW at hour: " + c_timesOfNodePeakLoads_h); -*/ -double nbcars = 0; -double nbevs = 0; -double shareElectricvehiclesInHouseholds; - -for (GCHouse h : Houses){ - nbcars = nbcars + h.c_vehicleAssets.size(); //c_vehicleAssets has size 0 if it has an electric vehicles. So this is not double counting - if (h.p_householdEV != null){ - nbevs++; - nbcars++; - } -} -if (nbcars != 0){ - shareElectricvehiclesInHouseholds = nbevs/nbcars; -} -else { - shareElectricvehiclesInHouseholds = 0; -} -traceln("share EVs " + nbevs / nbcars); -traceln("nb EVs " + nbevs); - -// add Total Cost KPI data: -j_simulationResults.updateData( roundToDecimal( v_gridNodePeakLoadElectricityHSMS_kW, 2 ), - roundToDecimal( v_gridNodePeakLoadElectricityMSLS_kW, 2 ), - v_cumulativeGridCapacityHSMS_kW, - v_cumulativeGridCapacityMSLS_kW, - v_netOverloadKPI_pct, - c_timesOfNodePeakLoads_h, - c_gridConnectionOverload_fr, - v_MSLSnodePeakPositiveLoadElectricity_kW, - v_MSLSnodePeakNegativeLoadElectricity_kW, - v_totalElectricityImport_MWh, - v_totalElectricityExport_MWh, - v_totalMethaneImport_MWh, - v_totalMethaneExport_MWh, - v_totalHydrogenImport_MWh, - v_totalHydrogenExport_MWh, - v_totalDieselImport_MWh, - c_totalBatteryUnitsInstalled, - c_totalBatteryChargeAmount_MWh, - c_totalBatteryDischargeAmount_MWh, - c_totalBatteryInstalledCapacity_MWh, - //c_globalElectricityImportProfile_MWhph, - //c_globalElectricityExportProfile_MWhph, - //c_globalEVChargingProfile_kWhph, - //c_globalEHGVChargingProfile_kWhph, - //c_globalBatteryChargingProfile_kWhph, - v_modelSelfConsumption_fr, - v_modelSelfSufficiency_fr, - v_totalEnergyUsed_MWh, - v_totalEnergyProduced_MWh, - v_totalEnergyCurtailed_MWh, - shareElectricvehiclesInHouseholds - ); - -j_dataOut.simulationResults.add(j_simulationResults); - -j_hourlyCurvesData.updateData( c_globalElectricityImportProfile_MW, - c_globalElectricityExportProfile_MW, - c_globalEVChargingProfile_kW, - c_globalEHGVChargingProfile_kW, - c_globalBatteryChargingProfile_kW); - -j_dataOut.hourlyCurvesData.add(j_hourlyCurvesData); -double modelRunDuration_s = 0; -j_experimentSettingsData.updateData( p_timeStep_h+"", - v_timeStepsElapsed+"", - time(HOUR) + "", - null + "", - modelRunDuration_s + "", - pop_gridNodes.size() + "", - c_gridConnections.size() + "", - c_energyAssets.size() + "", - pop_connectionOwners.size() + "", - pop_energySuppliers.size() + "", - pop_energyCoops.size() + "", - pop_gridOperators.size() + "", - 1 + "", - shareElectricvehiclesInHouseholds ); - -j_dataOut.runSettingsData.add(j_experimentSettingsData); - -//traceln("Netload " + v_gridNodePeakLoadElectricityMSLS_kW/pop_gridNodes.get(0).p_capacity_kW * 100 + " %" ); -traceln("Model run duration: " + modelRunDuration_s + " seconds"); - - //System.out.println(json); - -String agentDataJson = ""; -String settingsJson = ""; -String simulationResultsJson = ""; -String hourlyCurvesDataJson = ""; -String contractDataJson = ""; - -try { - agentDataJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( j_dataOut.actorData ); - settingsJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( j_dataOut.runSettingsData ); - simulationResultsJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( j_dataOut.simulationResults ); - hourlyCurvesDataJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( j_dataOut.hourlyCurvesData ); - contractDataJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( j_dataOut.contractData ); - update_o_outputActorData( agentDataJson ); - update_o_outputSettings( settingsJson ); - update_o_simulationResults( simulationResultsJson ); - update_o_hourlyCurvesData ( hourlyCurvesDataJson ); - update_o_contractData ( contractDataJson ); -} catch(IOException e) { - e.printStackTrace(); -} - -traceln(""); -traceln(""); -try { - if(writeToDisk) { - //traceln("Succes.... YES!"); - mapper.writerWithDefaultPrettyPrinter().writeValue( - new File(".\\OutputAgentData.json"), j_dataOut.actorData ); - - mapper.writerWithDefaultPrettyPrinter().writeValue( - new File(".\\OutputRunSettingsData.json"), j_dataOut.runSettingsData ); -// traceln("file succes"); - - mapper.writerWithDefaultPrettyPrinter().writeValue( - new File(".\\OutputSimulationResults.json"), j_dataOut.simulationResults ); - - mapper.writerWithDefaultPrettyPrinter().writeValue( - new File(".\\ContractData.json"), j_dataOut.contractData ); - - mapper.writerWithDefaultPrettyPrinter().writeValue( - new File(".\\HourlyCurves.json"), j_dataOut.hourlyCurvesData ); - - } -} catch (IOException e) { -// traceln("exception generating output"); - e.printStackTrace(); -} - -return 1; - -/*ALCODEEND*/} - double f_updatePricesForNextTimestep(double t_h) {/*ALCODESTART::1664894248130*/ // Update the dayaheadprice @@ -407,10 +43,10 @@ null, roundToDecimal( a.v_electricityImported_kWh-a.v_electricityExported_kWh, 2 t_hourOfDay = t_h % 24; // Assumes modelrun starts at midnight. -v_currentAmbientTemperature_degC = tf_ambientTemperature_degC(t_h); +v_currentAmbientTemperature_degC = pp_ambientTemperature_degC.getCurrentValue(); c_profiles.forEach(p -> p.updateValue(t_h)); -v_currentWindPowerNormalized_r = pp_windOnshoreProduction.getCurrentValue(); -v_currentSolarPowerNormalized_r = pp_solarPVproduction.getCurrentValue(); +v_currentWindPowerNormalized_r = pp_windProduction_fr.getCurrentValue(); +v_currentSolarPowerNormalized_r = pp_PVProduction35DegSouth_fr.getCurrentValue(); //v_currentCookingDemand_fr = tf_cooking_demand(t_h); if (b_enableDLR) { @@ -442,8 +78,8 @@ null, roundToDecimal( a.v_electricityImported_kWh-a.v_electricityExported_kWh, 2 // Update forecasts, the relevant profile pointers are already updated above c_forecasts.forEach(f -> f.updateForecast(t_h)); -v_SolarYieldForecast_fr = pf_solarPVproduction.getForecast(); -v_WindYieldForecast_fr = pf_windOnshoreProduction.getForecast(); +v_SolarYieldForecast_fr = pf_PVProduction35DegSouth_fr.getForecast(); +v_WindYieldForecast_fr = pf_windProduction_fr.getForecast(); // The ElectricityYieldForecast assumes solar and wind forecasts have the same forecast time if ( v_liveAssetsMetaData.totalInstalledPVPower_kW + v_liveAssetsMetaData.totalInstalledWindPower_kW > 0 ) { v_electricityYieldForecast_fr = (v_SolarYieldForecast_fr * v_liveAssetsMetaData.totalInstalledPVPower_kW + v_WindYieldForecast_fr * v_liveAssetsMetaData.totalInstalledWindPower_kW) / (v_liveAssetsMetaData.totalInstalledPVPower_kW + v_liveAssetsMetaData.totalInstalledWindPower_kW); @@ -653,361 +289,21 @@ null, roundToDecimal( a.v_electricityImported_kWh-a.v_electricityExported_kWh, 2 double f_initializeForecasts() {/*ALCODESTART::1671636439933*/ -pf_windOnshoreProduction = new J_ProfileForecaster(null, pp_windOnshoreProduction, p_forecastTime_h, t_h, p_timeStep_h); -c_forecasts.add(pf_windOnshoreProduction); -pf_solarPVproduction = new J_ProfileForecaster(null, pp_solarPVproduction, p_forecastTime_h, t_h, p_timeStep_h); -c_forecasts.add(pf_solarPVproduction); - -pp_dayAheadElectricityPricing_eurpMWh = new J_ProfilePointer("Day ahead electricity pricing [eur/MWh]", tf_dayAheadElectricityPricing_eurpMWh); -c_profiles.add(pp_dayAheadElectricityPricing_eurpMWh); -pf_dayAheadElectricityPricing_eurpMWh = new J_ProfileForecaster(null, pp_dayAheadElectricityPricing_eurpMWh, p_forecastTime_h, t_h, p_timeStep_h); -c_forecasts.add(pf_dayAheadElectricityPricing_eurpMWh); - - -/*ALCODEEND*/} - -double f_calculateContractCosts(Actor a) -{/*ALCODESTART::1682943799138*/ -double v_totalMethaneUsed_kWh = 0; -double v_totalDieselUsed_kWh = 0; -double v_totalHydrogenUsed_kWh = 0; -double v_totalHeatUsed_kWh = 0; - -double v_balanceElectricityDelivery_eur = 0; -double v_balanceElectricityTransport_eur = 0; -double v_balanceElectricityTax_eur = 0; - -String p_actorID = ""; -ArrayList c_actorContracts = null; - -if (a instanceof ConnectionOwner) { - ConnectionOwner c = (ConnectionOwner)a; - p_actorID = c.p_actorID; - c_actorContracts = c.c_actorContracts; - v_totalMethaneUsed_kWh = c.v_totalMethaneUsed_kWh; - v_totalDieselUsed_kWh = c.v_totalDieselUsed_kWh; - v_totalHydrogenUsed_kWh = c.v_totalHydrogenUsed_kWh; - v_totalHeatUsed_kWh = c.v_totalHeatUsed_kWh; - v_balanceElectricityDelivery_eur = c.v_balanceElectricityDelivery_eur; - v_balanceElectricityTransport_eur = c.v_balanceElectricityTransport_eur; - v_balanceElectricityTax_eur = c.v_balanceElectricityTax_eur; -} else { - EnergyCoop c = (EnergyCoop)a; - p_actorID = c.p_actorID; - c_actorContracts = c.c_actorContracts; - v_totalMethaneUsed_kWh = c.v_methaneImported_kWh - c.v_methaneExported_kWh; - v_totalDieselUsed_kWh = c.v_dieselImported_kWh; - v_totalHydrogenUsed_kWh = c.v_hydrogenImported_kWh - c.v_hydrogenExported_kWh; - v_totalHeatUsed_kWh = c.v_heatImported_kWh - c.v_heatExported_kWh; - v_balanceElectricityDelivery_eur = c.v_balanceElectricityDelivery_eur; - v_balanceElectricityTransport_eur = c.v_balanceElectricityTransport_eur; - v_balanceElectricityTax_eur = c.v_balanceElectricityTax_eur; -} - -J_DeliveryContract methaneDeliveryContract = null; -J_DeliveryContract hydrogenDeliveryContract = null; -J_DeliveryContract dieselDeliveryContract = null; -J_DeliveryContract heatDeliveryContract = null; - -J_TaxContract methaneTaxContract = null; -J_TaxContract hydrogenTaxContract = null; -J_TaxContract dieselTaxContract = null; -J_TaxContract heatTaxContract = null; - -J_TransportContract methaneTransportContract = null; -J_TransportContract hydrogenTransportContract = null; -J_TransportContract dieselTransportContract = null; -J_TransportContract heatTransportContract = null; - -J_ConnectionContract methaneConnectionContract = null; -J_ConnectionContract hydrogenConnectionContract = null; -J_ConnectionContract dieselConnectionContract = null; -J_ConnectionContract heatConnectionContract = null; - - -//for(J_Contract co: c.c_actorContracts) { -for( int idx = 0 ; idx 0) { - methaneDeliveryContract.FinancialTransactionVolume_eur = v_totalMethaneUsed_kWh * methaneDeliveryContract.deliveryPrice_eurpkWh; - } else { - methaneDeliveryContract.FinancialTransactionVolume_eur = v_totalMethaneUsed_kWh * methaneDeliveryContract.feedinPrice_eurpkWh; - } - methaneDeliveryContract.FinancialTransactionVolume_eur += methaneDeliveryContract.annualFee_eur; - methaneTotalCostsForVAT_eur += methaneDeliveryContract.FinancialTransactionVolume_eur; - - j_dataOut.contractData.add((J_Contract)methaneDeliveryContract); -} -if (methaneTransportContract!= null) { - // Transport tariffs don't apply for methane - methaneTransportContract.FinancialTransactionVolume_eur += methaneTransportContract.annualFee_eur; - methaneTotalCostsForVAT_eur += methaneTransportContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)methaneTransportContract); -} -if (methaneConnectionContract!= null) { - // Connection contracts only have annualFee, no volume-dependent costs - methaneConnectionContract.FinancialTransactionVolume_eur += methaneConnectionContract.annualFee_eur; - methaneTotalCostsForVAT_eur += methaneConnectionContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)methaneTransportContract); -} -if (methaneTaxContract != null) { - if (v_totalMethaneUsed_kWh > 0) { - methaneTaxContract.FinancialTransactionVolume_eur = v_totalMethaneUsed_kWh * methaneTaxContract.deliveryTax_eurpkWh; - } else { - methaneTaxContract.FinancialTransactionVolume_eur = v_totalMethaneUsed_kWh * methaneTaxContract.feedinTax_eurpkWh; - } - methaneTaxContract.FinancialTransactionVolume_eur += methaneTaxContract.annualFee_eur; - methaneTotalCostsForVAT_eur += methaneTaxContract.FinancialTransactionVolume_eur; - // Apply VAT to everything (effectively saldering of everything! Not really correct for methane...) - methaneTaxContract.FinancialTransactionVolume_eur += methaneTotalCostsForVAT_eur * methaneTaxContract.proportionalTax_pct + methaneTaxContract.annualFee_eur; - j_dataOut.contractData.add((J_Contract)methaneTaxContract); -} - -//// Handle all diesel costs -double dieselTotalCostsForVAT_eur = 0; -if (dieselDeliveryContract!= null) { - if (v_totalDieselUsed_kWh > 0) { - dieselDeliveryContract.FinancialTransactionVolume_eur = v_totalDieselUsed_kWh * dieselDeliveryContract.deliveryPrice_eurpkWh; - } else { - dieselDeliveryContract.FinancialTransactionVolume_eur = v_totalDieselUsed_kWh * dieselDeliveryContract.feedinPrice_eurpkWh; - } - dieselDeliveryContract.FinancialTransactionVolume_eur += dieselDeliveryContract.annualFee_eur; - dieselTotalCostsForVAT_eur += dieselDeliveryContract.FinancialTransactionVolume_eur; - - j_dataOut.contractData.add((J_Contract)dieselDeliveryContract); -} -if (dieselTransportContract!= null) { - // Transport tariffs don't apply for diesel - dieselTransportContract.FinancialTransactionVolume_eur += dieselTransportContract.annualFee_eur; - dieselTotalCostsForVAT_eur += dieselTransportContract.FinancialTransactionVolume_eur; - - j_dataOut.contractData.add((J_Contract)dieselTransportContract); -} -if (dieselConnectionContract!= null) { - // Connection contracts only have annualFee, no volume-dependent costs - dieselConnectionContract.FinancialTransactionVolume_eur += dieselConnectionContract.annualFee_eur; - dieselTotalCostsForVAT_eur += dieselConnectionContract.FinancialTransactionVolume_eur; - - j_dataOut.contractData.add((J_Contract)dieselTransportContract); -} -if (dieselTaxContract != null) { - if (v_totalDieselUsed_kWh > 0) { - dieselTaxContract.FinancialTransactionVolume_eur = v_totalDieselUsed_kWh * dieselTaxContract.deliveryTax_eurpkWh; - } else { - dieselTaxContract.FinancialTransactionVolume_eur = v_totalDieselUsed_kWh * dieselTaxContract.feedinTax_eurpkWh; - } - dieselTaxContract.FinancialTransactionVolume_eur += dieselTaxContract.annualFee_eur; - dieselTotalCostsForVAT_eur += dieselTaxContract.FinancialTransactionVolume_eur; +pf_ambientTemperature_degC = new J_ProfileForecaster(null, pp_ambientTemperature_degC, p_forecastTime_h, t_h, p_timeStep_h); +c_forecasts.add(pf_ambientTemperature_degC); - // Apply VAT to everything (effectively saldering of everything! Not really correct for diesel...) - dieselTaxContract.FinancialTransactionVolume_eur += dieselTotalCostsForVAT_eur * dieselTaxContract.proportionalTax_pct + dieselTaxContract.annualFee_eur; - j_dataOut.contractData.add((J_Contract)dieselTaxContract); -} +pf_PVProduction35DegSouth_fr = new J_ProfileForecaster(null, pp_PVProduction35DegSouth_fr, p_forecastTime_h, t_h, p_timeStep_h); +c_forecasts.add(pf_PVProduction35DegSouth_fr); -//// Handle all hydrogen costs -double hydrogenTotalCostsForVAT_eur = 0; -if (hydrogenDeliveryContract!= null) { - if (v_totalHydrogenUsed_kWh > 0) { - hydrogenDeliveryContract.FinancialTransactionVolume_eur = v_totalHydrogenUsed_kWh * hydrogenDeliveryContract.deliveryPrice_eurpkWh; - } else { - hydrogenDeliveryContract.FinancialTransactionVolume_eur = v_totalHydrogenUsed_kWh * hydrogenDeliveryContract.feedinPrice_eurpkWh; - } - hydrogenDeliveryContract.FinancialTransactionVolume_eur += hydrogenDeliveryContract.annualFee_eur; - hydrogenTotalCostsForVAT_eur += hydrogenDeliveryContract.FinancialTransactionVolume_eur; +pf_PVProduction15DegEastWest_fr = new J_ProfileForecaster(null, pp_PVProduction15DegEastWest_fr, p_forecastTime_h, t_h, p_timeStep_h); +c_forecasts.add(pf_PVProduction15DegEastWest_fr); - j_dataOut.contractData.add((J_Contract)hydrogenDeliveryContract); -} -if (hydrogenTransportContract!= null) { - // Transport tariffs don't apply for hydrogen - hydrogenTransportContract.FinancialTransactionVolume_eur += hydrogenTransportContract.annualFee_eur; - hydrogenTotalCostsForVAT_eur += hydrogenTransportContract.FinancialTransactionVolume_eur; +pf_windProduction_fr = new J_ProfileForecaster(null, pp_windProduction_fr, p_forecastTime_h, t_h, p_timeStep_h); +c_forecasts.add(pf_windProduction_fr); - j_dataOut.contractData.add((J_Contract)hydrogenTransportContract); -} -if (hydrogenConnectionContract!= null) { - // Connection contracts only have annualFee, no volume-dependent costs - hydrogenConnectionContract.FinancialTransactionVolume_eur += hydrogenConnectionContract.annualFee_eur; - hydrogenTotalCostsForVAT_eur += hydrogenConnectionContract.FinancialTransactionVolume_eur; - - j_dataOut.contractData.add((J_Contract)hydrogenTransportContract); -} -if (hydrogenTaxContract != null) { - if (v_totalHydrogenUsed_kWh > 0) { - hydrogenTaxContract.FinancialTransactionVolume_eur = v_totalHydrogenUsed_kWh * hydrogenTaxContract.deliveryTax_eurpkWh; - } else { - hydrogenTaxContract.FinancialTransactionVolume_eur = v_totalHydrogenUsed_kWh * hydrogenTaxContract.feedinTax_eurpkWh; - } - hydrogenTaxContract.FinancialTransactionVolume_eur += hydrogenTaxContract.annualFee_eur ; - hydrogenTotalCostsForVAT_eur += hydrogenTaxContract.FinancialTransactionVolume_eur - - // Apply VAT to everything (effectively saldering of everything! Not really correct for hydrogen...) - hydrogenTaxContract.FinancialTransactionVolume_eur += hydrogenTotalCostsForVAT_eur * hydrogenTaxContract.proportionalTax_pct + hydrogenTaxContract.annualFee_eur; - j_dataOut.contractData.add((J_Contract)hydrogenTaxContract); -} - -//// Handle all heat costs -double heatTotalCostsForVAT_eur = 0; -if (heatDeliveryContract!= null) { - if (v_totalHeatUsed_kWh > 0) { - heatDeliveryContract.FinancialTransactionVolume_eur = v_totalHeatUsed_kWh * heatDeliveryContract.deliveryPrice_eurpkWh; - } else { - heatDeliveryContract.FinancialTransactionVolume_eur = v_totalHeatUsed_kWh * heatDeliveryContract.feedinPrice_eurpkWh; - } - heatDeliveryContract.FinancialTransactionVolume_eur += heatDeliveryContract.annualFee_eur; - heatTotalCostsForVAT_eur += heatDeliveryContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)heatDeliveryContract); -} -if (heatTransportContract!= null) { - // Transport tariffs don't apply for heat - heatTransportContract.FinancialTransactionVolume_eur += heatTransportContract.annualFee_eur; - heatTotalCostsForVAT_eur += heatTransportContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)heatTransportContract); -} -if (heatConnectionContract!= null) { - // Connection contracts only have annualFee, no volume-dependent costs - heatConnectionContract.FinancialTransactionVolume_eur += heatConnectionContract.annualFee_eur; - heatTotalCostsForVAT_eur += heatConnectionContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)heatTransportContract); -} -if (heatTaxContract != null) { - if (v_totalHeatUsed_kWh > 0) { - heatTaxContract.FinancialTransactionVolume_eur = v_totalHeatUsed_kWh * heatTaxContract.deliveryTax_eurpkWh; - } else { - heatTaxContract.FinancialTransactionVolume_eur = v_totalHeatUsed_kWh * heatTaxContract.feedinTax_eurpkWh; - } - heatTotalCostsForVAT_eur += heatTaxContract.FinancialTransactionVolume_eur + heatTaxContract.annualFee_eur ; - // Apply VAT to everything (effectively saldering of everything! Not really correct for heat...) - heatTaxContract.FinancialTransactionVolume_eur += heatTotalCostsForVAT_eur * heatTaxContract.proportionalTax_pct + heatTaxContract.annualFee_eur; - j_dataOut.contractData.add((J_Contract)heatTaxContract); -} -//j_dataOut.contractData.add(co); -*/ -/*ALCODEEND*/} - -double f_contractCostsPerEnergyCarrier(double energyUsed_kWh,J_DeliveryContract deliveryContract,J_ConnectionContract connectionContract,J_TransportContract transportContract,J_TaxContract taxContract) -{/*ALCODESTART::1683018740227*/ -double totalCostsForVAT_eur = 0; -if (deliveryContract!= null) { - if (energyUsed_kWh > 0) { - deliveryContract.FinancialTransactionVolume_eur = energyUsed_kWh * deliveryContract.deliveryPrice_eurpkWh; - } else { - deliveryContract.FinancialTransactionVolume_eur = energyUsed_kWh * deliveryContract.feedinPrice_eurpkWh; - } - deliveryContract.FinancialTransactionVolume_eur += deliveryContract.annualFee_eur; - totalCostsForVAT_eur += deliveryContract.FinancialTransactionVolume_eur; - - j_dataOut.contractData.add((J_Contract)deliveryContract); -} -if (transportContract!= null) { - // Transport tariffs don't apply for energy - transportContract.FinancialTransactionVolume_eur += transportContract.annualFee_eur; - totalCostsForVAT_eur += transportContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)transportContract); - -} -if (connectionContract!= null) { - // Connection contracts only have annualFee, no volume-dependent costs - connectionContract.FinancialTransactionVolume_eur += connectionContract.annualFee_eur; - totalCostsForVAT_eur += connectionContract.FinancialTransactionVolume_eur; - j_dataOut.contractData.add((J_Contract)connectionContract); +pf_dayAheadElectricityPricing_eurpMWh = new J_ProfileForecaster(null, pp_dayAheadElectricityPricing_eurpMWh, p_forecastTime_h, t_h, p_timeStep_h); +c_forecasts.add(pf_dayAheadElectricityPricing_eurpMWh); -} -if (taxContract != null) { - if (energyUsed_kWh > 0) { - taxContract.FinancialTransactionVolume_eur = energyUsed_kWh * taxContract.deliveryTax_eurpkWh; - } else { - taxContract.FinancialTransactionVolume_eur = energyUsed_kWh * taxContract.feedinTax_eurpkWh; - } - taxContract.FinancialTransactionVolume_eur += taxContract.annualFee_eur; - totalCostsForVAT_eur += taxContract.FinancialTransactionVolume_eur; - // Apply VAT to everything - taxContract.FinancialTransactionVolume_eur += totalCostsForVAT_eur * taxContract.proportionalTax_pct; - j_dataOut.contractData.add((J_Contract)taxContract); -} /*ALCODEEND*/} double f_runRapidSimulation() diff --git a/_alp/Agents/EnergyModel/Code/Functions.xml b/_alp/Agents/EnergyModel/Code/Functions.xml index 22807629..07c4ec82 100644 --- a/_alp/Agents/EnergyModel/Code/Functions.xml +++ b/_alp/Agents/EnergyModel/Code/Functions.xml @@ -1,30 +1,5 @@ - - RETURNS_VALUE - double - 1661328014569 - - - true - -840 - 650 - - false - true - true - - - - - - VOID double @@ -177,64 +152,6 @@ true - - VOID - double - 1682943799138 - - true - -819 - 689 - - false - true - true - - - - - - - - VOID - double - 1683018740227 - - true - -819 - 709 - - false - true - true - - - - - - - - - - - - - - - - - - - - - - VOID double @@ -507,8 +424,8 @@ double 1727106160366 - -670 - 390 + -740 + 72