New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11468 for branches/UKMO/dev_r5518_obs_oper_update/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90 – NEMO

Ignore:
Timestamp:
2019-08-23T10:37:22+02:00 (5 years ago)
Author:
mattmartin
Message:

Merged changes to allow writing of climatological information to feedback files.

File:
1 edited

Legend:

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

    r11235 r11468  
    3333   USE mpp_map                  ! MPP mapping 
    3434   USE lib_mpp                  ! For ctl_warn/stop 
     35   USE tradmp                   ! For climatological temperature & salinity 
    3536 
    3637   IMPLICIT NONE 
     
    5354   LOGICAL :: ln_sss_fp_indegs     !: T=>     SSS obs footprint size specified in degrees, F=> in metres 
    5455   LOGICAL :: ln_sic_fp_indegs     !: T=> sea-ice obs footprint size specified in degrees, F=> in metres 
     56   LOGICAL :: ln_output_clim       !: Logical switch for interpolating and writing T/S climatology 
    5557 
    5658   REAL(wp) :: rn_default_avglamscl !: Default E/W diameter of observation footprint 
     
    232234      LOGICAL :: ltype_fp_indegs ! Local version of ln_*_fp_indegs 
    233235      LOGICAL :: ltype_night     ! Local version of ln_sstnight (false for other variables) 
     236      LOGICAL :: ltype_clim      ! Local version of ln_output_clim 
    234237 
    235238      REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
     
    254257         &            ln_grid_global, ln_grid_search_lookup,          & 
    255258         &            ln_ignmis, ln_s_at_t, ln_bound_reject,          & 
    256          &            ln_sstnight, ln_default_fp_indegs,              & 
     259         &            ln_sstnight,  ln_output_clim,                   & 
     260         &            ln_default_fp_indegs,                           & 
    257261         &            ln_sla_fp_indegs, ln_sst_fp_indegs,             & 
    258262         &            ln_sss_fp_indegs, ln_sic_fp_indegs,             & 
     
    415419         WRITE(numout,*) '             Daily average types                             nn_profdavtypes = ', nn_profdavtypes 
    416420         WRITE(numout,*) '             Logical switch for night-time SST obs               ln_sstnight = ', ln_sstnight 
     421         WRITE(numout,*) '             Logical switch for writing climat. at obs points ln_output_clim = ', ln_output_clim 
    417422      ENDIF 
    418423      !----------------------------------------------------------------------- 
     
    438443         RETURN 
    439444      ENDIF 
     445 
     446      IF ( ln_output_clim .AND. ( .NOT. ln_tradmp ) ) THEN 
     447         IF(lwp) WRITE(numout,cform_war) 
     448         IF(lwp) WRITE(numout,*) ' ln_output_clim is true, but ln_tradmp is false', & 
     449            &                    ' so climatological T/S not available and will not be output' 
     450         nwarn = nwarn + 1 
     451         ln_output_clim = .FALSE. 
     452      ENDIF 
     453      
    440454 
    441455      IF(lwp) WRITE(numout,*) '          Number of profile obs types: ',nproftypes 
     
    714728 
    715729         DO jtype = 1, nproftypes 
    716  
     730             
     731            ltype_clim = .FALSE.  
     732             
    717733            IF ( TRIM(cobstypesprof(jtype)) == 'prof' ) THEN 
    718734               nvarsprof(jtype) = 2 
    719735               nextrprof(jtype) = 1 
     736               IF ( ln_output_clim ) ltype_clim = .TRUE.               
    720737               ALLOCATE(llvar(nvarsprof(jtype))) 
    721738               CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zglam ) 
     
    763780               &               nvarsprof(jtype), nextrprof(jtype), nitend-nit000+2, & 
    764781               &               rn_dobsini, rn_dobsend, llvar, & 
    765                &               ln_ignmis, ln_s_at_t, .FALSE., & 
     782               &               ln_ignmis, ln_s_at_t, .FALSE., ltype_clim, & 
    766783               &               kdailyavtypes = nn_profdavtypes ) 
    767784 
     
    799816            nvarssurf(jtype) = 1 
    800817            nextrsurf(jtype) = 0 
     818            ltype_clim = .FALSE. 
    801819            IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) nextrsurf(jtype) = 2 
     820            IF ( ln_output_clim .AND. & 
     821               & ( ( TRIM(cobstypessurf(jtype)) == 'sst' ) .OR. & 
     822               &   ( TRIM(cobstypessurf(jtype)) == 'sss' ) ) ) & 
     823               & ltype_clim = .TRUE. 
    802824 
    803825            !Read in surface obs types 
     
    805827               &               clsurffiles(jtype,1:ifilessurf(jtype)), & 
    806828               &               nvarssurf(jtype), nextrsurf(jtype), nitend-nit000+2, & 
    807                &               rn_dobsini, rn_dobsend, ln_ignmis, .FALSE., llnightav(jtype) ) 
     829               &               rn_dobsini, rn_dobsend, ln_ignmis, .FALSE., & 
     830               &               llnightav(jtype), ltype_clim ) 
    808831 
    809832            CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject ) 
     
    926949      REAL(wp) :: tiny             ! small number 
    927950      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: & 
    928          & zprofvar                ! Model values for variables in a prof ob 
     951         & zprofvar, &             ! Model values for variables in a prof ob 
     952         & zprofclim               ! Climatology values for variables in a prof ob 
    929953      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: & 
    930954         & zprofmask               ! Mask associated with zprofvar 
    931955      REAL(wp), POINTER, DIMENSION(:,:) :: & 
    932956         & zsurfvar, &             ! Model values equivalent to surface ob. 
     957         & zsurfclim, &            ! Climatology values for variables in a surface ob. 
    933958         & zsurfmask               ! Mask associated with surface variable 
    934959      REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
     
    940965         & pco2_3d                 ! 3D pCO2 from FABM 
    941966#endif 
    942  
     967       
    943968      IF(lwp) THEN 
    944969         WRITE(numout,*) 
     
    963988            CALL wrk_alloc( jpi, jpj,      profdataqc(jtype)%nvar, zglam     ) 
    964989            CALL wrk_alloc( jpi, jpj,      profdataqc(jtype)%nvar, zgphi     ) 
    965              
     990            CALL wrk_alloc( jpi, jpj, jpk, profdataqc(jtype)%nvar, zprofclim )     
     991                               
    966992            ! Defaults which might change 
    967993            DO jvar = 1, profdataqc(jtype)%nvar 
     
    969995               zglam(:,:,jvar)       = glamt(:,:) 
    970996               zgphi(:,:,jvar)       = gphit(:,:) 
     997               zprofclim(:,:,:,jvar) = 0._wp 
    971998            END DO 
    972999 
     
    9761003               zprofvar(:,:,:,1) = tsn(:,:,:,jp_tem) 
    9771004               zprofvar(:,:,:,2) = tsn(:,:,:,jp_sal) 
    978  
     1005               IF ( ln_output_clim ) THEN           
     1006                  zprofclim(:,:,:,1) = tclim(:,:,:) 
     1007                  zprofclim(:,:,:,2) = sclim(:,:,:) 
     1008               ENDIF 
     1009                
    9791010            CASE('vel') 
    9801011               zprofvar(:,:,:,1) = un(:,:,:) 
     
    11551186                  &               nit000, idaystp, jvar,                   & 
    11561187                  &               zprofvar(:,:,:,jvar),                    & 
     1188                  &               zprofclim(:,:,:,jvar),                   & 
    11571189                  &               fsdept(:,:,:), fsdepw(:,:,:),            &  
    11581190                  &               zprofmask(:,:,:,jvar),                   & 
     
    11661198            CALL wrk_dealloc( jpi, jpj,      profdataqc(jtype)%nvar, zglam     ) 
    11671199            CALL wrk_dealloc( jpi, jpj,      profdataqc(jtype)%nvar, zgphi     ) 
     1200            CALL wrk_dealloc( jpi, jpj, jpk, profdataqc(jtype)%nvar, zprofclim  )             
    11681201 
    11691202         END DO 
     
    11751208         !Allocate local work arrays 
    11761209         CALL wrk_alloc( jpi, jpj, zsurfvar ) 
     1210         CALL wrk_alloc( jpi, jpj, zsurfclim )          
    11771211         CALL wrk_alloc( jpi, jpj, zsurfmask ) 
    11781212#if defined key_fabm 
     
    11841218            !Defaults which might be changed 
    11851219            zsurfmask(:,:) = tmask(:,:,1) 
     1220            zsurfclim(:,:) = 0._wp           
    11861221            llog10 = .FALSE. 
    11871222 
     
    11891224            CASE('sst') 
    11901225               zsurfvar(:,:) = tsn(:,:,1,jp_tem) 
     1226               IF ( ln_output_clim ) zsurfclim(:,:) = tclim(:,:,1) 
    11911227            CASE('sla') 
    11921228               zsurfvar(:,:) = sshn(:,:) 
    11931229            CASE('sss') 
    11941230               zsurfvar(:,:) = tsn(:,:,1,jp_sal) 
     1231               IF ( ln_output_clim ) zsurfclim(:,:) = sclim(:,:,1)               
    11951232            CASE('sic') 
    11961233               IF ( kstp == 0 ) THEN 
     
    14851522 
    14861523            CALL obs_surf_opt( surfdataqc(jtype), kstp, jpi, jpj,       & 
    1487                &               nit000, idaystp, zsurfvar, zsurfmask,    & 
     1524               &               nit000, idaystp, zsurfvar,               & 
     1525               &               zsurfclim, zsurfmask,                    & 
    14881526               &               n2dintsurf(jtype), llnightav(jtype),     & 
    1489                &               ravglamscl(jtype), ravgphiscl(jtype),     & 
     1527               &               ravglamscl(jtype), ravgphiscl(jtype),    & 
    14901528               &               lfpindegs(jtype) ) 
    14911529 
Note: See TracChangeset for help on using the changeset viewer.