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