-
Notifications
You must be signed in to change notification settings - Fork 371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add first stage of ocean/ice shelf coupling #2726
Add first stage of ocean/ice shelf coupling #2726
Conversation
This commit introduces infrastructure changes needed for adding coupling between the ocean and ice shelves in the GLC component. It is a squash of work done primarily by Jeremy Fyke between 2015 and 2017, with updates by Jon Wolfe to make it compatible with changes to E3SM since then. It is BFB for existing compsets. This commit introduces the CIME changes, but does not touch the components. [BFB] - Bit-For-Bit
This commit adds a first cut at applying the ocean/ice shelf coupling fields to the OCN and GLC components. It is a squash of work done primarily by Jeremy Fyke between 2015 and 2017, with updates by Jon Wolfe to make it compatible with changes to E3SM since then. It is BFB for existing compsets. This commit introduces the component changes, and requires the previous commit that adds the CIME changes [BFB] - Bit-For-Bit
Allows B-cases to run and LISIO tests to compile
A GG case now runs to completion and appears to be calculating fluxes.
This ensures there are 0-values where floating ice is not present and removes NaN that were present previously.
A previous commit was using ocean state fields on the ocean grid, presumably as a holdover from when this melt calculation was done on the ocean grid. This commit fixes this by switching to the ocean state fields remapped to the GLC grid.
This commit makes minor adjustments to the method for solving the ocean-iceshelf interface temperature, following changes that had been implemented in standalone MPAS-O in the last few years. This makes finding the root slightly more stable.
@stephenprice I think that's a good idea. |
Note, @jgfouca sent our latest CIME updates (on master) to the upstream on May 14. |
@rljacob - does that change when we should merge this? We had been planning to merge to next today |
No it doesn't. Today is a good time to merge. The next split will probably have just this PR in it. |
…eaned' into next (PR #2726) Add first stage of ocean/ice shelf coupling This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model. As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by "subroutine compute_melt_fluxes" on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound "subroutine compute_melt_fluxes" output fields, but no equivalent accumulation of OCN-bound outputs. Inputs to the flux calculations (all mapped to GLC grid): From OCN: * oceanTemperature(:) -> o2x_gx%rAttr(index_o2x_So_blt,:) * oceanSalinity(:) -> o2x_gx(1)%rAttr(index_o2x_So_bls,:) * oceanHeatTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_htv,:) * oceanSaltTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_hsv,:) From GLC: * interfacePressure(:) -> o2x_gx(1)%rAttr(index_o2x_So_phieff,:) * iceTemperature(:) -> g2x_gx%rAttr(index_g2x_Sg_tbot,:) * iceTemperatureDistance(:) -> g2x_gx%rAttr(index_g2x_Sg_dztbot,:) * iceFloatingMask(:) -> g2x_gx%rAttr(index_g2x_Sg_icemask_floating,:) Outputs from flux calculations (all calculated natively on GLC grid): To OCN: * g2x_gx%rAttr(index_g2x_Sg_blis,:) -> outInterfaceSalinity(:) * g2x_gx%rAttr(index_g2x_Sg_blit,:) -> outInterfaceTemperature(:) * g2x_gx%rAttr(index_g2x_Fogx_qiceho,:) -> outOceanHeatFlux(:) * g2x_gx%rAttr(index_g2x_Fogx_qicelo,:) -> outFreshwaterFlux(:) TO GLC: * x2g_gx%rAttr(index_x2g_Fogx_qicehi,:) -> outIceHeatFlux(:) * x2g_gx%rAttr(index_x2g_Fogx_qiceli,:) -> -1*outFreshwaterFlux(:) These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF" that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a "static" mode where ice sheet geometry and temperature do not evolve. [BFB] for all previously existing compsets
merged to next |
Testing against baselines shows diffs in compsets that have an active ice sheet model. I assume that is expected. But there are also diffs in the X cases. Not sure about those. |
@rljacob - yes, I'm looking into that |
@rljacob - we did add fields into the cpl, and that changes the values that the dead models pass around. So I believe the diffs in the X cases are OK |
You're right. The values are related to the number of fields. |
…eaned' (PR #2726) Add first stage of ocean/ice shelf coupling This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model. As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by "subroutine compute_melt_fluxes" on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound "subroutine compute_melt_fluxes" output fields, but no equivalent accumulation of OCN-bound outputs. Inputs to the flux calculations (all mapped to GLC grid): From OCN: * oceanTemperature(:) -> o2x_gx%rAttr(index_o2x_So_blt,:) * oceanSalinity(:) -> o2x_gx(1)%rAttr(index_o2x_So_bls,:) * oceanHeatTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_htv,:) * oceanSaltTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_hsv,:) From GLC: * interfacePressure(:) -> o2x_gx(1)%rAttr(index_o2x_So_phieff,:) * iceTemperature(:) -> g2x_gx%rAttr(index_g2x_Sg_tbot,:) * iceTemperatureDistance(:) -> g2x_gx%rAttr(index_g2x_Sg_dztbot,:) * iceFloatingMask(:) -> g2x_gx%rAttr(index_g2x_Sg_icemask_floating,:) Outputs from flux calculations (all calculated natively on GLC grid): To OCN: * g2x_gx%rAttr(index_g2x_Sg_blis,:) -> outInterfaceSalinity(:) * g2x_gx%rAttr(index_g2x_Sg_blit,:) -> outInterfaceTemperature(:) * g2x_gx%rAttr(index_g2x_Fogx_qiceho,:) -> outOceanHeatFlux(:) * g2x_gx%rAttr(index_g2x_Fogx_qicelo,:) -> outFreshwaterFlux(:) TO GLC: * x2g_gx%rAttr(index_x2g_Fogx_qicehi,:) -> outIceHeatFlux(:) * x2g_gx%rAttr(index_x2g_Fogx_qiceli,:) -> -1*outFreshwaterFlux(:) These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF" that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a "static" mode where ice sheet geometry and temperature do not evolve. [NML] [BFB] for all previously existing compsets
merged to master |
…eaned' (PR #2726) Add first stage of ocean/ice shelf coupling This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model. As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by "subroutine compute_melt_fluxes" on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound "subroutine compute_melt_fluxes" output fields, but no equivalent accumulation of OCN-bound outputs. Inputs to the flux calculations (all mapped to GLC grid): From OCN: * oceanTemperature(:) -> o2x_gx%rAttr(index_o2x_So_blt,:) * oceanSalinity(:) -> o2x_gx(1)%rAttr(index_o2x_So_bls,:) * oceanHeatTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_htv,:) * oceanSaltTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_hsv,:) From GLC: * interfacePressure(:) -> o2x_gx(1)%rAttr(index_o2x_So_phieff,:) * iceTemperature(:) -> g2x_gx%rAttr(index_g2x_Sg_tbot,:) * iceTemperatureDistance(:) -> g2x_gx%rAttr(index_g2x_Sg_dztbot,:) * iceFloatingMask(:) -> g2x_gx%rAttr(index_g2x_Sg_icemask_floating,:) Outputs from flux calculations (all calculated natively on GLC grid): To OCN: * g2x_gx%rAttr(index_g2x_Sg_blis,:) -> outInterfaceSalinity(:) * g2x_gx%rAttr(index_g2x_Sg_blit,:) -> outInterfaceTemperature(:) * g2x_gx%rAttr(index_g2x_Fogx_qiceho,:) -> outOceanHeatFlux(:) * g2x_gx%rAttr(index_g2x_Fogx_qicelo,:) -> outFreshwaterFlux(:) TO GLC: * x2g_gx%rAttr(index_x2g_Fogx_qicehi,:) -> outIceHeatFlux(:) * x2g_gx%rAttr(index_x2g_Fogx_qiceli,:) -> -1*outFreshwaterFlux(:) These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF" that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a "static" mode where ice sheet geometry and temperature do not evolve. [NML] [BFB] for all previously existing compsets
…eaned' (PR #2726) Add first stage of ocean/ice shelf coupling This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model. As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by "subroutine compute_melt_fluxes" on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound "subroutine compute_melt_fluxes" output fields, but no equivalent accumulation of OCN-bound outputs. Inputs to the flux calculations (all mapped to GLC grid): From OCN: * oceanTemperature(:) -> o2x_gx%rAttr(index_o2x_So_blt,:) * oceanSalinity(:) -> o2x_gx(1)%rAttr(index_o2x_So_bls,:) * oceanHeatTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_htv,:) * oceanSaltTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_hsv,:) From GLC: * interfacePressure(:) -> o2x_gx(1)%rAttr(index_o2x_So_phieff,:) * iceTemperature(:) -> g2x_gx%rAttr(index_g2x_Sg_tbot,:) * iceTemperatureDistance(:) -> g2x_gx%rAttr(index_g2x_Sg_dztbot,:) * iceFloatingMask(:) -> g2x_gx%rAttr(index_g2x_Sg_icemask_floating,:) Outputs from flux calculations (all calculated natively on GLC grid): To OCN: * g2x_gx%rAttr(index_g2x_Sg_blis,:) -> outInterfaceSalinity(:) * g2x_gx%rAttr(index_g2x_Sg_blit,:) -> outInterfaceTemperature(:) * g2x_gx%rAttr(index_g2x_Fogx_qiceho,:) -> outOceanHeatFlux(:) * g2x_gx%rAttr(index_g2x_Fogx_qicelo,:) -> outFreshwaterFlux(:) TO GLC: * x2g_gx%rAttr(index_x2g_Fogx_qicehi,:) -> outIceHeatFlux(:) * x2g_gx%rAttr(index_x2g_Fogx_qiceli,:) -> -1*outFreshwaterFlux(:) These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF" that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a "static" mode where ice sheet geometry and temperature do not evolve. [NML] [BFB] for all previously existing compsets
…eaned' (PR #2726) Add first stage of ocean/ice shelf coupling This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model. As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by "subroutine compute_melt_fluxes" on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound "subroutine compute_melt_fluxes" output fields, but no equivalent accumulation of OCN-bound outputs. Inputs to the flux calculations (all mapped to GLC grid): From OCN: * oceanTemperature(:) -> o2x_gx%rAttr(index_o2x_So_blt,:) * oceanSalinity(:) -> o2x_gx(1)%rAttr(index_o2x_So_bls,:) * oceanHeatTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_htv,:) * oceanSaltTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_hsv,:) From GLC: * interfacePressure(:) -> o2x_gx(1)%rAttr(index_o2x_So_phieff,:) * iceTemperature(:) -> g2x_gx%rAttr(index_g2x_Sg_tbot,:) * iceTemperatureDistance(:) -> g2x_gx%rAttr(index_g2x_Sg_dztbot,:) * iceFloatingMask(:) -> g2x_gx%rAttr(index_g2x_Sg_icemask_floating,:) Outputs from flux calculations (all calculated natively on GLC grid): To OCN: * g2x_gx%rAttr(index_g2x_Sg_blis,:) -> outInterfaceSalinity(:) * g2x_gx%rAttr(index_g2x_Sg_blit,:) -> outInterfaceTemperature(:) * g2x_gx%rAttr(index_g2x_Fogx_qiceho,:) -> outOceanHeatFlux(:) * g2x_gx%rAttr(index_g2x_Fogx_qicelo,:) -> outFreshwaterFlux(:) TO GLC: * x2g_gx%rAttr(index_x2g_Fogx_qicehi,:) -> outIceHeatFlux(:) * x2g_gx%rAttr(index_x2g_Fogx_qiceli,:) -> -1*outFreshwaterFlux(:) These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF" that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a "static" mode where ice sheet geometry and temperature do not evolve. [NML] [BFB] for all previously existing compsets
…eaned' (PR #2726) Add first stage of ocean/ice shelf coupling This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model. As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by "subroutine compute_melt_fluxes" on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound "subroutine compute_melt_fluxes" output fields, but no equivalent accumulation of OCN-bound outputs. Inputs to the flux calculations (all mapped to GLC grid): From OCN: * oceanTemperature(:) -> o2x_gx%rAttr(index_o2x_So_blt,:) * oceanSalinity(:) -> o2x_gx(1)%rAttr(index_o2x_So_bls,:) * oceanHeatTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_htv,:) * oceanSaltTransferVelocity(:) -> o2x_gx(1)%rAttr(index_o2x_So_hsv,:) From GLC: * interfacePressure(:) -> o2x_gx(1)%rAttr(index_o2x_So_phieff,:) * iceTemperature(:) -> g2x_gx%rAttr(index_g2x_Sg_tbot,:) * iceTemperatureDistance(:) -> g2x_gx%rAttr(index_g2x_Sg_dztbot,:) * iceFloatingMask(:) -> g2x_gx%rAttr(index_g2x_Sg_icemask_floating,:) Outputs from flux calculations (all calculated natively on GLC grid): To OCN: * g2x_gx%rAttr(index_g2x_Sg_blis,:) -> outInterfaceSalinity(:) * g2x_gx%rAttr(index_g2x_Sg_blit,:) -> outInterfaceTemperature(:) * g2x_gx%rAttr(index_g2x_Fogx_qiceho,:) -> outOceanHeatFlux(:) * g2x_gx%rAttr(index_g2x_Fogx_qicelo,:) -> outFreshwaterFlux(:) TO GLC: * x2g_gx%rAttr(index_x2g_Fogx_qicehi,:) -> outIceHeatFlux(:) * x2g_gx%rAttr(index_x2g_Fogx_qiceli,:) -> -1*outFreshwaterFlux(:) These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF" that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a "static" mode where ice sheet geometry and temperature do not evolve. [NML] [BFB] for all previously existing compsets
…ins_cleanup Automatically Merged using E3SM Pull Request AutoTester PR Title: Improve jenkins cleanup scripts PR Author: jgfouca PR LABELS: AT: AUTOMERGE, AT: Skip weaver, AT: Skip Stand-Alone Testing, AT: Skip v1 Testing
This PR creates a new SMS_P512_D_Ld5.T62_oEC60to30v3wLI_ais20.MPAS_LISIO_TEST.mpaso-ocn_glcshelf test that runs a G-case with the ocn_glcshelf coupling turned on. That coupling was added in PR #2726, but a test was never added.
…6437) Update LISIO test to include ocn-glcshelf coupling This PR replaces the MPAS_LISIO_TEST ("LandIce-SeaIce-Ocean") test with a new compset that is more up to date and updates test coverage for OCN-GLC coupling work in development. It makes the following changes: * updates compset and grid definition to use JRA1p5 data atmosphere instead of CORE II-NYF * updates ocean mesh to use oQU240wLI mesh, which is cheaper and includes ice-shelf cavities * introduces a testmod that activates ocn-glcshelf coupling. That coupling was added in PR #2726, but a test was never added. The PR also includes a small MPAS-Ocean bug fix that activating ocn-glcshelf coupling revealed. [BFB]
Update LISIO test to include ocn-glcshelf coupling This PR replaces the MPAS_LISIO_TEST ("LandIce-SeaIce-Ocean") test with a new compset that is more up to date and updates test coverage for OCN-GLC coupling work in development. It makes the following changes: * updates compset and grid definition to use JRA1p5 data atmosphere instead of CORE II-NYF * updates ocean mesh to use oQU240wLI mesh, which is cheaper and includes ice-shelf cavities * introduces a testmod that activates ocn-glcshelf coupling. That coupling was added in PR #2726, but a test was never added. The PR also includes a small MPAS-Ocean bug fix that activating ocn-glcshelf coupling revealed. [BFB]
This merge introduces coupler changes to allow coupling between the ocean model and ice shelves within the GLC model.
As part of model coupling necessary for Antarctic simulations, ice shelf melt fluxes due to (primarily) ocean temperatures must be calculated. These melt fluxes correspond to oceanic heat and moisture fluxes at the upper ocean surface, and ice sheet heat and ice column thickness changes. Coupling is characterized by 1) calculations carried out by ‘subroutine compute_melt_fluxes’ on the GLC grid, but 2) on the OCN coupling timestep (<GLC coupling timestep). This is why these fluxes cannot be calculated in either component and are done here in the coupler itself. These factors result in 1) frequent OCN2GLC remapping that is not associated with a GLC run step and 2) accumulation of GLC-bound ‘subroutine compute_melt_fluxes’ output fields, but no equivalent accumulation of OCN-bound outputs.
Inputs to the flux calculations (all mapped to GLC grid):
From OCN:
From GLC:
Outputs from flux calculations (all calculated natively on GLC grid):
To OCN:
TO GLC:
These changes also include necessary driver and build script changes and a new compset "GMPAS-MALI-DIB-IAF-ISMF” that includes active MPAS-Ocean and MPAS-Albany-Land-Ice (as well as active MPAS-Sea-Ice). In this compset, MPAS-Albany-Land-Ice is configured in a ’static’ mode where ice sheet geometry and temperature do not evolve.
Changes are BFB for existing compsets.