Skip to content
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

Closed
wants to merge 1 commit into from

Conversation

mppalves
Copy link
Contributor

@mppalves mppalves commented Apr 14, 2024

🐦 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.

    • Low risk: Simple bugfixes (missing files, updated documentation, typos) or changes in start or output scripts
    • Medium risk: Uncritical changes in the model core (e.g. moderate modifications in non-default realizations)
    • High risk: Critical changes in model core or default settings (e.g. changing a model default or adjusting a core mechanic in the model)
  • Self-review own code

    • No hard coded numbers and cluster/country/region names.
    • The new code doesn't contain declared but unused parameters or variables.
    • magpie4 R library has been updated accordingly and backwards compatible where necessary.
    • scenario_config.csv has been updated accordingly (important if default.cfg has been updated)
  • Document changes

    • Add changes to CHANGELOG.md
    • Where relevant, put In-code documentation comments
    • Properly address updates in interfaces in the module documentations
    • run goxygen::goxygen() and verify the modified code is properly documented
  • Perform test runs

    • Low risk:
      • Run a compilation check via Rscript start.R --> "compilation check"
    • Medium risk:
      • Run test runs via Rscript start.R --> "test runs"
      • Check logs for errors/warnings
    • High risk:
      • Run test runs via Rscript start.R --> "test runs"
      • Check logs for errors/warnings
      • Default run from the PR target branch for comparison
      • Provide relevant comparison plots (land-use, emissions, food prices, land-use intensity,...)

📉 Performance changes 📈

  • Current develop branch default : ** mins
  • This PR's default : ** mins

🚨 Checklist for reviewer 🚨

  • PR is labeled correctly
  • Code changes look reasonable
    • No hard coded numbers and cluster/country/region names.
    • No unnecessary increase in module interfaces
    • model behavior/performance is satisfactory.
  • Changes are properly documented
    • CHANGELOG is updated correctly
    • Updates in interfaces have been properly addressed in the module documentations
    • In-code documentation looks appropriate
  • content review done (at least 1)
  • RSE review done (at least 1)

@mppalves mppalves added enhancement New feature or request Minor Smaller modifications Low risk Low risk labels Apr 14, 2024
@mppalves mppalves self-assigned this Apr 14, 2024
@mppalves mppalves marked this pull request as ready for review April 14, 2024 10:19
modules/31_past/grasslands_apr22/declarations.gms Outdated Show resolved Hide resolved
modules/31_past/grasslands_apr22/input.gms Outdated Show resolved Hide resolved
@@ -7,7 +7,20 @@


pc31_grass(j,grassland) = f31_LUH2v2("y1995",j,grassland);
pc31_grasslands_conversion_cost(t,j) = 0;
Copy link
Member

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?

Copy link
Contributor Author

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

Comment on lines 20 to 23
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");
Copy link
Member

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

Copy link
Contributor Author

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.

@mppalves mppalves requested a review from tscheypidi April 27, 2024 11:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request Low risk Low risk Minor Smaller modifications
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants