← back to index

config_src/infra/FMS2/MOM_ensemble_manager_infra.F90

portedportable, not yet portedexecuted, not portableexecutable, not hit by this run

1! This file is part of MOM6, the Modular Ocean Model version 6.
2! See the LICENSE file for licensing information.
3! SPDX-License-Identifier: Apache-2.0
4
5!> A simple (very thin) wrapper for managing ensemble member layout information
6module MOM_ensemble_manager_infra
7
8use ensemble_manager_mod, only : FMS_ensemble_manager_init => ensemble_manager_init
9use ensemble_manager_mod, only : FMS_ensemble_pelist_setup => ensemble_pelist_setup
10use ensemble_manager_mod, only : FMS_get_ensemble_id => get_ensemble_id
11use ensemble_manager_mod, only : FMS_get_ensemble_size => get_ensemble_size
12use ensemble_manager_mod, only : FMS_get_ensemble_pelist => get_ensemble_pelist
13use ensemble_manager_mod, only : FMS_get_ensemble_filter_pelist => get_ensemble_filter_pelist
14use fms2_io_mod, only : fms2_io_set_filename_appendix=>set_filename_appendix
15
16implicit none ; private
17
18public :: ensemble_manager_init, ensemble_pelist_setup
19public :: get_ensemble_id, get_ensemble_size
20public :: get_ensemble_pelist, get_ensemble_filter_pelist
21
22contains
23
24!> Initializes the ensemble manager which divides available resources
25!! in order to concurrently execute an ensemble of model realizations.
261subroutine ensemble_manager_init(ensemble_suffix)
27 character(len=*), optional, intent(in) :: ensemble_suffix !> Ensemble suffix provided by the cap. This may be
28 !! provided to bypass FMS ensemble manager.
29
301 if (present(ensemble_suffix)) then
310 call fms2_io_set_filename_appendix(trim(ensemble_suffix))
32 else
331 call FMS_ensemble_manager_init()
34 endif
35
361end subroutine ensemble_manager_init
37
38!> Create a list of processing elements (PEs) across components
39!! associated with the current ensemble member.
400subroutine ensemble_pelist_setup(concurrent, atmos_npes, ocean_npes, land_npes, ice_npes, &
410 Atm_pelist, Ocean_pelist, Land_pelist, Ice_pelist)
42 logical, intent(in) :: concurrent !< A logical flag, if True, then ocean fast
43 !! PEs are run concurrently with
44 !! slow PEs within the coupler.
45 integer, intent(in) :: atmos_npes !< The number of atmospheric (fast) PEs
46 integer, intent(in) :: ocean_npes !< The number of ocean (slow) PEs
47 integer, intent(in) :: land_npes !< The number of land PEs (fast)
48 integer, intent(in) :: ice_npes !< The number of ice (fast) PEs
49 integer, dimension(:), intent(inout) :: Atm_pelist !< A list of Atm PEs
50 integer, dimension(:), intent(inout) :: Ocean_pelist !< A list of Ocean PEs
51 integer, dimension(:), intent(inout) :: Land_pelist !< A list of Land PEs
52 integer, dimension(:), intent(inout) :: Ice_pelist !< A list of Ice PEs
53
54
55 call FMS_ensemble_pelist_setup(concurrent, atmos_npes, ocean_npes, land_npes, ice_npes, &
560 Atm_pelist, Ocean_pelist, Land_pelist, Ice_pelist)
57
580end subroutine ensemble_pelist_setup
59
60!> Returns the numeric id for the current ensemble member
610function get_ensemble_id()
62 integer :: get_ensemble_id
63
640 get_ensemble_id = FMS_get_ensemble_id()
65
660end function get_ensemble_id
67
68!> Returns ensemble information as follows,
69!! index (1) :: ensemble size
70!! index (2) :: Number of PEs per ensemble member
71!! index (3) :: Number of ocean PEs per ensemble member
72!! index (4) :: Number of atmos PEs per ensemble member
73!! index (5) :: Number of land PEs per ensemble member
74!! index (6) :: Number of ice PEs per ensemble member
751function get_ensemble_size()
76 integer, dimension(6) :: get_ensemble_size
77
781 get_ensemble_size = FMS_get_ensemble_size()
79
80end function get_ensemble_size
81
82!> Returns the list of PEs associated with all ensemble members
83!! Results are stored in the argument array which must be large
84!! enough to contain the list. If the optional name argument is present,
85!! the returned processor list are for a particular component (atmos, ocean ,land, ice)
860subroutine get_ensemble_pelist(pelist, name)
87 integer, intent(inout) :: pelist(:,:) !< A processor list for all ensemble members
88 character(len=*), optional, intent(in) :: name !< An optional component name (atmos, ocean, land, ice)
89
900 call FMS_get_ensemble_pelist(pelist, name)
91
920end subroutine get_ensemble_pelist
93
94!> Returns the list of PEs associated with the named ensemble filter application.
95!! Valid component names include ('atmos', 'ocean', 'land', and 'ice')
960subroutine get_ensemble_filter_pelist(pelist, name)
97 integer, intent(inout) :: pelist(:) !< A processor list for the ensemble filter
98 character(len=*), intent(in) :: name !< The component name (atmos, ocean, land, ice)
99
1000 call FMS_get_Ensemble_filter_pelist(pelist, name)
101
1020end subroutine get_ensemble_filter_pelist
103
104end module MOM_ensemble_manager_infra