feat: adding LandSurfaceTemperature module for LST modeling - #633
Draft
michaelohanrahan wants to merge 101 commits into
Draft
feat: adding LandSurfaceTemperature module for LST modeling#633michaelohanrahan wants to merge 101 commits into
michaelohanrahan wants to merge 101 commits into
Conversation
The module sets up the first keyword parameter. serves as foundation to implement the methods from the Devi Purnamasari et al. 2025 doi: https://doi.org/10.5194/hess-29-1483-2025
-add read_lst_inputs function handling global data ie radiation, albedo and crop type -probably add emissivity later
- read inputs from read lst inputs - initialize and empty grid
…read in init func
-requires {model:{lst__flag:true}}
-following SnowModel if do_lst will initialize LSTModel or not
Add energy balance calculations with radiation and heat fluxes Integrate atmospheric forcing and SBM soil model coupling Implement detailed LST calculations following Purnamasari et al. 2025
vers-w
reviewed
Jun 16, 2025
vers-w
left a comment
Collaborator
There was a problem hiding this comment.
Nice start with this new feature @michaelohanrahan !
I added some comments, main suggestion is to include this new feature as part of LandHydrologySBM, make use of variables and parameter fields in the model struct, to move some parameters or forcing to other structs (e.g. for shared land parameters) and to check/discuss what hydromt_wflow should compute.
Add albedo, shortwave radiation (RS_in), and 2m wind speed (u2m) to forcing Support land surface temperature model requirements
Add LST, radiation fluxes, and aerodynamic resistance with proper units Maintain Celsius temperature scale for land surface temperature
…d surface temperature - Use explicit LandSurfaceTemperature* names for model, parameters, and variables - Clean up struct definitions for clarity and maintainability - Update to handle expanded atmospheric forcing structure
Add LST model update call in main timestep loop after soil model updates
Include land_surface_temperature flag in model configuration for SBM GWF model
Include land_surface_temperature flag in model configuration for SBM model
vers-w
reviewed
Jun 19, 2025
vers-w
left a comment
Collaborator
There was a problem hiding this comment.
Thanks for the changes @michaelohanrahan ! Some additional comments from my side.
vers-w
reviewed
Jun 19, 2025
vers-w
reviewed
Jun 19, 2025
- Remove LandSurfaceTemperatureParameters struct entirely - Update LandSurfaceTemperatureModel to only contain variables (no parameters) - Modify update_timestep_land_surface_temperature function to accept network::NetworkLand and vegetation_parameters::VegetationParameters as parameters - Update function to use network.latitude[i] instead of land_surface_temperature_model.parameters.latitude[i] - Update function to use vegetation_parameters.canopy_height[i] instead of land_surface_temperature_model.parameters.crop_height[i] - Add aerodynamic resistance calculation within the update function - Fix bug in calculate_land_surface_temperature function to use correct constant name cp - Update both update! function signatures to include new parameters
- Update all land surface temperature variable mappings to use new variable names: * LST → land_surface_temperature * RSN → net_shortwave_radiation * RLN → net_longwave_radiation * Rnet → net_radiation * LE → latent_heat_flux * H → sensible_heat_flux * ra → aerodynamic_resistance
…on params. Removing clock and dt from model update
From `LandSurfaceTemperatureVariables`.
Aerodynamic surface roughness lengths and zero-place displacement height.
Computation now only based on Thom’s equation.
Add land surface temperature computation to intro Land Hydrology SBM.
Description of land surface temperature module.
Land surface temperature module.
Interception was excluded in actual evapotranspiration (AET) for LST computation.
Add air temperature as a required forcing input.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explanation
Working towards implementation of the methods from the Devi Purnamasari et al. 2025 paper: "Identifying irrigated areas using land surface temperature and hydrological modelling: application to the Rhine basin" doi
Implementation details:
The land surface temperature (LST) module is an optional component of the
SBMland hydrology model, controlled by theland_surface_temperature__flagin the model config. When enabled, aLandSurfaceTemperatureModelis created and stored as a field inLandHydrologySBM, alongsideinterception,snow,soil, and other land processes. The LST model uses atmospheric forcing (temperature, wind speed, net radiation), actual evapotranspiration, land surface roughness parameters (momentum and heat transfer), zero plane displacement height and land surface "skin" layer height above the ground to compute aerodynamic resistance, sensible heat flux, latent heat flux and land surface temperature per cell. When the flag is set tofalse(default), aNoLandSurfaceTemperatureModelis used instead, and the LST update is skipped.Checklist
masterA unit test has been added for LST, would be good to add an integration test for LST.