Skip to content

Commit

Permalink
Merge pull request #69 from ESCOMP/nems_fix
Browse files Browse the repository at this point in the history
fix for NEMS app
  • Loading branch information
uturuncoglu committed Jun 11, 2020
2 parents 7598eb9 + 628501f commit 70b5daa
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 102 deletions.
9 changes: 5 additions & 4 deletions mediator/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,14 @@ clean:
med_kind_mod.o :
med_constants_mod.o : med_kind_mod.o
esmFlds.o : med_kind_mod.o
esmFldsExchange_cesm_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o
eesmFldsExchange_nems_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o
esmFldsExchange_cesm_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o
esmFldsExchange_nems_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o
esmFldsExchange_hafs_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o
med.o : med_kind_mod.o med_phases_profile_mod.o med_utils_mod.o med_phases_prep_rof_mod.o med_phases_aofluxes_mod.o \
med_phases_prep_ice_mod.o med_fraction_mod.o med_map_mod.o med_constants_mod.o med_phases_prep_wav_mod.o \
med_phases_prep_lnd_mod.o med_phases_history_mod.o med_phases_ocnalb_mod.o med_phases_restart_mod.o \
med_time_mod.o med_internalstate_mod.o med_phases_prep_atm_mod.o esmFldsExchange_cesm_mod.o esmFldsExchange_nems_mod.o\
med_phases_prep_glc_mod.o esmFlds.o med_io_mod.o med_methods_mod.o med_phases_prep_ocn_mod.o
med_time_mod.o med_internalstate_mod.o med_phases_prep_atm_mod.o esmFldsExchange_cesm_mod.o esmFldsExchange_nems_mod.o \
esmFldsExchange_hafs_mod.o med_phases_prep_glc_mod.o esmFlds.o med_io_mod.o med_methods_mod.o med_phases_prep_ocn_mod.o
med_fraction_mod.o : med_kind_mod.o med_utils_mod.o med_internalstate_mod.o med_constants_mod.o med_map_mod.o med_methods_mod.o esmFlds.o
med_internalstate_mod.o : med_kind_mod.o esmFlds.o
med_io_mod.o : med_kind_mod.o med_methods_mod.o med_constants_mod.o med_internalstate_mod.o med_utils_mod.o
Expand Down
204 changes: 106 additions & 98 deletions mediator/med.F90
Original file line number Diff line number Diff line change
Expand Up @@ -2184,7 +2184,7 @@ end subroutine med_finalize
subroutine med_grid_write(grid, fileName, rc)

use ESMF, only : ESMF_Grid, ESMF_Array, ESMF_ArrayBundle
use ESMF, only : ESMF_ArrayBundleCreate
use ESMF, only : ESMF_ArrayBundleCreate, ESMF_GridGet
use ESMF, only : ESMF_GridGetCoord, ESMF_ArraySet, ESMF_ArrayBundleAdd
use ESMF, only : ESMF_GridGetItem, ESMF_ArrayBundleWrite, ESMF_ArrayBundleDestroy
use ESMF, only : ESMF_STAGGERLOC_CENTER, ESMF_STAGGERLOC_CORNER
Expand All @@ -2198,149 +2198,157 @@ subroutine med_grid_write(grid, fileName, rc)
! local variables
type(ESMF_Array) :: array
type(ESMF_ArrayBundle) :: arrayBundle
integer :: tileCount
logical :: isPresent
character(len=*), parameter :: subname='(module_MED_Map:med_grid_write)'
!-------------------------------------------------------------------------------

rc = ESMF_SUCCESS

! Create arraybundle to store grid information
arrayBundle = ESMF_ArrayBundleCreate(rc=rc)
! Check that the grid has tiles or not
! Currently only supports single tile
call ESMF_GridGet(grid, tileCount=tileCount, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Query grid for center stagger
! Coordinates
call ESMF_GridGetCoord(grid, staggerLoc=ESMF_STAGGERLOC_CENTER, &
isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

if (isPresent) then
call ESMF_GridGetCoord(grid, coordDim=1, &
staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc)
if (tileCount .eq. 1) then
! Create arraybundle to store grid information
arrayBundle = ESMF_ArrayBundleCreate(rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArraySet(array, name="lon_center", rc=rc)
! Query grid for center stagger
! Coordinates
call ESMF_GridGetCoord(grid, staggerLoc=ESMF_STAGGERLOC_CENTER, &
isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
if (isPresent) then
call ESMF_GridGetCoord(grid, coordDim=1, &
staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_GridGetCoord(grid, coordDim=2, &
staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="lon_center", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArraySet(array, name="lat_center", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif
call ESMF_GridGetCoord(grid, coordDim=2, &
staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArraySet(array, name="lat_center", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Mask
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_MASK, &
staggerLoc=ESMF_STAGGERLOC_CENTER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif

if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CENTER, &
itemflag=ESMF_GRIDITEM_MASK, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArraySet(array, name="mask_center", rc=rc)
! Mask
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_MASK, &
staggerLoc=ESMF_STAGGERLOC_CENTER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif
if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CENTER, &
itemflag=ESMF_GRIDITEM_MASK, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Area
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_AREA, &
staggerLoc=ESMF_STAGGERLOC_CENTER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="mask_center", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CENTER, &
itemflag=ESMF_GRIDITEM_AREA, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif

call ESMF_ArraySet(array, name="area_center", rc=rc)
! Area
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_AREA, &
staggerLoc=ESMF_STAGGERLOC_CENTER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif
if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CENTER, &
itemflag=ESMF_GRIDITEM_AREA, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Query grid for corner stagger
! Coordinates
call ESMF_GridGetCoord(grid, staggerLoc=ESMF_STAGGERLOC_CORNER, &
isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="area_center", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

if (isPresent) then
call ESMF_GridGetCoord(grid, coordDim=1, &
staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif

call ESMF_ArraySet(array, name="lon_corner", rc=rc)
! Query grid for corner stagger
! Coordinates
call ESMF_GridGetCoord(grid, staggerLoc=ESMF_STAGGERLOC_CORNER, &
isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
if (isPresent) then
call ESMF_GridGetCoord(grid, coordDim=1, &
staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_GridGetCoord(grid, coordDim=2, &
staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="lon_corner", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArraySet(array, name="lat_corner", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif
call ESMF_GridGetCoord(grid, coordDim=2, &
staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Mask
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_MASK, &
staggerLoc=ESMF_STAGGERLOC_CORNER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="lat_corner", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_MASK, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif

call ESMF_ArraySet(array, name="mask_corner", rc=rc)
! Mask
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_MASK, &
staggerLoc=ESMF_STAGGERLOC_CORNER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif
if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_MASK, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Area
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_AREA, &
staggerLoc=ESMF_STAGGERLOC_CORNER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="mask_corner", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_AREA, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif

call ESMF_ArraySet(array, name="area_corner", rc=rc)
! Area
call ESMF_GridGetItem(grid, itemflag=ESMF_GRIDITEM_AREA, &
staggerLoc=ESMF_STAGGERLOC_CORNER, isPresent=isPresent, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif
if (isPresent) then
call ESMF_GridGetItem(grid, staggerLoc=ESMF_STAGGERLOC_CORNER, &
itemflag=ESMF_GRIDITEM_AREA, array=array, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Write arraybundle to file
call ESMF_ArrayBundleWrite(arrayBundle, &
fileName=trim(fileName), overwrite=.true., rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArraySet(array, name="area_corner", rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Destroy arraybundle
call ESMF_ArrayBundleDestroy(arrayBundle, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_ArrayBundleAdd(arrayBundle, (/array/), rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
endif

! Write arraybundle to file
call ESMF_ArrayBundleWrite(arrayBundle, &
fileName=trim(fileName), overwrite=.true., rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! Destroy arraybundle
call ESMF_ArrayBundleDestroy(arrayBundle, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
end if

end subroutine med_grid_write

Expand Down

0 comments on commit 70b5daa

Please sign in to comment.