From cff9a13687f5325170a13e5360d64df9b46fffdf Mon Sep 17 00:00:00 2001 From: R0slyn <roslyn.henry.08@aberdeen.ac.uk> Date: Fri, 3 Nov 2017 11:50:32 +0000 Subject: [PATCH] Clunky changes to change yield in Argentina as per RUGS stakeholder storyline --- src/ac/ed/lurg/ModelConfig.java | 4 +++ src/ac/ed/lurg/ModelMain.java | 2 ++ src/ac/ed/lurg/country/CountryAgent.java | 32 +++++++++++++++++++ .../country/gams/GamsLocationOptimiser.java | 1 - .../country/gams/GamsRasterOptimiser.java | 3 +- src/ac/ed/lurg/output/LandUseOutputer.java | 4 +-- 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java index 5d4b01de..529b1c2c 100644 --- a/src/ac/ed/lurg/ModelConfig.java +++ b/src/ac/ed/lurg/ModelConfig.java @@ -246,6 +246,10 @@ public class ModelConfig { public static final int DIETARY_CHANGE_END_YEAR = getIntProperty("DIETARY_CHANGE_END_YEAR", 2050); public static final double DIETARY_CHANGE_ANNUAL_RATE = getDoubleProperty("DIETARY_CHANGE_ANNUAL_RATE", 0.05); + //RUGS limit yield in argentina + public static final boolean LIMIT_MAIZE_YIELD_ARGENTINA = getBooleanProperty("LIMIT_MAIZE_YIELD_ARGENTINA", true); + public static final double LIMIT_YIELD_BY = getDoubleProperty("LIMIT_YIELD_BY", 0.0); + public static final double MARKET_LAMBA = getDoubleProperty("MARKET_LAMBA", 0.4); // controls international market price adjustment rate diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java index 123f2c0f..1b9ec52f 100644 --- a/src/ac/ed/lurg/ModelMain.java +++ b/src/ac/ed/lurg/ModelMain.java @@ -380,6 +380,7 @@ public class ModelMain { writeGlobalMarketFile(timestep); writeDemandFile(timestep); writeDomesticProductionFile(timestep); + if (ModelConfig.OUTPUT_FOR_LPJG) { for (int outputYear : timestep.getYearsFromLast()) { @@ -580,6 +581,7 @@ public class ModelMain { areasItem.setProtectedArea(landCover.getProtectedArea()); landUseRaster.put(key, areasItem); } + //outputAreas(initialLC); return landUseRaster; } diff --git a/src/ac/ed/lurg/country/CountryAgent.java b/src/ac/ed/lurg/country/CountryAgent.java index 5919ca81..e6b017d4 100644 --- a/src/ac/ed/lurg/country/CountryAgent.java +++ b/src/ac/ed/lurg/country/CountryAgent.java @@ -20,6 +20,7 @@ import ac.ed.lurg.landuse.LandUseItem; import ac.ed.lurg.types.CommodityType; import ac.ed.lurg.types.CropType; import ac.ed.lurg.types.LandCoverType; +import ac.ed.lurg.types.YieldType; import ac.ed.lurg.utils.LogWriter; import ac.ed.lurg.utils.cluster.Cluster; import ac.ed.lurg.utils.cluster.KMeans; @@ -107,6 +108,20 @@ public class CountryAgent { currentProjectedDemand = demandManager.getDemand(country, timestep.getYear()); currentCountryPrices = calculateCountryPrices(worldPrices); + + if(ModelConfig.LIMIT_MAIZE_YIELD_ARGENTINA & country.getName().equals("Argentina")){ + + for (Entry<RasterKey, YieldResponsesItem> entry : countryYieldSurfaces.entrySet()) { + YieldResponsesItem yresp = entry.getValue(); + if (yresp != null){ + for (YieldType yt : YieldType.values()) { + double prevYield = yresp.getYield(yt, CropType.MAIZE); + yresp.setYield(yt,CropType.MAIZE, prevYield*(1-ModelConfig.LIMIT_YIELD_BY)); + } + } + } + } + if (currentProjectedDemand.size() == 0) { LogWriter.printlnError("No demand for country " + country + " so skipping it"); @@ -204,4 +219,21 @@ public class CountryAgent { return previousGamsRasterOutput; } + +// private YieldRaster adjustCountryYield (YieldRaster countryYieldSurfaces){ +// +// for (Entry<RasterKey, YieldResponsesItem> entry : countryYieldSurfaces.entrySet()) { +// YieldResponsesItem yresp = entry.getValue(); +// if (yresp != null){ +// for (YieldType yt : YieldType.values()) { +// double prevYield = yresp.getYield(yt, CropType.MAIZE); +// LogWriter.println("before " + " yield type " + yt + " yield " + yresp.getYield(yt, CropType.MAIZE)); +// yresp.setYield(yt,CropType.MAIZE, prevYield*(1-ModelConfig.LIMIT_YIELD_BY)); +// LogWriter.println("after " + " yield type " + yt + " yield " + yresp.getYield(yt, CropType.MAIZE)); +// } +// } +// } +// return countryYieldSurfaces; +// +// } } diff --git a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java index 895d9a0b..ebe99c91 100644 --- a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java +++ b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java @@ -359,7 +359,6 @@ public class GamsLocationOptimiser { landUseItem.setLandCoverArea(LandCoverType.CROPLAND, croplandArea); // will set this multiple times, once for each arable crop, but doesn't really matter totalCropArea += area; } - landUseItem.setCropFraction(cropType, croplandArea > 0 ? area/croplandArea : 0); } diff --git a/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java b/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java index 7200115b..0d576a6e 100644 --- a/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java +++ b/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java @@ -158,7 +158,7 @@ public class GamsRasterOptimiser { LogWriter.println("pastureFromNatural" + pastureFromNatural); LogWriter.println("cropFromNatural" + cropFromNatural); } - + allocAllLandCropsTop(newLandUseRaster, keys, LandCoverType.PASTURE, LandCoverType.MANAGED_FOREST, pastureFromNatural * prevForestToNaturalFraction * prevForestManagedFraction, locId); allocAllLandCropsTop(newLandUseRaster, keys, LandCoverType.PASTURE, LandCoverType.UNMANAGED_FOREST, pastureFromNatural * prevForestToNaturalFraction * (1-prevForestManagedFraction), locId); allocAllLandCropsTop(newLandUseRaster, keys, LandCoverType.PASTURE, LandCoverType.OTHER_NATURAL, pastureFromNatural * (1-prevForestToNaturalFraction), locId); @@ -176,6 +176,7 @@ public class GamsRasterOptimiser { newLandUseItem.setCropFraction(crop, newLandUseAggItem.getCropFraction(crop)); newLandUseItem.setIntensity(crop, newLandUseAggItem.getIntensity(crop)); // intensities constant over single aggregated land category } + } } } diff --git a/src/ac/ed/lurg/output/LandUseOutputer.java b/src/ac/ed/lurg/output/LandUseOutputer.java index c58afd39..680de4d5 100644 --- a/src/ac/ed/lurg/output/LandUseOutputer.java +++ b/src/ac/ed/lurg/output/LandUseOutputer.java @@ -52,7 +52,8 @@ public class LandUseOutputer extends AbstractLandUseOutputer { double lat = landUseRaster.getXCoordin(key); double lon = landUseRaster.getYCoordin(key); - + + StringBuffer sbData = new StringBuffer(String.format("%.2f %.2f", lat, lon)); sbData.append(String.format(" %.8f", item.getTotalLandCoverArea())); @@ -73,7 +74,6 @@ public class LandUseOutputer extends AbstractLandUseOutputer { double yield = intensity==null ? 0.0 : intensity.getYield(); sbData.append(String.format(" %.8f %.8f %.8f %.8f %.8f %.8f %.8f", cropFract, fertI, fertQ, irrigI, irrigQ, otherI, yield)); } - fertWriter.write(sbData.toString()); fertWriter.newLine(); } -- GitLab