From 6e88fe9bc737624d016857d5a698d9272b8fbc37 Mon Sep 17 00:00:00 2001 From: Peter Alexander <> Date: Tue, 18 Jan 2022 14:44:57 +0000 Subject: [PATCH] Allow saving of checkpoint status in normal runs not just calibration runs --- src/ac/ed/lurg/ModelConfig.java | 2 ++ src/ac/ed/lurg/ModelMain.java | 28 +++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java index 19f7e301..97d12c66 100755 --- a/src/ac/ed/lurg/ModelConfig.java +++ b/src/ac/ed/lurg/ModelConfig.java @@ -387,6 +387,8 @@ public class ModelConfig { public static final int NUM_YIELD_CLUSTERS = getIntProperty("NUM_YIELD_CLUSTERS", 8000); public static final long RANDOM_SEED = getIntProperty("RANDOM_SEED", 1974329); // any number will do + public static final String CHECKPOINT_YEARS = getProperty("CHECKPOINT_YEARS", null); // 2020,2050 + // Protected areas forcing parameters public static final boolean FORCE_PROTECTED_AREAS = IS_CALIBRATION_RUN ? false : getBooleanProperty("FORCE_PROTECTED_AREAS", false); public static final int FORCE_PROTECTED_AREAS_START_YEAR = getIntProperty("FORCE_PROTECTED_AREAS_START_YEAR", 2020); diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java index 5d41efae..f863419d 100644 --- a/src/ac/ed/lurg/ModelMain.java +++ b/src/ac/ed/lurg/ModelMain.java @@ -143,6 +143,24 @@ public class ModelMain { // output results outputTimestepResults(timestep, globalLandUseRaster); + + checkAndSaveCheckpoint(timestep); + } + + private void checkAndSaveCheckpoint(Timestep timestep) { + if (ModelConfig.CHECKPOINT_YEARS != null) { + LogWriter.println("Looking to see if checkpoint year reached " + ModelConfig.CHECKPOINT_YEARS); + + String[] yearStr = ModelConfig.CHECKPOINT_YEARS.split(","); + for(int i=0; i<yearStr.length; i++) { + LogWriter.println("Got a checkpoint yearStr " + yearStr[i]); + int year = Integer.parseInt(yearStr[i]); + if (timestep.getYear() == year) { + LogWriter.println("Saving checkpoint"); + serializeCheckpoint(globalLandUseRaster); + } + } + } } private void writeLandCoverFile(Timestep timestep, RasterSet<LandUseItem> landUseRaster) { @@ -424,9 +442,7 @@ public class ModelMain { } if (ModelConfig.IS_CALIBRATION_RUN) { - serializeLandUse(landUseRaster); - countryAgents.serializeCropUsageForAll(); - internationalMarket.serializeGlobalPrices(); + serializeCheckpoint(landUseRaster); } if (timestep.isInitialTimestep() && ModelConfig.GENERATE_NEW_YIELD_CLUSTERS) @@ -629,4 +645,10 @@ public class ModelMain { currentIrrigationData.updateIrrigConstraints(timestep); } } + + private void serializeCheckpoint(RasterSet<LandUseItem> landUseRaster) { + serializeLandUse(landUseRaster); + countryAgents.serializeCropUsageForAll(); + internationalMarket.serializeGlobalPrices(); + } } -- GitLab