Skip to content

Bare soil evaporation separated over irrigated and non-irrigated soil #139 - #150

Draft
Nic Gedney (nicgedney) wants to merge 16 commits into
MetOffice:stablefrom
nicgedney:separate_irrigated_bare_soil_evap
Draft

Bare soil evaporation separated over irrigated and non-irrigated soil #139#150
Nic Gedney (nicgedney) wants to merge 16 commits into
MetOffice:stablefrom
nicgedney:separate_irrigated_bare_soil_evap

Conversation

@nicgedney

@nicgedney Nic Gedney (nicgedney) commented Aug 26, 2026

Copy link
Copy Markdown

PR Summary

<-- Bare soil evaporation separated over irrigated and non-irrigated soil #139 -->

Sci/Tech Reviewer: <-- hkatty -->
Code Reviewer:

<-- #139 -->

<-- this allows the irrigated and non-irrigated bare soil evaporation terms to be calculated from the irrigated and non-irrigated soil moisture columns (l_soil_evap_irrig_expl=True) rather than the grid-box mean soil moisture (l_soil_evap_irrig_expl=False) as previously -->

<-- List any linked PRs here
None
-->

<-- List any blocking PRs or issues to be closed here
None
-->

Code Quality Checklist

(Some checks are automatically carried out via the CI pipeline)

  • [Y] I have performed a self-review of my own code
  • [Y] My code follows the project's style guidelines
  • [Y] Comments have been included that aid understanding and enhance the readability of the code
  • [Y] My changes generate no new warnings
  • [N/A] If editing rose-meta/jules-shared then have you supplied a linked UM and LFRic Apps PR?

Testing

  • [Y] I have tested this change locally, using the JULES rose-stem suite
  • [N/A] If shared files have been modified, I have run the UM and LFRic Apps rose stem suites
  • [N/A] If any tests fail (rose-stem or CI) the reason is understood and acceptable (eg. kgo changes)
  • [N/A] I have added tests to cover new functionality as appropriate (eg. system tests, unit tests, etc.)

<-- Other testing performed:
rose-stem test also applied to the test branch test_separate_irrigated_bare_soil_evap
individual point comparison with l_soil_evap_irrig_expl=T compared with stable

  • see the issue for more details.
    -->

trac.log

<-- # Test Suite Results - jules - vn8.2_separate_irrigated_bare_soil_evap/run2

Suite Information

Item Value
Suite Name vn8.2_separate_irrigated_bare_soil_evap/run2
Suite User nicola.gedney
Workflow Start 2026-08-26T12:13:18
Groups Run suite_default
Dependency Reference Main Like
jules nicgedney/jules@separate_irrigated_bare_soil_evap False
SimSys_Scripts MetOffice/SimSys_Scripts@2026.07.1 True

Task Information

✅ succeeded tasks - 676

-->

Security Considerations

  • [Y] I have reviewed my changes for potential security issues
  • [N/A] Sensitive data is properly handled (if applicable)
  • [N/A] Authentication and authorisation are properly implemented (if applicable)

Performance Impact

  • [Y] Performance of the code has been considered and, if applicable, suitable performance measurements have been conducted

AI Assistance and Attribution

  • [N] Some of the content of this change has been produced with the assistance of Generative AI tool name (e.g., Met Office Github Copilot Enterprise, Github Copilot Personal, ChatGPT GPT-4, etc) and I have followed the Simulation Systems AI policy (including attribution labels)

Documentation

  • [Y* the html builds correctly ] Where appropriate I have updated documentation related to this change and confirmed that it builds correctly

Approvals

Please request all relevant approvals. See the CodeOwners.txt file for section owners.

Technical

  • JULES Code Owner
  • OpenMP
  • River Routing
  • Rose Stem
  • Rose Metadata
  • Upgrade Macros

Scientific

  • [] Surface
  • Hydrology
  • Vegetation
  • Veg3 RED Demography
  • Biogeochemistry
  • Biogenic fluxes
  • Fire
  • Lakes
  • Evaluation
  • Imogen

Sci/Tech Review

  • I understand this area of code and the changes being added
  • The proposed changes correspond to the pull request description
  • Documentation is sufficient (do documentation papers need updating)
  • Sufficient testing has been completed

Please alert the code reviewer via a tag when you have approved the SR

Code Review

  • All dependencies have been resolved
  • Related Issues have been properly linked and addressed
  • CLA compliance has been confirmed
  • Code quality standards have been met
  • Tests are adequate and have passed
  • Documentation is complete and accurate
  • Security considerations have been addressed
  • Performance impact is acceptable

@github-actions

Copy link
Copy Markdown

Hello Nic Gedney (@nicgedney)! 👋

Thank you for your contribution. Since this is your first time contributing to this repository, we ask that you sign our Contributor Licence Agreement (CLA).

📄 You can read the CLA here.

To agree to the CLA, please add your details (GitHub username, Real Name, Affiliation, and Date) to the CONTRIBUTORS.md file (create one, if required) in the development branch for this PR. After signing the CLA, you won't need to do this again for future PRs.

@nicgedney Nic Gedney (nicgedney) changed the title Separate irrigated bare soil evap Bare soil evaporation separated over irrigated and non-irrigated soil #139 Aug 26, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As yet, I only partially understand the science here, but I have made such comments as I can. I would like the logic to be more apparent. I will be happy to look again once these comments have been addressed.

I'm not sure exactly what reviewing role I should be performing here. The PR says that hkatty will do the science review, but approval is also required from the owners of the relevant JULES modules, which approval I can give for the surface module.

:type: logical
:default: F

Switch controlling whether the bare soil evaporation from the irrigated and non-irrigated part of the grid-box (or soil tile) is controlled by the mean soil moisture or the separate irrigated and non-irrigated soil moisture columns.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

irrigated and non-irrigated part_s_

No effect.

This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 0.
This must be set to FALSE if :nml:mem:`JULES_IRRIG::irrig_option` = 2.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm probably going to seem foolish here, but I'm having trouble working out what is going on. My interpretation is that irrig_opt=0 means no irrigation, irrig_opt=1 will mean the current scheme that is currently represented by l_irrig_dmd=.T., and that irrig_opt=2 will be the new scheme. So this says that the option only works with the current scheme, but then I am confused by L2649 in rose-meta/jules-standalone/HEAD/rose-meta.conf where the option is triggered if l_irrig_dmd is .F.
As a cautionary query here, if it's meant to work with l_irrig_dmd=.T., can I check that no modification of src/science/soil/hydrol_jls_mod.F90 is needed because the extraction is already treated properly?

set_irrfrac_on_irrtiles, nstep_irrig, irrig_option
set_irrfrac_on_irrtiles, nstep_irrig, irrig_option, &
l_soil_evap_irrig_expl

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would have expected the new variable to be added to my_nml in read_nml_jules_irrig starting on L339. It is worth adding any checks to check_jules_irrig on L289?

* esoil_surft(l,n)

IF ( l_soil_evap_irrig_expl ) THEN
wt_ext_nir_surft(l,m,n) = wt_ext_surft(l,m,n)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could use an IF...ELSE...END IF construct here, but I'm not sure whether that's faster than what you have on current machines or not.

+ tile_frac(l,n) &
* wt_ext_nir_surft(l,m,n) &
* esoil_nir_surft(l,n) &
* (1.0 - frac_irr_surft(l,n)) &

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Presumably, if soil and surface tiles match frac_irr_surftt and frac_irr_soilt are the same, but it is wise to leave the fractions in place to make it clear what is happening, should someone later try to generalize the code.

USE jules_surface_mod, ONLY: l_aggregate, l_epot_corr
USE jules_science_fixes_mod, ONLY: l_fix_moruses_roof_rad_coupling, &
l_fix_neg_snow
USE jules_irrig_mod, ONLY: l_irrig_dmd

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't see where this logical is used in the file.

END DO
!$OMP END DO NOWAIT
END IF
IF (l_soil_evap_irrig_expl) THEN

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't properly understood the relationship between this variable and l_irrig_dmd.. In sf_evap_jls we had a general block of code and another under l_irrig_dmd. Can I just check that everything is consistent here?

q1_land(l) = qw_1(i,j)
cosz_gb(l) = cos_zenith_angle(i,j)
fsoil_tot(l) = frac(l,soil)
IF ( l_soil_evap_irrig_expl ) THEN

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may be a matter of algorithmic convenience, but why are we irrigating the bare-soil tile?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-required The CLA has not yet been signed by the author of this PR - added by GA enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants