Skip to content

Adjust the bdy_lyr local script, and housekeeping#231

Open
MetBenjaminWent wants to merge 5 commits intoMetOffice:mainfrom
MetBenjaminWent:update_part_bdy_psy
Open

Adjust the bdy_lyr local script, and housekeeping#231
MetBenjaminWent wants to merge 5 commits intoMetOffice:mainfrom
MetBenjaminWent:update_part_bdy_psy

Conversation

@MetBenjaminWent
Copy link
Contributor

@MetBenjaminWent MetBenjaminWent commented Feb 9, 2026

PR Summary

remove_unspanable_nodes seems too fragile when there are additional timers involved.
Grabbing the first and last sensible node directly seems safer.
This can be swapped out for the parallel transformation coming from STFC hopefully in the future, which may be moved into the global script.
Remove some other parts which are not involved currently in the other scripts.

Also moving bl_diags_mod to the global script, which functionally does the same thing causes crashes.
For saftey, I'm turning this off. The original source OMP is fine for now, we can look at this again later.

Sci/Tech Reviewer: @oakleybrunt
Code Reviewer: @mo-lottieturner

Issue: #255
Umbrella Issue: #106

Code Quality Checklist

  • I have performed a self-review of my own code
  • My code follows the project's style guidelines
  • Comments have been included that aid understanding and enhance the readability of the code
  • My changes generate no new warnings
  • All automated checks in the CI pipeline have completed successfully

Testing

  • I have tested this change locally, using the LFRic Apps rose-stem suite
  • If any tests fail (rose-stem or CI) the reason is understood and acceptable (e.g. kgo changes)
  • I have added tests to cover new functionality as appropriate (e.g. system tests, unit tests, etc.)
  • Any new tests have been assigned an appropriate amount of compute resource and have been allocated to an appropriate testing group (i.e. the developer tests are for jobs which use a small amount of compute resource and complete in a matter of minutes)

trac.log

Test Suite Results - lfric_apps - update_part_bdy_psy/run10

Suite Information

Item Value
Suite Name update_part_bdy_psy/run10
Suite User benjamin.went
Workflow Start 2026-02-10T15:22:44
Groups Run developer
Dependency Reference Main Like
casim MetOffice/casim@2025.12.1 True
jules MetOffice/jules@69aaf4d True
lfric_apps MetBenjaminWent/lfric_apps@update_part_bdy_psy False
lfric_core MetOffice/lfric_core@bbb3d8a True
moci MetOffice/moci@2025.12.1 True
SimSys_Scripts MetOffice/SimSys_Scripts@2025.12.1 True
socrates MetOffice/socrates@2025.12.1 True
socrates-spectral MetOffice/socrates-spectral@2025.12.1 True
ukca MetOffice/ukca@2025.12.1 True

Task Information

❌ failed tasks - 3
Task State
run_gungho_model_lfric-real-domain-C48_MG_azspice_gnu_fast-debug-64bit failed
run_gungho_model_robert-moist-lam-BiP100x8-10x10_azspice_gnu_fast-debug-64bit failed
run_shallow_water_galewsky-C24_azspice_gnu_fast-debug-64bit failed
  • Failures are unrelated to changes as they are timeouts
✅ succeeded tasks - 1095

Test Suite Results - lfric_apps - update_part_bdy_psy/run9

Suite Information

Item Value
Suite Name update_part_bdy_psy/run9
Suite User benjamin.went
Workflow Start 2026-02-10T12:54:32
Groups Run ex1a_omp_developer
Dependency Reference Main Like
casim MetOffice/casim@2025.12.1 True
jules MetOffice/jules@69aaf4d True
lfric_apps MetBenjaminWent/lfric_apps@update_part_bdy_psy False
lfric_core MetOffice/lfric_core@bbb3d8a True
moci MetOffice/moci@2025.12.1 True
SimSys_Scripts MetOffice/SimSys_Scripts@2025.12.1 True
socrates MetOffice/socrates@2025.12.1 True
socrates-spectral MetOffice/socrates-spectral@2025.12.1 True
ukca MetOffice/ukca@2025.12.1 True

Task Information

✅ succeeded tasks - 51

Security Considerations

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

Performance Impact

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

AI Assistance and Attribution

  • 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

  • Where appropriate I have updated documentation related to this change and confirmed that it builds correctly

PSyclone Approval

  • If you have edited any PSyclone-related code (e.g. PSyKAl-lite, Kernel interface, optimisation scripts, LFRic data structure code) then please contact the TCD Team

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

@MetBenjaminWent MetBenjaminWent changed the title Adjust how the bdy_lyr local script, and housekeeping Adjust the bdy_lyr local script, and housekeeping Feb 11, 2026
@MetBenjaminWent MetBenjaminWent marked this pull request as ready for review February 11, 2026 11:41
Copy link
Contributor

@oakleybrunt oakleybrunt left a comment

Choose a reason for hiding this comment

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

Thanks Ben, this looks like a good change with some nice flexibility. Can you have a look over my suggested changes, I think they are slightly clearer than what was proposed.

Comment on lines +146 to +158
found_valid_if = True
# Often timing handles are placed inside if blocks,
# check if it is not a known timing call, which should be
# ignored for spanning a parallel section.
for routine_grandchild in routine_child.walk(Reference):
try:
if str(routine_grandchild.name) in timer_routine_names:
found_valid_if = False
except ValueError: # noqa: E722
continue
if found_valid_if:
start_node = index
break
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
found_valid_if = True
# Often timing handles are placed inside if blocks,
# check if it is not a known timing call, which should be
# ignored for spanning a parallel section.
for routine_grandchild in routine_child.walk(Reference):
try:
if str(routine_grandchild.name) in timer_routine_names:
found_valid_if = False
except ValueError: # noqa: E722
continue
if found_valid_if:
start_node = index
break
# Often timing handles are placed inside if blocks,
# check if it is not a known timing call, which should be
# ignored for spanning a parallel section.
for routine_grandchild in routine_child.walk(Reference):
if str(routine_grandchild.name) in timer_routine_names:
# Start node remains None.
start_node = None
break
else:
# Set the start node to the index and keep checking
# grandchildren for calls that invalidate.
# If all are valid, start_node still equals index.
start_node = index
# Now check if we have a satisfactory start node.
if start_node is not None:
break

You can break out of this for loop much quicker by using this setup. I have tested this on bl_diags_mod.F90 and the PSyclone generated output is the same.

Comment on lines +169 to +179
found_valid_if = True
for routine_grandchild in \
routine_children[index].walk(Reference):
try:
if str(routine_grandchild.name) in timer_routine_names:
found_valid_if = False
except ValueError: # noqa: E722
continue
if found_valid_if:
end_node = index + 1
break
Copy link
Contributor

Choose a reason for hiding this comment

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

Again, this can be simplified and will be faster than the original. Also tested on bl_diags_mod.F90.

Suggested change
found_valid_if = True
for routine_grandchild in \
routine_children[index].walk(Reference):
try:
if str(routine_grandchild.name) in timer_routine_names:
found_valid_if = False
except ValueError: # noqa: E722
continue
if found_valid_if:
end_node = index + 1
break
for routine_grandchild in \
routine_children[index].walk(Reference):
if str(routine_grandchild.name) in timer_routine_names:
# end_node remains None.
end_node = None
break
else:
# Otherwise, set to correct position and continue
# checking for calls that invalidate this.
end_node = index + 1
# Now check to see if we have a satisfactory end_node
if end_node is not None:
break

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants