test_field_create Subroutine

subroutine test_field_create(rc, n_loop)

Arguments

Type IntentOptional Attributes Name
integer, intent(inout) :: rc
integer, intent(in) :: n_loop

Calls

proc~~test_field_create~~CallsGraph proc~test_field_create test_field_create esmf_arraycreate esmf_arraycreate proc~test_field_create->esmf_arraycreate esmf_arraydestroy esmf_arraydestroy proc~test_field_create->esmf_arraydestroy esmf_fieldcreate esmf_fieldcreate proc~test_field_create->esmf_fieldcreate esmf_fielddestroy esmf_fielddestroy proc~test_field_create->esmf_fielddestroy interface~esmf_gridcreatenoperidim ESMF_GridCreateNoPeriDim proc~test_field_create->interface~esmf_gridcreatenoperidim interface~esmf_gridget ESMF_GridGet proc~test_field_create->interface~esmf_gridget proc~esmf_griddestroy ESMF_GridDestroy proc~test_field_create->proc~esmf_griddestroy proc~esmf_logfounderror ESMF_LogFoundError proc~test_field_create->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

Source Code

    subroutine test_field_create(rc, n_loop)
        integer, intent(inout) :: rc
        integer, intent(in)    :: n_loop

        real(ESMF_KIND_R8), dimension(:,:), pointer :: farray
        type(ESMF_Field)    :: field
        type(ESMF_Grid)     :: grid
        type(ESMF_DistGrid) :: distgrid
        type(ESMF_Array)    :: array
        integer             :: localrc, i

        integer             :: gcc(2), gec(2)

        localrc = ESMF_SUCCESS
        rc = ESMF_SUCCESS
        do i = 1, n_loop
            grid = ESMF_GridCreateNoPeriDim(minIndex=(/1,1/), maxIndex=(/10,20/), &
                                      regDecomp=(/1,1/), name="landgrid", rc=localrc)
            if (ESMF_LogFoundError(localrc, &
                ESMF_ERR_PASSTHRU, &
                ESMF_CONTEXT, rcToReturn=rc)) return

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

            call ESMF_GridGet(grid, localde=0, staggerloc=ESMF_STAGGERLOC_CENTER, &
                computationalCount=gcc, exclusiveCount=gec, rc=localrc)
            if (ESMF_LogFoundError(localrc, &
                ESMF_ERR_PASSTHRU, &
                ESMF_CONTEXT, rcToReturn=rc)) return

            allocate(farray(max(gcc(1), gec(1)), max(gcc(2), gec(2))) )

            array = ESMF_ArrayCreate(distgrid, farray, &
                indexflag=ESMF_INDEX_DELOCAL, &
                computationalEdgeUWidth=(/-1,-1/), rc=localrc)
            if (ESMF_LogFoundError(localrc, &
                ESMF_ERR_PASSTHRU, &
                ESMF_CONTEXT, rcToReturn=rc)) return

            field = ESMF_FieldCreate(grid, array, datacopyflag=ESMF_DATACOPY_VALUE, 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_ArrayDestroy(array, 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)
        enddo
        rc = localrc

    end subroutine test_field_create