-
Notifications
You must be signed in to change notification settings - Fork 155
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
grassland_apr22 preloop calibration #663
base: develop
Are you sure you want to change the base?
Conversation
…nd updating changelog
@@ -32,6 +32,8 @@ i31_grassl_areas(t_all,j) Celullar grassland areas | |||
i31_lambda_grass(t,i,grassland) Grassland Scaling factor for non-linear management calibration (1) | |||
i31_grassl_yld_hist_reg(t,i,grassland) Grassland FAO yields per region at the historical referende year (tDM per ha) | |||
i31_grass_hist_yld(t_all,i, grassland) FAO gassland yields (tDM per ha) | |||
p31_pastr_suit_sf(j) Pasture suitability scaling factor (1) | |||
pc31_grasslands_conversion_cost(t,j) Adjusted expansion costs to avoid unrealistic exchange between pastr and range in the first time step (USD05MER per ha) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the prefix "c" stands for current which means that it only contains the value of the current time step, but this parameter has time as a dimension.
Looking further down in the code I saw that you use this only to set a value in 1995 but have 0s for all other years. That does not look sensible to me. Lets have a discussion about what it does and why
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi Jan. This was a way I found to have a parameter that I could add a cost only to the first time step.
I could not think about another solution to apply this idea to the following equation.
Do you have any suggestion?
q31_expansion_cost(j2,grassland) ..
v31_cost_grass_expansion(j2, grassland) =g=
(v31_grass_area(j2, grassland) - pc31_grass(j2,grassland)) * sum(ct, pc31_grasslands_conversion_cost(ct,j2));
@@ -7,10 +7,11 @@ | |||
|
|||
|
|||
scalars | |||
s31_cost_expansion Grasslands expansion costs (USD05MER per hectare) / 1 / | |||
s31_cost_expansion Grasslands expansion costs (USD05MER per hectare) / 1000 / |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why does this scalar not show up in the default.cfg?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we agree on adding a cost for land expansion I will add it the config in the next commit.
@@ -7,7 +7,20 @@ | |||
|
|||
|
|||
pc31_grass(j,grassland) = f31_LUH2v2("y1995",j,grassland); | |||
pc31_grasslands_conversion_cost(t,j) = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are there costs in 1995 but not in any other year?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the way I found to add cost just on the first time step.
As we have discussed, cost information on the conversion between managed pastures and rangelands on a global scale is not available. I also believe that based on our current definition of managed pastures and rangelands, they should be very small and heterogeneous across the globe. Therefore, I would prefer to have zero cost for land conversion costs and let the model decide the type of pastures to use based on the productivity needed, constrained by the "max managed pasture." The expansion costs for total pasture are already defined for the expansion of grasslands in general in the land module.
The need for this variable is only to assign a cost for the first time step, where for some inexplicable reason, even when managed pasture has a clear advantage in terms of productivity and no extra costs associated with it, CONOPT decides to revert the areas of managed pastures and rangelands, especially in Latin America and Africa, but to a lesser extent on other continents
i31_manpast_suit(t_all,j)$(i31_manpast_suit(t_all,j) = 0) = f31_LUH2v2("y1995",j,"pastr"); | ||
p31_pastr_suit_sf(j) = (f31_LUH2v2("y1995",j,"pastr") / i31_manpast_suit("y1995",j))$(i31_manpast_suit("y1995",j) <> 0); | ||
i31_manpast_suit(t_all,j) = i31_manpast_suit(t_all,j) * p31_pastr_suit_sf(j); | ||
i31_manpast_suit(t_past,j) = f31_LUH2v2(t_past,j,"pastr"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not understand this part
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i31_manpast_suit(t_all,j)$(i31_manpast_suit(t_all,j) = 0) = f31_LUH2v2("y1995",j,"pastr");
This replaces areas with 0 in the predicted i31_manpast_suit (managed pasture max) with the values from 1995. This is necessary because if a cluster has 0 managed pasture in the estimated (managed pasture max), it will always be 0. This 0 can appear as a result of applying the LUH method on a larger cell size, but this might not be the case from our historical reference dataset. To allow these areas with 0 to support pasture expansion, I allow them to have at least the same value they had in 1995, the beginning of our simulation period.
p31_pastr_suit_sf(j) = (f31_LUH2v2("y1995",j,"pastr") / i31_manpast_suit("y1995",j))$(i31_manpast_suit("y1995",j) <> 0);
Calculate a calibration factor to harmonize the i31_manpast_suit (managed pasture max) estimated to match LUH data in the year 1995.
i31_manpast_suit(t_all,j) = i31_manpast_suit(t_all,j) * p31_pastr_suit_sf(j);
Apply the calibration factor over the whole dataset.
i31_manpast_suit(t_past,j) = f31_LUH2v2(t_past,j,"pastr");
This last line ensures that the areas where we already have a pasture suitability calculated by LUH (t_past) use that instead of our estimates.
🐦 Description of this PR 🐦
In this pull request, I've streamlined the code by removing redundant sets and added a calibration step for managed pasture areas to the preloop file after eliminating a similar step from calcPastureSuit.R's preprocessing. I've introduced a technical solution to prevent unrealistic grassland exchanges in the initial timestep by applying a conversion cost between rangelands and managed pastures only at the start. Additionally, I enhanced the module's description.
🔧 Checklist for PR creator 🔧
Label pull request from the label list.
Self-review own code
magpie4
R library has been updated accordingly and backwards compatible where necessary.scenario_config.csv
has been updated accordingly (important ifdefault.cfg
has been updated)Document changes
CHANGELOG.md
goxygen::goxygen()
and verify the modified code is properly documentedPerform test runs
Rscript start.R --> "compilation check"
Rscript start.R --> "test runs"
Rscript start.R --> "test runs"
📉 Performance changes 📈
🚨 Checklist for reviewer 🚨
CHANGELOG
is updated correctly