Changeset 10276


Ignore:
Timestamp:
2018-11-02T18:15:27+01:00 (19 months ago)
Author:
emmafiedler
Message:

Freeboard assimilation updates

Location:
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90

    r10181 r10276  
    2222   USE obs_read_surf            ! Reading and allocation of surface obs 
    2323   USE obs_readmdt              ! Reading and allocation of MDT for SLA. 
     24   USE obs_readsnowdepth        ! Get model snow depth for conversion of freeboard to ice thickness. 
    2425   USE obs_prep                 ! Preparation of obs. (grid search etc). 
    2526   USE obs_oper                 ! Observation operators 
     
    9899      & surfdata, &          !: Initial surface data 
    99100      & surfdataqc           !: Surface data after quality control 
     101       
    100102   TYPE(obs_prof), PUBLIC, POINTER, DIMENSION(:) :: & 
    101103      & profdata, &          !: Initial profile data 
     
    134136      !!        !  15-02  (M. Martin) Simplification of namelist and code 
    135137      !!---------------------------------------------------------------------- 
    136  
     138#if defined key_cice 
     139      USE sbc_oce, ONLY : &        ! CICE variables 
     140         & thick_s                 ! snow depth for freeboard conversion        
     141#endif          
    137142      IMPLICIT NONE 
    138143 
     
    831836            nextrsurf(jtype) = 0 
    832837            IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) nextrsurf(jtype) = 2 
     838            IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) nextrsurf(jtype) = 2             
    833839 
    834840            !Read in surface obs types 
     
    844850               IF ( ln_altbias ) & 
    845851                  & CALL obs_rea_altbias ( surfdataqc(jtype), n2dintsurf(jtype), cn_altbiasfile ) 
     852            ENDIF 
     853             
     854            IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN 
     855               CALL obs_rea_snowdepth( surfdataqc(jtype), n2dintsurf(jtype), thick_s(:,:) ) 
    846856            ENDIF 
    847857 
     
    12511261               ELSE             
    12521262#if defined key_cice 
    1253                ! Will need to convert freeboard to thickness here 
    12541263                  zsurfvar(:,:) = thick_i(:,:) 
    12551264#elif defined key_lim2 || defined key_lim3 
     
    15331542               &               nit000, idaystp, zsurfvar, zsurfmask,    & 
    15341543               &               n2dintsurf(jtype), llnightav(jtype),     & 
    1535                &               ravglamscl(jtype), ravgphiscl(jtype),     & 
     1544               &               ravglamscl(jtype), ravgphiscl(jtype),    & 
    15361545               &               lfpindegs(jtype) ) 
    15371546 
     1547            ! Change label of data from FBD ("freeboard") to SIT ("Sea Ice Thickness") 
     1548            IF ( TRIM(surfdataqc(jtype)%cvars(1)) == 'FBD' ) THEN 
     1549              surfdata(jtype)%cvars(1) = 'SIT'  
     1550            ENDIF 
     1551             
    15381552         END DO 
    15391553 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90

    r9306 r10276  
    3737   USE obs_grid,      ONLY : &  
    3838      & obs_level_search      
    39  
     39#if defined key_cice 
     40   USE ice_constants, ONLY : &    ! For conversion from sea ice freeboard to thickness 
     41      & rhos, rhoi, rhow 
     42#endif  
    4043   IMPLICIT NONE 
    4144 
     
    798801         ENDIF 
    799802          
     803         IF ( TRIM(surfdataqc%cvars(1)) == 'FBD' ) THEN 
     804            ! Convert radar freeboard to true freeboard (add 1/4 snow depth; 1/4 based on ratio of speed of light in vacuum compared to snow (3.0e8 vs 2.4e8 m/s)) 
     805            surfdataqc%rext(jobs,1) = surfdataqc%robs(jobs,1)             
     806            surfdataqc%robs(jobs,1) = surfdataqc%rext(jobs,1) + 0.25*surfdataqc%rext(jobs,2) 
     807            ! Convert corrected freeboard to ice thickness following Tilling et al. (2016) 
     808            surfdataqc%robs(jobs,1) = (surfdataqc%robs(jobs,1)*rhow + surfdataqc%rext(jobs,2)*rhos)/ & 
     809                                      (rhow - rhoi)             
     810         ENDIF 
     811          
    800812         IF ( zext(1) == obfillflt ) THEN 
    801813            ! If the observation value is a fill value, set QC flag to bad 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_surf.F90

    r9308 r10276  
    369369         surfdata%cext(2) = 'MDT' 
    370370      ENDIF 
     371      IF ( ldmod .AND. ( TRIM( surfdata%cvars(1) ) == 'FBD' ) ) THEN 
     372         surfdata%cext(1) = 'freeboard' 
     373         surfdata%cext(2) = 'thick_s' 
     374      ENDIF 
    371375      IF ( iextr > kextr ) surfdata%cext(iextr) = 'STD' 
    372376 
     
    450454               ! Observed value 
    451455               surfdata%robs(iobs,1) = inpfiles(jj)%pob(1,ji,1) 
     456               IF ( TRIM(surfdata%cvars(1)) == 'FBD' ) THEN 
     457                   surfdata%rext(iobs,1) = inpfiles(jj)%pob(1,ji,1) 
     458                   surfdata%rext(iobs,2) = fbrmdi 
     459               ENDIF                
    452460 
    453461               ! Model and MDT is set to fbrmdi unless read from file 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90

    r10181 r10276  
    107107   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   thick_iu           !: ice thickness at NEMO U point 
    108108   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   thick_iv           !: ice thickness at NEMO V point 
     109   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   thick_su           !: snow depth at NEMO U point 
     110   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   thick_sv           !: snow depth at NEMO V point    
    109111   ! variables used in the coupled interface 
    110112   INTEGER , PUBLIC, PARAMETER ::   jpl = ncat 
     
    174176                ss_iov(jpi,jpj)       , fr_iu(jpi,jpj)        , fr_iv(jpi,jpj)        , & 
    175177                thick_iu(jpi,jpj)     , thick_iv(jpi,jpj)     ,                         & 
     178                thick_su(jpi,jpj)     , thick_sv(jpi,jpj)     ,                         &                 
    176179                ht_i(jpi,jpj,ncat)    , ht_s(jpi,jpj,ncat)    ,                         &                 
    177180                a_i(jpi,jpj,ncat)     , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat) , & 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r10181 r10276  
    122122   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fr_i              !: ice fraction = 1 - lead fraction      (between 0 to 1) 
    123123   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   thick_i           !: ice thickness [m] 
     124   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   thick_s           !: snow depth [m - I think]    
    124125   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   vol_i             !: ice volume [m3]    
    125126#if defined key_cpl_carbon_cycle 
     
    198199         ! 
    199200      ALLOCATE( tprecip(jpi,jpj) , sprecip(jpi,jpj) , fr_i(jpi,jpj) ,     & 
    200          & thick_i(jpi,jpj) ,  vol_i(jpi,jpj) ,                           &       
     201         & thick_i(jpi,jpj) ,  thick_s(jpi,jpj) , vol_i(jpi,jpj) ,        &       
    201202#if defined key_cpl_carbon_cycle 
    202203         &      atm_co2(jpi,jpj) ,                                        & 
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90

    r10181 r10276  
    251251      CALL lbc_lnk ( fr_iv , 'V', 1. ) 
    252252       
    253 !!*****JUST ADDED BUT NEEDS CONFIRMING!!**** 
     253 
    254254! Snow and ice thickness 
    255       CALL cice2nemo(vice,thick_i,'T', 1. )  !!Do this for snow depth too? set thick_s. Duplicated below for embedded ice? 
    256  
    257 ! vice is volume per unit area of grid cell = thickness 
     255! vice, vsno is volume per unit area of grid cell = thickness 
     256      CALL cice2nemo(vice,thick_i,'T', 1. ) 
     257      CALL cice2nemo(vsno,thick_s,'T', 1. ) 
    258258       
    259       IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN ! Confirm what this if loop is for 
     259      IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 
    260260         DO jl = 1,ncat 
    261261            CALL cice2nemo(vsnon(:,:,jl,:),ht_s(:,:,jl),'T', 1. ) 
     
    263263         ENDDO 
    264264      ENDIF 
    265        
     265 
     266 
    266267! T point to U point 
    267268! T point to V point 
     269 
     270! Sea ice thickness 
    268271      thick_iu(:,:)=0.0 
    269272      thick_iv(:,:)=0.0 
     
    278281      CALL lbc_lnk ( thick_iv , 'V', 1. ) 
    279282 
    280 !!**********************************************************      
     283! Snow depth 
     284      thick_su(:,:)=0.0 
     285      thick_sv(:,:)=0.0 
     286      DO jj=1,jpjm1 
     287         DO ji=1,jpim1 
     288            thick_su(ji,jj)=0.5*(thick_s(ji,jj)+thick_s(ji+1,jj))*umask(ji,jj,1) 
     289            thick_sv(ji,jj)=0.5*(thick_s(ji,jj)+thick_s(ji,jj+1))*vmask(ji,jj,1) 
     290         ENDDO 
     291      ENDDO 
     292 
     293      CALL lbc_lnk ( thick_su , 'U', 1. ) 
     294      CALL lbc_lnk ( thick_sv , 'V', 1. )       
    281295       
    282296 
Note: See TracChangeset for help on using the changeset viewer.