diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java index 5d4b01de1af5aa60930088d4e8361f845274952a..529b1c2cfcd2f481ef5fc22e94ada311c6c67533 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 123f2c0feee476f7080f6be810c5520c2446e412..1b9ec52f5e763dc0d5822b6c23438b3ed68b9fbb 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 5919ca81fb7f4c6f6727681cda38330c58b77d15..e6b017d48555977e92c7f4153f8316cd6b437082 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 895d9a0b131d84f471212a9600b7589fdbcd3a21..ebe99c918307977f91977901d36502ba77c48d1e 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 7200115bf530337718a1f0a5b4caa6fdead15b32..0d576a6e1a3139b1fc63a39196aea6a4af1675b6 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 c58afd39574c7836bf43e6fb70104f96fe04f484..680de4d5229a460dcb6e18e02348623e21203689 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(); }