Changeset 10712


Ignore:
Timestamp:
2019-02-21T16:44:54+01:00 (20 months ago)
Author:
emmafiedler
Message:

Correct flagging of ice data at zeroth timestep, QC for sea ice thickness

Location:
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90

    r10181 r10712  
    990990            zincwgt = wgtiau(it)      ! IAU weight for the current time step  
    991991            ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments) 
     992            ! EF: Actually CICE is expecting a tendency so is divided by rdt below 
    992993 
    993994            IF(lwp) THEN 
     
    12111212            zincwgt = wgtiau(it)      ! IAU weight for the current time step  
    12121213            ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments) 
     1214            ! EF: Actually CICE is expecting a tendency so is divided by rdt below 
     1215             
    12131216 
    12141217            IF(lwp) THEN 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90

    r10276 r10712  
    191191         & cn_altbiasfile        ! Altimeter bias input filename 
    192192 
     193      LOGICAL :: ln_seaicetypes = .FALSE.  ! Logical switch indicating data type is sea ice 
    193194 
    194195      LOGICAL :: ln_t3d          ! Logical switch for temperature profiles 
     
    844845               &               rn_dobsini, rn_dobsend, ln_ignmis, .FALSE., llnightav(jtype) ) 
    845846 
    846             CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject ) 
     847 
     848            IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN 
     849              ln_seaicetypes = .TRUE. 
     850            ELSE 
     851              ln_seaicetypes = .FALSE. 
     852            ENDIF            
     853            CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject, ln_seaicetypes ) 
    847854 
    848855            IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN 
     
    12331240                        &           'time-step but some obs are valid then.' ) 
    12341241                     WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 
    1235                         &           ' sea-ice concentration obs will be missed' 
    1236                   ENDIF 
    1237                   surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + & 
    1238                      &                        surfdataqc(jtype)%nsstp(1) 
    1239                   CYCLE 
     1242                        &           ' sea-ice concentration obs will be missed'                   
     1243                  ENDIF                                 
    12401244               ELSE 
    12411245#if defined key_cice 
     
    12491253               ENDIF 
    12501254            CASE('sit') 
    1251                IF ( kstp == 0 ) THEN ! **Copied from SIC, check applies to SIT!** 
     1255               IF ( kstp == 0 ) THEN 
    12521256                  IF ( lwp .AND. surfdataqc(jtype)%nsstpmpp(1) > 0 ) THEN 
    12531257                     CALL ctl_warn( 'Sea-ice not initialised on zeroth '// & 
    12541258                        &           'time-step but some obs are valid then.' ) 
    12551259                     WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 
    1256                         &           ' sea-ice thickness obs will be missed' 
    1257                   ENDIF 
    1258                   surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + & 
    1259                      &                        surfdataqc(jtype)%nsstp(1) 
    1260                   CYCLE 
    1261                ELSE             
     1260                        &           ' sea-ice thickness obs will be missed and QC flag set to 4' 
     1261                  ENDIF                                   
     1262               ELSE        
    12621263#if defined key_cice 
    12631264                  zsurfvar(:,:) = thick_i(:,:) 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90

    r10276 r10712  
    805805            surfdataqc%rext(jobs,1) = surfdataqc%robs(jobs,1)             
    806806            surfdataqc%robs(jobs,1) = surfdataqc%rext(jobs,1) + 0.25*surfdataqc%rext(jobs,2) 
     807            ! If the corrected freeboard observation is outside -0.3 to 3.0 m (CPOM) then set the QC flag to bad 
     808            IF ((surfdataqc%robs(jobs,1) < -0.3) .OR. (surfdataqc%robs(jobs,1) > 3.0)) THEN 
     809              surfdataqc%nqc(jobs) = 4 
     810            ENDIF             
    807811            ! Convert corrected freeboard to ice thickness following Tilling et al. (2016) 
    808812            surfdataqc%robs(jobs,1) = (surfdataqc%robs(jobs,1)*rhow + surfdataqc%rext(jobs,2)*rhos)/ & 
    809                                       (rhow - rhoi)             
     813                                      (rhow - rhoi) 
     814            ! Flag any negative ice thickness values as bad 
     815            IF (surfdataqc%robs(jobs,1) < 0.0) THEN 
     816              surfdataqc%nqc(jobs) = 4 
     817            ENDIF                                       
    810818         ENDIF 
    811819          
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90

    r9306 r10712  
    5353 
    5454   SUBROUTINE obs_pre_surf( surfdata, surfdataqc, ld_nea, ld_bound_reject, & 
    55                             kqc_cutoff ) 
     55                            ld_seaicetypes, kqc_cutoff ) 
    5656      !!---------------------------------------------------------------------- 
    5757      !!                    ***  ROUTINE obs_pre_sla  *** 
     
    8383      LOGICAL, INTENT(IN) :: ld_nea                ! Switch for rejecting observation near land 
    8484      LOGICAL, INTENT(IN) :: ld_bound_reject       ! Switch for rejecting obs near the boundary 
    85       INTEGER, INTENT(IN), OPTIONAL :: kqc_cutoff   ! cut off for QC value 
     85      LOGICAL, INTENT(IN) :: ld_seaicetypes        ! Switch to indicate sea ice data 
     86      INTEGER, INTENT(IN), OPTIONAL :: kqc_cutoff  ! cut off for QC value 
    8687      !! * Local declarations 
    8788      INTEGER :: iqc_cutoff = 255   ! cut off for QC value 
     
    140141      ! ----------------------------------------------------------------------- 
    141142 
    142       CALL obs_coo_tim( icycle, & 
    143          &              iyea0,   imon0,   iday0,   ihou0,   imin0,      & 
    144          &              surfdata%nsurf,   surfdata%nyea, surfdata%nmon, & 
    145          &              surfdata%nday,    surfdata%nhou, surfdata%nmin, & 
    146          &              surfdata%nqc,     surfdata%mstp, iotdobs        ) 
    147  
     143      IF ( ld_seaicetypes ) THEN 
     144         CALL obs_coo_tim( icycle, & 
     145            &              iyea0,   imon0,   iday0,   ihou0,   imin0,      & 
     146            &              surfdata%nsurf,   surfdata%nyea, surfdata%nmon, & 
     147            &              surfdata%nday,    surfdata%nhou, surfdata%nmin, & 
     148            &              surfdata%nqc,     surfdata%mstp, iotdobs,       & 
     149            &              ld_seaicetypes = ld_seaicetypes ) 
     150      ELSE 
     151         CALL obs_coo_tim( icycle, & 
     152            &              iyea0,   imon0,   iday0,   ihou0,   imin0,      & 
     153            &              surfdata%nsurf,   surfdata%nyea, surfdata%nmon, & 
     154            &              surfdata%nday,    surfdata%nhou, surfdata%nmin, & 
     155            &              surfdata%nqc,     surfdata%mstp, iotdobs       ) 
     156      ENDIF 
     157       
    148158      CALL obs_mpp_sum_integer( iotdobs, iotdobsmpp ) 
    149159       
     
    558568      &                    kobsno,                                        & 
    559569      &                    kobsyea, kobsmon, kobsday, kobshou, kobsmin,   & 
    560       &                    kobsqc,  kobsstp, kotdobs                      ) 
     570      &                    kobsqc,  kobsstp, kotdobs, ld_seaicetypes       ) 
    561571      !!---------------------------------------------------------------------- 
    562572      !!                    ***  ROUTINE obs_coo_tim *** 
     
    606616         & kobsstp          ! Number of time steps up to the  
    607617                            ! observation time 
     618      LOGICAL, OPTIONAL, INTENT(IN) :: ld_seaicetypes 
     619       
    608620 
    609621      !! * Local declarations 
     
    620632      INTEGER :: iskip 
    621633      INTEGER :: idaystp 
     634      INTEGER :: icecount 
    622635      REAL(KIND=wp) :: zminstp 
    623636      REAL(KIND=wp) :: zhoustp 
     
    715728         ENDIF 
    716729 
    717       END DO 
     730 
     731      !------------------------------------------------------------------------ 
     732      ! Flag sea ice observations falling on initial timestep 
     733      !------------------------------------------------------------------------  
     734    
     735      IF ( PRESENT(ld_seaicetypes) ) THEN 
     736       
     737           IF ( ( kobsstp(jobs) == (nit000 - 1) ) ) THEN 
     738              WRITE(numout,*)( 'Sea-ice not initialised on zeroth '// & 
     739                        &    'time-step but observation valid then, flagging '// & 
     740                             'in time check subroutine obs_coo_tim.' )                   
     741              kobsqc(jobs) = IBSET(kobsqc(jobs),13) 
     742              kotdobs      = kotdobs + 1 
     743              CYCLE 
     744           ENDIF 
     745                
     746      ENDIF                       
     747    
     748   END DO 
    718749 
    719750   END SUBROUTINE obs_coo_tim 
Note: See TracChangeset for help on using the changeset viewer.