Skip to content

Commit

Permalink
Merge branch 'master' into feature/bug_fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Mariana Vertenstein committed Aug 6, 2020
2 parents 4f5499d + f5fef94 commit 54b6bb7
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 10 deletions.
3 changes: 3 additions & 0 deletions datm/cime_config/namelist_definition_datm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2072,6 +2072,7 @@
u10 Sa_u
v10 Sa_v
t2m Sa_tbot
skt Sa_tskn
d2m Sa_tdew
msl Sa_pslv
sp Sa_pbot
Expand All @@ -2081,7 +2082,9 @@
csf Faxa_snowc
lsf Faxa_snowl
ssrd Faxa_swdn
ssr Faxa_swnet
strd Faxa_lwdn
str Faxa_lwnet
aluvp Faxa_swvdr
aluvd Faxa_swvdf
alnip Faxa_swndr
Expand Down
8 changes: 8 additions & 0 deletions datm/cime_config/testdefs/testlist_datm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,5 +102,13 @@
<option name="wallclock"> 00:10:00 </option>
</options>
</test>
<test compset="2000_DATM%ERA5_SLND_SICE_SOCN_SROF_SGLC_SWAV_SESP" grid="TL319_t061" name="SMS_Vnuopc_Ld5">
<machines>
<machine name="cheyenne" compiler="intel" category="aux_cdeps"/>
</machines>
<options>
<option name="wallclock"> 00:10:00 </option>
</options>
</test>

</testlist>
32 changes: 28 additions & 4 deletions datm/datm_datamode_era5_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,15 @@ module datm_datamode_era5_mod
real(r8), pointer :: Sa_z(:) => null()
real(r8), pointer :: Sa_u(:) => null()
real(r8), pointer :: Sa_v(:) => null()
real(r8), pointer :: Sa_wspd(:) => null()
real(r8), pointer :: Sa_tbot(:) => null()
real(r8), pointer :: Sa_ptem(:) => null()
real(r8), pointer :: Sa_shum(:) => null()
real(r8), pointer :: Sa_dens(:) => null()
real(r8), pointer :: Sa_pbot(:) => null()
real(r8), pointer :: Sa_pslv(:) => null()
real(r8), pointer :: Faxa_lwdn(:) => null()
real(r8), pointer :: Faxa_lwnet(:) => null()
real(r8), pointer :: Faxa_rain(:) => null()
real(r8), pointer :: Faxa_rainc(:) => null()
real(r8), pointer :: Faxa_rainl(:) => null()
Expand Down Expand Up @@ -61,7 +63,7 @@ module datm_datamode_era5_mod
real(r8) , parameter :: rdair = SHR_CONST_RDAIR ! dry air gas constant ~ J/K/kg
real(r8) , parameter :: rhofw = SHR_CONST_RHOFW ! density of fresh water ~ kg/m^3

character(*), parameter :: nullstr = 'null'
character(*), parameter :: nullstr = 'undefined'
character(*), parameter :: rpfile = 'rpointer.atm'
character(*), parameter :: u_FILE_u = &
__FILE__
Expand Down Expand Up @@ -89,7 +91,9 @@ subroutine datm_datamode_era5_advertise(exportState, fldsexport, &
call dshr_fldList_add(fldsExport, 'Sa_z' )
call dshr_fldList_add(fldsExport, 'Sa_u' )
call dshr_fldList_add(fldsExport, 'Sa_v' )
call dshr_fldList_add(fldsExport, 'Sa_wspd' )
call dshr_fldList_add(fldsExport, 'Sa_tbot' )
call dshr_fldList_add(fldsExport, 'Sa_tskn' )
call dshr_fldList_add(fldsExport, 'Sa_ptem' )
call dshr_fldList_add(fldsExport, 'Sa_dens' )
call dshr_fldList_add(fldsExport, 'Sa_pslv' )
Expand All @@ -104,9 +108,10 @@ subroutine datm_datamode_era5_advertise(exportState, fldsexport, &
call dshr_fldList_add(fldsExport, 'Faxa_swvdr' )
call dshr_fldList_add(fldsExport, 'Faxa_swndf' )
call dshr_fldList_add(fldsExport, 'Faxa_swvdf' )
call dshr_fldList_add(fldsExport, 'Faxa_swdn' )
call dshr_fldList_add(fldsExport, 'Faxa_swnet' )
call dshr_fldList_add(fldsExport, 'Faxa_lwdn' )
call dshr_fldList_add(fldsExport, 'Faxa_swdn' )
call dshr_fldList_add(fldsExport, 'Faxa_lwnet' )
call dshr_fldList_add(fldsExport, 'Faxa_sen' )
call dshr_fldList_add(fldsExport, 'Faxa_lat' )
call dshr_fldList_add(fldsExport, 'Faxa_taux' )
Expand All @@ -116,7 +121,7 @@ subroutine datm_datamode_era5_advertise(exportState, fldsexport, &
do while (associated(fldlist))
call NUOPC_Advertise(exportState, standardName=fldlist%stdname, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call ESMF_LogWrite('(datm_comp_advertise): Fr_atm'//trim(fldList%stdname), ESMF_LOGMSG_INFO)
call ESMF_LogWrite('(datm_comp_advertise): Fr_atm '//trim(fldList%stdname), ESMF_LOGMSG_INFO)
fldList => fldList%next
enddo

Expand Down Expand Up @@ -144,6 +149,12 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc)
! get export state pointers
call dshr_state_getfldptr(exportState, 'Sa_z' , fldptr1=Sa_z , rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Sa_u' , fldptr1=Sa_u , rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Sa_v' , fldptr1=Sa_v , rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Sa_wspd' , fldptr1=Sa_wspd , allowNullReturn=.true., rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Sa_tbot' , fldptr1=Sa_tbot , rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Sa_pbot' , fldptr1=Sa_pbot , rc=rc)
Expand Down Expand Up @@ -176,6 +187,8 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Faxa_swdn' , fldptr1=Faxa_swdn , rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Faxa_lwnet' , fldptr1=Faxa_lwnet , allowNullReturn=.true., rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Faxa_lwdn' , fldptr1=Faxa_lwdn , rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call dshr_state_getfldptr(exportState, 'Faxa_sen' , fldptr1=Faxa_sen , rc=rc)
Expand Down Expand Up @@ -241,6 +254,11 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom,
!--- bottom layer height ---
Sa_z(n) = 10.0_r8

!--- calculate wind speed ---
if (associated(Sa_wspd)) then
Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n))
end if

!--- temperature ---
if (tbotmax < 50.0_r8) Sa_tbot(n) = Sa_tbot(n) + tkFrz
! Limit very cold forcing to 180K
Expand All @@ -265,8 +283,11 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom,
Faxa_swvdf(n) = Faxa_swdn(n)*Faxa_swvdf(n)
Faxa_swndf(n) = Faxa_swdn(n)*Faxa_swndf(n)

!--- TODO: need to understand relationship between shortwave bands and net shortwave rad.
!--- currently it is provided directly from ERA5 and the total of the bands are not
!--- consistent with the swnet
!--- swnet: a diagnostic quantity ---
Faxa_swnet(n) = Faxa_swndr(n) + Faxa_swvdr(n) + Faxa_swndf(n) + Faxa_swvdf(n)
!Faxa_swnet(n) = Faxa_swndr(n) + Faxa_swvdr(n) + Faxa_swndf(n) + Faxa_swvdf(n)
end do

!----------------------------------------------------------
Expand All @@ -275,6 +296,9 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom,

! convert J/m^2 to W/m^2
Faxa_lwdn(:) = Faxa_lwdn(:)/3600.0_r8
if (associated(Faxa_lwnet)) then
Faxa_lwnet(:) = Faxa_lwnet(:)/3600.0_r8
end if
Faxa_swdn(:) = Faxa_swdn(:)/3600.0_r8
Faxa_swvdr(:) = Faxa_swvdr(:)/3600.0_r8
Faxa_swndr(:) = Faxa_swndr(:)/3600.0_r8
Expand Down
31 changes: 25 additions & 6 deletions streams/dshr_methods_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ module dshr_methods_mod
contains
!===============================================================================

subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc)
subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, allowNullReturn, rc)

! ----------------------------------------------
! Get pointer to a state field
Expand All @@ -41,20 +41,39 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc)
character(len=*) , intent(in) :: fldname
real(R8) , pointer, intent(inout), optional :: fldptr1(:)
real(R8) , pointer, intent(inout), optional :: fldptr2(:,:)
logical , intent(in),optional :: allowNullReturn
integer , intent(out) :: rc

! local variables
type(ESMF_Field) :: lfield
type(ESMF_Field) :: lfield
integer :: itemCount
character(len=*), parameter :: subname='(dshr_state_getfldptr)'
! ----------------------------------------------

rc = ESMF_SUCCESS

call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
if (present(allowNullReturn)) then
call ESMF_StateGet(State, itemSearch=trim(fldname), itemCount=itemCount, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

! check field is in the state or not?
if (itemCount >= 1) then
call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
else
! the call to just returns if it cannot find the field
call ESMF_LogWrite(trim(subname)//" Could not find the field: "//trim(fldname)//" just returning", ESMF_LOGMSG_INFO)
end if
else
call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return

call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
end if

end subroutine dshr_state_getfldptr

Expand Down

0 comments on commit 54b6bb7

Please sign in to comment.