Skip to content
Snippets Groups Projects
Commit a97fcdfd authored by Bart Arendarczyk's avatar Bart Arendarczyk
Browse files

Forest conversion (minimumLandCover) restriction loosened.

parent 8d8be0e1
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@
SET land_cover / cropland, pasture, timberForest, carbonForest, unmanagedForest, otherNatural /;
SET forest(land_cover) / timberForest, carbonForest, unmanagedForest /;
SET non_forest(land_cover) / cropland, pasture, otherNatural /;
ALIAS (land_cover, land_cover_before);
ALIAS (land_cover, land_cover_after);
......@@ -81,7 +82,7 @@ $gdxin
carbonPrice = carbonPrice * 0.001;
woodPrice = woodPrice * 0.001;
SCALAR delta use to smooth power function see 7.5 www.gams.com dd docs solversconopt.pdf / 0.00000000001 /;
SCALAR delta "use to smooth power function see 7.5 www.gams.com/dd/docs/solversconopt.pdf" / 0.00000000001 /;
demand(cereal_crop) = demand('cereals') * minDemandPerCereal(cereal_crop);
demand(oilpulse_crop) = demand('oilcropspulses') * minDemandPerOilcrop(oilpulse_crop);
......@@ -120,7 +121,7 @@ $gdxin
*PARAMETER lcTransitionCost(lc_type_previous, lc_type, location) cost of land transitions including carbon cost and conversion cost;
*lcTransitionCost(lc_type_previous, lc_type, location) = carbonFluxRate(lc_type_previous, lc_type, location) * carbonPrice + agriExpansionCost(location);
SCALAR forestExpansionMaxRate / 0.05 /;
SCALAR forestExpansionMaxRate / 0.01 /;
VARIABLES
cropArea(crop, location) total area for crops - Mha
......@@ -141,10 +142,11 @@ $gdxin
pastureDecrease(location)
landCoverArea(land_cover, location) land cover area in Mha
landCoverChange(land_cover_before, land_cover_after, location) land cover change
prematureDeforestationCost(location)
woodHarvest(location) total wood harvested
carbonFlux(location) total carbon flux
totalFeedDM
* A artificial variable "https://www.gams.com/blog/2017/07/misbehaving-model-infeasible/"
* A "artificial variable https://www.gams.com/blog/2017/07/misbehaving-model-infeasible/"
total_cost total cost of domestic supply including net imports;
......@@ -183,11 +185,12 @@ $gdxin
PASTURE_TOTAL_CHANGE_CONSTRAINT(location)
CROPLAND_LAND_COVER_CALC(location) cropland area equals sum of all crop areas
PASTURE_LAND_COVER_CALC(location) pasture area (land cover) equals pasture area (land use)
MINIMUM_LAND_COVER_CONSTRAINT(land_cover, location) constraint on land cover conversion
* MINIMUM_LAND_COVER_CONSTRAINT(land_cover, location) constraint on land cover conversion
LAND_COVER_CHANGE_CALC(land_cover, location)
LAND_COVER_CHANGE_CONSTRAINT(land_cover, location) can't convert more land than was previously available
LAND_COVER_SELF_CHANGE_CONSTRAINT(land_cover, location) calculate no change area (e.g. cropland to cropland)
FOREST_EXPANSION_CONSTRAINT(forest, location)
FOREST_EXPANSION_CONSTRAINT
PREMATURE_DEFORESTATION_COST_CALC(location)
WOOD_HARVEST_CALC(location) calc wood harvested
CARBON_FLUX_CALC(location) calc carbon flux
COST_EQ total cost objective function;
......@@ -259,11 +262,12 @@ $gdxin
LAND_COVER_SELF_CHANGE_CONSTRAINT(land_cover, location) .. landCoverChange(land_cover, land_cover, location) =E= previousLandCoverArea(land_cover, location) -
sum(land_cover_after$[not sameAs(land_cover, land_cover_after)], landCoverChange(land_cover, land_cover_after, location));
FOREST_EXPANSION_CONSTRAINT(forest, location) .. landCoverArea(forest, location) - previousLandCoverArea(forest, location) =L= suitableLandArea(location) * forestExpansionMaxRate;
FOREST_EXPANSION_CONSTRAINT .. sum((non_forest, forest, location), landCoverChange(non_forest, forest, location)) =L= sum(location, suitableLandArea(location)) * forestExpansionMaxRate;
* minimum of minimumLandCoverArea and previousLandCoverArea corrects for floating point errors
* MINIMUM_LAND_COVER_CONSTRAINT(land_cover, location) .. landCoverChange(land_cover, land_cover, location) =G= min(minimumLandCoverArea(land_cover, location), previousLandCoverArea(land_cover, location));
MINIMUM_LAND_COVER_CONSTRAINT(land_cover, location) .. landCoverChange(land_cover, land_cover, location) =G= minimumLandCoverArea(land_cover, location);
* MINIMUM_LAND_COVER_CONSTRAINT(land_cover, location) .. landCoverChange(land_cover, land_cover, location) =G= minimumLandCoverArea(land_cover, location);
PREMATURE_DEFORESTATION_COST_CALC(location) .. prematureDeforestationCost(location) =E= sum(forest, (sum((land_cover_after)$[not sameAs(forest, land_cover_after)], landCoverChange(forest, land_cover_after, location)) -
previousLandCoverArea(forest, location) - minimumLandCoverArea(forest, location))) * 1000;
WOOD_HARVEST_CALC(location) .. woodHarvest(location) =E= sum((land_cover_before, land_cover_after), landCoverChange(land_cover_before, land_cover_after, location) * woodYield(land_cover_before, land_cover_after, location));
......@@ -287,7 +291,8 @@ $gdxin
SUM(location, carbonFlux(location) * carbonPrice) - SUM(location, woodHarvest(location) * woodPrice) +
SUM(import_crop, importAmount(import_crop) * importPrices(import_crop) - exportAmount(import_crop) * exportPrices(import_crop))
SUM(import_crop, importAmount(import_crop) * importPrices(import_crop) - exportAmount(import_crop) * exportPrices(import_crop)) +
SUM(location, prematureDeforestationCost(location))
);
MODEL LAND_USE /ALL/ ;
......
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