Skip to content

Implement OM3 manager and layout conventions - #78

Merged
micaeljtoliveira merged 3 commits into
mainfrom
om3_layout_conventions
Oct 6, 2026
Merged

micaeljtoliveira merged 3 commits into
mainfrom
om3_layout_conventions

Conversation

@micaeljtoliveira

@micaeljtoliveira micaeljtoliveira commented Sep 11, 2026 •

Copy link
Copy Markdown
Member

Closes #47

@micaeljtoliveira
micaeljtoliveira marked this pull request as draft September 11, 2026 01:13
@micaeljtoliveira
micaeljtoliveira force-pushed the om3_layout_conventions branch 2 times, most recently from d548d5a to c0d969d Compare September 17, 2026 05:14
@codecov

codecov Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (5a2aa02) to head (11713d8).

Additional details and impacted files
@@            Coverage Diff             @@
##              main       #78    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files           16        16            
  Lines         1454      1641   +187     
==========================================
+ Hits          1454      1641   +187     

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

@micaeljtoliveira
micaeljtoliveira force-pushed the om3_layout_conventions branch 5 times, most recently from 302f635 to d112702 Compare September 23, 2026 22:47
@micaeljtoliveira
micaeljtoliveira force-pushed the om3_layout_conventions branch 8 times, most recently from 1dd3b74 to ab3f216 Compare September 29, 2026 23:40
micaeljtoliveira and others added 3 commits October 6, 2026 12:31
Which components ACCESS-OM3 runs, and on what grid, varies from one
configuration to the next, so a hard-coded tree cannot describe it the way one
describes ACCESS-ESM1.6. OM3Configuration is that description, and OM3Profiling
takes one.

NUOPC gives every component an ntasks and a rootpe. The mediator, the data
atmosphere, the data runoff and the sea ice draw on one range of cores and run
on it in turn, so they sit under a parent whose cores are shared: the range is
as large as the furthest of them reaches, not as large as their total. The
ocean and the waves take ranges of their own. Where each shared component
starts is a property of the configuration, which passes it to the tree as a
core offset, so the search never offers a layout that would not fit.

MOM6 works out its own decomposition from the ranks it is given - ACCESS-OM3's
MOM_input sets AUTO_MASKTABLE and states no LAYOUT - so by default the ocean
carries no grid into the tree and no process grid is enumerated for it. On a
240-core configuration that is 8 layouts rather than 96, the rest differing
only in a LAYOUT nothing would read. auto_ocean_layout turns it off where a
configuration really does pin one.

Only released configurations ship, and all five are the same one once forcing
and biogeochemistry are set aside, so there is a single preset with the
released core counts beside it as the reference a caller writes an allocation
strategy from. The development configurations are built in the tests the way a
caller builds one. Logs come from the ESMF profile summary, from MOM6 through
the FMS parser and from CICE6 through the CICE5 one, all optional.

Closes #47

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Some configurations run CDEPS's data sea ice in place of CICE6. It still
takes its turn on the shared range and still receives cores, but ESMF
decomposes its mesh over whatever ranks it is given, so no configuration file
states a process grid for it and there is nothing for the search to choose.

OM3Configuration gains data_sea_ice, false by default. Set, the sea ice is
built as the data atmosphere and the data runoff already are - no grid on the
tree, and so no process grid enumerated, no ice_in written, and a branch name
recording its cores rather than a grid. Its grid stays recorded in sea_ice,
which is also what says the configuration has a sea ice at all.

The constraints have to travel with the grid rather than being left behind:
MinSubdomainSizeConstraint reads a decomposition, and raises rather than
skipping when there is none, so leaving it attached would refuse every
candidate instead of ignoring them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
An experiment this manager generated carries the layout it was generated from.
One it did not - archived, or added from a directory - has to be read back from
its configuration, and for ACCESS-OM3 that is the PELAYOUT block of
nuopc.runconfig: every realm states the first core it runs on and how many it is
given. This is the inverse of what layout_config_changes writes.

Cores alone do not say the shape, so the configuration being profiled is what
supplies it: the realms taking turns on one range go under the parent holding
that range, placed at the offsets their rootpes give, and the ocean and the
waves follow it with ranges of their own.

That makes this the place where a configuration disagreeing with the tree is
found, and it is worth finding rather than quietly plotting. A shared range its
realms leave partly idle is refused by the layout itself; a gap between two
ranges is refused here, since reconstructing the shared range from its own
realms cannot see one. Either way the message names the file it came from.

What comes back carries no decompositions, the PE layout saying how many ranks a
realm has rather than what grid they are in, so it answers what a component was
given and is not fit to generate from.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@micaeljtoliveira
micaeljtoliveira marked this pull request as ready for review October 6, 2026 01:35
@micaeljtoliveira
micaeljtoliveira merged commit 6185bcb into main Oct 6, 2026
8 checks passed
@micaeljtoliveira
micaeljtoliveira deleted the om3_layout_conventions branch October 6, 2026 02:31
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.

Add support for ACCESS-OM3 profiling

1 participant