rdb_decomp Module

Pure Fortran, no MPI dependency. Each rank calls decomp_init with its process-grid coordinates to learn its local subdomain size and offsets.


Uses

  • module~~rdb_decomp~~UsesGraph module~rdb_decomp rdb_decomp module~rdb_config rdb_config module~rdb_decomp->module~rdb_config module~rdb_constants rdb_constants module~rdb_config->module~rdb_constants module~rdb_error_ring rdb_error_ring module~rdb_config->module~rdb_error_ring module~rdb_ice_enthalpy rdb_ice_enthalpy module~rdb_config->module~rdb_ice_enthalpy module~rdb_ice_init rdb_ice_init module~rdb_config->module~rdb_ice_init module~rdb_nml_schema rdb_nml_schema module~rdb_config->module~rdb_nml_schema module~rdb_ocean_status rdb_ocean_status module~rdb_config->module~rdb_ocean_status pic_ascii pic_ascii module~rdb_config->pic_ascii pic_logger pic_logger module~rdb_config->pic_logger pic_strings pic_strings module~rdb_config->pic_strings pic_types pic_types module~rdb_constants->pic_types module~rdb_error_ring->pic_logger module~rdb_ice_enthalpy->module~rdb_constants module~rdb_ice_init->module~rdb_constants module~rdb_ice_init->module~rdb_ice_enthalpy module~rdb_grid rdb_grid module~rdb_ice_init->module~rdb_grid module~rdb_ice_column rdb_ice_column module~rdb_ice_init->module~rdb_ice_column module~rdb_ice_state rdb_ice_state module~rdb_ice_init->module~rdb_ice_state module~rdb_multilayer_state rdb_multilayer_state module~rdb_ice_init->module~rdb_multilayer_state module~rdb_ocean_metrics rdb_ocean_metrics module~rdb_ice_init->module~rdb_ocean_metrics module~rdb_nml_schema->module~rdb_constants module~rdb_nml_schema->module~rdb_error_ring module~rdb_nml_schema->pic_logger module~rdb_grid->module~rdb_constants module~rdb_ice_column->module~rdb_constants module~rdb_ice_column->module~rdb_ice_enthalpy module~rdb_ice_mass rdb_ice_mass module~rdb_ice_column->module~rdb_ice_mass module~rdb_ice_optics rdb_ice_optics module~rdb_ice_column->module~rdb_ice_optics module~rdb_ice_state->module~rdb_constants module~rdb_ice_state->module~rdb_ice_enthalpy module~rdb_ice_state->module~rdb_grid module~rdb_ice_state->module~rdb_ice_column iso_fortran_env iso_fortran_env module~rdb_ice_state->iso_fortran_env module~rdb_mem_report rdb_mem_report module~rdb_ice_state->module~rdb_mem_report module~rdb_multilayer_state->module~rdb_constants module~rdb_multilayer_state->module~rdb_error_ring module~rdb_multilayer_state->pic_logger module~rdb_multilayer_state->module~rdb_grid module~rdb_multilayer_state->iso_fortran_env module~rdb_efp rdb_efp module~rdb_multilayer_state->module~rdb_efp module~rdb_multilayer_state->module~rdb_mem_report module~rdb_tracer rdb_tracer module~rdb_multilayer_state->module~rdb_tracer module~rdb_ocean_metrics->module~rdb_constants module~rdb_ocean_metrics->module~rdb_error_ring module~rdb_ocean_metrics->module~rdb_ocean_status module~rdb_ocean_metrics->pic_logger module~rdb_ocean_metrics->pic_strings module~rdb_ocean_metrics->module~rdb_grid module~rdb_ocean_metrics->iso_fortran_env module~rdb_io_netcdf rdb_io_netcdf module~rdb_ocean_metrics->module~rdb_io_netcdf module~rdb_ocean_metrics->module~rdb_mem_report module~rdb_ocean_bipolar rdb_ocean_bipolar module~rdb_ocean_metrics->module~rdb_ocean_bipolar module~rdb_ocean_fold rdb_ocean_fold module~rdb_ocean_metrics->module~rdb_ocean_fold netcdf netcdf module~rdb_ocean_metrics->netcdf module~rdb_efp->iso_fortran_env ieee_arithmetic ieee_arithmetic module~rdb_efp->ieee_arithmetic module~rdb_ice_mass->module~rdb_constants module~rdb_ice_mass->module~rdb_ice_enthalpy module~rdb_ice_optics->module~rdb_constants module~rdb_ice_optics->module~rdb_ice_enthalpy module~rdb_io_netcdf->module~rdb_constants module~rdb_io_netcdf->module~rdb_error_ring module~rdb_io_netcdf->pic_logger module~rdb_io_netcdf->pic_strings module~rdb_io_netcdf->iso_fortran_env module~rdb_io_netcdf->netcdf iso_c_binding iso_c_binding module~rdb_io_netcdf->iso_c_binding module~rdb_mem_report->module~rdb_constants module~rdb_mem_report->pic_logger module~rdb_mem_report->pic_strings module~rdb_mem_report->iso_fortran_env module~rdb_ocean_bipolar->module~rdb_constants module~rdb_ocean_fold->module~rdb_constants module~rdb_tracer->module~rdb_constants module~rdb_tracer->module~rdb_grid module~rdb_tracer->iso_fortran_env module~rdb_tracer->module~rdb_mem_report

Used by

  • module~~rdb_decomp~~UsedByGraph module~rdb_decomp rdb_decomp module~rdb_halo rdb_halo module~rdb_halo->module~rdb_decomp module~rdb_ocean_engine rdb_ocean_engine module~rdb_ocean_engine->module~rdb_decomp module~rdb_ocean_engine->module~rdb_halo module~rdb_ocean_fold_exchange rdb_ocean_fold_exchange module~rdb_ocean_engine->module~rdb_ocean_fold_exchange module~rdb_ocean_halo rdb_ocean_halo module~rdb_ocean_engine->module~rdb_ocean_halo module~rdb_ocean_setup rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_setup module~rdb_ocean_state rdb_ocean_state module~rdb_ocean_engine->module~rdb_ocean_state module~rdb_ice_evp rdb_ice_evp module~rdb_ocean_engine->module~rdb_ice_evp module~rdb_ice_transport rdb_ice_transport module~rdb_ocean_engine->module~rdb_ice_transport module~rdb_ocean_diag_derived rdb_ocean_diag_derived module~rdb_ocean_engine->module~rdb_ocean_diag_derived module~rdb_ocean_diag_fills rdb_ocean_diag_fills module~rdb_ocean_engine->module~rdb_ocean_diag_fills module~rdb_ocean_dyn rdb_ocean_dyn module~rdb_ocean_engine->module~rdb_ocean_dyn module~rdb_ocean_fold_apply rdb_ocean_fold_apply module~rdb_ocean_engine->module~rdb_ocean_fold_apply module~rdb_ocean_halo_state rdb_ocean_halo_state module~rdb_ocean_engine->module~rdb_ocean_halo_state module~rdb_ice_ocean_coupler rdb_ice_ocean_coupler module~rdb_ocean_engine->module~rdb_ice_ocean_coupler module~rdb_ocean_data_forcing rdb_ocean_data_forcing module~rdb_ocean_engine->module~rdb_ocean_data_forcing module~rdb_ocean_fold_exchange->module~rdb_decomp module~rdb_ocean_halo->module~rdb_decomp module~rdb_ocean_restart_io rdb_ocean_restart_io module~rdb_ocean_restart_io->module~rdb_decomp module~rdb_ocean_setup->module~rdb_decomp module~rdb_ocean_setup->module~rdb_halo module~rdb_ocean_setup->module~rdb_ocean_fold_exchange module~rdb_ocean_setup->module~rdb_ocean_halo module~rdb_ocean_setup->module~rdb_ocean_state module~rdb_ocean_setup->module~rdb_ocean_dyn module~rdb_ocean_setup->module~rdb_ocean_fold_apply module~rdb_ocean_setup->module~rdb_ocean_halo_state module~rdb_ocean_state->module~rdb_decomp module~rdb_ocean_state->module~rdb_ocean_restart_io module~rdb_continuity rdb_continuity module~rdb_ocean_state->module~rdb_continuity module~rdb_ocean_state->module~rdb_ocean_dyn module~rdb_ocean_state->module~rdb_ocean_data_forcing module~rdb_barotropic_substep rdb_barotropic_substep module~rdb_barotropic_substep->module~rdb_ocean_fold_exchange module~rdb_barotropic_substep->module~rdb_ocean_halo module~rdb_continuity->module~rdb_ocean_fold_exchange module~rdb_continuity->module~rdb_ocean_halo module~rdb_continuity->module~rdb_ocean_fold_apply module~rdb_driver rdb_driver module~rdb_driver->module~rdb_halo module~rdb_driver->module~rdb_ocean_engine module~rdb_driver->module~rdb_ocean_state module~rdb_ocean_console_stats rdb_ocean_console_stats module~rdb_driver->module~rdb_ocean_console_stats module~rdb_driver->module~rdb_ocean_dyn module~rdb_handle rdb_handle module~rdb_handle->module~rdb_ocean_engine module~rdb_handle->module~rdb_ocean_state module~rdb_ice_evp->module~rdb_ocean_halo module~rdb_ice_transport->module~rdb_halo module~rdb_ice_transport->module~rdb_ocean_halo module~rdb_ice_transport->module~rdb_continuity module~rdb_ice_transport->module~rdb_ocean_halo_state module~rdb_ocean_api rdb_ocean_api module~rdb_ocean_api->module~rdb_ocean_engine module~rdb_ocean_api->module~rdb_handle module~rdb_ocean_api->module~rdb_ocean_diag_derived module~rdb_ocean_api->module~rdb_ocean_diag_fills module~rdb_ocean_api->module~rdb_ocean_dyn module~rdb_ocean_api->module~rdb_ocean_fold_apply module~rdb_ocean_bt_wide rdb_ocean_bt_wide module~rdb_ocean_bt_wide->module~rdb_ocean_halo module~rdb_ocean_bt_wide->module~rdb_barotropic_substep module~rdb_ocean_chksum rdb_ocean_chksum module~rdb_ocean_chksum->module~rdb_halo module~rdb_ocean_console_stats->module~rdb_halo module~rdb_ocean_diag_derived->module~rdb_ocean_state module~rdb_ocean_diag_derived->module~rdb_ocean_diag_fills module~rdb_ocean_diag_fills->module~rdb_ocean_state module~rdb_ocean_dyn->module~rdb_ocean_halo module~rdb_ocean_dyn->module~rdb_barotropic_substep module~rdb_ocean_dyn->module~rdb_continuity module~rdb_ocean_dyn->module~rdb_ocean_bt_wide module~rdb_ocean_dyn->module~rdb_ocean_chksum module~rdb_ocean_dyn->module~rdb_ocean_console_stats module~rdb_ocean_dyn->module~rdb_ocean_fold_apply module~rdb_ocean_dyn->module~rdb_ocean_halo_state module~rdb_ocean_fold_apply->module~rdb_ocean_fold_exchange module~rdb_ocean_halo_state->module~rdb_ocean_halo module~rdb_ocean_halo_state->module~rdb_ocean_fold_apply proc~ocean_cavity_mass_step ocean_cavity_mass_step proc~ocean_cavity_mass_step->module~rdb_halo module~rdb_ice_ocean_coupler->module~rdb_ocean_halo_state module~rdb_ocean_data_forcing->module~rdb_ocean_halo_state

Derived Types

type, public ::  decomp_t

Domain decomposition descriptor

Components

Type Visibility Attributes Name Initial
logical, public :: has_east = .true.

True if this rank is on the east domain boundary

logical, public :: has_north = .true.

True if this rank is on the north domain boundary

logical, public :: has_south = .true.

True if this rank is on the south domain boundary

logical, public :: has_west = .true.

True if this rank is on the west domain boundary

integer, public :: i_start = 1

Global i-index of this rank’s first physical cell (1-based)

integer, public :: j_start = 1

Global j-index of this rank’s first physical cell (1-based)

integer, public :: nx_global = 0

Global physical cells in x

integer, public :: nx_local = 0

Local physical cells in x for this rank

integer, public :: ny_global = 0

Global physical cells in y

integer, public :: ny_local = 0

Local physical cells in y for this rank

integer, public :: px = 1

Number of processes in x-direction

integer, public :: py = 1

Number of processes in y-direction

integer, public :: rx = 0

This rank’s x-coordinate in the process grid (0-based)

integer, public :: ry = 0

This rank’s y-coordinate in the process grid (0-based)


Functions

public pure function decomp_rank_from_coords(px, rx, ry) result(rank)

Compute rank from process grid coordinates (row-major)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: px

Process grid size in x

integer, intent(in) :: rx

x-coordinate (0-based)

integer, intent(in) :: ry

y-coordinate (0-based)

Return Value integer


Subroutines

public pure subroutine decomp_auto_factor(nprocs, nx, ny, px, py)

Choose px, py to minimise halo communication cost

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nprocs

Total number of MPI ranks

integer, intent(in) :: nx

Global physical cells in x

integer, intent(in) :: ny

Global physical cells in y

integer, intent(out) :: px

Chosen process grid size in x

integer, intent(out) :: py

Chosen process grid size in y

public pure subroutine decomp_global_to_local(d, ig, jg, il, jl)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules. Convert global physical indices to local physical indices

Arguments

Type IntentOptional Attributes Name
type(decomp_t), intent(in) :: d
integer, intent(in) :: ig

Global i-index (1-based, physical cells)

integer, intent(in) :: jg

Global j-index (1-based, physical cells)

integer, intent(out) :: il

Local i-index (1-based, physical cells)

integer, intent(out) :: jl

Local j-index (1-based, physical cells)

public subroutine decomp_init(d, nx_global, ny_global, px, py, rank)

Initialise decomposition for a given rank

Read more…

Arguments

Type IntentOptional Attributes Name
type(decomp_t), intent(out) :: d

Decomposition descriptor to populate

integer, intent(in) :: nx_global

Total physical cells in x

integer, intent(in) :: ny_global

Total physical cells in y

integer, intent(in) :: px

Process grid size in x

integer, intent(in) :: py

Process grid size in y

integer, intent(in) :: rank

MPI rank (0-based)

public subroutine decomp_init_from_config(d, cfg, nprocs, rank)

Initialise decomposition from config, with optional auto-factoring

Read more…

Arguments

Type IntentOptional Attributes Name
type(decomp_t), intent(out) :: d

Decomposition descriptor to populate

type(config_t), intent(inout) :: cfg

Configuration (px, py may be updated)

integer, intent(in) :: nprocs

Total number of MPI ranks

integer, intent(in) :: rank

This MPI rank (0-based)

public pure subroutine decomp_local_to_global(d, il, jl, ig, jg)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules. Convert local physical indices to global physical indices

Arguments

Type IntentOptional Attributes Name
type(decomp_t), intent(in) :: d
integer, intent(in) :: il

Local i-index (1-based, physical cells)

integer, intent(in) :: jl

Local j-index (1-based, physical cells)

integer, intent(out) :: ig

Global i-index (1-based, physical cells)

integer, intent(out) :: jg

Global j-index (1-based, physical cells)

public subroutine decomp_log_summary(d, nprocs)

Log the process grid + this rank’s subdomain shape. Call from rank 0 after decomp_init_from_config so a run’s decomposition is visible at startup (the halo perimeter is what auto_factor minimises, printed here as the per-rank interior:ghost ratio cue).

Arguments

Type IntentOptional Attributes Name
type(decomp_t), intent(in) :: d
integer, intent(in) :: nprocs

Total compute ranks (px*py)