diff --git a/driver_cpl/bld/build-namelist b/driver_cpl/bld/build-namelist index f98787b45f2..8fce092e6f4 100755 --- a/driver_cpl/bld/build-namelist +++ b/driver_cpl/bld/build-namelist @@ -758,9 +758,12 @@ add_default($nl, 'pio_buffer_size_limit'); if($opts{pio_version} == 1){ add_default($nl, 'pio_rearr_comm_type', 'PIO_REARR_COMM_TYPE'=>"$xmlvars{'PIO_REARR_COMM_TYPE'}"); add_default($nl, 'pio_rearr_comm_fcd', 'PIO_REARR_COMM_FCD'=>"$xmlvars{'PIO_REARR_COMM_FCD'}"); - add_default($nl, 'pio_rearr_comm_max_pend_req', 'PIO_REARR_COMM_MAX_PEND_REQ'=>"$xmlvars{'PIO_REARR_COMM_MAX_PEND_REQ'}"); - add_default($nl, 'pio_rearr_comm_enable_hs', 'PIO_REARR_COMM_ENABLE_HS'=>"$xmlvars{'PIO_REARR_COMM_ENABLE_HS'}"); - add_default($nl, 'pio_rearr_comm_enable_isend', 'PIO_REARR_COMM_ENABLE_ISEND'=>"$xmlvars{'PIO_REARR_COMM_ENABLE_ISEND'}"); + add_default($nl, 'pio_rearr_comm_max_pend_req_comp2io', 'PIO_REARR_COMM_MAX_PEND_REQ_COMP2IO'=>"$xmlvars{'PIO_REARR_COMM_MAX_PEND_REQ_COMP2IO'}"); + add_default($nl, 'pio_rearr_comm_enable_hs_comp2io', 'PIO_REARR_COMM_ENABLE_HS_COMP2IO'=>"$xmlvars{'PIO_REARR_COMM_ENABLE_HS_COMP2IO'}"); + add_default($nl, 'pio_rearr_comm_enable_isend_comp2io', 'PIO_REARR_COMM_ENABLE_ISEND_COMP2IO'=>"$xmlvars{'PIO_REARR_COMM_ENABLE_ISEND_COMP2IO'}"); + add_default($nl, 'pio_rearr_comm_max_pend_req_io2comp', 'PIO_REARR_COMM_MAX_PEND_REQ_IO2COMP'=>"$xmlvars{'PIO_REARR_COMM_MAX_PEND_REQ_IO2COMP'}"); + add_default($nl, 'pio_rearr_comm_enable_hs_io2comp', 'PIO_REARR_COMM_ENABLE_HS_IO2COMP'=>"$xmlvars{'PIO_REARR_COMM_ENABLE_HS_IO2COMP'}"); + add_default($nl, 'pio_rearr_comm_enable_isend_io2comp', 'PIO_REARR_COMM_ENABLE_ISEND_IO2COMP'=>"$xmlvars{'PIO_REARR_COMM_ENABLE_ISEND_IO2COMP'}"); } # Note: pio_async_interface=.true. is not yet supported # If pio_async_interface is .true. or {component}_PIO_* variable is not set or set to -99 diff --git a/driver_cpl/bld/namelist_files/namelist_defaults_drv.xml b/driver_cpl/bld/namelist_files/namelist_defaults_drv.xml index 625ebad5ed4..1f2925388d6 100644 --- a/driver_cpl/bld/namelist_files/namelist_defaults_drv.xml +++ b/driver_cpl/bld/namelist_files/namelist_defaults_drv.xml @@ -180,11 +180,16 @@ .false. $PIO_REARR_COMM_TYPE $PIO_REARR_COMM_FCD -$PIO_REARR_COMM_MAX_PEND_REQ -.true. -.false. -.true. -.false. +$PIO_REARR_COMM_MAX_PEND_REQ_COMP2IO +.true. +.false. +.true. +.false. +$PIO_REARR_COMM_MAX_PEND_REQ_IO2COMP +.true. +.false. +.true. +.false. diff --git a/driver_cpl/bld/namelist_files/namelist_definition_drv.xml b/driver_cpl/bld/namelist_files/namelist_definition_drv.xml index afa43905885..b9ba7f131c7 100644 --- a/driver_cpl/bld/namelist_files/namelist_definition_drv.xml +++ b/driver_cpl/bld/namelist_files/namelist_definition_drv.xml @@ -2116,28 +2116,54 @@ valid values: 2denable,io2comp,comp2io,disable,default -pio rearranger communication max pending req +pio rearranger communication max pending req (comp2io) -pio rearranger communication option: Enable handshake +pio rearranger communication option: Enable handshake (comp2io) default: .true. -pio rearranger communication option: Enable isends +pio rearranger communication option: Enable isends (comp2io) +default: .false. + + + +pio rearranger communication max pending req (io2comp) + + + +pio rearranger communication option: Enable handshake (io2comp) +default: .true. + + + +pio rearranger communication option: Enable isends (io2comp) default: .false. diff --git a/driver_cpl/cime_config/config_component.xml b/driver_cpl/cime_config/config_component.xml index 6528b60a111..fa951fb7134 100644 --- a/driver_cpl/cime_config/config_component.xml +++ b/driver_cpl/cime_config/config_component.xml @@ -2417,31 +2417,60 @@ pio rearranger communication flow control direction - + integer - 64 + 0 run_pio env_run.xml - pio rearranger communication max pending requests + pio rearranger communication max pending requests (comp2io) : 0 implies that CIME internally calculates the value ( = max(64, 2 * PIO_NUMTASKS) ), -1 implies no bound on max pending requests - + logical TRUE,FALSE TRUE run_pio env_run.xml - pio rearranger communiation options: TRUE implies enable handshake + pio rearranger communiation options (comp2io) : TRUE implies enable handshake - + logical TRUE,FALSE FALSE run_pio env_run.xml - pio rearranger communiation options: TRUE implies enable isend + pio rearranger communiation options (comp2io) : TRUE implies enable isend + + + + integer + + 64 + run_pio + env_run.xml + pio rearranger communication max pending requests (io2comp) : -1 implies no bound on max pending requests + + + + + + logical + TRUE,FALSE + FALSE + run_pio + env_run.xml + pio rearranger communiation options (io2comp) : TRUE implies enable handshake + + + + logical + TRUE,FALSE + TRUE + run_pio + env_run.xml + pio rearranger communiation options (io2comp) : TRUE implies enable isend diff --git a/externals/pio1/pio/box_rearrange.F90.in b/externals/pio1/pio/box_rearrange.F90.in index 0423d80a4a6..cf2a87416b3 100644 --- a/externals/pio1/pio/box_rearrange.F90.in +++ b/externals/pio1/pio/box_rearrange.F90.in @@ -189,8 +189,8 @@ subroutine box_rearrange_comp2io_{TYPE} (IOsystem, ioDesc, s1, src, niodof, & ! The rearranger options in IODESC overrides the defaults if(IOsystem%rearr_opts%comm_type == PIO_rearr_comm_p2p) then - if( (IOsystem%rearr_opts%comm_fc_opts%fcd == PIO_rearr_comm_fc_2d_disable) .or.& - (IOsystem%rearr_opts%comm_fc_opts%fcd == PIO_rearr_comm_fc_1d_io2comp) ) then + if( (IOsystem%rearr_opts%fcd == PIO_rearr_comm_fc_2d_disable) .or.& + (IOsystem%rearr_opts%fcd == PIO_rearr_comm_fc_1d_io2comp) ) then pio_option = POINT_TO_POINT else pio_option = FLOW_CONTROL @@ -210,9 +210,9 @@ subroutine box_rearrange_comp2io_{TYPE} (IOsystem, ioDesc, s1, src, niodof, & endif if (pio_option == FLOW_CONTROL) then - pio_hs = IOsystem%rearr_opts%comm_fc_opts%enable_hs - pio_isend = IOsystem%rearr_opts%comm_fc_opts%enable_isend - pio_maxreq = IOsystem%rearr_opts%comm_fc_opts%max_pend_req + pio_hs = IOsystem%rearr_opts%comm_fc_opts_comp2io%enable_hs + pio_isend = IOsystem%rearr_opts%comm_fc_opts_comp2io%enable_isend + pio_maxreq = IOsystem%rearr_opts%comm_fc_opts_comp2io%max_pend_req ! The rearranger options passed to this function overrides ! both the default and the options in IODESC @@ -488,8 +488,8 @@ subroutine box_rearrange_io2comp_{TYPE} (IOsystem,ioDesc,s1, iobuf,s2, compbuf, ! The rearranger options in IODESC overrides the defaults if(IOsystem%rearr_opts%comm_type == PIO_rearr_comm_p2p) then - if( (IOsystem%rearr_opts%comm_fc_opts%fcd == PIO_rearr_comm_fc_2d_disable) .or.& - (IOsystem%rearr_opts%comm_fc_opts%fcd == PIO_rearr_comm_fc_1d_comp2io) ) then + if( (IOsystem%rearr_opts%fcd == PIO_rearr_comm_fc_2d_disable) .or.& + (IOsystem%rearr_opts%fcd == PIO_rearr_comm_fc_1d_comp2io) ) then pio_option = POINT_TO_POINT else pio_option = FLOW_CONTROL @@ -509,9 +509,9 @@ subroutine box_rearrange_io2comp_{TYPE} (IOsystem,ioDesc,s1, iobuf,s2, compbuf, endif if (pio_option == FLOW_CONTROL) then - pio_hs = IOsystem%rearr_opts%comm_fc_opts%enable_hs - pio_isend = IOsystem%rearr_opts%comm_fc_opts%enable_isend - pio_maxreq = IOsystem%rearr_opts%comm_fc_opts%max_pend_req + pio_hs = IOsystem%rearr_opts%comm_fc_opts_io2comp%enable_hs + pio_isend = IOsystem%rearr_opts%comm_fc_opts_io2comp%enable_isend + pio_maxreq = IOsystem%rearr_opts%comm_fc_opts_io2comp%max_pend_req ! The rearranger options passed to this function overrides ! both the default and the options in IODESC diff --git a/externals/pio1/pio/pio_types.F90 b/externals/pio1/pio/pio_types.F90 index 336d0d04b00..3c6f0c78af6 100644 --- a/externals/pio1/pio/pio_types.F90 +++ b/externals/pio1/pio/pio_types.F90 @@ -79,14 +79,12 @@ module pio_types !! @defgroup PIO_rearr_comm_fc_options PIO_rearr_comm_fc_options !! @brief Type that defines the PIO rearranger options !! @details -!! - fcd : @copydoc PIO_rearr_comm_dir -!! - enable_hs : Enable handshake (true/false) +!! - enable_hs : Enable handshake (true/false) !! - enable_isend : Enable Isends (true/false) !! - max_pend_req : Maximum pending requests (To indicated unlimited !! number of requests use PIO_REARR_COMM_UNLIMITED_PEND_REQ) !> type, public :: PIO_rearr_comm_fc_opt_t - integer :: fcd ! Flow control direction logical :: enable_hs ! Enable handshake? logical :: enable_isend ! Enable isends? integer :: max_pend_req ! Maximum pending requests @@ -98,11 +96,14 @@ module pio_types !! @brief Type that defines the PIO rearranger options !! @details !! - comm_type : @copydoc PIO_rearr_comm_t +!! - fcd : @copydoc PIO_rearr_comm_dir !! - comm_fc_opts : @copydoc PIO_rearr_comm_fc_options !> type, public :: PIO_rearr_opt_t integer :: comm_type - type(PIO_rearr_comm_fc_opt_t) :: comm_fc_opts + integer :: fcd ! Flow control direction + type(PIO_rearr_comm_fc_opt_t) :: comm_fc_opts_comp2io + type(PIO_rearr_comm_fc_opt_t) :: comm_fc_opts_io2comp end type PIO_rearr_opt_t public :: PIO_rearr_comm_p2p, PIO_rearr_comm_coll,& diff --git a/externals/pio1/pio/piolib_mod.F90 b/externals/pio1/pio/piolib_mod.F90 index 2302cfb6ca5..85993aa9e38 100644 --- a/externals/pio1/pio/piolib_mod.F90 +++ b/externals/pio1/pio/piolib_mod.F90 @@ -1600,21 +1600,25 @@ subroutine init_iosystem_rearr_options(iosystem) #endif #ifdef _NO_FLOW_CONTROL - iosystem%rearr_opts%comm_fc_opts%fcd = PIO_rearr_comm_fc_2d_disable + iosystem%rearr_opts%fcd = PIO_rearr_comm_fc_2d_disable #else - ! We ignore the following flags + ! We ignore the following flags ! 1) _MPISERIAL : The flow control code is never used when _MPISERIAL is set ! 2) _USE_COMP2IO_FC/_USE_IO2COMP_FC : These flags are not currently used ! (These were experimental flags). The user can explicitly control ! these options (comp2io and io2comp flow control) via rearranger ! options passed to pio_init() - iosystem%rearr_opts%comm_fc_opts%fcd = PIO_rearr_comm_fc_2d_enable + iosystem%rearr_opts%fcd = PIO_rearr_comm_fc_2d_enable #endif ! the following will be ignored if not p2p with flow control - iosystem%rearr_opts%comm_fc_opts%enable_hs = DEF_P2P_HANDSHAKE - iosystem%rearr_opts%comm_fc_opts%enable_isend = DEF_P2P_ISEND - iosystem%rearr_opts%comm_fc_opts%max_pend_req = DEF_P2P_MAXREQ + iosystem%rearr_opts%comm_fc_opts_comp2io%enable_hs = DEF_P2P_HANDSHAKE + iosystem%rearr_opts%comm_fc_opts_comp2io%enable_isend = DEF_P2P_ISEND + iosystem%rearr_opts%comm_fc_opts_comp2io%max_pend_req = DEF_P2P_MAXREQ + + iosystem%rearr_opts%comm_fc_opts_io2comp%enable_hs = DEF_P2P_HANDSHAKE + iosystem%rearr_opts%comm_fc_opts_io2comp%enable_isend = DEF_P2P_ISEND + iosystem%rearr_opts%comm_fc_opts_io2comp%max_pend_req = DEF_P2P_MAXREQ end subroutine init_iosystem_rearr_options diff --git a/share/csm_share/shr/shr_pio_mod.F90 b/share/csm_share/shr/shr_pio_mod.F90 index 50540d9b787..23adff9870d 100644 --- a/share/csm_share/shr/shr_pio_mod.F90 +++ b/share/csm_share/shr/shr_pio_mod.F90 @@ -375,8 +375,10 @@ subroutine shr_pio_read_default_namelist(nlfilename, Comm, pio_stride, pio_root, character(len=shr_kind_cs) :: pio_typename character(len=shr_kind_cs) :: pio_rearr_comm_type, pio_rearr_comm_fcd - integer :: pio_rearr_comm_max_pend_req - logical :: pio_rearr_comm_enable_hs, pio_rearr_comm_enable_isend + integer :: pio_rearr_comm_max_pend_req_comp2io + logical :: pio_rearr_comm_enable_hs_comp2io, pio_rearr_comm_enable_isend_comp2io + integer :: pio_rearr_comm_max_pend_req_io2comp + logical :: pio_rearr_comm_enable_hs_io2comp, pio_rearr_comm_enable_isend_io2comp character(*),parameter :: subName = '(shr_pio_read_default_namelist) ' integer :: iam, ierr, npes, unitn @@ -386,8 +388,10 @@ subroutine shr_pio_read_default_namelist(nlfilename, Comm, pio_stride, pio_root, pio_typename, pio_async_interface, pio_debug_level, pio_blocksize, & pio_buffer_size_limit, pio_rearranger, & pio_rearr_comm_type, pio_rearr_comm_fcd, & - pio_rearr_comm_max_pend_req, pio_rearr_comm_enable_hs, & - pio_rearr_comm_enable_isend + pio_rearr_comm_max_pend_req_comp2io, pio_rearr_comm_enable_hs_comp2io, & + pio_rearr_comm_enable_isend_comp2io, & + pio_rearr_comm_max_pend_req_io2comp, pio_rearr_comm_enable_hs_io2comp, & + pio_rearr_comm_enable_isend_io2comp #else namelist /pio_default_inparm/ pio_stride, pio_root, pio_numiotasks, & pio_typename, pio_async_interface, pio_debug_level, pio_blocksize, & @@ -465,8 +469,10 @@ subroutine shr_pio_read_default_namelist(nlfilename, Comm, pio_stride, pio_root, #ifdef PIO1 call shr_pio_rearr_opts_set(Comm, pio_rearr_comm_type, pio_rearr_comm_fcd, & - pio_rearr_comm_max_pend_req, pio_rearr_comm_enable_hs, & - pio_rearr_comm_enable_isend) + pio_rearr_comm_max_pend_req_comp2io, pio_rearr_comm_enable_hs_comp2io, & + pio_rearr_comm_enable_isend_comp2io, & + pio_rearr_comm_max_pend_req_io2comp, pio_rearr_comm_enable_hs_io2comp, & + pio_rearr_comm_enable_isend_io2comp, pio_numiotasks) #endif end subroutine shr_pio_read_default_namelist @@ -680,15 +686,23 @@ end subroutine shr_pio_namelist_set ! on the root proc of comm ! The rearranger options are passed to PIO_Init() in shr_pio_init2() subroutine shr_pio_rearr_opts_set(comm, pio_rearr_comm_type, pio_rearr_comm_fcd, & - pio_rearr_comm_max_pend_req, pio_rearr_comm_enable_hs, & - pio_rearr_comm_enable_isend) + pio_rearr_comm_max_pend_req_comp2io, pio_rearr_comm_enable_hs_comp2io, & + pio_rearr_comm_enable_isend_comp2io, & + pio_rearr_comm_max_pend_req_io2comp, pio_rearr_comm_enable_hs_io2comp, & + pio_rearr_comm_enable_isend_io2comp, & + pio_numiotasks) integer(SHR_KIND_IN), intent(in) :: comm character(len=shr_kind_cs), intent(in) :: pio_rearr_comm_type, pio_rearr_comm_fcd - integer, intent(in) :: pio_rearr_comm_max_pend_req - logical, intent(in) :: pio_rearr_comm_enable_hs, pio_rearr_comm_enable_isend + integer, intent(in) :: pio_rearr_comm_max_pend_req_comp2io + logical, intent(in) :: pio_rearr_comm_enable_hs_comp2io + logical, intent(in) :: pio_rearr_comm_enable_isend_comp2io + integer, intent(in) :: pio_rearr_comm_max_pend_req_io2comp + logical, intent(in) :: pio_rearr_comm_enable_hs_io2comp + logical, intent(in) :: pio_rearr_comm_enable_isend_io2comp + integer, intent(in) :: pio_numiotasks character(*), parameter :: subname = '(shr_pio_rearr_opts_set) ' - integer, parameter :: NUM_REARR_COMM_OPTS = 5 + integer, parameter :: NUM_REARR_COMM_OPTS = 8 integer, parameter :: PIO_REARR_COMM_DEF_MAX_PEND_REQ = 64 integer(SHR_KIND_IN), dimension(NUM_REARR_COMM_OPTS) :: buf integer :: rank, ierr @@ -699,9 +713,12 @@ subroutine shr_pio_rearr_opts_set(comm, pio_rearr_comm_type, pio_rearr_comm_fcd, buf = 0 ! buf(1) = comm_type ! buf(2) = comm_fcd - ! buf(3) = max_pend_req - ! buf(4) = enable_hs - ! buf(5) = enable_isend + ! buf(3) = max_pend_req_comp2io + ! buf(4) = enable_hs_comp2io + ! buf(5) = enable_isend_comp2io + ! buf(6) = max_pend_req_io2comp + ! buf(7) = enable_hs_io2comp + ! buf(8) = enable_isend_io2comp if(rank == 0) then ! buf(1) = comm_type select case(pio_rearr_comm_type) @@ -733,58 +750,105 @@ subroutine shr_pio_rearr_opts_set(comm, pio_rearr_comm_type, pio_rearr_comm_fcd, buf(2) = pio_rearr_comm_fc_2d_enable end select - ! buf(3) = max_pend_req - if((pio_rearr_comm_max_pend_req < 0) .and. & - (pio_rearr_comm_max_pend_req /= PIO_REARR_COMM_UNLIMITED_PEND_REQ)) then - write(shr_log_unit, *) "Invalid PIO rearranger comm max pend req, ", pio_rearr_comm_max_pend_req - write(shr_log_unit, *) "Resetting PIO rearranger comm max pend req to ", PIO_REARR_COMM_DEF_MAX_PEND_REQ - buf(3) = PIO_REARR_COMM_DEF_MAX_PEND_REQ + ! buf(3) = max_pend_req_comp2io + if((pio_rearr_comm_max_pend_req_comp2io <= 0) .and. & + (pio_rearr_comm_max_pend_req_comp2io /= PIO_REARR_COMM_UNLIMITED_PEND_REQ)) then + + ! Small multiple of pio_numiotasks has proven to perform + ! well empirically, and we do not want to allow maximum for + ! very large process count runs. Can improve this by + ! communicating between iotasks first, and then non-iotasks + ! to iotasks (TO DO) + write(shr_log_unit, *) "Invalid PIO rearranger comm max pend req (comp2io), ", pio_rearr_comm_max_pend_req_comp2io + write(shr_log_unit, *) "Resetting PIO rearranger comm max pend req (comp2io) to ", max(PIO_REARR_COMM_DEF_MAX_PEND_REQ, 2 * pio_numiotasks) + buf(3) = max(PIO_REARR_COMM_DEF_MAX_PEND_REQ, 2 * pio_numiotasks) else - buf(3) = pio_rearr_comm_max_pend_req + buf(3) = pio_rearr_comm_max_pend_req_comp2io end if - ! buf(4) = enable_hs - if(pio_rearr_comm_enable_hs) then + ! buf(4) = enable_hs_comp2io + if(pio_rearr_comm_enable_hs_comp2io) then buf(4) = 1 else buf(4) = 0 end if - ! buf(5) = enable_isend - if(pio_rearr_comm_enable_isend) then + ! buf(5) = enable_isend_comp2io + if(pio_rearr_comm_enable_isend_comp2io) then buf(5) = 1 else buf(5) = 0 end if + ! buf(6) = max_pend_req_io2comp + if((pio_rearr_comm_max_pend_req_io2comp <= 0) .and. & + (pio_rearr_comm_max_pend_req_io2comp /= PIO_REARR_COMM_UNLIMITED_PEND_REQ)) then + write(shr_log_unit, *) "Invalid PIO rearranger comm max pend req (io2comp), ", pio_rearr_comm_max_pend_req_io2comp + write(shr_log_unit, *) "Resetting PIO rearranger comm max pend req (io2comp) to ", PIO_REARR_COMM_DEF_MAX_PEND_REQ + buf(6) = PIO_REARR_COMM_DEF_MAX_PEND_REQ + else + buf(6) = pio_rearr_comm_max_pend_req_io2comp + end if + + ! buf(7) = enable_hs_io2comp + if(pio_rearr_comm_enable_hs_io2comp) then + buf(7) = 1 + else + buf(7) = 0 + end if + + ! buf(8) = enable_isend_io2comp + if(pio_rearr_comm_enable_isend_io2comp) then + buf(8) = 1 + else + buf(8) = 0 + end if + ! Log the rearranger options write(shr_log_unit, *) "PIO rearranger options:" write(shr_log_unit, *) " comm type =", pio_rearr_comm_type write(shr_log_unit, *) " comm fcd =", pio_rearr_comm_fcd - write(shr_log_unit, *) " max pend req =", pio_rearr_comm_max_pend_req - write(shr_log_unit, *) " enable_hs =", pio_rearr_comm_enable_hs - write(shr_log_unit, *) " enable_isend =", pio_rearr_comm_enable_isend + write(shr_log_unit, *) " max pend req (comp2io) =", pio_rearr_comm_max_pend_req_comp2io + write(shr_log_unit, *) " enable_hs (comp2io) =", pio_rearr_comm_enable_hs_comp2io + write(shr_log_unit, *) " enable_isend (comp2io) =", pio_rearr_comm_enable_isend_comp2io + write(shr_log_unit, *) " max pend req (io2comp) =", pio_rearr_comm_max_pend_req_io2comp + write(shr_log_unit, *) " enable_hs (io2comp) =", pio_rearr_comm_enable_hs_io2comp + write(shr_log_unit, *) " enable_isend (io2comp) =", pio_rearr_comm_enable_isend_io2comp end if call shr_mpi_bcast(buf, comm) ! buf(1) = comm_type ! buf(2) = comm_fcd - ! buf(3) = max_pend_req - ! buf(4) = enable_hs - ! buf(5) = enable_isend + ! buf(3) = max_pend_req_comp2io + ! buf(4) = enable_hs_comp2io + ! buf(5) = enable_isend_comp2io + ! buf(6) = max_pend_req_io2comp + ! buf(7) = enable_hs_io2comp + ! buf(8) = enable_isend_io2comp pio_rearr_opts%comm_type = buf(1) - pio_rearr_opts%comm_fc_opts%fcd = buf(2) - pio_rearr_opts%comm_fc_opts%max_pend_req = buf(3) + pio_rearr_opts%fcd = buf(2) + pio_rearr_opts%comm_fc_opts_comp2io%max_pend_req = buf(3) if(buf(4) == 0) then - pio_rearr_opts%comm_fc_opts%enable_hs = .false. + pio_rearr_opts%comm_fc_opts_comp2io%enable_hs = .false. else - pio_rearr_opts%comm_fc_opts%enable_hs = .true. + pio_rearr_opts%comm_fc_opts_comp2io%enable_hs = .true. end if if(buf(5) == 0) then - pio_rearr_opts%comm_fc_opts%enable_isend = .false. + pio_rearr_opts%comm_fc_opts_comp2io%enable_isend = .false. + else + pio_rearr_opts%comm_fc_opts_comp2io%enable_isend = .true. + end if + pio_rearr_opts%comm_fc_opts_io2comp%max_pend_req = buf(6) + if(buf(7) == 0) then + pio_rearr_opts%comm_fc_opts_io2comp%enable_hs = .false. + else + pio_rearr_opts%comm_fc_opts_io2comp%enable_hs = .true. + end if + if(buf(8) == 0) then + pio_rearr_opts%comm_fc_opts_io2comp%enable_isend = .false. else - pio_rearr_opts%comm_fc_opts%enable_isend = .true. + pio_rearr_opts%comm_fc_opts_io2comp%enable_isend = .true. end if end subroutine #endif