Skip to content

Commit

Permalink
Merge pull request ESCOMP#319 from jedwards4b/esmf_aware_threading_fix
Browse files Browse the repository at this point in the history
needed for using ESMF_AWARE_THREADING=TRUE
  • Loading branch information
jedwards4b authored Nov 17, 2022
2 parents fa2ac92 + 0cf254c commit ce1305c
Showing 1 changed file with 69 additions and 66 deletions.
135 changes: 69 additions & 66 deletions cesm/nuopc_cap_share/driver_pio_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -212,86 +212,89 @@ subroutine driver_pio_component_init(driver, ncomps, rc)
if (ESMF_GridCompIsPetLocal(gcomp(i), rc=rc)) then
call ESMF_GridCompGet(gcomp(i), vm=vm, name=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

io_compname(i) = trim(cval)

call NUOPC_CompAttributeAdd(gcomp(i), attrList=(/'MCTID'/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

write(cval, *) io_compid(i)
call NUOPC_CompAttributeSet(gcomp(i), name="MCTID", value=trim(cval), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_VMGet(vm, mpiCommunicator=comp_comm, localPet=comp_rank, petCount=npets, &
ssiLocalPetCount=default_stride, rc=rc)
call ESMF_VMGet(vm, mpiCommunicator=comp_comm, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call NUOPC_CompAttributeGet(gcomp(i), name="pio_stride", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_stride
if(pio_comp_settings(i)%pio_stride <= 0 .or. pio_comp_settings(i)%pio_stride > npets) then
pio_comp_settings(i)%pio_stride = min(npets, default_stride)
endif

call NUOPC_CompAttributeGet(gcomp(i), name="pio_rearranger", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_rearranger

call NUOPC_CompAttributeGet(gcomp(i), name="pio_numiotasks", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_numiotasks

if(pio_comp_settings(i)%pio_numiotasks < 0 .or. pio_comp_settings(i)%pio_numiotasks > npets) then
pio_comp_settings(i)%pio_numiotasks = max(1,npets/pio_comp_settings(i)%pio_stride)
endif


call NUOPC_CompAttributeGet(gcomp(i), name="pio_root", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_root

if(pio_comp_settings(i)%pio_root < 0 .or. pio_comp_settings(i)%pio_root > npets) then
pio_comp_settings(i)%pio_root = 0
endif

if(comp_comm .ne. MPI_COMM_NULL) then
call ESMF_VMGet(vm, petCount=npets, localPet=comp_rank, ssiLocalPetCount=default_stride, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call NUOPC_CompAttributeGet(gcomp(i), name="pio_typename", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

select case (trim(cval))
case ('pnetcdf')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_PNETCDF
case ('netcdf')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_NETCDF
case ('netcdf4p')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_NETCDF4P
case ('netcdf4c')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_NETCDF4C
case DEFAULT
write (msgstr, *) "Invalid PIO_TYPENAME Setting for component ", trim(cval)
call ESMF_LogSetError(ESMF_RC_NOT_VALID, msg=msgstr, line=__LINE__, file=__FILE__, rcToReturn=rc)
return
end select
call NUOPC_CompAttributeGet(gcomp(i), name="pio_stride", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_stride
if(pio_comp_settings(i)%pio_stride <= 0 .or. pio_comp_settings(i)%pio_stride > npets) then
pio_comp_settings(i)%pio_stride = min(npets, default_stride)
endif

call NUOPC_CompAttributeGet(gcomp(i), name="pio_async_interface", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
pio_async_interface(i) = (trim(cval) == '.true.')

call NUOPC_CompAttributeGet(gcomp(i), name="pio_netcdf_format", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call driver_pio_getioformatfromname(cval, pio_comp_settings(i)%pio_netcdf_ioformat, PIO_64BIT_DATA)
call NUOPC_CompAttributeGet(gcomp(i), name="pio_rearranger", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_rearranger
call NUOPC_CompAttributeGet(gcomp(i), name="pio_numiotasks", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_numiotasks

if (pio_async_interface(i)) then
do_async_init = do_async_init + 1
else
if(pio_rearr_opts%comm_fc_opts_io2comp%max_pend_req < PIO_REARR_COMM_UNLIMITED_PEND_REQ) then
pio_rearr_opts%comm_fc_opts_io2comp%max_pend_req = pio_comp_settings(i)%pio_numiotasks
if(pio_comp_settings(i)%pio_numiotasks < 0 .or. pio_comp_settings(i)%pio_numiotasks > npets) then
pio_comp_settings(i)%pio_numiotasks = max(1,npets/pio_comp_settings(i)%pio_stride)
endif
if(pio_rearr_opts%comm_fc_opts_comp2io%max_pend_req < PIO_REARR_COMM_UNLIMITED_PEND_REQ) then
pio_rearr_opts%comm_fc_opts_comp2io%max_pend_req = pio_comp_settings(i)%pio_numiotasks

call NUOPC_CompAttributeGet(gcomp(i), name="pio_root", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
read(cval, *) pio_comp_settings(i)%pio_root

if(pio_comp_settings(i)%pio_root < 0 .or. pio_comp_settings(i)%pio_root > npets) then
pio_comp_settings(i)%pio_root = 0
endif

call NUOPC_CompAttributeGet(gcomp(i), name="pio_typename", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

select case (trim(cval))
case ('pnetcdf')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_PNETCDF
case ('netcdf')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_NETCDF
case ('netcdf4p')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_NETCDF4P
case ('netcdf4c')
pio_comp_settings(i)%pio_iotype = PIO_IOTYPE_NETCDF4C
case DEFAULT
write (msgstr, *) "Invalid PIO_TYPENAME Setting for component ", trim(cval)
call ESMF_LogSetError(ESMF_RC_NOT_VALID, msg=msgstr, line=__LINE__, file=__FILE__, rcToReturn=rc)
return
end select

call NUOPC_CompAttributeGet(gcomp(i), name="pio_async_interface", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
pio_async_interface(i) = (trim(cval) == '.true.')

call NUOPC_CompAttributeGet(gcomp(i), name="pio_netcdf_format", value=cval, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call driver_pio_getioformatfromname(cval, pio_comp_settings(i)%pio_netcdf_ioformat, PIO_64BIT_DATA)

if (pio_async_interface(i)) then
do_async_init = do_async_init + 1
else
if(pio_rearr_opts%comm_fc_opts_io2comp%max_pend_req < PIO_REARR_COMM_UNLIMITED_PEND_REQ) then
pio_rearr_opts%comm_fc_opts_io2comp%max_pend_req = pio_comp_settings(i)%pio_numiotasks
endif
if(pio_rearr_opts%comm_fc_opts_comp2io%max_pend_req < PIO_REARR_COMM_UNLIMITED_PEND_REQ) then
pio_rearr_opts%comm_fc_opts_comp2io%max_pend_req = pio_comp_settings(i)%pio_numiotasks
endif
call pio_init(comp_rank ,comp_comm ,pio_comp_settings(i)%pio_numiotasks, 0, pio_comp_settings(i)%pio_stride, &
pio_comp_settings(i)%pio_rearranger, iosystems(i), pio_comp_settings(i)%pio_root, &
pio_rearr_opts)
endif
call pio_init(comp_rank ,comp_comm ,pio_comp_settings(i)%pio_numiotasks, 0, pio_comp_settings(i)%pio_stride, &
pio_comp_settings(i)%pio_rearranger, iosystems(i), pio_comp_settings(i)%pio_root, &
pio_rearr_opts)
endif
endif
enddo
Expand Down

0 comments on commit ce1305c

Please sign in to comment.