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

Merge

parents 3f3ce05e 096e4ec1
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
...@@ -195,6 +195,7 @@ public class ModelConfig { ...@@ -195,6 +195,7 @@ public class ModelConfig {
public static final double TRANSPORT_LOSSES = getDoubleProperty("TRANSPORT_LOSSES", 0.05); // in international trade public static final double TRANSPORT_LOSSES = getDoubleProperty("TRANSPORT_LOSSES", 0.05); // in international trade
public static final double TRANSPORT_COST = getDoubleProperty("TRANSPORT_COST", 0.1); // 100 $/t see Wheat Transportation Profile - USDA public static final double TRANSPORT_COST = getDoubleProperty("TRANSPORT_COST", 0.1); // 100 $/t see Wheat Transportation Profile - USDA
public static final double TRADE_BARRIER_FACTOR_DEFAULT = getDoubleProperty("TRADE_BARRIER_FACTOR_DEFAULT", 0.4); // price factor in international trade, transport cost and real trade barriers public static final double TRADE_BARRIER_FACTOR_DEFAULT = getDoubleProperty("TRADE_BARRIER_FACTOR_DEFAULT", 0.4); // price factor in international trade, transport cost and real trade barriers
public static final double TRADE_BARRIER_ADJ = getDoubleProperty("TRADE_BARRIER_ADJ", 1.0);
public static final boolean ACTIVE_TRADE_BARRIERS = getBooleanProperty("ACTIVE_TRADE_BARRIERS", false); // if set to true read in barrier information from file, otherwise use default as above public static final boolean ACTIVE_TRADE_BARRIERS = getBooleanProperty("ACTIVE_TRADE_BARRIERS", false); // if set to true read in barrier information from file, otherwise use default as above
public static final boolean PROTECTED_AREAS_ENABLED = getBooleanProperty("PROTECTED_AREAS_ENABLED", true); public static final boolean PROTECTED_AREAS_ENABLED = getBooleanProperty("PROTECTED_AREAS_ENABLED", true);
......
package ac.ed.lurg;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
public class ModelConfig {
private Properties configFile;
private static ModelConfig modelConfig;
public static final String CONFIG_FILE = System.getProperty("CONFIG_FILE");
private ModelConfig() {
configFile = new Properties();
try {
System.out.println("Config. file is " + CONFIG_FILE);
if (CONFIG_FILE != null)
configFile.load(new FileInputStream(CONFIG_FILE));
}
catch (IOException e) {
System.err.println("Problems reading config file");
System.err.println(e.getMessage());
}
Enumeration<?> em = configFile.keys();
while(em.hasMoreElements()) {
String str = (String) em.nextElement();
System.out.println(str + ": " + configFile.get(str));
}
}
private static ModelConfig getModelConfig() {
if (modelConfig == null)
modelConfig = new ModelConfig();
return modelConfig;
}
private static String getProperty(String prop) {
return getModelConfig().getProp(prop);
}
private static String getProperty(String prop, String defaultString) {
String propValue = getProperty(prop);
return propValue == null ? defaultString : propValue;
}
private String getProp(String prop) {
return configFile.getProperty(prop);
}
private static Integer getIntProperty(String prop, Integer defaultInt) {
Integer propValue = getModelConfig().getIntProp(prop);
return propValue == null ? defaultInt : propValue;
}
private Integer getIntProp(String prop) {
String v = configFile.getProperty(prop);
return v==null ? null : Integer.valueOf(v);
}
@SuppressWarnings("unused")
private static Long getLongProperty(String prop, Long defaultLong) {
Long propValue = getModelConfig().getLongProp(prop);
return propValue == null ? defaultLong : propValue;
}
private Long getLongProp(String prop) {
String v = configFile.getProperty(prop);
return v==null ? null : Long.valueOf(v);
}
private static Double getDoubleProperty(String prop, Double defaultDouble) {
Double propValue = getModelConfig().getDoubleProp(prop);
return propValue == null ? defaultDouble : propValue;
}
private Double getDoubleProp(String prop) {
String v = configFile.getProperty(prop);
return v==null ? null : Double.valueOf(v);
}
private static Boolean getBooleanProperty(String prop, Boolean defaultBoolean) {
return getModelConfig().getBooleanProp(prop, defaultBoolean);
}
private boolean getBooleanProp(String prop, Boolean defaultBoolean) {
String v = configFile.getProperty(prop);
return v==null ? defaultBoolean : Boolean.valueOf(v);
}
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 OUTPUT_DIR = getProperty("OUTPUT_DIR", BASE_DIR + File.separator + "output");
public static final String TEMP_DIR = getProperty("TEMP_DIR", OUTPUT_DIR + File.separator + "GamsTmp");
public static final String DATA_DIR = getProperty("DATA_DIR", BASE_DIR + File.separator + "data");
public static final String GAMS_MODEL = getProperty("GAMS_MODEL", BASE_DIR + File.separator + "GAMS/IntExtOpt.gms");
public static final boolean CLEANUP_GAMS_DIR = getBooleanProperty("CLEANUP_GAMS_DIR", false);
// Country (non-gridded) data
public static final String DEMAND_CURVES_FILE = DATA_DIR + File.separator + "com_curves.csv";
public static final String SSP_FILE = DATA_DIR + File.separator + "ssp.csv";
public static final String BASELINE_CONSUMP_FILE = DATA_DIR + File.separator + "base_consump.csv";
public static final String COUNTRY_CODES_FILE = DATA_DIR + File.separator + "country_codes4.csv";
public static final String COUNTRY_DATA_FILE = DATA_DIR + File.separator + "country_data.csv";
public static final String NET_IMPORTS_FILE = DATA_DIR + File.separator + "net_imports.csv";
public static final String BIOENERGY_DEMAND_FILE = DATA_DIR + File.separator + "bio_demand.csv";
public static final String TRADE_BARRIERS_FILE = DATA_DIR + File.separator + "tradeBarriers.csv";
public static final String STOCKS_FILE = DATA_DIR + File.separator + "global_stocks.csv";
// yield data
public static final String YIELD_DIR = getProperty("YIELD_DIR");
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.out");
public static final String YIELD_FILENAME = getProperty("YIELD_FILENAME", "yield.out");
public static final boolean PASTURE_FERT_RESPONSE_FROM_LPJ = getBooleanProperty("PASTURE_FERT_RESPONSE_FROM_LPJ", false);;
public static final double CALIB_FACTOR_WHEAT = getDoubleProperty("CALIB_FACTOR_WHEAT", 0.976);
public static final double CALIB_FACTOR_MAIZE = getDoubleProperty("CALIB_FACTOR_MAIZE", 0.667);
public static final double CALIB_FACTOR_RICE = getDoubleProperty("CALIB_FACTOR_RICE", 1.247);
public static final double CALIB_FACTOR_OILCROPS = getDoubleProperty("CALIB_FACTOR_OILCROPS", 0.192);
public static final double CALIB_FACTOR_PULSES = getDoubleProperty("CALIB_FACTOR_PULSES", 0.583);
public static final double CALIB_FACTOR_STARCHY_ROOTS = getDoubleProperty("CALIB_FACTOR_STARCHY_ROOTS", 6.067);
// Spatial (gridded) data
public static final double CELL_SIZE_X = getDoubleProperty("CELL_SIZE_X", 0.5);
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", "halfdeg");
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 String IRRIGATION_CONSTRAINT_FILE = SPATIAL_DATA_DIR + File.separator + "blue_water_available_pseudoCRU_rcp8p5_2004_2013_grid_allhdyro_mm.txt";
public static final String IRRIG_MAX_WATER_FILENAME = getProperty("IRRIG_MAX_WATER_FILENAME", "gsirrigation.out");
public static final String PROTECTED_AREAS_FILE = SPATIAL_DATA_DIR + File.separator + "protected_areas.txt";
// Output
public static final String LAND_COVER_OUTPUT_FILE = OUTPUT_DIR + File.separator + "lc.txt";
public static final String PRICES_OUTPUT_FILE = OUTPUT_DIR + File.separator + "prices.txt";
public static final String DEMAND_OUTPUT_FILE = OUTPUT_DIR + File.separator + "demand.txt";
public static final boolean OUTPUT_FOR_LPJG = getBooleanProperty("OUTPUT_FOR_LPJG", true);
public static final boolean INTERPOLATE_OUTPUT_YEARS = getBooleanProperty("INTERPOLATE_OUTPUT_YEARS", true);
// Calibration related stuff
public static final boolean IS_CALIBRATION_RUN = getBooleanProperty("IS_CALIBRATION_RUN", false);
public static final String SERIALIZED_LAND_USE_FILE = getProperty("SERIALIZED_LAND_USE_FILE", OUTPUT_DIR + File.separator + "landUseRaster.ser");
public static final boolean MARKET_ADJ_PRICE = IS_CALIBRATION_RUN ? false : getBooleanProperty("MARKET_ADJ_PRICE", true);
public static final boolean CHANGE_YIELD_DATA_YEAR = IS_CALIBRATION_RUN ? false : getBooleanProperty("CHANGE_YIELD_DATA_YEAR", true);
// Temporal configuration
public static final int START_TIMESTEP = getIntProperty("START_TIMESTEP", 0);
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);
// Import export limits
public static final double ANNUAL_MAX_IMPORT_CHANGE = IS_CALIBRATION_RUN ? 0.0 : getDoubleProperty("ANNUAL_MAX_IMPORT_CHANGE", 0.02);
public static final double MAX_IMPORT_CHANGE = IS_CALIBRATION_RUN ? 0.0 : getDoubleProperty("MAX_IMPORT_CHANGE", ANNUAL_MAX_IMPORT_CHANGE*TIMESTEP_SIZE);
// Fertiliser application rates in kg/ha
public static final double MIN_FERT_AMOUNT = getDoubleProperty("MIN_FERT_AMOUNT", 0.0);
public static final double MID_FERT_AMOUNT = getDoubleProperty("MID_FERT_AMOUNT", 200.0);
public static final double MAX_FERT_AMOUNT = getDoubleProperty("MAX_FERT_AMOUNT", 1000.0);
public static final int FERT_AMOUNT_PADDING = getIntProperty("FERT_AMOUNT_PADDING", 4);;
// Other model parameters
public static final boolean CHANGE_DEMAND_YEAR = IS_CALIBRATION_RUN ? false : getBooleanProperty("CHANGE_DEMAND_YEAR", true);
public static final String SSP_SCENARIO = getProperty("SSP_SCENARIO", "SSP1_v9_130325");
public static final double PASTURE_HARVEST_FRACTION = getDoubleProperty("PASTURE_HARVEST_FRACTION", 0.5);
public static final double MEAT_EFFICIENCY = getDoubleProperty("MEAT_EFFICIENCY", 1.0); // 'meat' is includes feed conversion ratio already, this is tech. change or similar
public static final double IRRIGIATION_EFFICIENCY = getDoubleProperty("IRRIGIATION_EFFICIENCY", 0.5);
public static final double LAND_CHANGE_COST = getDoubleProperty("LAND_CHANGE_COST", 1.0);
public static final double SEED_AND_WASTE_FRACTION = getDoubleProperty("SEED_AND_WASTE_FRACTION", 0.15);
public static final double TECHNOLOGY_CHANGE_ANNUAL_RATE = IS_CALIBRATION_RUN ? 0.0 : getDoubleProperty("TECHNOLOGY_CHANGE_ANNUAL_RATE", 0.0);
public static final int TECHNOLOGY_CHANGE_START_STEP = getIntProperty("TECHNOLOGY_CHANGE_START_STEP", 0);
public static final double BIOENERGY_CHANGE_ANNUAL_RATE = IS_CALIBRATION_RUN ? 0.0 : getDoubleProperty("BIOENERGY_CHANGE_ANNUAL_RATE", 0.0); // 6.2/2.31/20
public static final int BIOENERGY_CHANGE_START_YEAR = getIntProperty("BIOENERGY_CHANGE_START_YEAR", 2010);
public static final int BIOENERGY_CHANGE_END_YEAR = getIntProperty("BIOENERGY_CHANGE_END_YEAR", 2030);
public static final double MARKET_LAMBA = getDoubleProperty("MARKET_LAMBA", 0.3); // controls international market price adjustment rate
public static final double POPULATION_AGGREG_LIMIT = getDoubleProperty("POPULATION_AGGREG_LIMIT", 40.0); // in millions, smaller countries are aggregated on a regional basis
public static final double UNHANDLED_CROP_AREA = getDoubleProperty("UNHANDLED_CROP_AREA", 0.3); // includes fruit veg forage crops set aside and failed crop
public static final double OTHER_INTENSITY_COST = getDoubleProperty("OTHER_INTENSITY_COST", 0.4);
public static final double OTHER_INTENSITY_PARAM = getDoubleProperty("OTHER_INTENSITY_PARAM", 3.22);
public static final double IRRIG_COST_SCALE_FACTOR = getDoubleProperty("IRRIG_COST_SCALE_FACTOR", 0.03);
public static final double FERTILISER_COST_PER_T = getDoubleProperty("FERTILISER_COST_PER_T", 0.3/0.34 * 1.1); // $300/t, 34% N/t plus 10% cost for application
public static final double FERTILISER_MAX_COST = FERTILISER_COST_PER_T * MAX_FERT_AMOUNT/1000;
public static final double DOMESTIC_PRICE_MARKUP = getDoubleProperty("DOMESTIC_PRICE_MARKUP", 2.0);
public static final double TRANSPORT_LOSSES = getDoubleProperty("TRANSPORT_LOSSES", 0.05); // in international trade
<<<<<<< local
public static final double TRADE_BARRIER_FACTOR_DEFAULT = getDoubleProperty("TRADE_BARRIER_FACTOR_DEFAULT", 0.2); // price factor in international trade, transport cost and real trade barriers
public static final double TRADE_BARRIER_ADJ = getDoubleProperty("TRADE_BARRIER_ADJ", 1.0); //to scale barriers according to SSP's
=======
public static final double TRANSPORT_COST = getDoubleProperty("TRANSPORT_COST", 0.1); // 100 $/t see Wheat Transportation Profile - USDA
public static final double TRADE_BARRIER_FACTOR_DEFAULT = getDoubleProperty("TRADE_BARRIER_FACTOR_DEFAULT", 0.4); // price factor in international trade, transport cost and real trade barriers
>>>>>>> other
public static final boolean ACTIVE_TRADE_BARRIERS = getBooleanProperty("ACTIVE_TRADE_BARRIERS", false); // if set to true read in barrier information from file, otherwise use default as above
public static final boolean PROTECTED_AREAS_ENABLED = getBooleanProperty("PROTECTED_AREAS_ENABLED", true);
public static final int NUM_CEREAL_CATEGORIES = getIntProperty("NUM_CEREAL_CATEGORIES", 15);
public static final int NUM_PASTURE_CATEGORIES = getIntProperty("NUM_PASTURE_CATEGORIES", 4);
public static final boolean DEBUG_LIMIT_COUNTRIES = getBooleanProperty("DEBUG_LIMIT_COUNTRIES", false);
public static final String DEBUG_COUNTRY_NAME = getProperty("DEBUG_COUNTRY_NAME", "United States of America");
public static final double PASTURE_MAX_IRRIGATION_RATE = getDoubleProperty("DEFAULT_MAX_IRRIGATION_RATE", 50.0); // shouldn't need this but some areas crops don't have a value, but was causing them to be selected
public static final int LPJG_TIMESTEP_SIZE = 5;
}
...@@ -22,7 +22,7 @@ public class GlobalPrice { ...@@ -22,7 +22,7 @@ public class GlobalPrice {
} }
public double getCountryImportPrice(double countryTradeBarrier) { public double getCountryImportPrice(double countryTradeBarrier) {
double importPrice = exportPrice * (1.0 + countryTradeBarrier) / (1.0 - ModelConfig.TRANSPORT_LOSSES) + ModelConfig.TRANSPORT_COST; double importPrice = exportPrice * (1.0 + countryTradeBarrier*ModelConfig.TRADE_BARRIER_ADJ) / (1.0 - ModelConfig.TRANSPORT_LOSSES);
return importPrice; return importPrice;
} }
......
package ac.ed.lurg.country;
import ac.ed.lurg.ModelConfig;
public class GlobalPrice {
double exportPrice;
double importAmount;
double exportAmount;
public GlobalPrice(double exportPrice, double importAmount, double exportAmount) {
this.exportPrice = exportPrice;
this.importAmount = importAmount;
this.exportAmount = exportAmount;
}
public static GlobalPrice createInitial(double exportPrice) {
return new GlobalPrice(exportPrice, Double.NaN, Double.NaN);
}
public double getExportPrice() {
return exportPrice;
}
public double getCountryImportPrice(double countryTradeBarrier) {
double importPrice = exportPrice * (1.0 + countryTradeBarrier*ModelConfig.TRADE_BARRIER_ADJ) / (1.0 - ModelConfig.TRANSPORT_LOSSES);
return importPrice;
}
public double getImportAmount() {
return importAmount;
}
public double getExportAmount() {
return exportAmount;
}
public GlobalPrice createWithUpdatedMarketPrices(double imports, double exports, boolean adjustPrice) {
if (imports > 0 || exports > 0) {
double ratio;
if (imports > exports)
ratio = (imports-exports)/imports;
else
ratio = (imports-exports)/exports;
double adjustment = adjustPrice ? Math.exp(ratio * ModelConfig.MARKET_LAMBA) : 1.0;
return new GlobalPrice(exportPrice * adjustment, imports, exports);
}
else {
return this;
}
}
@Override
public String toString() {
return String.format("export=%.3f", exportPrice);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment