From 58db3a20865c2928f12ef785a5d7ea8c11005625 Mon Sep 17 00:00:00 2001
From: Peter Alexander <peter@blackhillock.co.uk>
Date: Mon, 3 Aug 2015 12:46:49 +0100
Subject: [PATCH] Change format of LPJG file received

---
 GAMS/IntExtOpt.gms                            |  6 +-
 src/ac/ed/lurg/ModelConfig.java               |  2 +-
 src/ac/ed/lurg/ModelMain.java                 |  4 +-
 src/ac/ed/lurg/output/LpjgOutputer.java       | 69 +++++++++++++++++++
 src/ac/ed/lurg/types/FertiliserRate.java      | 12 +++-
 .../lurg/yield/LPJYieldResponseMapReader.java | 28 ++++----
 .../output => sac/raster}/RasterOutputer.java |  7 +-
 7 files changed, 101 insertions(+), 27 deletions(-)
 create mode 100644 src/ac/ed/lurg/output/LpjgOutputer.java
 rename src/ac/{ed/lurg/output => sac/raster}/RasterOutputer.java (97%)

diff --git a/GAMS/IntExtOpt.gms b/GAMS/IntExtOpt.gms
index 8fab4b93..2b08fc4b 100644
--- a/GAMS/IntExtOpt.gms
+++ b/GAMS/IntExtOpt.gms
@@ -113,9 +113,9 @@ $gdxin
        PASTURE_DECREASE_CONV_CALC(location)             
        ENERGY_EQ                                        total energy objective function;
  
- UNIT_ENERGY_EQ(crop, location) .. unitEnergy(crop, location) =E=  ( baseCost(crop) * power(cropAdj(crop), 1) +              
-                                                                     (fertiliserUnitCost * fertI(crop, location)) + 
-                                                                     (irrigCost(location) * irrigI(crop, location)) ) ;
+ UNIT_ENERGY_EQ(crop, location) .. unitEnergy(crop, location) =E=  ( baseCost(crop) * cropAdj(crop) +              
+                                                                     fertiliserUnitCost * fertI(crop, location) + 
+                                                                     irrigCost(location) * irrigI(crop, location) ) ;
  
  YIELD_EQ(crop, location) .. yield(crop, location) =E= (
                yieldNone(crop, location) + 
diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java
index f0b75b42..2f5e043e 100644
--- a/src/ac/ed/lurg/ModelConfig.java
+++ b/src/ac/ed/lurg/ModelConfig.java
@@ -96,7 +96,7 @@ public class ModelConfig {
 	public static final String COMMODITY_DATA_FILE = DATA_DIR + File.separator + "con_prod_c_and_m.csv";
 
 	// yield data
-	public static final String YIELD_DIR = "/Users/peteralexander/Documents/LURG/LPJ/tom-April2015";
+	public static final String YIELD_DIR = "/Users/peteralexander/Documents/LURG/LPJ/tom-July2015";
 
 	// Spatial (gridded) data
 	public static final String SPATIAL_DATA_DIR = DATA_DIR; // + File.separator + "tinyTest";
diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java
index 53fbd1f6..90fbf0a4 100644
--- a/src/ac/ed/lurg/ModelMain.java
+++ b/src/ac/ed/lurg/ModelMain.java
@@ -24,7 +24,6 @@ import ac.ed.lurg.landuse.IrrigationCostItem;
 import ac.ed.lurg.landuse.IrrigiationCostReader;
 import ac.ed.lurg.landuse.LandCoverItem;
 import ac.ed.lurg.landuse.LandCoverReader;
-import ac.ed.lurg.output.RasterOutputer;
 import ac.ed.lurg.types.CropToDoubleMap;
 import ac.ed.lurg.types.CropType;
 import ac.ed.lurg.types.FertiliserRate;
@@ -36,6 +35,7 @@ import ac.ed.lurg.yield.YieldRaster;
 import ac.sac.raster.IntegerRasterItem;
 import ac.sac.raster.RasterHeaderDetails;
 import ac.sac.raster.RasterKey;
+import ac.sac.raster.RasterOutputer;
 import ac.sac.raster.RasterSet;
 
 public class ModelMain {
@@ -241,7 +241,7 @@ public class ModelMain {
 
 
 			// DEBUG code
-			if (!(country.getCountryName().equals("United States of Americaxx") || country.getCountryName().equals("Russian Federation"))) { //|| country.getCountryName().equals("China")
+			if (!(country.getCountryName().equals("United States of America") || country.getCountryName().equals("Russian Federationxx"))) { //|| country.getCountryName().equals("China")
 				continue;
 			}
 
diff --git a/src/ac/ed/lurg/output/LpjgOutputer.java b/src/ac/ed/lurg/output/LpjgOutputer.java
new file mode 100644
index 00000000..5a3c8908
--- /dev/null
+++ b/src/ac/ed/lurg/output/LpjgOutputer.java
@@ -0,0 +1,69 @@
+package ac.ed.lurg.output;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Map.Entry;
+
+import ac.ed.lurg.ModelConfig;
+import ac.ed.lurg.landuse.AreasItem;
+import ac.ed.lurg.landuse.IntensitiesItem;
+import ac.sac.raster.RasterKey;
+import ac.sac.raster.RasterSet;
+
+public class LpjgOutputer {
+
+	private RasterSet<IntensitiesItem> intensityRaster;
+	private RasterSet<AreasItem> cropAreaRaster;
+	private int timestep;
+	
+	public LpjgOutputer(int timestep, RasterSet<IntensitiesItem> intensityRaster, RasterSet<AreasItem> cropAreaRaster) {
+		this.intensityRaster = intensityRaster;
+		this.cropAreaRaster = cropAreaRaster;
+	}
+	
+	
+	public void writeOutput(boolean writeImage) {
+	    BufferedWriter fileWriter = null;
+
+	    try {
+    		String areaFileName = ModelConfig.OUTPUT_DIR + File.separator + "Areas" + timestep + ".txt";
+    		fileWriter = new BufferedWriter(new FileWriter(areaFileName,false));
+    
+	    	writeHeader(fileWriter);
+
+			for (Entry<RasterKey, AreasItem> entry : cropAreaRaster.entrySet()) {
+					RasterKey location = entry.getKey();
+					AreasItem item = entry.getValue();
+
+		/*			Double d = getValue(location);
+					
+					if (d == null)
+						fileWriter.write(nullDataString + " ");
+					else
+						fileWriter.write(d + " ");*/
+				
+				fileWriter.newLine();
+	    	}
+	    }
+	    catch (IOException e) {
+	    	e.printStackTrace();
+	    }
+	    finally {
+			if (fileWriter != null) {
+				try {
+					fileWriter.close();
+				} 
+				catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+	    }
+	}
+
+	private void writeHeader(BufferedWriter outputFile) throws IOException {
+		outputFile.write("h1,h2,... ,hn");
+    	outputFile.newLine();
+	}
+}
diff --git a/src/ac/ed/lurg/types/FertiliserRate.java b/src/ac/ed/lurg/types/FertiliserRate.java
index 704ca490..e1e6ae7b 100644
--- a/src/ac/ed/lurg/types/FertiliserRate.java
+++ b/src/ac/ed/lurg/types/FertiliserRate.java
@@ -1,10 +1,16 @@
 package ac.ed.lurg.types;
 
+import java.io.File;
+
 public enum FertiliserRate {
-	NO_FERT("yield_1996_2005_minfert_CRU.out"),
-	MID_FERT("yield_1996_2005_middlefert_CRU.out"),
-	MAX_FERT("yield_1996_2005_highfert_CRU.out");
+	//	NO_FERT("yield_1996_2005_minfert_CRU.out"),
+	//	MID_FERT("yield_1996_2005_middlefert_CRU.out"),
+	//   MAX_FERT("yield_1996_2005_highfert_CRU.out");
 	
+	NO_FERT("minfert" + File.separator + "yield_1996_2005"),
+	MID_FERT("middlefert" + File.separator + "yield_1996_2005"),
+	MAX_FERT("highfert" + File.separator + "yield_1996_2005");
+
 	private String fileName;
 	
 	FertiliserRate(String fileName) {
diff --git a/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java b/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java
index efb48f75..2cde5a8b 100644
--- a/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java
+++ b/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java
@@ -56,27 +56,33 @@ public class LPJYieldResponseMapReader {
 						break;
 					case 2:
 						//YieldRecord values in kg DM / m2, we want t/ha, so 10 times larger
-						record.teSW = d * 10;
+						record.c3Pasture = d * 10;
 						break;
 					case 3:
-						record.teSWirr = d * 10;
+						record.c4Pasture = d * 10;
 						break;
 					case 4:
 						record.teWW = d * 10;
 						break;
 					case 5:
-						record.teWWirr = d * 10;
+						record.teSW = d * 10;
 						break;
 					case 6:
 						record.teCo = d * 10;
 						break;
 					case 7:
-						record.teCoirr = d * 10;
+						record.trRi = d * 10;
 						break;
 					case 8:
-						record.trRi = d * 10;
+						record.teWWirr = d * 10;
 						break;
 					case 9:
+						record.teSWirr = d * 10;
+						break;
+					case 10:
+						record.teCoirr = d * 10;
+						break;
+					case 11:
 						record.trRiirr = d * 10;
 						break;
 					}
@@ -124,19 +130,15 @@ public class LPJYieldResponseMapReader {
 		item.setYield(noIrrigYieldType, CropType.STARCHY_ROOTS, record.teSW * 1.1);
 		item.setYield(maxIrrigYieldType, CropType.STARCHY_ROOTS, record.teSWirr * 1.1);
 		
-		if (noIrrigYieldType.getFertiliserRate() == FertiliserRate.MAX_FERT) {
-			item.setYield(noIrrigYieldType, CropType.PASTURE, record.teSW*1.2);
-			item.setYield(maxIrrigYieldType, CropType.PASTURE, record.teSWirr*1.2);
-		}
-		else {
-			item.setYield(noIrrigYieldType, CropType.PASTURE, record.teSW*0.6);
-			item.setYield(maxIrrigYieldType, CropType.PASTURE, record.teSWirr*0.7);
-		}
+		item.setYield(noIrrigYieldType, CropType.PASTURE, Math.max(record.c3Pasture, record.c4Pasture));
+		item.setYield(maxIrrigYieldType, CropType.PASTURE, Math.max(record.c3Pasture, record.c4Pasture)*1.2);
 	}
 	
 	class YieldRecord {
 		double x;
 		double y;
+		double c3Pasture;
+		double c4Pasture;
 		double teSW;
 		double teSWirr;
 		double teWW;
diff --git a/src/ac/ed/lurg/output/RasterOutputer.java b/src/ac/sac/raster/RasterOutputer.java
similarity index 97%
rename from src/ac/ed/lurg/output/RasterOutputer.java
rename to src/ac/sac/raster/RasterOutputer.java
index acc511de..ff4c3b7f 100644
--- a/src/ac/ed/lurg/output/RasterOutputer.java
+++ b/src/ac/sac/raster/RasterOutputer.java
@@ -1,4 +1,4 @@
-package ac.ed.lurg.output;
+package ac.sac.raster;
 
 import java.awt.Image;
 import java.awt.image.BufferedImage;
@@ -19,13 +19,10 @@ import java.io.IOException;
 import javax.imageio.ImageIO;
 
 import ac.ed.lurg.ModelConfig;
-import ac.sac.raster.RasterItem;
-import ac.sac.raster.RasterKey;
-import ac.sac.raster.RasterSet;
 
 public abstract class RasterOutputer<D extends RasterItem> {
 	protected RasterSet<D> results;
-	String fileName;
+	private String fileName;
 	
 	public RasterOutputer(RasterSet<D> results, String fileName) {
 		this.results = results;
-- 
GitLab