@@ -1629,6 +1629,7 @@ subroutine read_obs_sm_ASCAT_EUMET( &
16291629 type (date_time_type) :: date_time_tmp
16301630 type (date_time_type) :: date_time_low, date_time_low_fname
16311631 type (date_time_type) :: date_time_up
1632+ type (date_time_type) :: date_time_obs_beg, date_time_obs_end
16321633
16331634 integer :: ii, ind, N_tmp, N_files, kk, N_obs, N_fnames, N_fnames_tmp, obs_dir_hier
16341635
@@ -1688,11 +1689,34 @@ subroutine read_obs_sm_ASCAT_EUMET( &
16881689 nullify( tmp_obs, tmp_lat, tmp_lon, tmp_tile_num, tmp_jtime )
16891690
16901691 ! ---------------
1691-
1692+
16921693 ! initialize
16931694
16941695 found_obs = .false.
16951696
1697+ ! determine operating time range of sensor
1698+
1699+ if (trim (this_obs_param% descr) == ' ASCAT_META_SM' ) then
1700+ date_time_obs_beg = date_time_type(2007 , 6 , 1 , 1 ,31 , 0 ,- 9999 ,- 9999 )
1701+ date_time_obs_end = date_time_type(2021 ,11 ,15 , 9 , 0 , 0 ,- 9999 ,- 9999 )
1702+ elseif (trim (this_obs_param% descr) == ' ASCAT_METB_SM' ) then
1703+ date_time_obs_beg = date_time_type(2013 , 4 ,24 , 8 , 0 , 0 ,- 9999 ,- 9999 )
1704+ date_time_obs_end = date_time_type(2100 , 1 , 1 , 0 , 0 , 0 ,- 9999 ,- 9999 )
1705+ elseif (trim (this_obs_param% descr) == ' ASCAT_METC_SM' ) then
1706+ date_time_obs_beg = date_time_type(2019 ,11 ,25 ,12 , 0 , 0 ,- 9999 ,- 9999 )
1707+ date_time_obs_end = date_time_type(2100 , 1 , 1 , 0 , 0 , 0 ,- 9999 ,- 9999 )
1708+ else
1709+ err_msg = ' Unknown obs_param%descr: ' // trim (this_obs_param% descr)
1710+ call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
1711+ end if
1712+
1713+ ! return if date_time falls outside operating time range
1714+
1715+ if ( datetime_lt_refdatetime(date_time, date_time_obs_beg) .or. &
1716+ datetime_lt_refdatetime(date_time_obs_end, date_time) ) return
1717+
1718+ ! ---------------
1719+
16961720 ! find files that are within half-open interval
16971721 ! (date_time-dtstep_assim/2,date_time+dtstep_assim/2]
16981722
@@ -4465,6 +4489,7 @@ subroutine read_obs_SMOS( date_time, N_catd, this_obs_param, &
44654489 real :: tmpreal, Tb_std_max
44664490
44674491 type (date_time_type) :: date_time_low, date_time_upp
4492+ type (date_time_type) :: date_time_obs_beg
44684493
44694494 character ( 2 ) :: MM, DD, HH, MI, orbit_tag
44704495 character ( 4 ) :: YYYY
@@ -4497,6 +4522,17 @@ subroutine read_obs_SMOS( date_time, N_catd, this_obs_param, &
44974522
44984523 found_obs = .false.
44994524
4525+ ! determine operating time range of sensor
4526+
4527+ date_time_obs_beg = date_time_type(2010 , 5 ,24 , 0 , 0 , 0 ,- 9999 ,- 9999 )
4528+
4529+ ! return if date_time falls outside operating time range
4530+
4531+ if (datetime_lt_refdatetime(date_time, date_time_obs_beg)) return
4532+
4533+ ! ------------------------------
4534+
4535+
45004536 ! read soil moisture or brightness temperature files?
45014537
45024538 if (index (this_obs_param% descr,' _SM' ) /= 0 ) then
@@ -5224,6 +5260,7 @@ subroutine read_obs_MODIS_SCF( &
52245260
52255261 type (date_time_type) :: date_time_beg, date_time_end
52265262 type (date_time_type) :: date_time_beg_MODIS, date_time_end_MODIS
5263+ type (date_time_type) :: date_time_obs_beg
52275264
52285265 real :: lon_beg, lon_end
52295266 real :: lon_beg_MODIS, lon_end_MODIS
@@ -5245,7 +5282,28 @@ subroutine read_obs_MODIS_SCF( &
52455282
52465283 character (len=* ), parameter :: Iam = ' read_obs_MODIS_SCF'
52475284 character (len= 400 ) :: err_msg
5248-
5285+
5286+ ! ------------------------------------------------------------------------------------
5287+ !
5288+ ! initialize
5289+
5290+ found_obs = .false.
5291+
5292+ ! determine operating time range of sensor
5293+
5294+ if (trim (this_obs_param% descr) == ' MOD10C1' ) then
5295+ date_time_obs_beg = date_time_type(2000 , 2 ,24 , 1 ,31 , 0 ,- 9999 ,- 9999 ) ! Terra
5296+ elseif (trim (this_obs_param% descr) == ' MYD10C1' ) then
5297+ date_time_obs_beg = date_time_type(2002 , 7 , 4 , 8 , 0 , 0 ,- 9999 ,- 9999 ) ! Aqua
5298+ else
5299+ err_msg = ' Unknown obs_param%descr: ' // trim (this_obs_param% descr)
5300+ call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
5301+ end if
5302+
5303+ ! return if date_time falls outside operating time range
5304+
5305+ if (datetime_lt_refdatetime(date_time, date_time_obs_beg)) return
5306+
52495307 ! ----------------------------------------------------------------------------------
52505308 !
52515309 ! restrict assimilation time step to max allowed
@@ -5257,12 +5315,6 @@ subroutine read_obs_MODIS_SCF( &
52575315
52585316 end if
52595317
5260-
5261- ! initialize
5262-
5263- found_obs = .false.
5264-
5265-
52665318 ! identify MODIS product and overpass hour
52675319
52685320 MODIS_product_ID = this_obs_param% name (1 :7 )
@@ -6849,6 +6901,7 @@ subroutine read_obs_SMAP_halforbit_Tb( date_time, N_catd, this_obs_param, &
68496901
68506902 type (date_time_type) :: date_time_low, date_time_upp
68516903 type (date_time_type) :: date_time_low_fname, date_time_tmp
6904+ type (date_time_type) :: date_time_obs_beg
68526905
68536906 integer :: ii, jj, kk, nn, mm
68546907 integer :: N_fnames, N_fnames_tmp, N_obs_tmp
@@ -6900,6 +6953,20 @@ subroutine read_obs_SMAP_halforbit_Tb( date_time, N_catd, this_obs_param, &
69006953
69016954 ! -------------------------------------------------------------------
69026955
6956+ ! initialize
6957+
6958+ found_obs = .false.
6959+
6960+ ! determine operating time range of sensor
6961+
6962+ date_time_obs_beg = date_time_type(2015 , 3 ,31 , 0 , 0 , 0 ,- 9999 ,- 9999 )
6963+
6964+ ! return if date_time falls outside operating time range
6965+
6966+ if (datetime_lt_refdatetime(date_time, date_time_obs_beg)) return
6967+
6968+ ! ----------------
6969+
69036970 ! check inputs
69046971
69056972 ! the subroutine makes sense only if dtstep_assim <= 3 hours
@@ -6913,9 +6980,6 @@ subroutine read_obs_SMAP_halforbit_Tb( date_time, N_catd, this_obs_param, &
69136980 call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
69146981 end if
69156982
6916- ! initialize
6917-
6918- found_obs = .false.
69196983
69206984 ! read Tbs from L1C_TB, L1C_TB_E, or L2_SM_AP files?
69216985
0 commit comments