-
Notifications
You must be signed in to change notification settings - Fork 173
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
Conversation
@@ -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