Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ESMF_ArrayBundle), | intent(inout) | :: | arraybundle | |||
type(ESMF_Array), | intent(in) | :: | arrayList(:) | |||
type(ESMF_KeywordEnforcer), | optional | :: | keywordEnforcer | |||
integer, | intent(out), | optional | :: | rc |
subroutine ESMF_ArrayBundleAddReplace(arraybundle, arrayList, keywordEnforcer, rc) ! ! !ARGUMENTS: type(ESMF_ArrayBundle), intent(inout) :: arraybundle type(ESMF_Array), intent(in) :: arrayList(:) type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below integer, intent(out), optional :: rc ! ! !STATUS: ! \begin{itemize} ! \item\apiStatusCompatibleVersion{5.2.0r} ! \end{itemize} ! ! !DESCRIPTION: ! Arrays in {\tt arrayList} that do not match any Arrays by name in ! {\tt arraybundle} are added to the ArrayBundle. Arrays in {\tt arraybundle} ! that match by name Arrays in {\tt arrayList} are replaced by those Arrays. ! ! \begin{description} ! \item [arraybundle] ! {\tt ESMF\_ArrayBundle} to be manipulated. ! \item [arrayList] ! List of {\tt ESMF\_Array} objects to be added or used as replacement. ! \item [{[rc]}] ! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors. ! \end{description} ! !EOP !------------------------------------------------------------------------------ integer :: localrc ! local return code integer :: arrayCount, i type(ESMF_Pointer), allocatable :: arrayPointerList(:) ! initialize return code; assume routine not implemented localrc = ESMF_RC_NOT_IMPL if (present(rc)) rc = ESMF_RC_NOT_IMPL ! Check init status of arguments ESMF_INIT_CHECK_DEEP_SHORT(ESMF_ArrayBundleGetInit, arraybundle, rc) ! Determine the number of ArrayList elements arrayCount = size(arrayList) ! Check init status of array arguments do i=1, arrayCount ESMF_INIT_CHECK_DEEP(ESMF_ArrayGetInit, arrayList(i), rc) enddo ! Copy C++ pointers of deep objects into a simple ESMF_Pointer array ! This is necessary in order to strip off the F90 init check members ! when passing into C++ allocate(arrayPointerList(arrayCount)) do i=1, arrayCount call ESMF_ArrayGetThis(arrayList(i), arrayPointerList(i), localrc) if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, & ESMF_CONTEXT, rcToReturn=rc)) return enddo ! Call into the C++ interface layer call c_ESMC_ArrayBundleAddReplace(arraybundle, arrayPointerList, & arrayCount, localrc) if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, & ESMF_CONTEXT, rcToReturn=rc)) return ! Garbage collection deallocate(arrayPointerList) ! Return successfully if (present(rc)) rc = ESMF_SUCCESS end subroutine ESMF_ArrayBundleAddReplace