@@ -49,6 +49,26 @@ module ensemble_manager_mod
4949
5050 integer :: ensemble_size = 1
5151 integer :: ensemble_id = 1
52+ ! > @brief Starting index for ensemble numbering in I/O filenames.
53+ ! !
54+ ! ! Defines an offset applied to the local ensemble_id when constructing
55+ ! ! filename appendices via fms2_io_set_filename_appendix.
56+ ! !
57+ ! ! The effective ensemble index used in filenames is:
58+ ! ! global_ens = starting_ensemble_id + ensemble_id - 1
59+ ! !
60+ ! ! For example:
61+ ! ! ensemble_size = 2
62+ ! ! starting_ensemble_id = 10
63+ ! ! results in filenames using ens_10 and ens_11.
64+ ! !
65+ ! ! @note This parameter affects only I/O filename construction (e.g.,
66+ ! ! restart and diagnostic files). It does not affect ensemble-specific
67+ ! ! input selection such as data_override, which uses explicit filenames
68+ ! ! or data_table.ens_XX.yaml.
69+ ! !
70+ ! ! @default 1
71+ integer :: starting_ensemble_id = 1
5272 integer :: pe, total_npes_pm= 0 ,ocean_npes_pm= 0 ,atmos_npes_pm= 0
5373 integer :: land_npes_pm= 0 ,ice_npes_pm= 0
5474
@@ -75,7 +95,11 @@ subroutine ensemble_manager_init()
7595
7696 integer :: i, io_status, npes, ierr
7797
78- namelist / ensemble_nml/ ensemble_size
98+ ! > @namelist ensemble_nml
99+ ! ! @param ensemble_size Number of ensemble members.
100+ ! ! @param starting_ensemble_id Offset applied to ensemble_id when
101+ ! ! constructing I/O filename appendices.
102+ namelist / ensemble_nml/ ensemble_size, starting_ensemble_id
79103
80104 read (input_nml_file, ensemble_nml, iostat= io_status)
81105 ierr = check_nml_error(io_status, ' ensemble_nml' )
@@ -85,6 +109,8 @@ subroutine ensemble_manager_init()
85109 if (ensemble_size > max_ensemble_size) call mpp_error(FATAL, &
86110 ' ensemble_manager_mod: ensemble_nml variable ensemble_size should be no larger than MAX_ENSEMBLE_SIZE, ' // &
87111 ' change ensemble_size or increase MAX_ENSEMBLE_SIZE' )
112+ if (starting_ensemble_id < 1 ) call mpp_error(FATAL, &
113+ ' ensemble_manager_mod: ensemble_nml variable starting_ensemble_id must be a positive integer' )
88114
89115 pe = mpp_pe()
90116 npes = mpp_npes()
@@ -238,7 +264,7 @@ subroutine ensemble_pelist_setup(concurrent, atmos_npes, ocean_npes, land_npes,
238264 integer :: atmos_pe_start, atmos_pe_end, ocean_pe_start, ocean_pe_end
239265 integer :: land_pe_start, land_pe_end, ice_pe_start, ice_pe_end
240266 character (len= 10 ) :: pelist_name, text
241- integer :: npes, n, m ,i
267+ integer :: npes, n, m ,i, global_ens
242268
243269 npes = total_npes_pm
244270
@@ -401,7 +427,8 @@ subroutine ensemble_pelist_setup(concurrent, atmos_npes, ocean_npes, land_npes,
401427 ! can be used for non-ensemble experiments
402428 !
403429 if (ensemble_size > 1 ) then
404- write ( text,' (a,i2.2)' ) ' ens_' , ensemble_id
430+ global_ens = starting_ensemble_id + ensemble_id - 1
431+ write ( text,' (a,i2.2)' ) ' ens_' , global_ens
405432 ! Append ensemble_id to the restart filenames
406433 call fms2_io_set_filename_appendix(trim (text))
407434 endif
0 commit comments