diff --git a/CHANGELOG.md b/CHANGELOG.md index 54b7f09e..3567c1b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added functionality for model-based QC of MODIS SCF observations using soil layer 1 temperature. - Added functionality to simulate landice tiles. - Added functionality to read nc4-formatted tile file. diff --git a/GEOSlandassim_GridComp/clsm_ensupd_upd_routines.F90 b/GEOSlandassim_GridComp/clsm_ensupd_upd_routines.F90 index d078df46..795346f9 100644 --- a/GEOSlandassim_GridComp/clsm_ensupd_upd_routines.F90 +++ b/GEOSlandassim_GridComp/clsm_ensupd_upd_routines.F90 @@ -1213,8 +1213,9 @@ subroutine get_obs_pred( & case('asnow') - get_asnow_l = .true. - get_asnow_lH = .true. + get_asnow_l = .true. + get_asnow_lH = .true. + get_tp_l = .true. ! needed for model-based QC case default @@ -1365,7 +1366,7 @@ subroutine get_obs_pred( & ! updated to new interface - reichle, 3 Apr 2012 - call catch_calc_tp( N_catl, cat_param%poros, & + call catch_calc_tp( N_catl, cat_param%poros, & catprogn2ghtcnt(N_catl,cat_progn(:,n_e)), tp_l ) end if @@ -1461,9 +1462,12 @@ subroutine get_obs_pred( & call qc_model_based_for_Tb( N_catl, precip, Tb_v_l(:,j,n_e) ) end do - + end if + if (get_asnow_lH) & + call qc_model_based_for_asnow( N_catl, tp_l(1,:), asnow_l(:,n_e) ) + end if end do ! loop through ens members @@ -2254,7 +2258,7 @@ subroutine qc_model_based_for_sat_sfmc( N_cat, precip, SWE, tsurf, & do i=1,N_cat - ! delete obs + ! delete Obs_pred ! - if there is snow on the ground ! - if it is raining/snowing ! - if surface temperature is around or below freezing @@ -2337,7 +2341,7 @@ subroutine qc_model_based_for_sat_tsurf( N_cat, precip, SWE, tp1, & do i=1,N_cat - ! delete obs + ! delete Obs_pred ! - if there is snow on the ground ! - if it is raining/snowing ! - if "avoid_frozen" and frozen @@ -2391,7 +2395,7 @@ subroutine qc_model_based_for_Tb( N_cat, precip, Tb ) do i=1,N_cat - ! delete obs + ! delete Obs_pred ! - if there is heavy rain or snow ! NOTE: subroutine mwRTM_get_Tb already returns no-data-values @@ -2412,6 +2416,44 @@ subroutine qc_model_based_for_Tb( N_cat, precip, Tb ) end do end subroutine qc_model_based_for_Tb + + ! ***************************************************************** + + subroutine qc_model_based_for_asnow( N_cat, tp1, asnow ) + + ! Model-based quality control for MODIS SCF observations. + ! Sets "asnow" to no-data when layer-1 soil temperature exceeds a threshold. + ! + ! amfox, 7 May 2025 + ! + ! -------------------------------------------------------------- + + implicit none + + integer, intent(in) :: N_cat + + real, dimension(N_cat), intent(in) :: tp1 ! layer-1 soil temperature [C] + + real, dimension(N_cat), intent(inout) :: asnow ! snow cover fraction [0-1] + + ! local variables + + real, parameter :: temperature_threshold = 10. ! [C] + + integer :: i + + ! --------------------------------------- + + do i=1,N_cat + + ! delete Obs_pred + ! - if the layer-1 soil temperature exceeds threshold + + if (tp1(i) > temperature_threshold) asnow(i) = nodata_generic + + end do + + end subroutine qc_model_based_for_asnow ! *********************************************************************