x_comp_read_fields Subroutine

private subroutine x_comp_read_fields(xdatacfg, xstate, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_HConfig) :: xdatacfg
type(xdata_state), intent(inout), pointer :: xstate
integer, intent(out) :: rc

Calls

proc~~x_comp_read_fields~~CallsGraph proc~x_comp_read_fields x_comp_read_fields esmf_hconfigcreateat esmf_hconfigcreateat proc~x_comp_read_fields->esmf_hconfigcreateat esmf_hconfigisdefined esmf_hconfigisdefined proc~x_comp_read_fields->esmf_hconfigisdefined esmf_hconfigiterbegin esmf_hconfigiterbegin proc~x_comp_read_fields->esmf_hconfigiterbegin esmf_hconfigiterend esmf_hconfigiterend proc~x_comp_read_fields->esmf_hconfigiterend proc~esmf_hconfigasstringmapkey ESMF_HConfigAsStringMapKey proc~x_comp_read_fields->proc~esmf_hconfigasstringmapkey proc~esmf_hconfigdestroy ESMF_HConfigDestroy proc~x_comp_read_fields->proc~esmf_hconfigdestroy proc~esmf_hconfigiterloop ESMF_HConfigIterLoop proc~x_comp_read_fields->proc~esmf_hconfigiterloop proc~esmf_hconfigvalidatemapkeys ESMF_HConfigValidateMapKeys proc~x_comp_read_fields->proc~esmf_hconfigvalidatemapkeys proc~esmf_logfoundallocerror ESMF_LogFoundAllocError proc~x_comp_read_fields->proc~esmf_logfoundallocerror proc~esmf_logfounderror ESMF_LogFoundError proc~x_comp_read_fields->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~x_comp_read_fields->proc~esmf_logseterror proc~x_comp_hconfig_i4 x_comp_hconfig_i4 proc~x_comp_read_fields->proc~x_comp_hconfig_i4 proc~x_comp_hconfig_r8 x_comp_hconfig_r8 proc~x_comp_read_fields->proc~x_comp_hconfig_r8 proc~esmf_hconfigasstringmapkey->proc~esmf_hconfigdestroy proc~esmf_hconfigasstringmapkey->proc~esmf_logfounderror proc~esmf_hconfigasstringmapkey->proc~esmf_logseterror c_esmc_hconfigasstring c_esmc_hconfigasstring proc~esmf_hconfigasstringmapkey->c_esmc_hconfigasstring c_esmc_hconfigasstringlen c_esmc_hconfigasstringlen proc~esmf_hconfigasstringmapkey->c_esmc_hconfigasstringlen c_esmc_hconfigasstringmapkey c_esmc_hconfigasstringmapkey proc~esmf_hconfigasstringmapkey->c_esmc_hconfigasstringmapkey c_esmc_hconfigasstringmapkeylen c_esmc_hconfigasstringmapkeylen proc~esmf_hconfigasstringmapkey->c_esmc_hconfigasstringmapkeylen proc~esmf_hconfigcreateatmapkey ESMF_HConfigCreateAtMapKey proc~esmf_hconfigasstringmapkey->proc~esmf_hconfigcreateatmapkey proc~esmf_hconfigitergetinit ESMF_HConfigIterGetInit proc~esmf_hconfigasstringmapkey->proc~esmf_hconfigitergetinit proc~esmf_imerr ESMF_IMErr proc~esmf_hconfigasstringmapkey->proc~esmf_imerr proc~esmf_hconfigdestroy->proc~esmf_logfounderror c_esmc_hconfigdestroy c_esmc_hconfigdestroy proc~esmf_hconfigdestroy->c_esmc_hconfigdestroy proc~esmf_hconfiggetinit ESMF_HConfigGetInit proc~esmf_hconfigdestroy->proc~esmf_hconfiggetinit proc~esmf_hconfigdestroy->proc~esmf_imerr proc~esmf_hconfigiterloop->proc~esmf_logfounderror proc~esmf_hconfigiterloop->proc~esmf_hconfigitergetinit proc~esmf_hconfigiternext ESMF_HConfigIterNext proc~esmf_hconfigiterloop->proc~esmf_hconfigiternext proc~esmf_hconfigiterloop->proc~esmf_imerr proc~esmf_hconfigvalidatemapkeys->proc~esmf_hconfigasstringmapkey proc~esmf_hconfigvalidatemapkeys->proc~esmf_hconfigiterloop proc~esmf_hconfigvalidatemapkeys->proc~esmf_logfounderror proc~esmf_hconfigvalidatemapkeys->proc~esmf_logseterror interface~esmf_hconfigismap ESMF_HConfigIsMap proc~esmf_hconfigvalidatemapkeys->interface~esmf_hconfigismap interface~esmf_hconfigiterbegin ESMF_HConfigIterBegin proc~esmf_hconfigvalidatemapkeys->interface~esmf_hconfigiterbegin interface~esmf_hconfigiterend ESMF_HConfigIterEnd proc~esmf_hconfigvalidatemapkeys->interface~esmf_hconfigiterend esmf_breakpoint esmf_breakpoint proc~esmf_logfoundallocerror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfoundallocerror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_logfoundallocerror->proc~esmf_logwrite proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logfounderror->proc~esmf_logwrite proc~esmf_logseterror->esmf_breakpoint proc~esmf_logseterror->proc~esmf_logrc2msg proc~esmf_logseterror->proc~esmf_logwrite proc~x_comp_hconfig_i4->esmf_hconfigisdefined proc~x_comp_hconfig_i4->proc~esmf_logfounderror proc~x_comp_hconfig_i4->proc~esmf_logseterror esmf_hconfigasi4 esmf_hconfigasi4 proc~x_comp_hconfig_i4->esmf_hconfigasi4 proc~x_comp_hconfig_r8->esmf_hconfigisdefined proc~x_comp_hconfig_r8->proc~esmf_logfounderror proc~x_comp_hconfig_r8->proc~esmf_logseterror esmf_hconfigasr8 esmf_hconfigasr8 proc~x_comp_hconfig_r8->esmf_hconfigasr8

Called by

proc~~x_comp_read_fields~~CalledByGraph proc~x_comp_read_fields x_comp_read_fields proc~x_comp_get_config x_comp_get_config proc~x_comp_get_config->proc~x_comp_read_fields proc~advertise Advertise proc~advertise->proc~x_comp_get_config

Source Code

  subroutine x_comp_read_fields(xdatacfg, xstate, rc)
    ! arguments
    type(ESMF_HConfig)                        :: xdatacfg
    type(xdata_state), pointer, intent(inout) :: xstate
    integer, intent(out)                      :: rc
    ! local variables
    logical                    :: isPresent
    integer                    :: stat
    logical                    :: check
    type(ESMF_HConfig)         :: flistcfg
    type(ESMF_HConfig)         :: fieldcfg
    type(ESMF_HConfigIter)     :: flistcur
    type(ESMF_HConfigIter)     :: flistbeg
    type(ESMF_HConfigIter)     :: flistend
    character(:), allocatable  :: fname
    type(xdata_field), pointer :: xfield
    character(:), allocatable  :: badKey

    rc = ESMF_SUCCESS

    if (.not. associated(xstate)) then
      call ESMF_LogSetError(ESMF_RC_PTR_NOTALLOC, &
        msg='XDATA: xstate has not been associated', &
        line=__LINE__, file=__FILE__, rcToReturn=rc)
      return
    endif

    ! read import field configuration
    isPresent = ESMF_HConfigIsDefined(xdatacfg, &
      keyString="importFields", rc=rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return
    if (isPresent) then
      ! access flistcfg(import)
      flistcfg = ESMF_HConfigCreateAt(xdatacfg, &
        keyString="importFields", rc=rc)
      if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
        line=__LINE__, file=__FILE__)) return
      flistbeg = ESMF_HConfigIterBegin(flistcfg, rc=rc)
      flistend = ESMF_HConfigIterEnd(flistcfg, rc=rc)
      flistcur = flistbeg
      do while (ESMF_HConfigIterLoop(flistcur, flistbeg, flistend, rc=rc))
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        fname = ESMF_HConfigAsStringMapKey(flistcur, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        ! access fieldcfg
        fieldcfg = ESMF_HConfigCreateAt(flistcfg, keyString=fname, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        check = ESMF_HConfigValidateMapKeys(fieldcfg, &
          vocabulary=["dim", &
                      "min", &
                      "max"  &
                     ], badKey=badKey, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        if (.not. check) then
          call ESMF_LogSetError(ESMF_RC_NOT_VALID, &
            msg=trim(xstate%cname)//": ("//fname//")"// &
                " unknown importFields option key - "//badKey, &
          line=__LINE__,file=__FILE__, rcToReturn=rc)
          return
        endif
        nullify(xfield)
        allocate(xfield, stat=stat)
        if (ESMF_LogFoundAllocError(statusToCheck=stat, &
          msg=trim(xstate%cname)//': Memory allocation failed.', &
          line=__LINE__, &
          file=__FILE__, &
          rcToReturn=rc)) return
        xfield%stdn = fname
        xfield%fdim = x_comp_hconfig_i4(fieldcfg, "dim", &
          defaultValue=2, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        xfield%okay = .false.
        xfield%lsum = (/filv, 0.0_ESMF_KIND_R8/)
        xfield%lmin = filv
        xfield%lmax = filv
        xfield%gsum = (/filv, 0.0_ESMF_KIND_R8/)
        xfield%gmin = filv
        xfield%gmax = filv
        xfield%gavg = filv
        xfield%minv = x_comp_hconfig_r8(fieldcfg, "min", &
          defaultValue=0.0_ESMF_KIND_R8, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        xfield%maxv = x_comp_hconfig_r8(fieldcfg, "max", &
          defaultValue=0.0_ESMF_KIND_R8, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        xfield%dflt = filv
        xfield%nfld => null()
        if (.not. associated(xstate%imp_flds_head)) then
          xstate%imp_flds_head => xfield
          xstate%imp_flds_tail => xfield
        else
          xstate%imp_flds_tail%nfld => xfield
          xstate%imp_flds_tail => xfield
        endif
        call ESMF_HConfigDestroy(fieldcfg, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
      enddo ! fieldcfg
      call ESMF_HConfigDestroy(flistcfg, rc=rc)
      if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
        line=__LINE__, file=__FILE__)) return
    endif ! flistcfg

    ! read export field configuration
    isPresent = ESMF_HConfigIsDefined(xdatacfg, &
      keyString="exportFields", rc=rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return
    if (isPresent) then
      ! access flistcfg(export)
      flistcfg = ESMF_HConfigCreateAt(xdatacfg, &
        keyString="exportFields", rc=rc)
      if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
        line=__LINE__, file=__FILE__)) return
      flistbeg = ESMF_HConfigIterBegin(flistcfg, rc=rc)
      flistend = ESMF_HConfigIterEnd(flistcfg, rc=rc)
      flistcur = flistbeg
      do while (ESMF_HConfigIterLoop(flistcur, flistbeg, flistend, rc=rc))
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        fname = ESMF_HConfigAsStringMapKey(flistcur, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        ! access fieldcfg
        fieldcfg = ESMF_HConfigCreateAt(flistcfg, keyString=fname, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        check = ESMF_HConfigValidateMapKeys(fieldcfg, &
          vocabulary=["dim", &
                      "val"  &
                     ], badKey=badKey, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        if (.not. check) then
          call ESMF_LogSetError(ESMF_RC_NOT_VALID, &
            msg=trim(xstate%cname)//": ("//fname//")"// &
                " unknown exportFields option key - "//badKey, &
          line=__LINE__,file=__FILE__, rcToReturn=rc)
          return
        endif
        nullify(xfield)
        allocate(xfield, stat=stat)
        if (ESMF_LogFoundAllocError(statusToCheck=stat, &
          msg=trim(xstate%cname)//': Memory allocation failed.', &
          line=__LINE__, &
          file=__FILE__, &
          rcToReturn=rc)) return
        xfield%stdn = fname
        xfield%fdim = x_comp_hconfig_i4(fieldcfg, "dim", &
          defaultValue=2, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        xfield%okay = .false.
        xfield%lsum = (/filv, 0.0_ESMF_KIND_R8/)
        xfield%lmin = filv
        xfield%lmax = filv
        xfield%gsum = (/filv, 0.0_ESMF_KIND_R8/)
        xfield%gmin = filv
        xfield%gmax = filv
        xfield%gavg = filv
        xfield%minv = 0.0_ESMF_KIND_R8
        xfield%maxv = 0.0_ESMF_KIND_R8
        xfield%dflt = x_comp_hconfig_r8(fieldcfg, "val", &
          defaultValue=0.0_ESMF_KIND_R8, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
        xfield%nfld => null()
        if (.not. associated(xstate%exp_flds_head)) then
          xstate%exp_flds_head => xfield
          xstate%exp_flds_tail => xfield
        else
          xstate%exp_flds_tail%nfld => xfield
          xstate%exp_flds_tail => xfield
        endif
        call ESMF_HConfigDestroy(fieldcfg, rc=rc)
        if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
          line=__LINE__, file=__FILE__)) return
      enddo ! fieldcfg
      call ESMF_HConfigDestroy(flistcfg, rc=rc)
      if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
        line=__LINE__, file=__FILE__)) return
    endif ! flistcfg

  endsubroutine x_comp_read_fields