Realize Subroutine

private subroutine Realize(xdata, rc)

Arguments

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

Calls

proc~~realize~~CallsGraph proc~realize Realize interface~esmf_gridcompgetinternalstate ESMF_GridCompGetInternalState proc~realize->interface~esmf_gridcompgetinternalstate interface~esmf_gridcreatenoperidimufrm ESMF_GridCreateNoPeriDimUfrm proc~realize->interface~esmf_gridcreatenoperidimufrm interface~nuopc_compget NUOPC_CompGet proc~realize->interface~nuopc_compget proc~esmf_logfounderror ESMF_LogFoundError proc~realize->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~realize->proc~esmf_logseterror proc~nuopc_modelget NUOPC_ModelGet proc~realize->proc~nuopc_modelget proc~x_comp_grid_diag x_comp_grid_diag proc~realize->proc~x_comp_grid_diag proc~x_comp_realize_field x_comp_realize_field proc~realize->proc~x_comp_realize_field proc~esmf_gridcreatenoperidimufrmr ESMF_GridCreateNoPeriDimUfrmR interface~esmf_gridcreatenoperidimufrm->proc~esmf_gridcreatenoperidimufrmr proc~nuopc_cplcompget NUOPC_CplCompGet interface~nuopc_compget->proc~nuopc_cplcompget proc~nuopc_gridcompget NUOPC_GridCompGet interface~nuopc_compget->proc~nuopc_gridcompget 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 proc~esmf_logseterror->esmf_breakpoint proc~esmf_logseterror->proc~esmf_logrc2msg proc~esmf_logseterror->proc~esmf_logwrite proc~nuopc_modelget->interface~nuopc_compget proc~nuopc_modelget->proc~esmf_logfounderror proc~nuopc_modelbaseget NUOPC_ModelBaseGet proc~nuopc_modelget->proc~nuopc_modelbaseget proc~x_comp_grid_diag->proc~esmf_logfounderror proc~x_comp_grid_diag->proc~esmf_logseterror interface~esmf_arrayset ESMF_ArraySet proc~x_comp_grid_diag->interface~esmf_arrayset interface~esmf_gridget ESMF_GridGet proc~x_comp_grid_diag->interface~esmf_gridget interface~esmf_gridgetcoord ESMF_GridGetCoord proc~x_comp_grid_diag->interface~esmf_gridgetcoord interface~esmf_gridgetitem ESMF_GridGetItem proc~x_comp_grid_diag->interface~esmf_gridgetitem proc~esmf_arraybundleadd ESMF_ArrayBundleAdd proc~x_comp_grid_diag->proc~esmf_arraybundleadd proc~esmf_arraybundlecreate ESMF_ArrayBundleCreate proc~x_comp_grid_diag->proc~esmf_arraybundlecreate proc~esmf_arraybundledestroy ESMF_ArrayBundleDestroy proc~x_comp_grid_diag->proc~esmf_arraybundledestroy proc~esmf_arraybundlewrite ESMF_ArrayBundleWrite proc~x_comp_grid_diag->proc~esmf_arraybundlewrite proc~x_comp_realize_field->proc~esmf_logfounderror proc~x_comp_realize_field->proc~esmf_logseterror esmf_fieldcreate esmf_fieldcreate proc~x_comp_realize_field->esmf_fieldcreate esmf_fieldfill esmf_fieldfill proc~x_comp_realize_field->esmf_fieldfill esmf_fieldget esmf_fieldget proc~x_comp_realize_field->esmf_fieldget interface~nuopc_realize NUOPC_Realize proc~x_comp_realize_field->interface~nuopc_realize proc~esmf_logfoundallocerror ESMF_LogFoundAllocError proc~x_comp_realize_field->proc~esmf_logfoundallocerror

Source Code

  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