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
-
-
-
-
-
-
-
-
-
-
-
- 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