Skip to content

Conversation

@matthewhoffman
Copy link
Collaborator

@matthewhoffman matthewhoffman commented Sep 3, 2025

This PR introduces iceberg coupling by attaching MALI's calving flux to Figg_rofi and attaching Fixx_rofi to MPAS-Seaice on the other side. This iceberg coupling had been partly implemented a number of years back by Jeremy Fyke but at the time neither component model was ready to send/receive the coupling field, so it was never finished or tested. As such, in addition to attaching the coupling field to the component models, this branch addresses a number of loose ends that had not been implemented.

The coupling pathway is that MALI sends its calving flux to Figg_rofi (which had previously been connected directly to the ocean via Fogg_rofi). This fields is remapped to the seaice/ocean grid and added to Firr_rofi (solid runoff from the runoff model, currently not hooked up) in the coupler to create Fixx_rofi, which is the fields passed to MPAS-Seaice.

Two issues may require further attention before finalizing this PR:

  • With this change, icebergs will always exist in MPAS-Seaice - either from the existing DIB option or from this newly activated coupling. As such, the pkgBergs package in MPAS-Seaice should now always be active when running in E3SM. I have made changes to make this the case, but it is unclear to me how standalone MPAS-Seaice wants to treat this. See 847a790 for more details. Input is needed from MPAS-Seaice maintainers and standalone users about the preferred solution. EDIT 9/9: If this coupling is only active when MALI is active, the previous code to only enable icebergs based on namelist settings can be re-implemented.
  • Previously unused GLC2ICE_RMAPNAME and ROF2ICE_RMAPNAME mapping files now need to be specified. This branch currently only specifies them for the TL319_IcoswISC30E3r5_ais4to20 G-case mesh, but they will need to be added for all relevant meshes. Note that because this now routes Firr_rofi to ICE, even in the absence of GLC, ROF2ICE_RMAPNAME mapping files will be needed for all grids that contain both ROF and ICE. Note, however, that MOSART currently passes its rofi flux to OCN, and I have not changed that in this PR. The good thing is that means this PR will not change answers for compsets with ROF and ICE but no MALI (i.e., most compsets), but the bad thing is the new requirement to have ROF2ICE_RMAPNAME mapping files specified for each existing grid is an annoyance that does not actually do anything. Possible solutions are:
  1. Leave things as currently implemented with the need for adding ROF2ICE_RMAPNAME mappings that are not currently used (but presumably will be desired eventually)
  2. Detach Firr_rofi from Fixx_rofi in the coupler for now and remove the ROF2ICE_RMAPNAME additions.
  3. Move MOSART and DROF solid runoff from Forr_rofi to Firr_rofi, so solid runoff is handled the same whether it is coming from ROF or GLC. This is presumably the desired long-term solution but will change answers and is likely to expose unexpected complications. Update 9/5: after thinking about this more, I think it should be possible to implement this in a BFB way. If so, I think this is the desired solution because it moves us closer to where we want to end up. Update 9/9: I no longer think this can be implemented BFB because there would be a lag of one coupling interval for the ocean to receive the iceberg fluxes if they first have to make stop in the sea ice. After further discussion, I think option 1 is the best option because it is the most flexible without removing code that we may possibly want as things mature.

This moves the calving flux from being passed to the ocean to being
passed to sea ice.
The Fixx_rofi solid runoff flux has existed in the coupler for some
time, but it had not been attached to MPAS-Seaice.  This commit adds the
connection to MPAS-Seaice in the ice_comp_mct import routine.  The
Fixx_rofi flux is passed to bergFreshwaterFlux.  bergLatentHeatFlux is
then calculated using ice temperature specified by
config_iceberg_temperature.

This commit also changes ice_export_mct so that Fioi_bergw/h are always
exported - they will now either come from the coupler or from data.
With Fixx_rofi now being coupled to ice, the berg variables will be used
all the time when running in E3SM, as opposed to just when data icebergs
are active.

Note that this is unlikely to be the most desirable solution; the berg
variables would ideally be disabled for standalone MPAS-Seaice, but with
this change they will always be allocated.  I could not find an obvious
way to make the package conditional on MPAS-Seaice being run within
E3SM, which I think would be the preferred criterion.  Also, if the
solution of having the berg variables be always allocated is acceptable,
then there is no longer a need for the berg package and it could be
fully removed.  So either way, this commit will need to be revisited.
This coupler flag is what tells the coupler to send rofi fluxes from ROF
and GLC to ICE.  This will allow seaice to act as a pass-through for
rofi fluxes to the ocean.  When an iceberg model is eventually added to
MPAS-Seaice, it can redistribute icebergs before they are passed on to
the ocean.
Fixx_rofi had been specified in this list when Fixx_rofi coupling  was
partially implemented (but not tested) years ago.  However, that is the
wrong variable at this point in the coupling chain - Figg_rofi is the
field that needs to be remapped at this stage.

Note that usually a previously defined list of variables is used at
this stage, as opposed to hardcoding a variable name/list, but I am
modifying the existing implementation and not changing that here.
This commit adds mapping file specifications needed to run a LR G-case.
This commit should be followed up with a more complete addition for
other grids.
@cbegeman
Copy link
Collaborator

cbegeman commented Sep 4, 2025

With this change, icebergs will always exist in MPAS-Seaice - either from the existing DIB option or from this newly activated coupling. As such, the pkgBergs package in MPAS-Seaice should now always be active when running in E3SM. I have made changes to make this the case, but it is unclear to me how standalone MPAS-Seaice wants to treat this. See 847a790 for more details. Input is needed from MPAS-Seaice maintainers and standalone users about the preferred solution.

Would it be sufficient to use a new config option like config_iceberg_mode = 'off' or 'data' or 'coupled' so that all instances of package variables are still inside a conditional? We can then make sure this has the right value in certain configurations like we do for config_land_ice_flux_mode

@matthewhoffman
Copy link
Collaborator Author

I discussed this PR with @darincomeau today, and we came to a similar conclusion. We decided a few design principles for this PR. Make the iceberg coupling only apply for compsets with MALI active. In other words, do not enable this iceberg coupling for compsets withotu MALI as part of this PR. Enabling iceberg coupling of rofi from ROF would break current standard compsets. Moving ROF rofi to go through sea ice instead of straight to ocean can be explored later, perhaps as part of v4. As such, setting iceberg_prognostic to true, as well as the iceberg package management, should be controlled by CIME variables indicating if MALI is active or not.

We also discussed the possibility of eliminating ROF2ICE_RMAPNAME and having that coupling stream use the existing ROF2OCN_ICE_RMAPNAME. We agreed that would be a good long-term solution, but we tentatively decided to leave it in the code for now, because we possibly could imagine situations where we want them both to exist (in order to have different mappings for different compsets during a transition time between implementation).

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