user_run Subroutine

public subroutine user_run(comp, importState, exportState, clock, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_GridComp) :: comp
type(ESMF_State) :: importState
type(ESMF_State) :: exportState
type(ESMF_Clock) :: clock
integer, intent(out) :: rc

Calls

proc~~user_run~24~~CallsGraph proc~user_run~24 user_run esmf_fieldget esmf_fieldget proc~user_run~24->esmf_fieldget esmf_stateget esmf_stateget proc~user_run~24->esmf_stateget interface~esmf_locstreamgetkey ESMF_LocStreamGetKey proc~user_run~24->interface~esmf_locstreamgetkey proc~esmf_locstreamgetkeyarray ESMF_LocStreamGetKeyArray interface~esmf_locstreamgetkey->proc~esmf_locstreamgetkeyarray proc~esmf_locstreamgetkeyi4 ESMF_LocStreamGetKeyI4 interface~esmf_locstreamgetkey->proc~esmf_locstreamgetkeyi4 proc~esmf_locstreamgetkeyinfo ESMF_LocStreamGetKeyInfo interface~esmf_locstreamgetkey->proc~esmf_locstreamgetkeyinfo proc~esmf_locstreamgetkeyr4 ESMF_LocStreamGetKeyR4 interface~esmf_locstreamgetkey->proc~esmf_locstreamgetkeyr4 proc~esmf_locstreamgetkeyr8 ESMF_LocStreamGetKeyR8 interface~esmf_locstreamgetkey->proc~esmf_locstreamgetkeyr8 proc~esmf_imerr ESMF_IMErr proc~esmf_locstreamgetkeyarray->proc~esmf_imerr proc~esmf_locstreamgetinit ESMF_LocStreamGetInit proc~esmf_locstreamgetkeyarray->proc~esmf_locstreamgetinit proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_locstreamgetkeyarray->proc~esmf_logfounderror proc~esmf_locstreamgetkeyi4->proc~esmf_locstreamgetkeyarray c_esmc_locstreamgetkeybnds c_esmc_locstreamgetkeybnds proc~esmf_locstreamgetkeyi4->c_esmc_locstreamgetkeybnds esmf_arrayget esmf_arrayget proc~esmf_locstreamgetkeyi4->esmf_arrayget esmf_localarrayget esmf_localarrayget proc~esmf_locstreamgetkeyi4->esmf_localarrayget proc~esmf_locstreamgetkeyi4->proc~esmf_imerr proc~esmf_locstreamgetkeyi4->proc~esmf_locstreamgetinit proc~esmf_locstreamgetkeyi4->proc~esmf_logfounderror proc~esmf_locstreamgetkeyinfo->esmf_arrayget proc~esmf_locstreamgetkeyinfo->proc~esmf_imerr proc~esmf_locstreamgetkeyinfo->proc~esmf_locstreamgetinit proc~esmf_locstreamgetkeyinfo->proc~esmf_logfounderror proc~esmf_locstreamgetkeyr4->proc~esmf_locstreamgetkeyarray proc~esmf_locstreamgetkeyr4->c_esmc_locstreamgetkeybnds proc~esmf_locstreamgetkeyr4->esmf_arrayget proc~esmf_locstreamgetkeyr4->esmf_localarrayget proc~esmf_locstreamgetkeyr4->proc~esmf_imerr proc~esmf_locstreamgetkeyr4->proc~esmf_locstreamgetinit proc~esmf_locstreamgetkeyr4->proc~esmf_logfounderror proc~esmf_locstreamgetkeyr8->proc~esmf_locstreamgetkeyarray proc~esmf_locstreamgetkeyr8->c_esmc_locstreamgetkeybnds proc~esmf_locstreamgetkeyr8->esmf_arrayget proc~esmf_locstreamgetkeyr8->esmf_localarrayget proc~esmf_locstreamgetkeyr8->proc~esmf_imerr proc~esmf_locstreamgetkeyr8->proc~esmf_locstreamgetinit proc~esmf_locstreamgetkeyr8->proc~esmf_logfounderror proc~esmf_imerr->proc~esmf_logfounderror proc~esmf_initcheckdeep ESMF_InitCheckDeep proc~esmf_imerr->proc~esmf_initcheckdeep esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_logfounderror->proc~esmf_logwrite

Source Code

    subroutine user_run(comp, importState, exportState, clock, rc)
      type(ESMF_GridComp) :: comp
      type(ESMF_State) :: importState, exportState
      type(ESMF_Clock) :: clock
      integer, intent(out) :: rc

!   ! Local variables
      type(ESMF_Field) :: humidity
      type(ESMF_LocStream) :: locstream
      real(ESMF_KIND_R8), pointer :: lon(:),lat(:)
      real(ESMF_KIND_R8), pointer :: dstfptr(:)
      integer                                      :: clb(1), cub(1), i


      rc = ESMF_SUCCESS
      print *, "User Comp2 Run starting"

      ! Get information from the component.
      call ESMF_StateGet(importState, "humidity", humidity, rc=rc)
      if(rc/=ESMF_SUCCESS) return

      ! Get locstream
      call ESMF_FieldGet(humidity, locstream=locstream, rc=rc)
      if(rc/=ESMF_SUCCESS) return

      ! Get coordinate memory      
      call ESMF_LocStreamGetKey(locstream,                 &
           localDE=0,                    &
           keyName="ESMF:Lon",           &
             farray=lon,                   &
             rc=rc)
      if (rc .ne. ESMF_SUCCESS) return
      
      ! Get Field memory
      call ESMF_FieldGet(humidity, localDe=0, farrayPtr=dstfptr, &
           computationalLBound=clb, computationalUBound=cub, &
           rc=rc)
      if (rc .ne. ESMF_SUCCESS) return

      ! Verify that the data in dstField(l) is correct.
      ! Before the regrid op, the dst Field contains all 0. 
      do i = clb(1), cub(1)

           ! Check data depending on whether masked or not
           if ((lon(i) > 10.0) .and. (lon(i) < 20.0)) then

              ! Masked so should be 0.0
              if(abs(dstfptr(i)) .gt. 1.0E-10) rc = ESMF_FAILURE
           else 

              ! Not masked so should be analytic value
              if(abs(dstfptr(i) - lon(i)/360.0) .gt. 1.0E-10) rc = ESMF_FAILURE
           endif
      enddo

      print *, "User Comp2 Run returning"

    end subroutine user_run