From 7167d7ae0a60bcd2b930be5c711b3564e23c7186 Mon Sep 17 00:00:00 2001 From: Andrew Brooks Date: Thu, 12 Feb 2026 08:30:50 -0500 Subject: [PATCH 1/2] Add starting_ensemble_id namelist option --- coupler/ensemble_manager.F90 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/coupler/ensemble_manager.F90 b/coupler/ensemble_manager.F90 index e31105ddb8..a5d771e8dd 100644 --- a/coupler/ensemble_manager.F90 +++ b/coupler/ensemble_manager.F90 @@ -49,6 +49,7 @@ module ensemble_manager_mod integer :: ensemble_size = 1 integer :: ensemble_id = 1 + integer :: starting_ensemble_id = 1 integer :: pe, total_npes_pm=0,ocean_npes_pm=0,atmos_npes_pm=0 integer :: land_npes_pm=0,ice_npes_pm=0 @@ -75,7 +76,7 @@ subroutine ensemble_manager_init() integer :: i, io_status, npes, ierr - namelist /ensemble_nml/ ensemble_size + namelist /ensemble_nml/ ensemble_size, starting_ensemble_id read (input_nml_file, ensemble_nml, iostat=io_status) ierr = check_nml_error(io_status, 'ensemble_nml') @@ -85,6 +86,8 @@ subroutine ensemble_manager_init() if(ensemble_size > max_ensemble_size) call mpp_error(FATAL, & 'ensemble_manager_mod: ensemble_nml variable ensemble_size should be no larger than MAX_ENSEMBLE_SIZE, '// & 'change ensemble_size or increase MAX_ENSEMBLE_SIZE') + if(starting_ensemble_id < 1) call mpp_error(FATAL, & + 'ensemble_manager_mod: ensemble_nml variable starting_ensemble_id must be a positive integer') pe = mpp_pe() npes = mpp_npes() @@ -238,7 +241,7 @@ subroutine ensemble_pelist_setup(concurrent, atmos_npes, ocean_npes, land_npes, integer :: atmos_pe_start, atmos_pe_end, ocean_pe_start, ocean_pe_end integer :: land_pe_start, land_pe_end, ice_pe_start, ice_pe_end character(len=10) :: pelist_name, text - integer :: npes, n, m ,i + integer :: npes, n, m ,i, global_ens npes = total_npes_pm @@ -401,7 +404,8 @@ subroutine ensemble_pelist_setup(concurrent, atmos_npes, ocean_npes, land_npes, !can be used for non-ensemble experiments ! if (ensemble_size > 1) then - write( text,'(a,i2.2)' ) 'ens_', ensemble_id + global_ens = starting_ensemble_id + ensemble_id - 1 + write( text,'(a,i2.2)' ) 'ens_', global_ens !Append ensemble_id to the restart filenames call fms2_io_set_filename_appendix(trim(text)) endif From 68d4772d6a144a7d9d739875765ecbf4c98a31ab Mon Sep 17 00:00:00 2001 From: Andrew Brooks Date: Thu, 19 Mar 2026 11:37:23 -0400 Subject: [PATCH 2/2] Added documentation --- coupler/ensemble_manager.F90 | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/coupler/ensemble_manager.F90 b/coupler/ensemble_manager.F90 index a5d771e8dd..1057804cae 100644 --- a/coupler/ensemble_manager.F90 +++ b/coupler/ensemble_manager.F90 @@ -49,6 +49,25 @@ module ensemble_manager_mod integer :: ensemble_size = 1 integer :: ensemble_id = 1 +!> @brief Starting index for ensemble numbering in I/O filenames. +!! +!! Defines an offset applied to the local ensemble_id when constructing +!! filename appendices via fms2_io_set_filename_appendix. +!! +!! The effective ensemble index used in filenames is: +!! global_ens = starting_ensemble_id + ensemble_id - 1 +!! +!! For example: +!! ensemble_size = 2 +!! starting_ensemble_id = 10 +!! results in filenames using ens_10 and ens_11. +!! +!! @note This parameter affects only I/O filename construction (e.g., +!! restart and diagnostic files). It does not affect ensemble-specific +!! input selection such as data_override, which uses explicit filenames +!! or data_table.ens_XX.yaml. +!! +!! @default 1 integer :: starting_ensemble_id = 1 integer :: pe, total_npes_pm=0,ocean_npes_pm=0,atmos_npes_pm=0 integer :: land_npes_pm=0,ice_npes_pm=0 @@ -76,6 +95,10 @@ subroutine ensemble_manager_init() integer :: i, io_status, npes, ierr + !> @namelist ensemble_nml + !! @param ensemble_size Number of ensemble members. + !! @param starting_ensemble_id Offset applied to ensemble_id when + !! constructing I/O filename appendices. namelist /ensemble_nml/ ensemble_size, starting_ensemble_id read (input_nml_file, ensemble_nml, iostat=io_status)