From ba77af55680bd3db107a559ef32dff71b877bd44 Mon Sep 17 00:00:00 2001 From: Peter Alexander <peter@blackhillock.co.uk> Date: Fri, 18 Aug 2017 17:42:09 +0100 Subject: [PATCH] Tweaks to FPU --- hind1970/hind_config.properties | 6 +++-- src/ac/ed/lurg/ModelMain.java | 4 +-- src/ac/ed/lurg/landuse/FPUManager.java | 20 +++++++------- .../ed/lurg/landuse/IrrigationRasterSet.java | 26 ++++++++----------- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/hind1970/hind_config.properties b/hind1970/hind_config.properties index 6f821c04..5c457f5f 100644 --- a/hind1970/hind_config.properties +++ b/hind1970/hind_config.properties @@ -2,7 +2,9 @@ BASE_DIR=/Users/peteralexander/Documents/R_Workspace/UNPLUM/hind1970 INITAL_LAND_COVER_FILENAME=hurtt_1970.txt BASE_YEAR=1970 SSP_SCENARIO=NOT_NEEDED -YIELD_DIR=/Users/peteralexander/Documents/LURG/LPJ/29May2017/LPJG_PLUM_expt1.1_1961-2015_ipsl_LUfixes_10patchesFrom5patches_forED_20170528170903 +YIELD_DIR=/Users/peteralexander/Documents/LURG/LPJ/Aug2017/LPJG_PLUM_expt1.1_1961-2015_ipsl_irrV6104_b20170728 + +#LPJG_PLUM_expt1.1_1961-2015_ipsl_LUfixes_10patchesFrom5patches_forED_20170528170903 #YIELD_DIR=/Users/peteralexander/Documents/LURG/LPJ/19Jan2017/LPJG_PLUM_expt1.1_1971-2005_forED #YIELD_DIR=/Users/peteralexander/Documents/LURG/LPJ/IPSL/LPJG_PLUM_expt1.1_1966-2005_ipsl_lessIO_forED @@ -11,7 +13,7 @@ GAMS_MODEL=/Users/peteralexander/Documents/R_Workspace/UNPLUM/GAMS/IntExtOpt.gms DEBUG_LIMIT_COUNTRIES=false DEBUG_COUNTRY_NAME=India & Sri Lanka -DEBUG_JUST_DEMAND_OUTPUT=true +DEBUG_JUST_DEMAND_OUTPUT=false IS_CALIBRATION_RUN = false END_TIMESTEP=1 diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java index cf69278e..86980ad6 100644 --- a/src/ac/ed/lurg/ModelMain.java +++ b/src/ac/ed/lurg/ModelMain.java @@ -553,7 +553,7 @@ public class ModelMain { private IrrigationRasterSet getFixedIrrigationData() { - IrrigationRasterSet fixedIrrigData = new IrrigationRasterSet(desiredProjection); + IrrigationRasterSet fixedIrrigData = new IrrigationRasterSet(desiredProjection, fpuManager); new IrrigiationCostReader(fixedIrrigData).getRasterDataFromFile(ModelConfig.IRRIGATION_COST_FILE); return fixedIrrigData; } @@ -562,7 +562,7 @@ public class ModelMain { String rootDir = timestep.getYearSubDir(ModelConfig.YIELD_DIR); new IrrigationMaxAmountReader(currentIrrigationData, yieldSurfaces).getRasterDataFromFile(rootDir + File.separator + ModelConfig.IRRIG_MAX_WATER_FILENAME); new RunOffReader(currentIrrigationData).getRasterDataFromFile(rootDir + File.separator + ModelConfig.IRRIG_RUNOFF_FILE); - currentIrrigationData.updateConstraintByFPU(fpuManager, timestep); + currentIrrigationData.updateConstraintByFPU(timestep); return currentIrrigationData; } diff --git a/src/ac/ed/lurg/landuse/FPUManager.java b/src/ac/ed/lurg/landuse/FPUManager.java index fd77bfeb..5eb0a594 100644 --- a/src/ac/ed/lurg/landuse/FPUManager.java +++ b/src/ac/ed/lurg/landuse/FPUManager.java @@ -22,20 +22,13 @@ public class FPUManager { private static final int YEAR_COL = 1; private static final int USAGE_COL = 2; - RasterSet<IntegerRasterItem> fpuBoundaries; + RasterSet<IntegerRasterItem> fpuBoundaries; // better if these were private Map<IntegerRasterItem, List<RasterKey>> fpuMap; - Map<Integer, Map<Integer, Double>> fpuOtherUses; + private Map<Integer, Map<Integer, Double>> fpuOtherUses; public FPUManager(RasterHeaderDetails desiredProjection) { - getFPUBoundaryRaster(desiredProjection); - fpuMap = CollectionHelper.invertMap(fpuBoundaries); - readOtherUses(); - } - - public void getFPUBoundaryRaster(RasterHeaderDetails desiredProjection) { fpuBoundaries = new RasterSet<IntegerRasterItem>(desiredProjection) { private static final long serialVersionUID = -8620255271155259176L; - protected IntegerRasterItem createRasterData() { return new IntegerRasterItem(0); } @@ -43,6 +36,9 @@ public class FPUManager { FPUBoundaryReader fpuReader = new FPUBoundaryReader(fpuBoundaries); fpuReader.getRasterDataFromFile(ModelConfig.FPU_BOUNDARIES_FILE); + + fpuMap = CollectionHelper.invertMap(fpuBoundaries); + readOtherUses(); } @SuppressWarnings("serial") @@ -87,11 +83,15 @@ public class FPUManager { fpuOtherUses = usageMap; } - public List<RasterKey> getKeysFor(IntegerRasterItem fpu) { + List<RasterKey> getKeysFor(IntegerRasterItem fpu) { List<RasterKey> keys = fpuMap.get(fpu); if (keys == null) keys = new ArrayList<RasterKey>(); return keys; } + public double getOtherWaterUse(Integer fpuId, Integer year) { + Double d = fpuOtherUses.get(fpuId).get(year); + return d; + } } diff --git a/src/ac/ed/lurg/landuse/IrrigationRasterSet.java b/src/ac/ed/lurg/landuse/IrrigationRasterSet.java index 4cd9d8fa..c823ddda 100644 --- a/src/ac/ed/lurg/landuse/IrrigationRasterSet.java +++ b/src/ac/ed/lurg/landuse/IrrigationRasterSet.java @@ -5,7 +5,6 @@ import java.util.Map; import ac.ed.lurg.ModelConfig; import ac.ed.lurg.Timestep; -import ac.ed.lurg.utils.LogWriter; import ac.sac.raster.IntegerRasterItem; import ac.sac.raster.RasterHeaderDetails; import ac.sac.raster.RasterKey; @@ -14,16 +13,18 @@ import ac.sac.raster.RasterSet; public class IrrigationRasterSet extends RasterSet<IrrigationItem> { private static final long serialVersionUID = 4794790389538053286L; - - public IrrigationRasterSet(RasterHeaderDetails header) { + private FPUManager fpuManager; + + public IrrigationRasterSet(RasterHeaderDetails header, FPUManager fpuManager) { super(header); + this.fpuManager = fpuManager; } protected IrrigationItem createRasterData() { return new IrrigationItem(); } - public void updateConstraintByFPU(FPUManager fpuManager, Timestep timestep) { + public void updateConstraintByFPU(Timestep timestep) { Collection<RasterKey> fpuKeys; Collection<IntegerRasterItem> keyset = fpuManager.fpuMap.keySet(); @@ -31,11 +32,12 @@ public class IrrigationRasterSet extends RasterSet<IrrigationItem> { int yearsOfIrrigChange = (timestep.getTimestep() - ModelConfig.START_TIMESTEP) * ModelConfig.TIMESTEP_SIZE; double waterAvailabilityAdj = 1.0 + yearsOfIrrigChange * ModelConfig.WATER_AVAILIBILITY_RATE_OF_CHANGE; int year = timestep.getYear(); + if (year < 2001) year = 2001; // we don't have other water use before this date for (IntegerRasterItem fpu : keyset) { fpuKeys = fpuManager.getKeysFor(fpu); - RasterSet<IrrigationItem> irrigData = this.createSubsetForKeys(fpuKeys); + RasterSet<IrrigationItem> irrigData = createSubsetForKeys(fpuKeys); double fpuRunOff = 0.0; double otherUses = 0.0; double waterAvailForIrrigPerCell = 0.0; @@ -48,26 +50,20 @@ public class IrrigationRasterSet extends RasterSet<IrrigationItem> { * 0.01; cellCount++; } - } Double fpuRunOffAvailable = fpuRunOff * ModelConfig.ENVIRONMENTAL_WATER_CONSTRAINT; - otherUses = fpuManager.fpuOtherUses.get(fpu.getInt()).get(year) * waterAvailabilityAdj; - if (fpuRunOffAvailable - otherUses < 0) { + otherUses = fpuManager.getOtherWaterUse(fpu.getInt(), year) * waterAvailabilityAdj; + if (fpuRunOffAvailable - otherUses < 0) waterAvailForIrrigPerCell = 0; - } else + else waterAvailForIrrigPerCell = (fpuRunOffAvailable - otherUses) / cellCount; for (Map.Entry<RasterKey, IrrigationItem> entry : irrigData.entrySet()) { - if (entry.getValue() != null) { + if (entry.getValue() != null) entry.getValue().setIrrigConstraint(waterAvailForIrrigPerCell); - - } } - } - } - } -- GitLab