make_mesh_sph Function

function make_mesh_sph(atm_nx, atm_ny, atm_dx, atm_dy, atm_sx, atm_sy, tag, scheme, rc)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: atm_nx
integer, intent(in) :: atm_ny
real(kind=ESMF_KIND_R4), intent(in) :: atm_dx
real(kind=ESMF_KIND_R4), intent(in) :: atm_dy
real(kind=ESMF_KIND_R4), intent(in) :: atm_sx
real(kind=ESMF_KIND_R4), intent(in) :: atm_sy
character(len=*), intent(in), optional :: tag
integer, intent(in), optional :: scheme
integer, intent(out), optional :: rc

Return Value type(ESMF_Mesh)


Calls

proc~~make_mesh_sph~2~~CallsGraph proc~make_mesh_sph~2 make_mesh_sph interface~esmf_gridaddcoord ESMF_GridAddCoord proc~make_mesh_sph~2->interface~esmf_gridaddcoord interface~esmf_gridcreate1peridim ESMF_GridCreate1PeriDim proc~make_mesh_sph~2->interface~esmf_gridcreate1peridim interface~esmf_gridcreatenoperidim ESMF_GridCreateNoPeriDim proc~make_mesh_sph~2->interface~esmf_gridcreatenoperidim interface~esmf_gridgetcoord ESMF_GridGetCoord proc~make_mesh_sph~2->interface~esmf_gridgetcoord proc~esmf_gridtomesh ESMF_GridToMesh proc~make_mesh_sph~2->proc~esmf_gridtomesh proc~esmf_logfounderror ESMF_LogFoundError proc~make_mesh_sph~2->proc~esmf_logfounderror proc~esmf_gridaddcoordnovalues ESMF_GridAddCoordNoValues interface~esmf_gridaddcoord->proc~esmf_gridaddcoordnovalues proc~esmf_gridcreate1peridima ESMF_GridCreate1PeriDimA interface~esmf_gridcreate1peridim->proc~esmf_gridcreate1peridima proc~esmf_gridcreate1peridimi ESMF_GridCreate1PeriDimI interface~esmf_gridcreate1peridim->proc~esmf_gridcreate1peridimi proc~esmf_gridcreate1peridimr ESMF_GridCreate1PeriDimR interface~esmf_gridcreate1peridim->proc~esmf_gridcreate1peridimr 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_gridgetcoord1dr4 ESMF_GridGetCoord1DR4 interface~esmf_gridgetcoord->proc~esmf_gridgetcoord1dr4 proc~esmf_gridgetcoord1dr8 ESMF_GridGetCoord1DR8 interface~esmf_gridgetcoord->proc~esmf_gridgetcoord1dr8 proc~esmf_gridgetcoord2dr4 ESMF_GridGetCoord2DR4 interface~esmf_gridgetcoord->proc~esmf_gridgetcoord2dr4 proc~esmf_gridgetcoord2dr8 ESMF_GridGetCoord2DR8 interface~esmf_gridgetcoord->proc~esmf_gridgetcoord2dr8 proc~esmf_gridgetcoord3dr4 ESMF_GridGetCoord3DR4 interface~esmf_gridgetcoord->proc~esmf_gridgetcoord3dr4 proc~esmf_gridgetcoord3dr8 ESMF_GridGetCoord3DR8 interface~esmf_gridgetcoord->proc~esmf_gridgetcoord3dr8 proc~esmf_gridgetcoordinfo ESMF_GridGetCoordInfo interface~esmf_gridgetcoord->proc~esmf_gridgetcoordinfo proc~esmf_gridgetcoordintoarray ESMF_GridGetCoordIntoArray interface~esmf_gridgetcoord->proc~esmf_gridgetcoordintoarray proc~esmf_gridgetcoordr4 ESMF_GridGetCoordR4 interface~esmf_gridgetcoord->proc~esmf_gridgetcoordr4 proc~esmf_gridgetcoordr8 ESMF_GridGetCoordR8 interface~esmf_gridgetcoord->proc~esmf_gridgetcoordr8 proc~esmf_gridtomesh->proc~esmf_logfounderror c_esmc_gridtomesh c_esmc_gridtomesh proc~esmf_gridtomesh->c_esmc_gridtomesh interface~esmf_gridget ESMF_GridGet proc~esmf_gridtomesh->interface~esmf_gridget interface~esmf_interarraycreate ESMF_InterArrayCreate proc~esmf_gridtomesh->interface~esmf_interarraycreate interface~esmf_meshcreate ESMF_MeshCreate proc~esmf_gridtomesh->interface~esmf_meshcreate proc~esmf_interarraydestroy ESMF_InterArrayDestroy proc~esmf_gridtomesh->proc~esmf_interarraydestroy 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~~make_mesh_sph~2~~CalledByGraph proc~make_mesh_sph~2 make_mesh_sph proc~test3~2 test3 proc~test3~2->proc~make_mesh_sph~2 program~esmf_meshoputest ESMF_MeshOpUTest program~esmf_meshoputest->proc~test3~2

Source Code

  function make_mesh_sph(atm_nx, atm_ny, atm_dx, atm_dy, atm_sx, atm_sy, tag, scheme, rc)

    ! return value
    type(ESMF_Mesh)                           :: make_mesh_sph
    ! arguments
    integer, intent(in)                       :: atm_nx, atm_ny
    real(ESMF_KIND_R4), intent(in)            :: atm_dx, atm_dy
    real(ESMF_KIND_R4), intent(in)            :: atm_sx, atm_sy
    character(len=*), intent(in), optional    :: tag
    integer, intent(in) , optional            :: scheme
    integer, intent(out), optional            :: rc

    ! local variables
    integer                                   :: localrc, i, j
    real(ESMF_KIND_R8), pointer               :: coordX(:,:), coordY(:,:)
    real(ESMF_KIND_R8)                        :: startx, starty
    integer                                   :: l_scheme
    type(ESMF_Grid)                           :: make_grid_sph

    l_scheme = ESMF_REGRID_SCHEME_REGION3D
    if(present(scheme)) l_scheme = scheme

    if(l_scheme == ESMF_REGRID_SCHEME_FULL3D) then
      make_grid_sph = ESMF_GridCreate1PeriDim(maxIndex=(/atm_nx, atm_ny/), &
        indexflag=ESMF_INDEX_GLOBAL, &
        gridEdgeLWidth=(/0,0/), gridEdgeUWidth=(/0,1/), &
        !regDecomp=(/npet, 1/), &
        rc=localrc)
    else
      make_grid_sph = ESMF_GridCreateNoPeriDim(maxIndex=(/atm_nx, atm_ny/), &
        indexflag=ESMF_INDEX_GLOBAL, &
        gridEdgeLWidth=(/0,0/), gridEdgeUWidth=(/1,1/), &
        !regDecomp=(/npet, 1/), &
        rc=localrc)
    endif 
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return

    call ESMF_GridAddCoord(make_grid_sph, staggerloc=ESMF_STAGGERLOC_CENTER, &
        rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return
    call ESMF_GridAddCoord(make_grid_sph, staggerloc=ESMF_STAGGERLOC_CORNER, &
        rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return

    ! global indexing
    ! atm grid is not decomposed in the y direction
    !startx = lpet*atm_nx/npet*atm_dx
    startx = atm_sx
    starty = atm_sy
    ! compute coord
    ! X center
    call ESMF_GridGetCoord(make_grid_sph, localDE=0, staggerLoc=ESMF_STAGGERLOC_CENTER, &
        coordDim=1, farrayPtr=coordX, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return
    ! Y center
    call ESMF_GridGetCoord(make_grid_sph, localDE=0, staggerLoc=ESMF_STAGGERLOC_CENTER, &
        coordDim=2, farrayPtr=coordY, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return
    do i = lbound(coordX,1), ubound(coordX,1)
      do j = lbound(coordX, 2), ubound(coordX, 2)
        coordX(i,j) = startx + atm_dx/2. + (i-1)*atm_dx
        coordY(i,j) = starty + atm_dy/2. + (j-1)*atm_dy
      enddo
    enddo
    !print *, 'startx: ', startx, lbound(coordX, 1), ubound(coordX, 1), 'coordX: ', coordX(:,1)
    ! X corner
    call ESMF_GridGetCoord(make_grid_sph, localDE=0, staggerLoc=ESMF_STAGGERLOC_CORNER, &
        coordDim=1, farrayPtr=coordX, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return
    ! Y corner
    call ESMF_GridGetCoord(make_grid_sph, localDE=0, staggerLoc=ESMF_STAGGERLOC_CORNER, &
        coordDim=2, farrayPtr=coordY, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return
    do i = lbound(coordX,1), ubound(coordX,1)
      do j = lbound(coordX, 2), ubound(coordX, 2)
        coordX(i,j) = startx + (i-1)*atm_dx
        coordY(i,j) = starty + (j-1)*atm_dy
      enddo
    enddo

    make_mesh_sph = ESMF_GridToMesh(make_grid_sph, &
      ESMF_STAGGERLOC_CORNER, 0, &
      regridConserve=ESMF_REGRID_CONSERVE_ON, rc=localrc)
    if (ESMF_LogFoundError(localrc, &
        ESMF_ERR_PASSTHRU, &
        ESMF_CONTEXT, rcToReturn=rc)) return

    if(present(rc)) rc = ESMF_SUCCESS

  end function make_mesh_sph