Skip to content

Commit fe4fbb7

Browse files
Added time ranges for availability of MODIS, ASCAT, SMOS, and SMAP obs (#73)
2 parents 1134dff + f34458c commit fe4fbb7

File tree

2 files changed

+76
-11
lines changed

2 files changed

+76
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
### Changed
1717

1818
- Updated subroutine read_obs_sm_ASCAT_EUMET() to work with both original and revised file name templates.
19+
- Updated subroutines read_obs_sm_ASCAT_EUMET(), read_obs_SMAP_halforbit_Tb(), read_obs_SMOS() and read_obs_MODIS_SCF() with hardcoded time ranges for when observations are available and should be read.
1920
- Revised variable names (SHORT_NAME) and descriptions (LONG_NAME) to match M21C file specs.
2021

2122
### Fixed

GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90

Lines changed: 75 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)