user_init Subroutine

public subroutine user_init(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

Source Code

    subroutine user_init(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_VM) :: vm
      integer, allocatable :: indexList(:)
      type(ESMF_LocStream) :: locs
      type(ESMF_DistGrid)  :: distgrid
      integer :: npets, de_id

      rc = ESMF_SUCCESS
      ! Initially import state contains a field with a grid but no data.

      ! Query component for VM and create a layout with the right breakdown
      call ESMF_GridCompGet(comp, vm=vm, rc=rc)
      if(rc/=ESMF_SUCCESS) return
      call ESMF_VMGet(vm, localPet=de_id, petCount=npets, rc=rc)
      if(rc/=ESMF_SUCCESS) return

      print *, de_id, "User Comp 2 Init starting"

        ! Check for correct number of PETs
        if ( npets .ne. 2 ) then
            call ESMF_LogSetError(ESMF_RC_ARG_BAD,&
                msg="This component must run on 2 PETs.",&
                line=__LINE__, file=__FILE__, rcToReturn=rc)
            return
        endif

        if ( de_id .eq. 0 ) then
            allocate(indexList(6))
            allocate(humidity_data(2,6,4))
            indexList = (/1,2,3,4,5,6/)
            humidity_data(1:2,1:6,1:4) = 0
        elseif ( de_id .eq. 1 ) then
            allocate(indexList(10))
            allocate(humidity_data(2,10,4))
            indexList = (/7,8,9,10,11,12,13,14,15,16/)
            humidity_data(1:2,1:10,1:4) = 0
        endif

      ! Add a "humidity" field to the import state.
      distgrid = ESMF_DistGridCreate(arbSeqIndexList=indexList, rc=rc)
      if(rc/=ESMF_SUCCESS) return

      deallocate(indexList)

      locs = ESMF_LocStreamCreate(distgrid=distgrid, &
          indexflag=ESMF_INDEX_DELOCAL, coordSys=ESMF_COORDSYS_CART, &
          name="Test LocStream", rc=rc)
      if(rc/=ESMF_SUCCESS) return

      humidity = ESMF_FieldCreate(locs, humidity_data, &
          indexflag=ESMF_INDEX_DELOCAL, gridToFieldMap=(/2/), &
          name="humidity", rc=rc)
      if (rc .ne. ESMF_SUCCESS) return
  
      call ESMF_StateAdd(importState, (/humidity/), rc=rc)
      if(rc/=ESMF_SUCCESS) return
      !   call ESMF_StatePrint(importState, rc=rc)
  
      print *, de_id, "User Comp 2 Init returning"
   
    end subroutine user_init