CheckImport Subroutine

private subroutine CheckImport(xdata, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_GridComp) :: xdata
integer, intent(out) :: rc

Calls

proc~~checkimport~2~~CallsGraph proc~checkimport~2 CheckImport interface~esmf_gridcompgetinternalstate ESMF_GridCompGetInternalState proc~checkimport~2->interface~esmf_gridcompgetinternalstate interface~nuopc_compget NUOPC_CompGet proc~checkimport~2->interface~nuopc_compget interface~nuopc_isattime NUOPC_IsAtTime proc~checkimport~2->interface~nuopc_isattime proc~esmf_clockget ESMF_ClockGet proc~checkimport~2->proc~esmf_clockget proc~esmf_logfounderror ESMF_LogFoundError proc~checkimport~2->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~checkimport~2->proc~esmf_logseterror proc~esmf_logwrite ESMF_LogWrite proc~checkimport~2->proc~esmf_logwrite proc~nuopc_modelget NUOPC_ModelGet proc~checkimport~2->proc~nuopc_modelget proc~nuopc_cplcompget NUOPC_CplCompGet interface~nuopc_compget->proc~nuopc_cplcompget proc~nuopc_gridcompget NUOPC_GridCompGet interface~nuopc_compget->proc~nuopc_gridcompget proc~nuopc_isattimefield NUOPC_IsAtTimeField interface~nuopc_isattime->proc~nuopc_isattimefield proc~nuopc_isattimestate NUOPC_IsAtTimeState interface~nuopc_isattime->proc~nuopc_isattimestate proc~esmf_clockget->proc~esmf_logfounderror c_esmc_clockget c_esmc_clockget proc~esmf_clockget->c_esmc_clockget proc~esmf_calendarsetinitcreated ESMF_CalendarSetInitCreated proc~esmf_clockget->proc~esmf_calendarsetinitcreated proc~esmf_clockgetinit ESMF_ClockGetInit proc~esmf_clockget->proc~esmf_clockgetinit proc~esmf_imerr ESMF_IMErr proc~esmf_clockget->proc~esmf_imerr proc~esmf_timeinit ESMF_TimeInit proc~esmf_clockget->proc~esmf_timeinit proc~esmf_timeintervalinit ESMF_TimeIntervalInit proc~esmf_clockget->proc~esmf_timeintervalinit proc~esmf_logfounderror->proc~esmf_logwrite esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logseterror->proc~esmf_logwrite proc~esmf_logseterror->esmf_breakpoint proc~esmf_logseterror->proc~esmf_logrc2msg c_esmc_vmwtime c_esmc_vmwtime proc~esmf_logwrite->c_esmc_vmwtime proc~esmf_logclose ESMF_LogClose proc~esmf_logwrite->proc~esmf_logclose proc~esmf_logflush ESMF_LogFlush proc~esmf_logwrite->proc~esmf_logflush proc~esmf_logopenfile ESMF_LogOpenFile proc~esmf_logwrite->proc~esmf_logopenfile proc~esmf_utiliounitflush ESMF_UtilIOUnitFlush proc~esmf_logwrite->proc~esmf_utiliounitflush proc~esmf_utilstring2array ESMF_UtilString2Array proc~esmf_logwrite->proc~esmf_utilstring2array proc~nuopc_modelget->interface~nuopc_compget proc~nuopc_modelget->proc~esmf_logfounderror proc~nuopc_modelbaseget NUOPC_ModelBaseGet proc~nuopc_modelget->proc~nuopc_modelbaseget

Source Code

  subroutine CheckImport(xdata, rc)
    ! arguments
    type(ESMF_GridComp) :: xdata
    integer,intent(out) :: rc
    ! local variables
    integer                    :: stat
    type(xstate_wrap)          :: is
    type(xdata_state), pointer :: xstate
    type(ESMF_Clock)           :: modelClock
    type(ESMF_Time)            :: modelCurrTime
    type(ESMF_State)           :: importState
    logical                    :: allCurrTime

    rc = ESMF_SUCCESS

    ! query component for internal State
    nullify(is%ptr)
    call ESMF_GridCompGetInternalState(xdata, is, rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return
    xstate => is%ptr
    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

    ! query component for information
    call NUOPC_CompGet(xdata, name=xstate%cname, &
      verbosity=xstate%verbosity, diagnostic=xstate%diagnostic, rc=rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return

    ! query the component for its clock and import state
    call NUOPC_ModelGet(xdata, modelClock=modelClock, &
      importState=importState, rc=rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return

    ! get the stop time out of the clock
    call ESMF_ClockGet(modelClock, currTime=modelCurrTime, rc=rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return
    allCurrTime = NUOPC_IsAtTime(importState, modelCurrTime, rc=rc)
    if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
      line=__LINE__, file=__FILE__)) return
    if (.NOT.allCurrTime) then
      call ESMF_LogWrite(trim(xstate%cname)//": "// &
        "NUOPC INCOMPATIBILITY DETECTED: Import Fields not at current time", &
        ESMF_LOGMSG_WARNING)
    endif
  endsubroutine CheckImport