test_FieldEmptyReset Subroutine

subroutine test_FieldEmptyReset(rc)

Arguments

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

Calls

proc~~test_fieldemptyreset~~CallsGraph proc~test_fieldemptyreset test_FieldEmptyReset esmf_fielddestroy esmf_fielddestroy proc~test_fieldemptyreset->esmf_fielddestroy esmf_fieldemptycomplete esmf_fieldemptycomplete proc~test_fieldemptyreset->esmf_fieldemptycomplete esmf_fieldemptycreate esmf_fieldemptycreate proc~test_fieldemptyreset->esmf_fieldemptycreate esmf_fieldemptyreset esmf_fieldemptyreset proc~test_fieldemptyreset->esmf_fieldemptyreset esmf_fieldemptyset esmf_fieldemptyset proc~test_fieldemptyreset->esmf_fieldemptyset esmf_fieldget esmf_fieldget proc~test_fieldemptyreset->esmf_fieldget interface~esmf_gridcreatenoperidim ESMF_GridCreateNoPeriDim proc~test_fieldemptyreset->interface~esmf_gridcreatenoperidim interface~esmf_gridget ESMF_GridGet proc~test_fieldemptyreset->interface~esmf_gridget proc~esmf_griddestroy ESMF_GridDestroy proc~test_fieldemptyreset->proc~esmf_griddestroy proc~esmf_logfounderror ESMF_LogFoundError proc~test_fieldemptyreset->proc~esmf_logfounderror proc~esmf_gridcreatenoperidima ESMF_GridCreateNoPeriDimA interface~esmf_gridcreatenoperidim->proc~esmf_gridcreatenoperidima proc~esmf_gridcreatenoperidimi ESMF_GridCreateNoPeriDimI interface~esmf_gridcreatenoperidim->proc~esmf_gridcreatenoperidimi proc~esmf_gridcreatenoperidimr ESMF_GridCreateNoPeriDimR interface~esmf_gridcreatenoperidim->proc~esmf_gridcreatenoperidimr proc~esmf_gridgetdefault ESMF_GridGetDefault interface~esmf_gridget->proc~esmf_gridgetdefault proc~esmf_gridgetplocalde ESMF_GridGetPLocalDe interface~esmf_gridget->proc~esmf_gridgetplocalde proc~esmf_gridgetplocaldepsloc ESMF_GridGetPLocalDePSloc interface~esmf_gridget->proc~esmf_gridgetplocaldepsloc proc~esmf_gridgetpsloc ESMF_GridGetPSloc interface~esmf_gridget->proc~esmf_gridgetpsloc proc~esmf_gridgetpslocptile ESMF_GridGetPSlocPTile interface~esmf_gridget->proc~esmf_gridgetpslocptile proc~esmf_griddestroy->proc~esmf_logfounderror c_esmc_griddestroy c_esmc_griddestroy proc~esmf_griddestroy->c_esmc_griddestroy proc~esmf_gridgetinit ESMF_GridGetInit proc~esmf_griddestroy->proc~esmf_gridgetinit proc~esmf_imerr ESMF_IMErr proc~esmf_griddestroy->proc~esmf_imerr 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

Called by

proc~~test_fieldemptyreset~~CalledByGraph proc~test_fieldemptyreset test_FieldEmptyReset program~esmf_fieldcreategetutest ESMF_FieldCreateGetUTest program~esmf_fieldcreategetutest->proc~test_fieldemptyreset

Source Code

    subroutine test_FieldEmptyReset(rc)
        integer, intent(out)  :: rc
        integer                 :: localrc
        type(ESMF_Field)        :: field
        type(ESMF_Grid)         :: grid1, grid2, tmpGrid
        real, dimension(:,:), allocatable   :: farray

        type(ESMF_VM)                               :: vm
        integer                                     :: lpe
        integer, dimension(2)             :: ec, cc
        integer, dimension(2)             :: gelb, geub, gclb, gcub
        type(ESMF_StaggerLoc)                       :: sloc
        type (ESMF_TypeKind_Flag) :: typekind
        character(len = 20) :: tmpName
        
        rc = ESMF_SUCCESS
        localrc = ESMF_SUCCESS

        ! Create Grids
        grid1 = ESMF_GridCreateNoPeriDim(minIndex=(/1,1/), maxIndex=(/16,20/), &
             regDecomp=(/4,1/), name="testgrid1", rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        grid2 = ESMF_GridCreateNoPeriDim(minIndex=(/1,1/), maxIndex=(/32,40/), &
             regDecomp=(/4,1/), name="testgrid2", rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        ! Create Empty Field
        field = ESMF_FieldEmptyCreate(rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        ! Add a Grid
        call ESMF_FieldEmptySet(field, grid1, rc=localrc) 
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        ! Complete
        call ESMF_FieldEmptyComplete(field, ESMF_TYPEKIND_R8, rc=localrc) 
        if (ESMF_LogFoundError(localrc, &
             ESMF_ERR_PASSTHRU, &
             ESMF_CONTEXT, rcToReturn=rc)) return


        ! Reset
        call ESMF_FieldEmptyReset(field, status=ESMF_FIELDSTATUS_EMPTY, &
             rc=localrc) 
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        ! Set a different Grid
        call ESMF_FieldEmptySet(field, grid2, rc=localrc) 
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return
        
        ! Complete again with a different type
        call ESMF_FieldEmptyComplete(field, ESMF_TYPEKIND_I4, rc=localrc) 
        if (ESMF_LogFoundError(localrc, &
             ESMF_ERR_PASSTHRU, &
             ESMF_CONTEXT, rcToReturn=rc)) return                

        
        ! Get info to check if Field was reset
        call ESMF_FieldGet(field, typekind=typekind, grid=tmpGrid, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
             ESMF_ERR_PASSTHRU, &
             ESMF_CONTEXT, rcToReturn=rc)) return                
        
        ! Check type
        if (typekind /= ESMF_TYPEKIND_I4) then
           rc= ESMF_FAILURE
           return
        endif
                   
        ! Check Grid
        call ESMF_GridGet(tmpGrid, name=tmpName, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
             ESMF_ERR_PASSTHRU, &
             ESMF_CONTEXT, rcToReturn=rc)) return                

        if (trim(tmpName) /= "testgrid2") then
           rc= ESMF_FAILURE
           return
        endif
       
        
        ! Get rid of Field and Grid
        call ESMF_FieldDestroy(field, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_GridDestroy(grid1, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_GridDestroy(grid2, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return
        
      end subroutine test_FieldEmptyReset