subroutine Realize(xdata, rc)
! arguments
type(ESMF_GridComp) :: xdata
integer, intent(out) :: rc
! local variables
integer :: stat
type(xstate_wrap) :: is
type(ESMF_State) :: importState, exportState
type(xdata_state), pointer :: xstate
type(xdata_field), pointer :: xfield
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 for importState and exportState
call NUOPC_ModelGet(xdata, importState=importState, &
exportState=exportState, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
! create grid
xstate%grid = ESMF_GridCreateNoPeriDimUfrm( &
name=trim(xstate%cname)//"_grid", &
minIndex=(/1, 1/), maxIndex=(/xstate%nx, xstate%ny/), &
minCornerCoord=(/xstate%minx,xstate%miny/), &
maxCornerCoord=(/xstate%maxx,xstate%maxy/), &
staggerLocList=(/ESMF_STAGGERLOC_CENTER, ESMF_STAGGERLOC_CORNER/), &
coordSys=xstate%coordSys, &
rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
! write grid to NetCDF file
if (btest(xstate%diagnostic,16)) then
call x_comp_grid_diag(xstate, trim(xstate%cname)//"_grid.nc", rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
endif
! realize import fields
xfield => xstate%imp_flds_head
do while (associated(xfield))
call x_comp_realize_field(xstate, xfield, importState, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield => xfield%nfld
enddo
! realize export fields
xfield => xstate%exp_flds_head
do while (associated(xfield))
call x_comp_realize_field(xstate, xfield, exportState, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield => xfield%nfld
enddo
endsubroutine Realize