diff --git a/.github/workflows/build_workflow.yml b/.github/workflows/build_workflow.yml
index 391f85d94e..be4387fd33 100644
--- a/.github/workflows/build_workflow.yml
+++ b/.github/workflows/build_workflow.yml
@@ -89,7 +89,7 @@ jobs:
channels: conda-forge,e3sm/label/compass
channel-priority: strict
use-mamba: false
- auto-update-conda: true
+ auto-update-conda: false
python-version: ${{ matrix.python-version }}
- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
diff --git a/.github/workflows/docs_workflow.yml b/.github/workflows/docs_workflow.yml
index 383c8215a8..8008c3b959 100644
--- a/.github/workflows/docs_workflow.yml
+++ b/.github/workflows/docs_workflow.yml
@@ -41,7 +41,7 @@ jobs:
channels: conda-forge,e3sm/label/compass
channel-priority: strict
use-mamba: false
- auto-update-conda: true
+ auto-update-conda: false
python-version: ${{ matrix.python-version }}
- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
diff --git a/compass/ocean/cached_files.json b/compass/ocean/cached_files.json
index 8d05ad98d8..1e52a9ebe8 100644
--- a/compass/ocean/cached_files.json
+++ b/compass/ocean/cached_files.json
@@ -104,13 +104,13 @@
"ocean/global_convergence/qu/cosine_bell/QU60/init/initial_state.nc": "global_convergence/qu/cosine_bell/QU60/init/initial_state.220528.nc",
"ocean/global_convergence/qu/cosine_bell/QU90/init/namelist.ocean": "global_convergence/qu/cosine_bell/QU90/init/namelist.220528.ocean",
"ocean/global_convergence/qu/cosine_bell/QU90/init/initial_state.nc": "global_convergence/qu/cosine_bell/QU90/init/initial_state.220528.nc",
- "ocean/global_ocean/Icos240/mesh/base_mesh/mesh.msh": "global_ocean/Icos240/mesh/base_mesh/mesh.240312.msh",
- "ocean/global_ocean/Icos240/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos240/mesh/base_mesh/base_mesh.240312.nc",
- "ocean/global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.240312.nc",
- "ocean/global_ocean/Icos240/mesh/base_mesh/graph.info": "global_ocean/Icos240/mesh/base_mesh/graph.240312.info",
- "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos240/mesh/cull_mesh/culled_mesh.240312.nc",
- "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos240/mesh/cull_mesh/culled_graph.240312.info",
- "ocean/global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.240312.nc",
+ "ocean/global_ocean/Icos240/mesh/base_mesh/mesh.msh": "global_ocean/Icos240/mesh/base_mesh/mesh.250111.msh",
+ "ocean/global_ocean/Icos240/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos240/mesh/base_mesh/base_mesh.250111.nc",
+ "ocean/global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.250111.nc",
+ "ocean/global_ocean/Icos240/mesh/base_mesh/graph.info": "global_ocean/Icos240/mesh/base_mesh/graph.250111.info",
+ "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos240/mesh/cull_mesh/culled_mesh.250111.nc",
+ "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos240/mesh/cull_mesh/culled_graph.250111.info",
+ "ocean/global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.250111.nc",
"ocean/global_ocean/QU240/mesh/base_mesh/mesh.msh": "global_ocean/QU240/mesh/base_mesh/mesh.230605.msh",
"ocean/global_ocean/QU240/mesh/base_mesh/base_mesh.nc": "global_ocean/QU240/mesh/base_mesh/base_mesh.230605.nc",
"ocean/global_ocean/QU240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/QU240/mesh/base_mesh/cellWidthVsLatLon.230605.nc",
@@ -173,95 +173,95 @@
"ocean/global_ocean/QUwISC240/mesh/cull_mesh/topography_culled.nc": "global_ocean/QUwISC240/mesh/cull_mesh/topography_culled.230605.nc",
"ocean/global_ocean/QUwISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.nc": "global_ocean/QUwISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.230824.nc",
"ocean/global_ocean/ECwISC30to60/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.nc": "global_ocean/ECwISC30to60/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.230824.nc",
- "ocean/global_ocean/Icos240/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos240/mesh/cull_mesh/topography_culled.240312.nc",
- "ocean/global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.240312.nc",
- "ocean/global_ocean/Icos240/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos240/mesh/remap_topography/topography_remapped.240312.nc",
- "ocean/global_ocean/Icos240/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos240/WOA23/init/initial_state/initial_state.240312.nc",
- "ocean/global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.240312.nc",
- "ocean/global_ocean/Icos240/WOA23/init/initial_state/graph.info": "global_ocean/Icos240/WOA23/init/initial_state/graph.240312.info",
- "ocean/global_ocean/IcoswISC240/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC240/mesh/base_mesh/mesh.240509.msh",
- "ocean/global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/base_mesh/graph.info": "global_ocean/IcoswISC240/mesh/base_mesh/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.240509.info",
- "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.240509.nc",
- "ocean/global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC240/WOA23/init/initial_state/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.240509.nc",
+ "ocean/global_ocean/Icos240/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos240/mesh/cull_mesh/topography_culled.250111.nc",
+ "ocean/global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.250111.nc",
+ "ocean/global_ocean/Icos240/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos240/mesh/remap_topography/topography_remapped.250111.nc",
+ "ocean/global_ocean/Icos240/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos240/WOA23/init/initial_state/initial_state.250111.nc",
+ "ocean/global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/Icos240/WOA23/init/initial_state/graph.info": "global_ocean/Icos240/WOA23/init/initial_state/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC240/mesh/base_mesh/mesh.250111.msh",
+ "ocean/global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/base_mesh/graph.info": "global_ocean/IcoswISC240/mesh/base_mesh/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.250111.nc",
+ "ocean/global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC240/WOA23/init/initial_state/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.250111.nc",
"ocean/global_ocean/IcoswISC240/WOA23/init/ssh_adjustment/adjusted_init.nc": "global_ocean/IcoswISC240/WOA23/init/ssh_adjustment/adjusted_init.240312.nc",
- "ocean/global_ocean/Icos/mesh/base_mesh/mesh.msh": "global_ocean/Icos/mesh/base_mesh/mesh.240312.msh",
- "ocean/global_ocean/Icos/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos/mesh/base_mesh/base_mesh.240312.nc",
- "ocean/global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.240312.nc",
- "ocean/global_ocean/Icos/mesh/base_mesh/graph.info": "global_ocean/Icos/mesh/base_mesh/graph.240312.info",
- "ocean/global_ocean/Icos/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos/mesh/cull_mesh/culled_mesh.240312.nc",
- "ocean/global_ocean/Icos/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos/mesh/cull_mesh/culled_graph.240312.info",
- "ocean/global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.240312.nc",
- "ocean/global_ocean/Icos/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos/mesh/cull_mesh/topography_culled.240312.nc",
- "ocean/global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.240312.nc",
- "ocean/global_ocean/Icos/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos/mesh/remap_topography/topography_remapped.240312.nc",
- "ocean/global_ocean/Icos/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos/WOA23/init/initial_state/initial_state.240312.nc",
- "ocean/global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.240312.nc",
- "ocean/global_ocean/Icos/WOA23/init/initial_state/graph.info": "global_ocean/Icos/WOA23/init/initial_state/graph.240312.info",
- "ocean/global_ocean/IcoswISC/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC/mesh/base_mesh/mesh.240509.msh",
- "ocean/global_ocean/IcoswISC/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC/mesh/base_mesh/base_mesh.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/base_mesh/graph.info": "global_ocean/IcoswISC/mesh/base_mesh/graph.240509.info",
- "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.240509.info",
- "ocean/global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.240509.nc",
- "ocean/global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC/WOA23/init/initial_state/graph.240509.info",
- "ocean/global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.240509.nc",
+ "ocean/global_ocean/Icos/mesh/base_mesh/mesh.msh": "global_ocean/Icos/mesh/base_mesh/mesh.250111.msh",
+ "ocean/global_ocean/Icos/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos/mesh/base_mesh/base_mesh.250111.nc",
+ "ocean/global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.250111.nc",
+ "ocean/global_ocean/Icos/mesh/base_mesh/graph.info": "global_ocean/Icos/mesh/base_mesh/graph.250111.info",
+ "ocean/global_ocean/Icos/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos/mesh/cull_mesh/culled_mesh.250111.nc",
+ "ocean/global_ocean/Icos/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos/mesh/cull_mesh/culled_graph.250111.info",
+ "ocean/global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.250111.nc",
+ "ocean/global_ocean/Icos/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos/mesh/cull_mesh/topography_culled.250111.nc",
+ "ocean/global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.250111.nc",
+ "ocean/global_ocean/Icos/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos/mesh/remap_topography/topography_remapped.250111.nc",
+ "ocean/global_ocean/Icos/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos/WOA23/init/initial_state/initial_state.250111.nc",
+ "ocean/global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/Icos/WOA23/init/initial_state/graph.info": "global_ocean/Icos/WOA23/init/initial_state/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC/mesh/base_mesh/mesh.250111.msh",
+ "ocean/global_ocean/IcoswISC/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC/mesh/base_mesh/base_mesh.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/base_mesh/graph.info": "global_ocean/IcoswISC/mesh/base_mesh/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.250111.info",
+ "ocean/global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.250111.nc",
+ "ocean/global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC/WOA23/init/initial_state/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.250111.nc",
"ocean/global_ocean/IcoswISC/WOA23/init/ssh_adjustment/adjusted_init.nc": "global_ocean/IcoswISC/WOA23/init/ssh_adjustment/adjusted_init.240312.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.240509.info",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.240509.nc",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.240509.info",
- "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.240509.nc"
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.250111.nc",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.250111.info",
+ "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.250111.nc"
}
diff --git a/compass/ocean/mesh/low_res_topography.cfg b/compass/ocean/mesh/low_res_topography.cfg
index c3bf08c611..617ba13581 100644
--- a/compass/ocean/mesh/low_res_topography.cfg
+++ b/compass/ocean/mesh/low_res_topography.cfg
@@ -2,14 +2,8 @@
[remap_topography]
# the name of the topography file in the bathymetry database
-topo_filename = BedMachineAntarctica_v2_and_GEBCO_2022_0.05_degree_20220729.nc
-
-# variable names in topo_filename
-bathy_frac_var = ocean_mask
-
-# the description to include in metadata
-description = Bathymetry is from GEBCO 2022, combined with BedMachine
- Antarctica v2 around Antarctica.
+topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne120_20250110.nc
+src_scrip_filename = ne120_20250110.scrip.nc
# the target and minimum number of MPI tasks to use in remapping
ntasks = 64
diff --git a/compass/ocean/mesh/remap_topography.cfg b/compass/ocean/mesh/remap_topography.cfg
index 34b4bcdd80..7982c8f68d 100644
--- a/compass/ocean/mesh/remap_topography.cfg
+++ b/compass/ocean/mesh/remap_topography.cfg
@@ -2,27 +2,23 @@
[remap_topography]
# the name of the topography file in the bathymetry database
-topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_0.0125_degree_20240828.nc
-
-# variable names in topo_filename
-lon_var = lon
-lat_var = lat
-bathymetry_var = bathymetry
-ice_thickness_var = thickness
-ice_frac_var = ice_mask
-grounded_ice_frac_var = grounded_mask
-ocean_frac_var = ocean_mask
-bathy_frac_var = bathymetry_mask
+topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250110.nc
+src_scrip_filename = ne3000_20250110.scrip.nc
+
+# weight generator function:
+# `tempest` for cubed-sphere bathy or `esmf` for latlon bathy
+weight_generator = tempest
# the description to include in metadata
description = Bathymetry is from GEBCO 2023, combined with BedMachine
Antarctica v3 around Antarctica.
# the target and minimum number of MPI tasks to use in remapping
-ntasks = 4096
-min_tasks = 360
+ntasks = 1280
+min_tasks = 256
# remapping method {'bilinear', 'neareststod', 'conserve'}
+# must use 'conserve' for tempestremap
method = conserve
# threshold of what fraction of an MPAS cell must contain ocean in order to
@@ -31,3 +27,10 @@ renorm_threshold = 0.01
# the density of land ice from MALI (kg/m^3)
ice_density = 910.0
+
+# smoothing parameters
+# no smoothing (required for esmf):
+# expandDist = 0 [m]
+# expandFactor = 1 [cell fraction]
+expandDist = 0
+expandFactor = 1
diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py
index 788561fc38..27dab80d92 100644
--- a/compass/ocean/mesh/remap_topography.py
+++ b/compass/ocean/mesh/remap_topography.py
@@ -1,11 +1,14 @@
import os
+import pathlib
import numpy as np
import xarray as xr
from mpas_tools.cime.constants import constants
from mpas_tools.io import write_netcdf
-from pyremap import LatLonGridDescriptor, MpasCellMeshDescriptor, Remapper
+from mpas_tools.logging import check_call
+from pyremap import MpasCellMeshDescriptor
+from compass.parallel import run_command
from compass.step import Step
@@ -23,8 +26,10 @@ class RemapTopography(Step):
The name of the MPAS mesh to include in the mapping file
"""
- def __init__(self, test_case, base_mesh_step, name='remap_topography',
- subdir=None, mesh_name='MPAS_mesh'):
+ def __init__(
+ self, test_case, base_mesh_step, name='remap_topography', subdir=None,
+ mesh_name='MPAS_mesh',
+ ):
"""
Create a new step
@@ -59,20 +64,30 @@ def setup(self):
"""
super().setup()
config = self.config
- topo_filename = config.get('remap_topography', 'topo_filename')
+ section = config['remap_topography']
+ topo_filename = section.get('topo_filename')
+ src_scrip_filename = section.get('src_scrip_filename')
+
self.add_input_file(
filename='topography.nc',
target=topo_filename,
- database='bathymetry_database')
+ database='bathymetry_database',
+ )
+ self.add_input_file(
+ filename='source.scrip.nc',
+ target=src_scrip_filename,
+ database='bathymetry_database',
+ )
base_path = self.base_mesh_step.path
base_filename = self.base_mesh_step.config.get(
- 'spherical_mesh', 'mpas_mesh_filename')
+ 'spherical_mesh', 'mpas_mesh_filename',
+ )
target = os.path.join(base_path, base_filename)
self.add_input_file(filename='base_mesh.nc', work_dir_target=target)
- self.ntasks = config.getint('remap_topography', 'ntasks')
- self.min_tasks = config.getint('remap_topography', 'min_tasks')
+ self.ntasks = section.getint('ntasks')
+ self.min_tasks = section.getint('min_tasks')
def constrain_resources(self, available_resources):
"""
@@ -94,64 +109,195 @@ def run(self):
Run this step of the test case
"""
config = self.config
+ weight_generator = config.get('remap_topography', 'weight_generator')
+
+ self._create_target_scrip_file()
+ if weight_generator == 'tempest':
+ self._partition_scrip_file('source.scrip.nc')
+ self._partition_scrip_file('target.scrip.nc')
+ self._create_weights_tempest()
+ elif weight_generator == 'esmf':
+ self._create_weights_esmf()
+ else:
+ msg = f'Unsupported weight generator function {weight_generator}'
+ raise ValueError(msg)
+ self._remap_to_target()
+ self._modify_remapped_bathymetry()
+
+ def _create_target_scrip_file(self):
+ """
+ Create target SCRIP file from MPAS mesh file.
+ """
logger = self.logger
- parallel_executable = config.get('parallel', 'parallel_executable')
+ logger.info('Create source SCRIP file')
- lon_var = config.get('remap_topography', 'lon_var')
- lat_var = config.get('remap_topography', 'lat_var')
+ config = self.config
+ section = config['remap_topography']
+ expandDist = section.getfloat('expandDist')
+ expandFactor = section.getfloat('expandFactor')
+
+ descriptor = MpasCellMeshDescriptor(
+ fileName='base_mesh.nc',
+ meshName=self.mesh_name,
+ )
+ descriptor.to_scrip(
+ 'target.scrip.nc',
+ expandDist=expandDist,
+ expandFactor=expandFactor,
+ )
+
+ logger.info(' Done.')
+
+ def _partition_scrip_file(self, in_filename):
+ """
+ Partition SCRIP file for parallel mbtempest use
+ """
+ logger = self.logger
+ logger.info('Partition SCRIP file')
+
+ stem = pathlib.Path(in_filename).stem
+ h5m_filename = f'{stem}.h5m'
+ part_filename = f'{stem}.p{self.ntasks}.h5m'
+
+ # Convert source SCRIP to mbtempest
+ args = [
+ 'mbconvert', '-B',
+ in_filename,
+ h5m_filename,
+ ]
+ check_call(args, logger)
+
+ # Partition source SCRIP
+ args = [
+ 'mbpart', f'{self.ntasks}',
+ '-z', 'RCB',
+ h5m_filename,
+ part_filename,
+ ]
+ check_call(args, logger)
+
+ logger.info(' Done.')
+
+ def _create_weights_tempest(self):
+ """
+ Create mapping weights file using TempestRemap
+ """
+ logger = self.logger
+ logger.info('Create weights file')
+
+ config = self.config
method = config.get('remap_topography', 'method')
- renorm_threshold = config.getfloat('remap_topography',
- 'renorm_threshold')
- ice_density = config.getfloat('remap_topography', 'ice_density')
- ocean_density = constants['SHR_CONST_RHOSW']
- g = constants['SHR_CONST_G']
+ if method != 'conserve':
+ raise ValueError(f'Unsupported method {method} for TempestRemap')
+
+ args = [
+ 'mbtempest', '--type', '5',
+ '--load', f'source.scrip.p{self.ntasks}.h5m',
+ '--load', f'target.scrip.p{self.ntasks}.h5m',
+ '--file', f'map_source_to_target_{method}.nc',
+ '--weights', '--gnomonic',
+ '--boxeps', '1e-9',
+ ]
+
+ run_command(
+ args, self.cpus_per_task, self.ntasks,
+ self.openmp_threads, self.config, self.logger,
+ )
+
+ logger.info(' Done.')
+
+ def _create_weights_esmf(self):
+ """
+ Create mapping weights file using ESMF_RegridWeightGen
+ """
+ logger = self.logger
+ logger.info('Create weights file')
- in_descriptor = LatLonGridDescriptor.read(fileName='topography.nc',
- lonVarName=lon_var,
- latVarName=lat_var)
+ config = self.config
+ method = config.get('remap_topography', 'method')
+
+ args = [
+ 'ESMF_RegridWeightGen',
+ '--source', 'source.scrip.nc',
+ '--destination', 'target.scrip.nc',
+ '--weight', f'map_source_to_target_{method}.nc',
+ '--method', method,
+ '--netcdf4',
+ '--ignore_unmapped',
+ ]
+
+ run_command(
+ args, self.cpus_per_task, self.ntasks,
+ self.openmp_threads, self.config, self.logger,
+ )
+
+ logger.info(' Done.')
+
+ def _remap_to_target(self):
+ """
+ Remap combined bathymetry onto MPAS target mesh
+ """
+ logger = self.logger
+ logger.info('Remap to target')
- in_mesh_name = in_descriptor.meshName
+ config = self.config
+ method = config.get('remap_topography', 'method')
- out_mesh_name = self.mesh_name
- out_descriptor = MpasCellMeshDescriptor(fileName='base_mesh.nc',
- meshName=self.mesh_name)
+ # Build command args
+ args = [
+ 'ncremap',
+ '-m', f'map_source_to_target_{method}.nc',
+ '--vrb=1',
+ 'topography.nc', 'topography_ncremap.nc',
+ ]
+ check_call(args, logger)
- mapping_file_name = \
- f'map_{in_mesh_name}_to_{out_mesh_name}_{method}.nc'
- remapper = Remapper(in_descriptor, out_descriptor, mapping_file_name)
+ logger.info(' Done.')
- remapper.build_mapping_file(method=method, mpiTasks=self.ntasks,
- tempdir='.', logger=logger,
- esmf_parallel_exec=parallel_executable)
+ def _modify_remapped_bathymetry(self):
+ """
+ Modify remapped bathymetry
+ """
+ logger = self.logger
+ logger.info('Modify remapped bathymetry')
- remapper.remap_file(inFileName='topography.nc',
- outFileName='topography_ncremap.nc',
- logger=logger)
+ config = self.config
+ section = config['remap_topography']
+ renorm_threshold = section.getfloat('renorm_threshold')
+ ice_density = section.getfloat('ice_density')
+ ocean_density = constants['SHR_CONST_RHOSW']
+ g = constants['SHR_CONST_G']
ds_in = xr.open_dataset('topography_ncremap.nc')
ds_in = ds_in.rename({'ncol': 'nCells'})
+
ds_out = xr.Dataset()
- rename = {'bathymetry_var': 'bed_elevation',
- 'ice_thickness_var': 'landIceThkObserved',
- 'ice_frac_var': 'landIceFracObserved',
- 'grounded_ice_frac_var': 'landIceGroundedFracObserved',
- 'ocean_frac_var': 'oceanFracObserved',
- 'bathy_frac_var': 'bathyFracObserved'}
-
- for option, out_var in rename.items():
- in_var = config.get('remap_topography', option)
+ rename = {
+ 'bathymetry': 'bed_elevation',
+ 'thickness': 'landIceThkObserved',
+ 'ice_mask': 'landIceFracObserved',
+ 'grounded_mask': 'landIceGroundedFracObserved',
+ 'ocean_mask': 'oceanFracObserved',
+ 'bathymetry_mask': 'bathyFracObserved',
+ }
+ for in_var, out_var in rename.items():
ds_out[out_var] = ds_in[in_var]
ds_out['landIceFloatingFracObserved'] = \
ds_out.landIceFracObserved - ds_out.landIceGroundedFracObserved
- # make sure fractions don't exceed 1
- for var in ['landIceFracObserved', 'landIceGroundedFracObserved',
- 'landIceFloatingFracObserved', 'oceanFracObserved',
- 'bathyFracObserved']:
+ # Make sure fractions don't exceed 1
+ varNames = [
+ 'landIceFracObserved',
+ 'landIceGroundedFracObserved',
+ 'landIceFloatingFracObserved',
+ 'oceanFracObserved',
+ 'bathyFracObserved',
+ ]
+ for var in varNames:
ds_out[var] = np.minimum(ds_out[var], 1.)
- # renormalize elevation variables
+ # Renormalize elevation variables
norm = ds_out.bathyFracObserved
valid = norm > renorm_threshold
for var in ['bed_elevation', 'landIceThkObserved']:
@@ -163,13 +309,13 @@ def run(self):
# not allowed to be thicker than the flotation thickness
thickness = np.minimum(thickness, flotation_thickness)
ds_out['landIceThkObserved'] = thickness
-
ds_out['landIcePressureObserved'] = ice_density * g * thickness
# compute the ice draft to be consistent with the land ice pressure
# and using E3SM's density of seawater
-
ds_out['landIceDraftObserved'] = \
- (ice_density / ocean_density) * thickness
write_netcdf(ds_out, 'topography_remapped.nc')
+
+ logger.info(' Done.')
diff --git a/docs/conf.py b/docs/conf.py
index 55bf6dc6f5..8fbbddf907 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -96,14 +96,7 @@
# a list of builtin themes.
#
-# on_rtd is whether we are on readthedocs.org, this line of code grabbed from
-# docs.readthedocs.org
-on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
-
-if not on_rtd: # only import and set the theme if we're building docs locally
- import sphinx_rtd_theme
- html_theme = 'sphinx_rtd_theme'
- html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
@@ -179,9 +172,9 @@
'numpy': ('https://numpy.org/doc/stable/', None),
'xarray': ('http://xarray.pydata.org/en/stable/', None),
'geometric_features':
- ('http://mpas-dev.github.io/geometric_features/stable/', None),
+ ('http://mpas-dev.github.io/geometric_features/main/', None),
'mpas_tools':
- ('http://mpas-dev.github.io/MPAS-Tools/stable/', None)}
+ ('http://mpas-dev.github.io/MPAS-Tools/master/', None)}
github_doc_root = 'https://github.com/rtfd/recommonmark/tree/master/doc/'
diff --git a/docs/developers_guide/ocean/framework.rst b/docs/developers_guide/ocean/framework.rst
index 4cf25760a5..49fd906ced 100644
--- a/docs/developers_guide/ocean/framework.rst
+++ b/docs/developers_guide/ocean/framework.rst
@@ -57,12 +57,14 @@ thickness, grounded and floating land-ice masks, etc.) to the MPAS mesh. This
step is controlled by config options described in
:ref:`ocean_remap_topography`.
-The step uses the `pyremap `_
-package to call
+By default, the step creates a partitioned SCRIP file and generates a mapping
+file using the `tempest `_
+and `MOAB `_
+tools. It can optionally use ESMF's
`ESMF_RegridWeightGen `_
-to generate a mapping file, then it uses
+tool to generate a mapping files. In either case, the step then uses
`ncremap `_
-to perform remapping to the MPAS mesh. Then, it renames the
+to perform remapping to the MPAS mesh. Finally, it renames the
topography variables to the following names, expected in MPAS-Ocean's init mode
for the global ocean:
diff --git a/docs/users_guide/ocean/framework/mesh.rst b/docs/users_guide/ocean/framework/mesh.rst
index 097e59ba8e..778e5d548f 100644
--- a/docs/users_guide/ocean/framework/mesh.rst
+++ b/docs/users_guide/ocean/framework/mesh.rst
@@ -24,46 +24,81 @@ controlled by the following config options:
[remap_topography]
# the name of the topography file in the bathymetry database
- topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_0.0125_degree_20230831.nc
-
- # variable names in topo_filename
- lon_var = lon
- lat_var = lat
- bathymetry_var = bathymetry
- ice_draft_var = ice_draft
- ice_thickness_var = thickness
- ice_frac_var = ice_mask
- grounded_ice_frac_var = grounded_mask
- ocean_frac_var = ocean_mask
+ topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250110.nc
+ src_scrip_filename = ne3000_20250110.scrip.nc
+
+ # weight generator function:
+ # `tempest` for cubed-sphere bathy or `esmf` for latlon bathy
+ weight_generator = tempest
# the description to include in metadata
description = Bathymetry is from GEBCO 2023, combined with BedMachine
Antarctica v3 around Antarctica.
# the target and minimum number of MPI tasks to use in remapping
- ntasks = 4096
- min_tasks = 360
+ ntasks = 1280
+ min_tasks = 256
# remapping method {'bilinear', 'neareststod', 'conserve'}
+ # must use 'conserve' for tempestremap
method = conserve
-The topography filename should be something from the ocean
+ # threshold of what fraction of an MPAS cell must contain ocean in order to
+ # perform renormalization of elevation variables
+ renorm_threshold = 0.01
+
+ # the density of land ice from MALI (kg/m^3)
+ ice_density = 910.0
+
+ # smoothing parameters
+ # no smoothing (required for esmf):
+ # expandDist = 0 [m]
+ # expandFactor = 1 [cell fraction]
+ expandDist = 0
+ expandFactor = 1
+
+The topography and source SCRIP filenames should be something from the ocean
`bathymetry database `_.
+The default is a ~1 km (ne3000 cubed sphere grid) dataset.
-The various variable names are designed to provide flexibility in case a given
-topography file used different variable names tha the defaults provided above.
+The ``weight_generator`` is the software used to generate weight files that
+map between the original topography dataset and the MPAS mesh. The ``tempest``
+approach uses MOAB's ``mbtempest`` tool to generate conservative weights in
+parallel. This is the recommended approach because it is faster and more
+reliable in our experience than the ``esmf`` software. However ESMF allows
+more remapping methods and supports latitude-longitude bathymetry datasets.
The ``description`` config option is passed on as part of the mesh metadata in
global ocean files.
The target and minimum number of MPI tasks (``ntasks`` and ``min_tasks``,
respectively) will depend on the resolution of the topography file. The
-default file is at 1/80 of a degree and typically requires at least 360 tasks
-to successfully remap the data even to relatively coarse MPAS meshes. Coarser
-bathymetry datasets can likely get away with far fewer MPI tasks. The method
-used for remapping (``conserve`` by default) also makes a difference in how
+default file is at ~1 km (ne3000 cubed sphere grid) and typically requires at
+least 256 tasks to successfully remap the data even to relatively coarse MPAS
+meshes. Coarser bathymetry datasets can get away with far fewer MPI tasks.
+The method used for remapping (``conserve`` by default) also makes a difference in how
many tasks are required.
+Coarse meshes can get away with a coarser topography dataset that speeds up
+the topography-remapping process. Config options related to coarser topography
+are the following:
+
+.. code-block:: cfg
+
+ # config options related to remapping topography to an MPAS-Ocean mesh
+ [remap_topography]
+
+ # the name of the topography file in the bathymetry database
+ topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne120_20250110.nc
+ src_scrip_filename = ne120_20250110.scrip.nc
+
+ # the target and minimum number of MPI tasks to use in remapping
+ ntasks = 64
+ min_tasks = 4
+
+The ne120 topography dataset has a resolution of ~25 km (sufficient for MPAS
+meshes with 240 km resolution) and requires far fewer processers to remap.
+
Culling land cells
------------------
diff --git a/docs/users_guide/ocean/test_groups/global_ocean.rst b/docs/users_guide/ocean/test_groups/global_ocean.rst
index 7ca1785b9d..94be78db92 100644
--- a/docs/users_guide/ocean/test_groups/global_ocean.rst
+++ b/docs/users_guide/ocean/test_groups/global_ocean.rst
@@ -476,7 +476,7 @@ The mesh has 12-km resolution around Antarctica and 30-km resolution elsewhere.
The mesh includes the :ref:`global_ocean_ice_shelf_cavities` around Antarctica
in the ocean domain.
-.. image:: images/sowisc12to30.png
+.. image:: images/sowisc12to60.png
:width: 500 px
:align: center