test2a_isalloc Subroutine

subroutine test2a_isalloc(datacopyflag, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_DataCopy_Flag), intent(in) :: datacopyflag
integer, intent(out) :: rc

Calls

proc~~test2a_isalloc~~CallsGraph proc~test2a_isalloc test2a_isalloc esmf_fieldcreate esmf_fieldcreate proc~test2a_isalloc->esmf_fieldcreate esmf_fielddestroy esmf_fielddestroy proc~test2a_isalloc->esmf_fielddestroy esmf_fieldget esmf_fieldget proc~test2a_isalloc->esmf_fieldget interface~esmf_gridcreatenoperidim ESMF_GridCreateNoPeriDim proc~test2a_isalloc->interface~esmf_gridcreatenoperidim interface~esmf_gridget ESMF_GridGet proc~test2a_isalloc->interface~esmf_gridget proc~esmf_griddestroy ESMF_GridDestroy proc~test2a_isalloc->proc~esmf_griddestroy proc~esmf_logfounderror ESMF_LogFoundError proc~test2a_isalloc->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~~test2a_isalloc~~CalledByGraph proc~test2a_isalloc test2a_isalloc program~esmf_fieldcreategetutest ESMF_FieldCreateGetUTest program~esmf_fieldcreategetutest->proc~test2a_isalloc

Source Code

    subroutine test2a_isalloc(datacopyflag, rc)
        type(ESMF_DataCopy_Flag), intent(in) :: datacopyflag        
        integer, intent(out)  :: rc
        integer               :: localrc
        type(ESMF_Field)      :: field
        type(ESMF_Grid)       :: grid
        type(ESMF_StaggerLoc) :: sloc
        real, dimension(:,:), allocatable :: farray
        integer, dimension(2) :: ec
        logical               :: isESMFAllocated

        grid = ESMF_GridCreateNoPeriDim(minIndex=(/1,1/), maxIndex=(/16,20/), &
                                  regDecomp=(/4,1/), name="testgrid", rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_GridGet(grid, localDe=0, staggerloc=sloc, &
           exclusiveCount=ec, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        allocate(farray(ec(1), ec(2)))

        field = ESMF_FieldCreate(grid, farray, indexflag=ESMF_INDEX_DELOCAL, &
           datacopyflag=datacopyflag, staggerloc=sloc, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_FieldGet(field, isESMFAllocated=isESMFAllocated, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return
       
        if ((datacopyflag == ESMF_DATACOPY_VALUE) .and. isESMFAllocated ) then 
           localrc = ESMF_FAILURE
        end if
        if ((datacopyflag == ESMF_DATACOPY_REFERENCE) .and. .not.isESMFAllocated) then
           localrc = ESMF_FAILURE
        end if
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_FieldDestroy(field, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

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

        deallocate(farray)

    end subroutine test2a_isalloc