Skip to content

Add stencil support for LFRic domain kernels (#1948) - #3572

Merged
sergisiso merged 28 commits into
masterfrom
1948_stencils_for_domain
Sep 18, 2026
Merged

sergisiso merged 28 commits into
masterfrom
1948_stencils_for_domain

Conversation

@arporter

@arporter arporter commented Aug 27, 2026 •

Copy link
Copy Markdown
Member

This PR implements stencil support for LFRic domain kernels (issue #1948). It removes the previous restriction that rejected stencil arguments for domain kernels and updates argument passing so domain kernels receive full stencil arrays (rank-3/4) rather than column-indexed slices.

Domain kernels (operates_on = domain) can now use stencil arguments on
read-only field inputs. The PSy layer generates full stencil arrays for
the entire domain, and these are now correctly passed to domain kernels
instead of being rejected at parse time.

Changes:
- Remove parser restriction that rejected stencils in domain kernels
  (lfric_arg_descriptor.py)
- Add domain-specific stencil methods in kern_call_arg_list.py:
  * stencil_unknown_extent_domain()
  * stencil_2d_unknown_extent_domain()
  * stencil_2d_max_extent_domain()
  * stencil_domain()
  * stencil_2d_domain()
- Update argument ordering in arg_ordering.py to dispatch to appropriate
  stencil methods based on kernel type (domain vs column)
- Update test: rename test_no_stencil_domain_kernel() to
  test_stencil_domain_kernel() to verify stencils now work

Key difference from column kernels:
- Column kernels: receive scalar/indexed stencil values per column
- Domain kernels: receive full stencil arrays for all domain cells

All 106 related tests pass successfully.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@arporter arporter self-assigned this Aug 27, 2026
@arporter arporter added LFRic Issue relates to the LFRic domain in progress labels Aug 27, 2026
@arporter
arporter marked this pull request as draft August 27, 2026 12:48
@codecov

codecov Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (f044f02) to head (7f54f91).

Additional details and impacted files
@@            Coverage Diff            @@
##            master     #3572   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          403       403           
  Lines        56729     56748   +19     
=========================================
+ Hits         56729     56748   +19     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@arporter

Copy link
Copy Markdown
Member Author

This is my first attempt at using AI (copilot) to do feature development. I've now burnt my monthly free allocation so it's back to the old way...

@arporter

Copy link
Copy Markdown
Member Author

I'm in the process of extending eg5 to include a domain kernel and also making it compile. I'm still having some trouble determining what the ranks of the various stencil-related args should be.

@arporter

arporter commented Sep 1, 2026

Copy link
Copy Markdown
Member Author

This is now ready for review. My experiment with the free copilot functionality was pretty much a failure - I didn't like the way it had implemented things so re-wrote it.
This is a good one for @LonelyCat124 as it's a relatively small change to some LFRic functionality. (It looks like quite a few files changed but a significant number of these are because I took the opportunity to make one of the existing LFRic examples actually compile.)

@arporter arporter mentioned this pull request Sep 11, 2026
2 of 4 tasks

@sergisiso sergisiso left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thanks @arporter, most changes are good, there are just some small comments to consider and I just triggered the ITs.

Comment thread .github/copilot-instructions.md Outdated
Comment thread examples/common.mk
Comment thread src/psyclone/tests/test_files/lfric/1948_stencil_domain_invoke.f90
Comment thread src/psyclone/tests/test_files/lfric/testkern_domain_stencil_mod.f90 Outdated
Comment thread doc/user_guide/lfric.rst Outdated
@sergisiso

Copy link
Copy Markdown
Collaborator

@arporter Also the lfric/eg5 output files are currently not gitignored

@arporter

Copy link
Copy Markdown
Member Author

I've updated a couple of the .gitignores. Ready for another look now @sergisiso.

@sergisiso sergisiso left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@arporter All comments have been adressed and all ITs passed. This is ready to merge

@sergisiso
sergisiso merged commit 517759e into master Sep 18, 2026
16 checks passed
@sergisiso
sergisiso deleted the 1948_stencils_for_domain branch September 18, 2026 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

LFRic Issue relates to the LFRic domain ready to be merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants