Skip to content
Snippets Groups Projects
ModelMain.java 1.98 KiB
package ac.ed.lurg;

import java.io.File;
import java.util.Collection;

import ac.ed.lurg.country.CountryAgent;
import ac.ed.lurg.country.CountryAgentCreator;
import ac.ed.lurg.demand.DemandManager;
import ac.ed.lurg.types.CropType;
import ac.ed.lurg.types.ModelFitType;
import ac.ed.lurg.types.YieldType;
import ac.ed.lurg.yield.YieldManager;
import ac.ed.lurg.yield.YieldResponsesItem;
import ac.ed.lurg.yield.YieldResponseMapReader;
import ac.sac.raster.RasterSet;

public class ModelMain {

	private Collection<CountryAgent> countryAgents;
	ModelContext modelContext;
	
	public static void main(String[] args)  {
		ModelMain theModel = new ModelMain();
		theModel.setup();
		theModel.run();
	}
		
	/* setup models, reading inputs, etc. */
	private void setup() {
		DemandManager demandManager = new DemandManager(ModelFitType.LOGISTIC, "SSP2_v9_130325");
		
		YieldManager yieldManager = new YieldManager();
		
		modelContext = new ModelContext(demandManager, yieldManager);
		
		countryAgents = new CountryAgentCreator().getAgents(modelContext);
	}
	
	/* run the model */
	private void run() {
		for (int i = ModelConfig.START_TIMESTEP; i <= ModelConfig.END_TIMESTEP; i++)
			doTimestep(i);
	}

	private void doTimestep(int timestep) {
		RasterSet<YieldResponsesItem> yieldSurfaces = getYieldSurfaces(timestep);
		
		for (CountryAgent ca : countryAgents) {
			ca.determineProduction(timestep);
		}
		
		// examine global trade balance
	}

	private RasterSet<YieldResponsesItem> getYieldSurfaces(int timestep) {
		String rootDir = ModelConfig.YIELD_DIR + File.separator + (timestep + ModelConfig.START_TIMESTEP) + File.separator;
		RasterSet<YieldResponsesItem> yieldSurfaces = null;
		
		for (CropType cropType : CropType.values()) {
			for (YieldType yieldType : YieldType.values()) {
				YieldResponseMapReader yieldReader = new YieldResponseMapReader(yieldSurfaces, yieldType, cropType);
				yieldSurfaces = yieldReader.getRasterDataFromFile(rootDir + yieldType.getFileName()); 
			}
		}
		return yieldSurfaces;
	}
}