test_geom Subroutine

subroutine test_geom(rc)

Arguments

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

Calls

proc~~test_geom~~CallsGraph proc~test_geom test_geom esmf_fieldcreate esmf_fieldcreate proc~test_geom->esmf_fieldcreate esmf_fielddestroy esmf_fielddestroy proc~test_geom->esmf_fielddestroy esmf_fieldget esmf_fieldget proc~test_geom->esmf_fieldget interface~esmf_geomcreate ESMF_GeomCreate proc~test_geom->interface~esmf_geomcreate interface~esmf_gridcreatenoperidim ESMF_GridCreateNoPeriDim proc~test_geom->interface~esmf_gridcreatenoperidim interface~esmf_gridget ESMF_GridGet proc~test_geom->interface~esmf_gridget interface~esmf_vmget ESMF_VMGet proc~test_geom->interface~esmf_vmget proc~esmf_geomdestroy ESMF_GeomDestroy proc~test_geom->proc~esmf_geomdestroy proc~esmf_geomget ESMF_GeomGet proc~test_geom->proc~esmf_geomget proc~esmf_griddestroy ESMF_GridDestroy proc~test_geom->proc~esmf_griddestroy proc~esmf_logfounderror ESMF_LogFoundError proc~test_geom->proc~esmf_logfounderror proc~esmf_vmgetglobal ESMF_VMGetGlobal proc~test_geom->proc~esmf_vmgetglobal

Called by

proc~~test_geom~~CalledByGraph proc~test_geom test_geom program~esmf_fieldcreategetutest ESMF_FieldCreateGetUTest program~esmf_fieldcreategetutest->proc~test_geom

Source Code

    subroutine test_geom(rc)
        integer, intent(out)  :: rc
        integer                 :: localrc
        type(ESMF_Field)        :: field
        type(ESMF_Grid)         :: grid
        type(ESMF_Geom)         :: geom
        real, dimension(:,:), allocatable   :: farray
        real, dimension(:,:), pointer       :: farray1

        type(ESMF_VM)                               :: vm
        integer                                     :: lpe
        integer, dimension(2)             :: ec, cc
        integer, dimension(2)             :: gelb, geub, gclb, gcub
        type(ESMF_StaggerLoc)                       :: sloc

        integer                                     :: totalCount(1:2), dimCount

        rc = ESMF_SUCCESS
        localrc = ESMF_SUCCESS

        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_VMGetGlobal(vm, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_VMGet(vm, localPet=lpe, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return
!        print *, 'localPet = ', lpe
        sloc = ESMF_STAGGERLOC_CENTER
        call ESMF_GridGet(grid, localDe=0, staggerloc=sloc, &
           exclusiveLBound=gelb, exclusiveUBound=geub, exclusiveCount=ec,  &
           computationalLBound=gclb, computationalUBound=gcub, computationalCount=cc, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

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

        ! Create a geom and use that instead of the Grid
        geom=ESMF_GeomCreate(grid, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        ! call into GeomGet() for test coverage
        call ESMF_GeomGet(geom, dimCount=dimCount, rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        field = ESMF_FieldCreate(geom, farray, &
             indexflag=ESMF_INDEX_DELOCAL, &
             datacopyflag=ESMF_DATACOPY_VALUE, &
            rc=localrc)
        if (ESMF_LogFoundError(localrc, &
            ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

        call ESMF_FieldGet(field, localDe=0, farrayPtr=farray1, totalCount=totalCount, &
          rc=localrc)
        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_GeomDestroy(geom, 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 test_geom