Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ESMF_GridComp), | intent(inout) | :: | gridcomp | |||
type(ESMF_GridComp), | intent(in) | :: | actualGridcomp | |||
type(ESMF_KeywordEnforcer), | optional | :: | keywordEnforcer | |||
integer, | intent(out), | optional | :: | rc |
recursive subroutine ESMF_GridCompSetServicesComp(gridcomp, & actualGridcomp, keywordEnforcer, rc) ! ! !ARGUMENTS: type(ESMF_GridComp), intent(inout) :: gridcomp type(ESMF_GridComp), intent(in) :: actualGridcomp type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below integer, intent(out), optional :: rc ! ! !DESCRIPTION: ! Set the services of a Gridded Component to serve a "dual" Component for an ! "actual" Component. The component tunnel is VM based. ! ! The arguments are: ! \begin{description} ! \item[gridcomp] ! Dual Gridded Component. ! \item[actualGridcomp] ! Actual Gridded Component. ! \item[{[rc]}] ! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors. ! \end{description} ! !EOP !------------------------------------------------------------------------------ integer :: localrc ! local error status integer, pointer :: actualCompPetList(:) integer :: actualCompRootPet, i ! initialize return code; assume routine not implemented if (present(rc)) rc = ESMF_RC_NOT_IMPL localrc = ESMF_RC_NOT_IMPL ESMF_INIT_CHECK_DEEP(ESMF_GridCompGetInit, gridcomp, rc) ESMF_INIT_CHECK_DEEP(ESMF_GridCompGetInit, actualGridcomp, rc) ! access the petList of the actualGridcomp and find the lowest PET ! -> this is going to be the rendezvous PET for the component tunnel setup nullify(actualCompPetList) ! call Comp method call ESMF_CompGet(actualGridcomp%compp, petList=actualCompPetList, & rc=localrc) if (ESMF_LogFoundError(localrc, & ESMF_ERR_PASSTHRU, & ESMF_CONTEXT, rcToReturn=rc)) return actualCompRootPet = actualCompPetList(1) ! prime the search variable do i=2, size(actualCompPetList) if (actualCompPetList(i) < actualCompRootPet) & actualCompRootPet = actualCompPetList(i) enddo deallocate(actualCompPetList) call c_ESMC_SetServicesComp(gridcomp, gridcomp%compp%compTunnel, & actualGridcomp, actualCompRootPet, localrc) if (ESMF_LogFoundError(localrc, & ESMF_ERR_PASSTHRU, & ESMF_CONTEXT, rcToReturn=rc)) return ! now indicate that this Component has a VM associated gridcomp%compp%compStatus%vmIsPresent = .true. ! return successfully if (present(rc)) rc = ESMF_SUCCESS end subroutine ESMF_GridCompSetServicesComp