ESMF_AttributeGetAttPackFieldBundleR4List Subroutine

private subroutine ESMF_AttributeGetAttPackFieldBundleR4List(target, name, attpack, valueList, defaultvalueList, attnestflag, itemcount, isPresent, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_FieldBundle), intent(in) :: target
character(len=*), intent(in) :: name
type(ESMF_AttPack), intent(inout) :: attpack
real(kind=ESMF_KIND_R4), intent(out), dimension(:) :: valueList
real(kind=ESMF_KIND_R4), intent(in), optional, dimension(:) :: defaultvalueList
type(ESMF_AttNest_Flag), intent(in), optional :: attnestflag
integer, intent(out), optional :: itemcount
logical, intent(out), optional :: isPresent
integer, intent(out), optional :: rc

Source Code

subroutine ESMF_AttributeGetAttPackFieldBundleR4List(target, name, attpack, valueList, defaultvalueList, attnestflag, itemcount, isPresent, rc)
  ! 39.11.9
  type(ESMF_FieldBundle), intent(in) :: target
  character(len=*), intent(in) :: name
  type(ESMF_AttPack), intent(inout) :: attpack
  real(ESMF_KIND_R4), dimension(:), intent(out) :: valueList
  real(ESMF_KIND_R4), dimension(:), intent(in), optional :: defaultvalueList
  type(ESMF_AttNest_Flag), intent(in), optional :: attnestflag
  integer, intent(out), optional :: itemcount
  logical, intent(out), optional :: isPresent
  integer, intent(out), optional :: rc

  integer :: localrc, ii, local_itemcount
  logical :: local_isPresent
  character(:), allocatable :: key
  type(ESMF_AttNest_Flag) :: local_attnestflag

  localrc = ESMF_FAILURE
  if (present(rc)) rc = ESMF_RC_NOT_IMPL
  ! Check object initialization
  ESMF_INIT_CHECK_DEEP(ESMF_FieldBundleGetInit, target, rc)

  if (present(attnestflag)) then
    local_attnestflag = attnestflag
  else
    local_attnestflag = ESMF_ATTR_DEFAULT_ATTNEST
  end if

  key = attpack%formatKey(name=name, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  local_isPresent = ESMF_InfoIsPresent(attpack%getPayload(), key, isPointer=.true., attnestflag=local_attnestflag, rc=localrc)
  if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return

  if (present(isPresent)) isPresent = local_isPresent

  if (present(defaultvalueList)) then
    if (SIZE(defaultvalueList) /= SIZE(valueList)) then
      if (ESMF_LogFoundError(ESMF_RC_ATTR_ITEMSOFF, msg="SIZE(defaultvalueList) /= SIZE(valueList)", ESMF_CONTEXT, rcToReturn=rc)) return
    endif
  endif

  if (local_isPresent) then
    call ESMF_InfoGet(attpack%getPayload(), key, valueList, itemcount=local_itemcount, attnestflag=local_attnestflag, scalarToArray=.true., rc=localrc)
    if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, ESMF_CONTEXT, rcToReturn=rc)) return
    if (present(itemcount)) itemcount = local_itemcount
  else
    if (present(defaultvalueList)) then
      do ii=1,size(defaultvalueList)
        if (present(itemcount)) itemcount = 0
        valueList(ii) = defaultvalueList(ii)
      enddo
      if (present(itemcount)) itemcount = SIZE(defaultvalueList)
    else
      if (ESMF_LogFoundError(ESMF_RC_ATTR_NOTSET, msg="The key '"//TRIM(name)//"' is not present and no default value is provided", ESMF_CONTEXT, rcToReturn=rc)) return
    endif
  endif

  if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_AttributeGetAttPackFieldBundleR4List