public void Run(Clock clock, IGlobalHotellingTaxationState state, IDimensions dimensions) { var t = clock.Current; var s = state; var perCapitaConsumptionNow = s.consumption[t] / s.population[t]; var perCapitaConsumptionPrevious = s.consumption[t - 1] / s.population[t - 1]; var perCapitaGrowthRate = perCapitaConsumptionNow / perCapitaConsumptionPrevious - 1.0; // TODO Think whether this makes sense if (perCapitaConsumptionNow == 0.0 && perCapitaConsumptionPrevious == 0.0) { perCapitaGrowthRate = 0.0; } var discountrate = perCapitaGrowthRate * s.elasticityofmarginalutility + s.prtp; foreach (var r in dimensions.GetValues <Region>()) { if (t < s.baseyear) { s.currtax[t, r] = 0.0; } else if (t == s.baseyear) { s.currtax[t, r] = s.basetax; } else { s.currtax[t, r] = s.currtax[t - 1, r] * (1.0 + discountrate); } s.currtaxn2o[t, r] = s.currtax[t, r]; s.currtaxch4[t, r] = s.currtax[t, r]; } }
public void Run(Clock clock, IGlobalHotellingTaxationState state, IDimensions dimensions) { var t = clock.Current; var s = state; var perCapitaConsumptionNow = s.consumption[t] / s.population[t]; var perCapitaConsumptionPrevious = s.consumption[t - 1] / s.population[t - 1]; var perCapitaGrowthRate = perCapitaConsumptionNow / perCapitaConsumptionPrevious - 1.0; // TODO Think whether this makes sense if (perCapitaConsumptionNow == 0.0 && perCapitaConsumptionPrevious == 0.0) perCapitaGrowthRate = 0.0; var discountrate = perCapitaGrowthRate * s.elasticityofmarginalutility + s.prtp; foreach (var r in dimensions.GetValues<Region>()) { if (t < s.baseyear) s.currtax[t, r] = 0.0; else if (t == s.baseyear) s.currtax[t, r] = s.basetax; else s.currtax[t, r] = s.currtax[t - 1, r] * (1.0 + discountrate); s.currtaxn2o[t, r] = s.currtax[t, r]; s.currtaxch4[t, r] = s.currtax[t, r]; } }