diff --git a/lvt/configs/lvt.config.master b/lvt/configs/lvt.config.master index 1be670802..11646cf6f 100644 --- a/lvt/configs/lvt.config.master +++ b/lvt/configs/lvt.config.master @@ -220,6 +220,7 @@ LVT output methodology: "2d gridspace" #latex: ``USCRN soil moisture'' & USCRN soil moisture data\\ #latex: ``SMAP soil moistu'' & SMAP soil moisture data\\ #latex: ``SMAP vegetation water content'' & SMAP vegetation water content\\ +#latex: ``UA SNOW'' & University of Arizona SWE/Snow depth data\\ #latex: ``SMAP L3 Tb'' & SMAP L3 brightness temperature\\ #latex: \end{tabular} #latex: @@ -2860,6 +2861,20 @@ WG SWRC observation directory: WG SWRC station list file: #latex: END_CONFIG +#latex: BEGIN_DESCRIPTION +#latex: \subsubsection{UA SNOW observations} +#latex: END_DESCRIPTION + +#latex: BEGIN_DESCRIPTION +#latex: \var{UA SNOW observation directory:} specifies the location of +#latex: the University of Arizona SWE data +#latex: +#latex: END_DESCRIPTION + +#latex: BEGIN_CONFIG +UA SNOW observation directory: ./UA_SNOW +#latex: END_CONFIG + #latex: BEGIN_DESCRIPTION #latex: \subsection{OptUE processing options} \label{ssec:optue} #latex: This section of the config file specifies the details of the diff --git a/lvt/datastreams/UA_SNOW/UASNOW_obsMod.F90 b/lvt/datastreams/UA_SNOW/UASNOW_obsMod.F90 new file mode 100755 index 000000000..4783ec73c --- /dev/null +++ b/lvt/datastreams/UA_SNOW/UASNOW_obsMod.F90 @@ -0,0 +1,158 @@ +!-----------------------BEGIN NOTICE -- DO NOT EDIT----------------------------- +! NASA GSFC Land surface Verification Toolkit (LVT) V1.0 +!-------------------------END NOTICE -- DO NOT EDIT----------------------------- +!BOP +! +! !MODULE: UASNOW_obsMod +! \label(UASNOW_obsMod) +! +! !INTERFACE: +module UASNOW_obsMod +! +! !USES: + use ESMF + + implicit none + PRIVATE +! +! !INPUT PARAMETERS: +! +! !OUTPUT PARAMETERS: +! +! !DESCRIPTION: +! This module handles the observation plugin for the +! University of Arizona (UA) SWE/Snow Depth data v01. +! The UA SNOW data is provided in the NAD 1983 grid +! with ~4-km resolution. The domain extents are from +! approximately (24N, -125W) to (50N, -66.5W). +! The data entries are 16-bit signed integers. +! +! Temporal coverage is from 1 Oct 1981 - 30 Sep 2017. +! The data is organized by Water Years. +! +! !FILES USED: +! +! !REVISION HISTORY: +! 28 May 2019: Rhae Sung Kim, Initial Specification! +! 19 Jun 2019: David Mocko, Set valid time of data to 12Z +! +!EOP + + PUBLIC :: UASNOW_obsinit + PUBLIC :: uasnowobs + + type, public :: uasnowobsdec + character*100 :: odir + integer :: nc, nr + integer :: yr + type(ESMF_Time) :: startTime + type(ESMF_TimeInterval) :: timeStep + + real, allocatable :: rlat(:) + real, allocatable :: rlon(:) + integer, allocatable :: n11(:) + integer, allocatable :: n12(:) + integer, allocatable :: n21(:) + integer, allocatable :: n22(:) + real, allocatable :: w11(:) + real, allocatable :: w12(:) + real, allocatable :: w21(:) + real, allocatable :: w22(:) + real, allocatable :: swe(:,:) + real, allocatable :: snwd(:,:) + end type uasnowobsdec + + type(uasnowobsdec), allocatable :: uasnowobs(:) + +contains + +!BOP +! +! !ROUTINE: UASNOW_obsinit +! \label{UASNOW_obsinit} +! +! !INTERFACE: + subroutine UASNOW_obsinit(i) +! +! !USES: + use ESMF + use LVT_coreMod + use LVT_histDataMod + use LVT_timeMgrMod + use LVT_logMod + + implicit none +! +! !INPUT PARAMETERS: + integer, intent(IN) :: i +! +! !OUTPUT PARAMETERS: +! +! !DESCRIPTION: +! This subroutine initializes and sets up the data structures +! required for reading UA SNOW data. +! +! !FILES USED: +! +!EOP + + real :: gridDesci(50) + integer :: status + + if(.not.allocated(uasnowobs)) then + allocate(uasnowobs(LVT_rc%nDataStreams)) + endif + + call ESMF_ConfigGetAttribute(LVT_config, uasnowobs(i)%odir, & + label='UA SNOW observation directory:',rc=status) + call LVT_verify(status, 'UA SNOW observation directory: not defined') + + gridDesci = 0 + call LVT_update_timestep(LVT_rc, 3600) + + allocate(uasnowobs(i)%rlat(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%rlon(LVT_rc%lnc*LVT_rc%lnr)) + + allocate(uasnowobs(i)%w11(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%w12(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%w21(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%w22(LVT_rc%lnc*LVT_rc%lnr)) + + allocate(uasnowobs(i)%n11(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%n12(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%n21(LVT_rc%lnc*LVT_rc%lnr)) + allocate(uasnowobs(i)%n22(LVT_rc%lnc*LVT_rc%lnr)) + + uasnowobs(i)%nc = 1405 + uasnowobs(i)%nr = 621 + + gridDesci(1) = 0 + gridDesci(2) = 1405 + gridDesci(3) = 621 + gridDesci(4) = 24.0833340 + gridDesci(5) = -125.0000 + gridDesci(6) = 128 + gridDesci(7) = 49.9166679 + gridDesci(8) = -66.5000 + gridDesci(9) = 0.04166662697178698 + gridDesci(10) = 0.04166662697178698 + gridDesci(20) = 64 + + call bilinear_interp_input(gridDesci,LVT_rc%gridDesc,& + LVT_rc%lnc*LVT_rc%lnr, & + uasnowobs(i)%rlat, uasnowobs(i)%rlon, & + uasnowobs(i)%n11, uasnowobs(i)%n12, & + uasnowobs(i)%n21, uasnowobs(i)%n22, & + uasnowobs(i)%w11, uasnowobs(i)%w12, & + uasnowobs(i)%w21, uasnowobs(i)%w22) + + allocate(uasnowobs(i)%swe(uasnowobs(i)%nc,uasnowobs(i)%nr)) + allocate(uasnowobs(i)%snwd(uasnowobs(i)%nc,uasnowobs(i)%nr)) + + call ESMF_TimeIntervalSet(uasnowobs(i)%timestep, s=86400, rc=status) + call LVT_verify(status, 'error in setting timestep (uasnowobs)') + + end subroutine UASNOW_obsinit + + +end module UASNOW_obsMod diff --git a/lvt/datastreams/UA_SNOW/readUASNOWObs.F90 b/lvt/datastreams/UA_SNOW/readUASNOWObs.F90 new file mode 100755 index 000000000..fb553adef --- /dev/null +++ b/lvt/datastreams/UA_SNOW/readUASNOWObs.F90 @@ -0,0 +1,277 @@ +!-----------------------BEGIN NOTICE -- DO NOT EDIT----------------------------- +! NASA GSFC Land surface Verification Toolkit (LVT) V1.0 +!-------------------------END NOTICE -- DO NOT EDIT----------------------------- +#include "LVT_misc.h" +!BOP +! +! !ROUTINE: readUASNOWObs +! \label{readUASNOWObs} +! +! !INTERFACE: +subroutine readUASNOWObs(source) +! +! !USES: + use ESMF + use LVT_histDataMod + use LVT_coreMod, only : LVT_rc + use LVT_timeMgrMod, only : LVT_calendar + use LVT_logMod, only : LVT_logunit, LVT_verify + use UASNOW_obsMod, only : uasnowobs + use map_utils + +#if(defined USE_NETCDF3 || defined USE_NETCDF4) + use netcdf +#endif + + implicit none +! +! !INPUT PARAMETERS: + integer, intent(in) :: source +! +! !OUTPUT PARAMETERS: +! +! !DESCRIPTION: +! This subroutine reads and processes the gridded UA SNOW +! data. The data for a given year is read into memory at +! the start of a year and indexed into during each day. +! +! !REVISION HISTORY: +! 28 May 2019: Rhae Sung Kim, Initial Specification +! 19 Jun 2019: David Mocko, Set valid time of data to 12Z +! 25 Jun 2019: David Mocko, Only read one file per call +! +!EOP + + integer :: ftn + character*100 :: uafilename + logical :: file_exists + real, allocatable :: swe1(:,:,:),snwd1(:,:,:) + real :: swe_in(uasnowobs(source)%nc*uasnowobs(source)%nr) + real :: snwd_in(uasnowobs(source)%nc*uasnowobs(source)%nr) + logical*1 :: lb(uasnowobs(source)%nc*uasnowobs(source)%nr) + logical*1 :: lo(LVT_rc%lnc*LVT_rc%lnr) + real :: swe_out(LVT_rc%lnc*LVT_rc%lnr) + real :: snwd_out(LVT_rc%lnc*LVT_rc%lnr) + real :: swe_final(LVT_rc%lnc, LVT_rc%lnr) + real :: snwd_final(LVT_rc%lnc, LVT_rc%lnr) + integer :: c,r,k,nt + integer :: nid,varid + integer :: iret + type(ESMF_Time) :: uatime1 + integer :: status + real :: timenow + logical :: alarmCheck + + swe_out = LVT_rc%udef + swe_final = LVT_rc%udef + snwd_out = LVT_rc%udef + snwd_final = LVT_rc%udef + + timenow = float(LVT_rc%dhr(source)*3600 + & + LVT_rc%dmn(source)*60 + LVT_rc%dss(source)) + +! The UA dataset is a daily product, valid approximately +! at 12Z, which is the observation time of many of the +! surface products used to generate the data (personal +! communication with the UA SNOW product generators). + alarmcheck = (mod(timenow, 86400.0).eq.43200.0) + + if (alarmcheck) then + LVT_rc%resetFlag(source) = .false. + call ESMF_TimeSet(uasnowobs(source)%startTime, & + yy=LVT_rc%dyr(source), & + mm = 10, & + dd = 1, & + h = 0, & + m = 0, & + calendar = LVT_calendar, & + rc=status) + call LVT_verify(status, 'error in setting scan start time') + + uasnowobs(source)%yr = LVT_rc%dyr(source) + uasnowobs(source)%swe = LVT_rc%udef + uasnowobs(source)%snwd = LVT_rc%udef + + call create_UASNOW_filename(uasnowobs(source)%odir, & + LVT_rc%dyr(source), LVT_rc%dmo(source), nt, uafilename) + + inquire(file=trim(uafilename),exist=file_exists) + + if (file_exists) then + write(LVT_logunit,*) '[INFO] Reading UA data ',& + trim(uafilename) + + allocate(swe1(uasnowobs(source)%nc, & + uasnowobs(source)%nr,nt)) + + allocate(snwd1(uasnowobs(source)%nc, & + uasnowobs(source)%nr,nt)) + +#if(defined USE_NETCDF3 || defined USE_NETCDF4) + iret = nf90_open(path=trim(uafilename),mode=NF90_NOWRITE,ncid=nid) + call LVT_verify(iret, 'Error opening file'//trim(uafilename)) + + iret = nf90_inq_varid(nid, 'SWE',varid) + call LVT_verify(iret, 'Error nf90_inq_varid: SWE') + + iret = nf90_get_var(nid,varid, SWE1) + call LVT_verify(iret, 'Error nf90_get_var: SWE') + + iret = nf90_close(nid) + call LVT_verify(iret, 'Error nf90_close') + + iret = nf90_open(path=trim(uafilename),mode=NF90_NOWRITE,ncid=nid) + call LVT_verify(iret, 'Error opening file'//trim(uafilename)) + + iret = nf90_inq_varid(nid, 'DEPTH',varid) + call LVT_verify(iret, 'Error nf90_inq_varid: SNWD') + + iret = nf90_get_var(nid,varid, SNWD1) + call LVT_verify(iret, 'Error nf90_get_var: SNWD') + + iret = nf90_close(nid) + call LVT_verify(iret, 'Error nf90_close') +#endif + + call ESMF_TimeSet(uatime1, yy=LVT_rc%dyr(source), & + mm=LVT_rc%dmo(source), dd=LVT_rc%dda(source), & + h=LVT_rc%dhr(source), m=LVT_rc%dmn(source), & + s=LVT_rc%dss(source), calendar=LVT_calendar, rc=status) + call LVT_verify(status, 'uatime1 set failed') + + k = nint((uatime1 - uasnowobs(source)%starttime) / & + uasnowobs(source)%timestep) + if (k.lt.0) k = k + nt + 1 + + uasnowobs(source)%swe(:,:) = swe1(:,:,k) !Jan. to Sep. + uasnowobs(source)%snwd(:,:) = snwd1(:,:,k) !Jan. to Sep. + else + write(LVT_logunit,*) '[WARN] UA file not found: ',& + trim(uafilename) + endif + + deallocate(swe1) + deallocate(snwd1) + + lb = .false. + swe_in = LVT_rc%udef + snwd_in = LVT_rc%udef + + do r=1,uasnowobs(source)%nr + do c=1,uasnowobs(source)%nc + if (uasnowobs(source)%swe(c,r).ge.0) then + swe_in(c+(r-1)*uasnowobs(source)%nc) = & + uasnowobs(source)%swe(c,r) + lb(c+(r-1)*uasnowobs(source)%nc) = .true. + endif + + if (uasnowobs(source)%snwd(c,r).ge.0) then + snwd_in(c+(r-1)*uasnowobs(source)%nc) = & + uasnowobs(source)%snwd(c,r) + lb(c+(r-1)*uasnowobs(source)%nc) = .true. + endif + enddo + enddo + + call bilinear_interp(LVT_rc%gridDesc,lb,swe_in, & + lo,swe_out, & + uasnowobs(source)%nc*uasnowobs(source)%nr, & + LVT_rc%lnc*LVT_rc%lnr, & + uasnowobs(source)%rlat, & + uasnowobs(source)%rlon, & + uasnowobs(source)%w11, & + uasnowobs(source)%w12, & + uasnowobs(source)%w21, & + uasnowobs(source)%w22, & + uasnowobs(source)%n11, & + uasnowobs(source)%n12, & + uasnowobs(source)%n21, & + uasnowobs(source)%n22, & + LVT_rc%udef, iret) + + call bilinear_interp(LVT_rc%gridDesc,lb,snwd_in, & + lo,snwd_out, & + uasnowobs(source)%nc*uasnowobs(source)%nr, & + LVT_rc%lnc*LVT_rc%lnr, & + uasnowobs(source)%rlat, & + uasnowobs(source)%rlon, & + uasnowobs(source)%w11, & + uasnowobs(source)%w12, & + uasnowobs(source)%w21, & + uasnowobs(source)%w22, & + uasnowobs(source)%n11, & + uasnowobs(source)%n12, & + uasnowobs(source)%n21, & + uasnowobs(source)%n22, & + LVT_rc%udef, iret) + + do r=1,LVT_rc%lnr + do c=1, LVT_rc%lnc + swe_final(c,r) = swe_out(c+(r-1)*LVT_rc%lnc) + snwd_final(c,r) = snwd_out(c+(r-1)*LVT_rc%lnc) + enddo + enddo + + do r=1,LVT_rc%lnr + do c=1,LVT_rc%lnc + if(swe_final(c,r).ge.0) then + swe_final(c,r) = swe_final(c,r) ! (Note that 1 mm = 1 kg/m2) + else + swe_final(c,r) = LVT_rc%udef + endif + if(snwd_final(c,r).ge.0) then + snwd_final(c,r) = snwd_final(c,r)/1000.0 ! Convert mm to m + else + snwd_final(c,r) = LVT_rc%udef + endif + enddo + enddo + endif + + call LVT_logSingleDataStreamVar(LVT_MOC_SWE,source,swe_final,vlevel=1,units="kg/m2") + call LVT_logSingleDataStreamVar(LVT_MOC_SNOWDEPTH,source,snwd_final,vlevel=1,units="m") + +end subroutine readUASNOWObs + +!BOP +! +! !ROUTINE: create_UASNOW_filename +! \label(create_UASNOW_filename) +! +! !INTERFACE: +subroutine create_UASNOW_filename(odir,yr,mo,nt,uaname) +! +! !USES: + use LVT_String_Utility + implicit none +! +! !INPUT PARAMETERS: + character(len=*), intent(in) :: odir + integer, intent(in) :: yr,mo +! +! !OUTPUT PARAMETERS: + integer, intent(out) :: nt + character(len=*), intent(out) :: uaname +! + character*4 :: fyr + integer :: tmpyr + + if (mo.ge.10) then + tmpyr = yr + 1 + else + tmpyr = yr + endif + + write(fyr, '(i4.4)' ) tmpyr + +!leap year + if (((mod(tmpyr,4).eq.0).and.(mod(tmpyr,100).ne.0)).or. & + (mod(tmpyr,400).eq.0)) then + nt = 366 + else + nt = 365 + endif + + uaname = trim(odir)//'/4km_SWE_Depth_WY'//trim(fyr)//'_v01.nc' + +end subroutine create_UASNOW_filename diff --git a/lvt/make/Filepath b/lvt/make/Filepath index 876304c9b..0af05ae10 100644 --- a/lvt/make/Filepath +++ b/lvt/make/Filepath @@ -1 +1,2 @@ -dirs := . ../main ../core ../metrics ../plugins ../interp ../lib/bil ../domains/UTM ../domains/lambert ../domains/latlon ../datastreams/template ../datastreams/LISout ../datastreams/LISDAobs ../datastreams/ISCCP_Tskin ../datastreams/CEOP ../datastreams/SCAN ../datastreams/SCANGMAO ../datastreams/NASMD ../datastreams/GHCN ../datastreams/SNOTEL ../datastreams/SURFRAD ../datastreams/WGPBMR ../datastreams/LSWG_Tb ../datastreams/FMI_SWE ../datastreams/FMI_SNWD ../datastreams/CMC_SNWD ../datastreams/SNODAS ../datastreams/NASA_AMSRE_sm ../datastreams/LPRM_AMSRE_sm ../datastreams/AMMA ../datastreams/Ameriflux ../datastreams/ARM ../datastreams/SMOSREX ../datastreams/AGRMET ../datastreams/GlobSnow ../datastreams/SNODEPmetobs ../datastreams/SNODEP ../datastreams/MOD10A1 ../datastreams/MODSCAG ../datastreams/MOD10A1V6 ../datastreams/ANSA_SNWD ../datastreams/ANSA_SWE ../datastreams/CPC_PRCP ../datastreams/USGS_streamflow_gridded ../datastreams/USGS_streamflow ../datastreams/Natural_streamflow ../datastreams/ISMN ../datastreams/FLUXNETmte ../datastreams/FLUXNET2015 ../datastreams/FLUXNET2015_NC ../datastreams/MOD16A2 ../datastreams/UWET ../datastreams/ARSsm ../datastreams/NLDAS2 ../datastreams/ALEXI ../datastreams/GRACE ../datastreams/simGRACE ../datastreams/USGS_GWwell ../datastreams/PBOH2O ../datastreams/SMOS_L2sm ../datastreams/SMOS_NESDIS ../datastreams/SMOS_L1TB ../datastreams/SMOS_CATDS_L3sm ../datastreams/GCOMW_AMSR2L3sm ../datastreams/GCOMW_AMSR2L3snd ../datastreams/SMOPS ../datastreams/MODIS_LST ../datastreams/GLERL_HydroData ../datastreams/JULESdata ../datastreams/JULES2Ddata ../datastreams/ESACCI_sm ../datastreams/GIMMS_AVHRR_NDVI ../datastreams/GIMMS_MODIS_NDVI ../datastreams/GLDAS1 ../datastreams/GLDAS2 ../datastreams/MERRA2 ../datastreams/MERRA2asm ../datastreams/MERRA-Land ../datastreams/SSEBop ../datastreams/GRDC ../datastreams/GOES_LST ../datastreams/ERAinterimLand ../datastreams/SMAPsm ../datastreams/SMAPvwc ../datastreams/SMAP_L3TB ../datastreams/SMAPTB ../datastreams/GOME2_SIF ../datastreams/LVTbenchmarkOUT ../datastreams/LIS6out ../datastreams/LISDAdiag ../datastreams/Daymet ../datastreams/CMORPH ../datastreams/CHIRPSv2 ../datastreams/3B42V7 ../datastreams/USCRNsm ../datastreams/GLEAM ../datastreams/USDM ../datastreams/LVTpercentile ../datastreams/IMD_PRCP ../datastreams/APHRO_PRCP ../datastreams/GLASSlai ../datastreams/MODISsportLAI ../datastreams/FLUXCOM ../datastreams/HAR ../datastreams/OCO2_SIF ../datastreams/ECMWFforc ../datastreams/GDASforc ../datastreams/ASO_SWE ../runmodes/DataComp ../runmodes/557post ../runmodes/DAstats ../runmodes/optUE ../runmodes/Benchmarking ../training/LinearRegression/ ../datastreams/GLASSalbedo ../datastreams/IMERG +dirs := . ../main ../core ../metrics ../plugins ../interp ../lib/bil ../domains/UTM ../domains/lambert ../domains/latlon ../datastreams/template ../datastreams/LISout ../datastreams/LISDAobs ../datastreams/ISCCP_Tskin ../datastreams/CEOP ../datastreams/SCAN ../datastreams/SCANGMAO ../datastreams/NASMD ../datastreams/GHCN ../datastreams/SNOTEL ../datastreams/SURFRAD ../datastreams/WGPBMR ../datastreams/LSWG_Tb ../datastreams/FMI_SWE ../datastreams/FMI_SNWD ../datastreams/CMC_SNWD ../datastreams/SNODAS ../datastreams/NASA_AMSRE_sm ../datastreams/LPRM_AMSRE_sm ../datastreams/AMMA ../datastreams/Ameriflux ../datastreams/ARM ../datastreams/SMOSREX ../datastreams/AGRMET ../datastreams/GlobSnow ../datastreams/SNODEPmetobs ../datastreams/SNODEP ../datastreams/MOD10A1 ../datastreams/MODSCAG ../datastreams/MOD10A1V6 ../datastreams/ANSA_SNWD ../datastreams/ANSA_SWE ../datastreams/CPC_PRCP ../datastreams/USGS_streamflow_gridded ../datastreams/USGS_streamflow ../datastreams/Natural_streamflow ../datastreams/ISMN ../datastreams/FLUXNETmte ../datastreams/FLUXNET2015 ../datastreams/FLUXNET2015_NC ../datastreams/MOD16A2 ../datastreams/UWET ../datastreams/ARSsm ../datastreams/NLDAS2 ../datastreams/ALEXI ../datastreams/GRACE ../datastreams/simGRACE ../datastreams/USGS_GWwell ../datastreams/PBOH2O ../datastreams/SMOS_L2sm ../datastreams/SMOS_NESDIS ../datastreams/SMOS_L1TB ../datastreams/SMOS_CATDS_L3sm ../datastreams/GCOMW_AMSR2L3sm ../datastreams/GCOMW_AMSR2L3snd ../datastreams/SMOPS ../datastreams/MODIS_LST ../datastreams/GLERL_HydroData ../datastreams/JULESdata ../datastreams/JULES2Ddata ../datastreams/ESACCI_sm ../datastreams/GIMMS_AVHRR_NDVI ../datastreams/GIMMS_MODIS_NDVI ../datastreams/GLDAS1 ../datastreams/GLDAS2 ../datastreams/MERRA2 ../datastreams/MERRA2asm ../datastreams/MERRA-Land ../datastreams/SSEBop ../datastreams/GRDC ../datastreams/GOES_LST ../datastreams/ERAinterimLand ../datastreams/SMAPsm ../datastreams/SMAPvwc ../datastreams/SMAP_L3TB ../datastreams/SMAPTB ../datastreams/GOME2_SIF ../datastreams/LVTbenchmarkOUT ../datastreams/LIS6out ../datastreams/LISDAdiag ../datastreams/Daymet ../datastreams/CMORPH ../datastreams/CHIRPSv2 ../datastreams/3B42V7 ../datastreams/USCRNsm ../datastreams/GLEAM ../datastreams/USDM ../datastreams/LVTpercentile ../datastreams/IMD_PRCP ../datastreams/APHRO_PRCP ../datastreams/GLASSlai ../datastreams/MODISsportLAI ../datastreams/FLUXCOM ../datastreams/HAR ../datastreams/OCO2_SIF ../datastreams/ECMWFforc ../datastreams/GDASforc ../datastreams/ASO_SWE ../runmodes/DataComp ../runmodes/557post ../runmodes/DAstats ../runmodes/optUE ../runmodes/Benchmarking ../training/LinearRegression/ ../datastreams/GLASSalbedo ../datastreams/IMERG ../datastreams/UA_SNOW + diff --git a/lvt/plugins/LVT_datastream_pluginMod.F90 b/lvt/plugins/LVT_datastream_pluginMod.F90 index 0e944e9c7..66aefffba 100644 --- a/lvt/plugins/LVT_datastream_pluginMod.F90 +++ b/lvt/plugins/LVT_datastream_pluginMod.F90 @@ -162,6 +162,7 @@ subroutine LVT_datastream_plugin use GDASforc_dataMod, only : GDASforc_datainit use ASOSWE_obsMod, only : ASOSWE_obsinit use IMERG_dataMod, only : IMERG_datainit + use UASNOW_obsMod, only : UASNOW_obsinit external readtemplateObs external readLISoutput @@ -260,6 +261,7 @@ subroutine LVT_datastream_plugin external readGDASforcdata external readASOSWEObs external readIMERGdata + external readUASNOWObs call registerobsread(trim(LVT_LVTbenchmarkobsId)//char(0),& readLVTbenchmarkOUTobs) @@ -654,5 +656,8 @@ subroutine LVT_datastream_plugin call registerobssetup(trim(LVT_IMERGdataId)//char(0), IMERG_datainit) call registerobsread(trim(LVT_IMERGdataId)//char(0) , readIMERGdata) + call registerobssetup(trim(LVT_UASNOWdataId)//char(0), UASNOW_obsinit) + call registerobsread(trim(LVT_UASNOWdataId)//char(0) , readUASNOWObs) + end subroutine LVT_datastream_plugin end module LVT_datastream_pluginMod diff --git a/lvt/plugins/LVT_pluginIndices.F90 b/lvt/plugins/LVT_pluginIndices.F90 index 26b2c4ec2..d0acb7830 100644 --- a/lvt/plugins/LVT_pluginIndices.F90 +++ b/lvt/plugins/LVT_pluginIndices.F90 @@ -255,6 +255,7 @@ module LVT_pluginIndices character*50, public, parameter :: LVT_GDASdataId = "GDAS" character*50, public, parameter :: LVT_ASOSWEdataId = "ASO SWE" character*50, public, parameter :: LVT_IMERGdataId = "GPM IMERG" + character*50, public, parameter :: LVT_UASNOWdataId = "UA SNOW" !------------------------------------------------------------------------- ! Training algorithms