# The road to regional coupled modelling (rCM3)

**URL:** <https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601>\
**Category:** Coupled Model\
**Tags:** regional\
**Created:** [10 June 2025 08:13 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601 "2025-06-10T08:13:15Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Paul.Gregory](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/paul.gregory/32/2566_2.png) [@Paul.Gregory](https://forum.access-hive.org.au/u/Paul.Gregory)\
**Post date:** [10 June 2025 08:13 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/1 "2025-06-10T08:13:15Z")

</div>

Hi All.

One of 21stCenturyWeather’s aims is to be build a regional coupled model, combining high resolution atmospheric and ocean models.

I posted this thread on the 21stCenturyWeather Cumulus website, but I thought I’d cross-post it here to get some extra attention (it was a little love-starved over there).

"Following on from Monday’s Modelling Science. meeting, I thought I’d take a high-level look at rAM3 and CM3 and see how they work.

Here is a high-level simplified view of rAM3 from a rose/cylc view.

 ![CM3-tasks-2](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/5/5a86c8ecd14bc277985a8f6cf8e658dc5569ea5e.png)

Note rAM3 uses a pre-built executable.

The running of CM3 is in contrast, rather opaque from a rose/cylc viewpoint. It only has four major tasks.

 ![CM3-tasks-3](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/5/53b4b44280a0965f0900803dbe96120e9675f721.png)

It’s easy to understand the Recon and Atmos tasks from a UM point of view, but I’m unsure how the coupling is done. This suggests the Atmosphere task is configured via the UM namelists and other MOM6/CICE/NUOPCY control files and the UM executable directly handles the execution of MOM6, CICE and NUOPCY coupling.

Is this correct?

Or does the compiled NUOPCY executable control the UM, MOM6, and CICE?

BTW I can’t find any reference to CABLE in the cm3-suite, but I see plenty of JULES. Does the NUOPCY version of CM3 use JULES?"

(Updated to include the correct rAM3 diagram- thanks @bethanwhite )

---

<div class="post-metadata">

**Author:** ![spencerwong](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/spencerwong/32/1894_2.png) [@spencerwong](https://forum.access-hive.org.au/u/spencerwong)\
**Post date:** [11 June 2025 01:41 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/2 "2025-06-11T01:41:11Z")

</div>

Hi @Paul.Gregory, exciting to hear about the plans for the regional coupling! Just jumping in with a few details re CM3. @kieranricardo will be able to clarify in a bit more detail when he is back!

As CM3 is still in development there is a bit of clean up that could still be done to make the suite a bit clearer.

> Or does the compiled NUOPCY executable control the UM, MOM6, and CICE?

This is correct, in the NUOPC setup, a single executable is built from a NUOPC driver which loads in each of the component models as libraries. This driver then controls all the components and the mediator during the run.

> BTW I can’t find any reference to CABLE in the cm3-suite, but I see plenty of JULES. Does the NUOPCY version of CM3 use JULES?"

CM3 is currently still using Jules, but the plan is to swap to CABLE.

---

<div class="post-metadata">

**Author:** ![Paul.Gregory](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/paul.gregory/32/2566_2.png) [@Paul.Gregory](https://forum.access-hive.org.au/u/Paul.Gregory)\
**Post date:** [17 December 2025 08:05 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/3 "2025-12-17T08:05:47Z")

</div>

Hi all.

For rCM3 development I’d like to build a NUOPCY executable that can run inside a debugger.

I need some advice as to the best way to achieve this:

Currently, the CM3 config (latest branch is [https://github.com/ACCESS-NRI/access-cm3-configs/tree/cm3-O100km-vn13.8](https://github.com/ACCESS-NRI/access-cm3-configs/tree/cm3-O100km-vn13.8)) does the following (I think?)

1. Uses UM sources from [https://github.com/ACCESS-NRI/UM/tree/vn13.8\_nuopc](https://github.com/ACCESS-NRI/UM/tree/vn13.8_nuopc) (which contains the required files in src/control/top\_level)

2. Pulls a pre-build SPACK MOM6 executable (access-om3/pr79-12 according to [https://github.com/ACCESS-NRI/access-cm3-configs/blob/cm3-O100km-vn13.8/rose-suite.conf](https://github.com/ACCESS-NRI/access-cm3-configs/blob/cm3-O100km-vn13.8/rose-suite.conf))

3. Build the NUOPCY executable locally

So, in order the build the NUOPCY executable with debug symbols, I should

a) Create a new om3 pull request to compile with debug symbols, similar to Claire’s pr120? [MOM6 symmetric with updated MOM6 version by claireyung · Pull Request #120 · ACCESS-NRI/ACCESS-OM3 · GitHub](https://github.com/ACCESS-NRI/ACCESS-OM3/pull/120) (which was built with `-g`flags on branch `cy-pananopt ` according to [ACCESS-OM3/spack.yaml at cy-pananopt · ACCESS-NRI/ACCESS-OM3 · GitHub](https://github.com/ACCESS-NRI/ACCESS-OM3/blob/cy-pananopt/spack.yaml) )

b) Change the value of `OM3_MODULE`in the rose-suite.conf

Then compile the NUOPCY executable locally (including compiling the UM locally w/debug options).

Any thoughts @cbull, @kieranricardo, @harshula ?

Note - last time I tried to load access-om3/pr120-19 into Linaro it couldn’t find the debug symbols, see this thread :

> [@Setting build options for OM3](https://forum.access-hive.org.au/t/setting-build-options-for-om3/4495/48):
>
> Some further comments from NCI. The debug version of OM3 is built using the CUDA Nvidia libraries. It’s possible TotalView is struggling to parse the GPU symbols. I’m going to try the DDT debugger on that executable to see if it can load it. EDIT : DDT can load and run the executable (and reproduce the error) but it can only load symbols (i.e view source code) for the hdf5, netcdf4 and parallelio source. So I’m going to take a branch and follow some of NCI’s suggestions to have a fully worki…

---

<div class="post-metadata">

**Author:** ![Paul.Gregory](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/paul.gregory/32/2566_2.png) [@Paul.Gregory](https://forum.access-hive.org.au/u/Paul.Gregory)\
**Post date:** [21 December 2025 06:57 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/4 "2025-12-21T06:57:20Z")

</div>

An end of year update.

Things we have learnt recently.

You can’t run an ancil suite task with a domain without any land points. (This is mentioned in the [ACCESS rAM3 release notes](https://forum.access-hive.org.au/t/access-ram3-release-information/4308/8) but the link to the work-around docs is broken). The `ancil_lct` task will run, but the downstream task `ancil_lct_postprocess_c4` will fail if there are no land points. So our initial test case has moved from ocean / atmosphere only to to ocean / atmosphere+land.

We can use the ESMF conservative regridder (using the python wrapper `esmpy`) to correctly interpolate a regional grid and remove any edge effects. Hence we can create a MOM6 land/sea mask, regridded to the target UM resolution, that will replicate the ‘CAPS’ used by NUOPCY to transfer fluxes b/w MOM6 and the UM inside the NUOPCY executable.

 ![Screenshot 2025-12-21 at 12.13.21 pm](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/a/ad9fadd2cb3f322a284ad17ba94f19d9f3729c5e.png)  
 ![Screenshot 2025-12-21 at 12.13.29 pm](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/f/f8bbe9fcb1fb787a1d5046ff5456fa303d6a9cbe.png)

The target land sea mask must have a specified co-ordinate system. Otherwise `ancil_lct.py` will fail at this step

```auto
tgt_crs = target_x.coord_system.as_ants_crs()

```

It expects the target land sea mask to have the a co-ordinate system specified in `iris` as

```auto
iris.coord_systems.GeogCS(6371229.0)

```

This can be achieved in `xarray` by  
a) specifying a grid mapping variable

```python
# Createa GeogCS Grid Mapping Variable
grid_mapping_var = xr.Variable(
        dims=(),
        data=0,
        attrs={
            'grid_mapping_name': 'latitude_longitude',
            'earth_radius': 6371229.0,
        }
    )

```

b) referencing this variable in the attributes of the data array

```python
da = xr.DataArray(
    data=subset.data,
    dims=["latitude", "longitude"],
    attrs=dict(um_stash_source='m01s00i505',
               grid_mapping='geog_cs',
               earth_radius=6371229.0)
    )

```

c) Including both the data array and the grid mapping variable in the output dataset

```python
ds = xr.Dataset(
        data_vars=dict(
            land_binary_mask=da,
            geog_cs=grid_mapping_var
            ),
        coords=dict(
            latitude=subset.latitude,
            longitude=subset.longitude,
        ),
        attrs=dict(Conventions='CF-1.7')
        )

```

Implementing the above creates the correct vegetation cover for our regridded test domain.

 ![Screenshot 2025-12-21 at 12.14.25 pm](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/d/d8f5abd2dd0eb0bbea35e636a58dd9c102172c95.png)

Note the `ancil_lct.py` code converts the input float values into booleans:

```auto
lbm = lbm.copy(lbm.data.astype("bool", copy=False))

```

And the code sets by default

```auto
min_frac = 0.0

```

 ![Screenshot 2025-12-21 at 12.32.18 pm](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/a/adfae26c927a50662f9d2c02e372224ac13b204a.png)  
 ![Screenshot 2025-12-21 at 12.32.42 pm](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/a/a7c28a23cd2926605f86722b9b2537dc2d687d45.png)

To do:

1. Build a NUOPCY executable with both MOM6 and UM source compiled with debug flags (see above post)
2. Modify `ancil_lct.py` to output the actual land-sea masks used within the code, to be used by downstream ancil tasks.
3. Build a task which creates a grid namelist ASCII file which replicates the land-sea mask initially defined by rMOM6 (regridded to the desired UM resolution). There are downstream tasks (e.g. ancil-cap-orog) which use the ASCII namelist file.
4. Build a task and suite logic that takes the definition of the MOM6 grid and expands the domain to provide the UM ‘driving model’ domain, where the ERA5/BARRA/CMIP data is reconfigured to provide the initial and boundary conditions for the regional UM grid.

---

<div class="post-metadata">

**Author:** ![heidi](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/heidi/32/335_2.png) [@heidi](https://forum.access-hive.org.au/u/heidi)\
**Post date:** [7 January 2026 23:28 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/5 "2026-01-07T23:28:17Z")

</div>

> [@Paul.Gregory](#):
>
> (This is mentioned in the [ACCESS rAM3 release notes](https://forum.access-hive.org.au/t/access-ram3-release-information/4308/8) but the link to the work-around docs is broken).

@Paul.Gregory, FYI the [link to the workaround](https://access-ram3-configs.access-hive.org.au/troubleshooting/no_land/) has now been fixed in the [ACCESS rAM3 release notes](https://forum.access-hive.org.au/t/access-ram3-release-information/4308/8).

---

<div class="post-metadata">

**Author:** ![Paul.Gregory](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/paul.gregory/32/2566_2.png) [@Paul.Gregory](https://forum.access-hive.org.au/u/Paul.Gregory)\
**Post date:** [11 March 2026 23:43 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/6 "2026-03-11T23:43:58Z")

</div>

Some updates.

@ashjbarnes has been working on rCM3 now for over a month. He has got both the UM and MOM6 to run in a regional configuration for one timestep, but the NUOCPY mediator fails at this point.

Ashley is working closely with Kieran and Martin to reconcile this issue (created by the current NUOPCY mediator is hard-coded to look for CICE variables that don’t exist in our regional configuration).

Ashley is working closely with Kieran and Martin to ensure his executables are in line with CM3 developments.

Question : Should we start building the rCM3 rose/cylc suite in cylc8?

---

<div class="post-metadata">

**Author:** ![Paul.Gregory](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/paul.gregory/32/2566_2.png) [@Paul.Gregory](https://forum.access-hive.org.au/u/Paul.Gregory)\
**Post date:** [21 May 2026 07:29 UTC](https://forum.access-hive.org.au/t/the-road-to-regional-coupled-modelling-rcm3/4601/7 "2026-05-21T07:29:26Z")

</div>

Some updates.

@ashjbarnes has gotten the regional domains coupled. He’s currently working with @kieranricardo on defining the PE layout for the regional domains.

We’ve managed to build regional UM ancillaries that respect the land-sea mask defined by rMOM6, which are then regridded to the target UM resolution.

The next step is to automate the rCM3 ancillary suite, so all the user has to do is

1. run the rMOM6 notebook
2. Edit the `rose-suite.conf` file of the rCM3 ancillary suite, specifying

- the location of the rOM3 input files
- the desired atmospheric resolution

1. Run the rCM3 ancillary suite

Oh, and we also have to check that how the NUOPCY CEMPS mediator defines the grids and masks between the atmospheric and ocean fields is the same as we’ve specified in `regrid_MOM6_UM.py`
