Skip to content
Snippets Groups Projects
Commit d68faedf authored by Peter Alexander's avatar Peter Alexander
Browse files

Tidy up and fix when no meat is produced in a country

parent baffd107
Branches
Tags
No related merge requests found
......@@ -80,8 +80,8 @@ public class ModelConfig {
public static final boolean SUPPRESS_STD_OUTPUT = getBooleanProperty("SUPPRESS_STD_OUTPUT", Boolean.FALSE);
// Directory information
public static final String BASE_DIR = getProperty("BASE_DIR"); // this must to be set in config file
public static final String TEMP_DIR = getProperty("TEMP_DIR", BASE_DIR + File.separator + "temp");
public static final String OUTPUT_DIR = getProperty("OUTPUT_DIR", BASE_DIR + File.separator + "output");
public static final String DATA_DIR = getProperty("DATA_DIR", BASE_DIR + File.separator + "data");
......@@ -100,39 +100,34 @@ public class ModelConfig {
// yield data
public static final String YIELD_DIR = getProperty("YIELD_DIR");
public static final boolean CHANGE_YIELD_DATA_YEAR = getBooleanProperty("CHANGE_YIELD_DATA_YEAR", true);
public static final int LPJG_MONITOR_TIMEOUT_SEC = getIntProperty("LPJG_MONITOR_TIMEOUT", 60*60*2);
public static final String ANPP_FILENAME = getProperty("ANPP_FILENAME", "anpp_plum.out");
public static final String YIELD_FILENAME = getProperty("YIELD_FILENAME", "yield_plum.out");
// Spatial (gridded) data
public static final double CELL_SIZE_X = getDoubleProperty("CELL_SIZE_X", 3.0);
public static final double CELL_SIZE_Y = getDoubleProperty("CELL_SIZE_Y", CELL_SIZE_X);
public static final String SPATIAL_DIR_NAME = getProperty("SPATIAL_DIR_NAME", "3deg");
public static final String SPATIAL_DATA_DIR = getProperty("SPATIAL_DATA_DIR", DATA_DIR + File.separator + SPATIAL_DIR_NAME);
public static final String INITAL_LAND_COVER_FILE = SPATIAL_DATA_DIR + File.separator + "netfract_hurtt_2000.txt";
public static final String COUNTRY_BOUNDARY_FILE = SPATIAL_DATA_DIR + File.separator + "country_boundaries.asc";
public static final String IRRIGATION_COST_FILE = SPATIAL_DATA_DIR + File.separator + "irrigation_cost.asc";;
public static final double IRRIG_COST_SCALE_FACTOR = 0.0003; // something wrong with the 3 deg irrigation cost file (figures are v large)
// Output
public static final String TOTAL_LAND_COVER_FILE = OUTPUT_DIR + File.separator + "total_lc.txt";
public static final boolean OUTPUT_FOR_LPJG = getBooleanProperty("OUTPUT_FOR_LPJG", true);
// Temporal configuration
public static final int START_TIMESTEP = getIntProperty("START_TIMESTEP", 0);
public static final int END_TIMESTEP = getIntProperty("END_TIMESTEP", 4);
public static final int TIMESTEP_SIZE = getIntProperty("TIMESTEP_SIZE", 10);
public static final int END_TIMESTEP = getIntProperty("END_TIMESTEP", 18);
public static final int TIMESTEP_SIZE = getIntProperty("TIMESTEP_SIZE", 5);
public static final int BASE_YEAR = getIntProperty("BASE_YEAR", 2010);
public static final double MAX_IMPORT_CHANGE = getDoubleProperty("MAX_IMPORT_CHANGE", 0.1);
// Other model parameters
public static final String SSP_SCENARIO = getProperty("SSP_SCENARIO", "SSP5_v9_130325");
public static final double MAX_IMPORT_CHANGE = getDoubleProperty("MAX_IMPORT_CHANGE", 0.1);
// Output
public static final boolean WRITE_JPEG_IMAGES = getBooleanProperty("WRITE_JPEG_IMAGES", false);
public static final int LPJG_MONITOR_TIMEOUT_SEC = getIntProperty("LPJG_MONITOR_TIMEOUT", 60*60*2);
public static final String TOTAL_LAND_COVER_FILE = OUTPUT_DIR + File.separator + "total_lc.txt";
//
public static final double PASTURE_HARVEST_FRACTION = getDoubleProperty("PASTURE_HARVEST_FRACTION", 0.5);
public static final double MEAT_EFFICIENCY = getDoubleProperty("MEAT_EFFICIENCY", 0.5);
public static final double LAND_CHANGE_COST = getDoubleProperty("LAND_CHANGE_COST", 2.0);
......@@ -140,5 +135,4 @@ public class ModelConfig {
public static final double SEED_AND_WASTE_FRACTION = getDoubleProperty("SEED_AND_WASTE_FRACTION", 0.1);
public static final double MARKET_LAMBA = getDoubleProperty("MARKET_LAMBA", 0.3); // controls market price adjustment rate
}
\ No newline at end of file
......@@ -142,11 +142,9 @@ public class ModelMain {
// output results
outputTimestepResults(timestep, globalIntensityRaster, globalCropAreaRaster, globalLocationIdRaster, yieldSurfaces);
writeMarketFile(timestep, globalCropAreaRaster);
}
public double updateMarketPrices(double previousPrice, double demand, double supply) {
if (demand > 0 || supply > 0) {
double ratio;
......@@ -209,49 +207,16 @@ public class ModelMain {
}
}
private void outputTimestepResults(Timestep timestep, RasterSet<IntensitiesItem> intensityRaster, RasterSet<AreasItem> cropAreaRaster, RasterSet<IntegerRasterItem> locationIdRaster, YieldRaster yieldSurfaces) {
private void outputTimestepResults(Timestep timestep, RasterSet<IntensitiesItem> intensityRaster, RasterSet<AreasItem> cropAreaRaster,
RasterSet<IntegerRasterItem> locationIdRaster, YieldRaster yieldSurfaces) {
writeMarketFile(timestep, cropAreaRaster);
if (ModelConfig.OUTPUT_FOR_LPJG) {
LpjgOutputer lpjOutputer = new LpjgOutputer(timestep, intensityRaster, cropAreaRaster, yieldSurfaces);
lpjOutputer.writeOutput();
/* new RasterOutputer<IntegerRasterItem>(locationIdRaster, "locId" + year) {
@Override
public Double getValue(RasterKey location) {
IntegerRasterItem locItem = results.get(location);
if (locItem == null)
return null;
return (double)locItem.getInt();
}
@Override
public int convertToPixelValue(double value) {
return (int) (value * 3 + 1);
}
}.writeOutput(ModelConfig.WRITE_JPEG_IMAGES);
new RasterOutputer<IntensitiesItem>(intensityRaster, "wheatIntensity" + year) {
@Override
public Double getValue(RasterKey location) {
IntensitiesItem intensityItem = results.get(location);
if (intensityItem == null)
return null;
Intensity cropIntensity = intensityItem.getIntensity(CropType.WHEAT);
return cropIntensity == null ? 0 : cropIntensity.getFertiliserIntensity();
}
@Override
public int convertToPixelValue(double value) {
return (int) (value * 20) + 1;
}
}.writeOutput(ModelConfig.WRITE_JPEG_IMAGES);
outputAreas(year, cropAreaRaster, CropType.MAIZE); */
outputLandCover(timestep.getYear(), cropAreaRaster, LandCoverType.CROPLAND);
outputLandCover(timestep.getYear(), cropAreaRaster, LandCoverType.PASTURE);
}
......@@ -266,12 +231,7 @@ public class ModelMain {
return area.getLandCoverArea(lcType);
}
@Override
public int convertToPixelValue(double value) {
return value > 0 ? 10 : 1;
}
}.writeOutput(ModelConfig.WRITE_JPEG_IMAGES);
}.writeOutput();
}
public Map<Country, List<RasterKey>> createCountryToKeysMap() {
......@@ -324,7 +284,7 @@ public class ModelMain {
// continue;
// }
if (demandManager.getPopulation(country, 2010) < 80 || countryExclusionList.contains(country.getCountryName())) {
if (demandManager.getPopulation(country, 2010) < 8 || countryExclusionList.contains(country.getCountryName())) {
LogWriter.printlnError("Skipping " + country);
continue;
}
......
......
......@@ -271,8 +271,9 @@ public class GamsLocationOptimiser {
}
netImport = varNetImports.findRecord(CropType.MEAT.getGamsName()).getLevel();
prod = parmProd.findRecord(CropType.MEAT.getGamsName()).getValue();
prodCost = parmProdCost.findRecord(CropType.MEAT.getGamsName()).getValue();
prod = getParmValue(parmProd, CropType.MEAT.getGamsName());
prodCost = getParmValue(parmProdCost, CropType.MEAT.getGamsName());
cropUsageData.put(CropType.MEAT, new CropUsageData(0.0, netImport, prod, prodCost));
if (DEBUG) {
LogWriter.println(String.format("\n%s:\t\t\t\t\tnetImports= %.3f,\tprod= %.3f,\tprodCost= %.3f", CropType.MEAT.getGamsName(), netImport, prod, prodCost));
......
......
......@@ -31,7 +31,15 @@ public abstract class RasterOutputer<D extends RasterItem> {
}
abstract public Double getValue(RasterKey location);
abstract public int convertToPixelValue(double value);
public int convertToPixelValue(double value) {
throw new RuntimeException("RasterOutputer: if outputing image, need to override this method. ");
}
/** write raster output, but no image */
public void writeOutput() {
writeOutput(false);
}
public void writeOutput(boolean writeImage) {
BufferedWriter fileWriter = null;
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment