Skip to content

Commit

Permalink
Deprecate nprocs, and better estimate for max_blocks if not set in ic…
Browse files Browse the repository at this point in the history
…e_in

Co-authored-by: minghangli-uni <[email protected]>
  • Loading branch information
anton-seaice and minghangli-uni committed Apr 30, 2024
1 parent d6813d6 commit b176bf5
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 2 deletions.
5 changes: 3 additions & 2 deletions CICE/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ target_sources(OM3_cice PRIVATE
CICE/cicecore/shared/ice_arrays_column.F90
CICE/cicecore/shared/ice_calendar.F90
CICE/cicecore/shared/ice_constants.F90
CICE/cicecore/shared/ice_distribution.F90
CICE/cicecore/shared/ice_domain_size.F90
CICE/cicecore/shared/ice_fileunits.F90
CICE/cicecore/shared/ice_init_column.F90
Expand Down Expand Up @@ -68,7 +67,6 @@ target_sources(OM3_cice PRIVATE

# Infrastructure
CICE/cicecore/cicedyn/infrastructure/ice_blocks.F90
CICE/cicecore/cicedyn/infrastructure/ice_domain.F90
CICE/cicecore/cicedyn/infrastructure/ice_grid.F90
CICE/cicecore/cicedyn/infrastructure/ice_memusage.F90
CICE/cicecore/cicedyn/infrastructure/ice_memusage_gptl.c
Expand Down Expand Up @@ -155,6 +153,9 @@ elseif(OM3_CICE_IO MATCHES "Binary")
)
endif()

add_patched_source(OM3_cice CICE/cicecore/cicedyn/infrastructure/ice_domain.F90)
add_patched_source(OM3_cice CICE/cicecore/shared/ice_distribution.F90)

### Install and Export

## Library
Expand Down
16 changes: 16 additions & 0 deletions CICE/patches/ice_distribution.F90.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/cicecore/shared/ice_distribution.F90 b/cicecore/shared/ice_distribution.F90
old mode 100644
new mode 100755
index 0f3f6c1..6e06069
--- a/cicecore/shared/ice_distribution.F90
+++ b/cicecore/shared/ice_distribution.F90
@@ -41,7 +41,8 @@ module ice_distribution
ice_distributionGet, &
ice_distributionGetBlockLoc, &
ice_distributionGetBlockID, &
- create_local_block_ids
+ create_local_block_ids, &
+ proc_decomposition

character (char_len), public :: &
processor_shape ! 'square-pop' (approx) POP default config
71 changes: 71 additions & 0 deletions CICE/patches/ice_domain.F90.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
diff --git a/cicecore/cicedyn/infrastructure/ice_domain.F90 b/cicecore/cicedyn/infrastructure/ice_domain.F90
index 8b680f2..cf13fcc 100644
--- a/cicecore/cicedyn/infrastructure/ice_domain.F90
+++ b/cicecore/cicedyn/infrastructure/ice_domain.F90
@@ -88,7 +88,7 @@ module ice_domain
distribution_wght_file ! file for distribution_wght=file

integer (int_kind) :: &
- nprocs ! num of processors
+ nprocs, nprocs_x, nprocs_y ! num of processors

!***********************************************************************

@@ -101,7 +101,7 @@ subroutine init_domain_blocks
! This routine reads in domain information and calls the routine
! to set up the block decomposition.

- use ice_distribution, only: processor_shape
+ use ice_distribution, only: processor_shape, proc_decomposition
use ice_domain_size, only: ncat, nilyr, nslyr, max_blocks, &
nx_global, ny_global, block_size_x, block_size_y
use ice_fileunits, only: goto_nml
@@ -204,6 +204,14 @@ subroutine init_domain_blocks

endif

+ if (nprocs .ne. -1) then
+ if (my_task == master_task) then
+ write(nu_diag,*) subname//' WARNING: nprocs is deprecated, please remove from namelist'
+ endif
+ endif
+
+ nprocs = get_num_procs()
+
call broadcast_scalar(nprocs, master_task)
call broadcast_scalar(processor_shape, master_task)
call broadcast_scalar(distribution_type, master_task)
@@ -216,10 +224,14 @@ subroutine init_domain_blocks
call broadcast_scalar(maskhalo_bound, master_task)
call broadcast_scalar(add_mpi_barriers, master_task)
call broadcast_scalar(debug_blocks, master_task)
+
+ ! update nprocs_x and nprocs_y
+ call proc_decomposition(nprocs, nprocs_x, nprocs_y)
+ ! set max_blocks
if (my_task == master_task) then
if (max_blocks < 1) then
- max_blocks=( ((nx_global-1)/block_size_x + 1) * &
- ((ny_global-1)/block_size_y + 1) - 1) / nprocs + 1
+ max_blocks=((nx_global-1)/block_size_x/nprocs_x+1) * &
+ ((ny_global-1)/block_size_y/nprocs_y+1)
max_blocks=max(1,max_blocks)
write(nu_diag,'(/,a52,i6,/)') &
'(ice_domain): max_block < 1: max_block estimated to ',max_blocks
@@ -242,16 +254,6 @@ subroutine init_domain_blocks
!*** domain size zero or negative
!***
call abort_ice(subname//' ERROR: Invalid domain: size < 1', file=__FILE__, line=__LINE__) ! no domain
- else if (nprocs /= get_num_procs()) then
- !***
- !*** input nprocs does not match system (eg MPI) request
- !***
-#if (defined CESMCOUPLED)
- nprocs = get_num_procs()
-#else
- write(nu_diag,*) subname,' ERROR: nprocs, get_num_procs = ',nprocs,get_num_procs()
- call abort_ice(subname//' ERROR: Input nprocs not same as system request', file=__FILE__, line=__LINE__)
-#endif
else if (nghost < 1) then
!***
!*** must have at least 1 layer of ghost cells

0 comments on commit b176bf5

Please sign in to comment.