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 11455 for branches/UKMO/dev_r5518_obs_oper_update_addclim/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90 – NEMO

Ignore:
Timestamp:
2019-08-19T17:36:23+02:00 (5 years ago)
Author:
mattmartin
Message:

Commit version which compiles and runs. Not fully tested that it is producing the correct answer yet though.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_obs_oper_update_addclim/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90

    r11449 r11455  
    2929   USE obs_mpp              ! MPP support routines for observation diagnostics 
    3030   USE lib_mpp        ! MPP routines 
    31    USE diaobs, ONLY: & 
    32       & ln_output_clim 
    3331 
    3432   IMPLICIT NONE 
     
    9795      INTEGER :: je 
    9896      INTEGER :: iadd 
    99       INTEGER :: iadd_exp  ! expected additional variables 
     97      INTEGER :: iadd_clm ! 1 if climatology present 
    10098      INTEGER :: iext 
    10199      REAL(wp) :: zpres 
     
    104102      ! Set up number of additional variables to be ouput: 
    105103      ! Hx, CLIM, ... 
    106       iadd_exp = 1   ! Hx 
    107       IF ( ln_output_clim ) iadd_exp = iadd_exp + 1 
     104      iadd_clm = 0  
     105      IF ( profdata%lclim ) iadd_clm = 1 
    108106       
    109107      IF ( PRESENT( padd ) ) THEN 
     
    132130         clfiletype='profb' 
    133131         CALL alloc_obfbdata( fbdata, 2, profdata%nprof, ilevel, & 
    134             &                 iadd_exp + iadd, 1 + iext, .TRUE. ) 
     132            &                 1 + iadd_clm + iadd, 1 + iext, .TRUE. ) 
    135133         fbdata%cname(1)      = profdata%cvars(1) 
    136134         fbdata%cname(2)      = profdata%cvars(2) 
     
    148146         fbdata%caddunit(1,1) = 'Degrees centigrade' 
    149147         fbdata%caddunit(1,2) = 'PSU' 
    150          IF ( ln_output_clim ) THEN 
     148         IF ( profdata%lclim ) THEN 
    151149            fbdata%caddlong(2,1) = 'Climatology interpolated potential temperature' 
    152150            fbdata%caddlong(2,2) = 'Climatology interpolated practical salinity' 
     
    161159         END DO 
    162160         DO ja = 1, iadd 
    163             fbdata%caddname(iadd_exp+ja) = padd%cdname(ja) 
     161            fbdata%caddname(1+iadd_clm+ja) = padd%cdname(ja) 
    164162            DO jvar = 1, 2 
    165                fbdata%caddlong(iadd_exp+ja,jvar) = padd%cdlong(ja,jvar) 
    166                fbdata%caddunit(iadd_exp+ja,jvar) = padd%cdunit(ja,jvar) 
     163               fbdata%caddlong(1+iadd_clm+ja,jvar) = padd%cdlong(ja,jvar) 
     164               fbdata%caddunit(1+iadd_clm+ja,jvar) = padd%cdunit(ja,jvar) 
    167165            END DO 
    168166         END DO 
     
    172170         clfiletype='velfb' 
    173171         CALL alloc_obfbdata( fbdata, 2, profdata%nprof, ilevel, & 
    174             &                 iadd_exp + iadd, 0, .TRUE. ) 
     172            &                 1 + iadd_clm + iadd, 0, .TRUE. ) 
    175173         fbdata%cname(1)      = profdata%cvars(1) 
    176174         fbdata%cname(2)      = profdata%cvars(2) 
     
    188186         fbdata%caddunit(1,1) = 'm/s' 
    189187         fbdata%caddunit(1,2) = 'm/s' 
    190          IF ( ln_output_clim ) THEN 
     188         IF ( profdata%lclim ) THEN 
    191189            fbdata%caddlong(2,1) = 'Climatology interpolated zonal velocity' 
    192190            fbdata%caddlong(2,2) = 'Climatology interpolated meridional velocity' 
     
    197195         fbdata%cgrid(2)      = 'V' 
    198196         DO ja = 1, iadd 
    199             fbdata%caddname(iadd_exp+ja) = padd%cdname(ja) 
    200             fbdata%caddlong(iadd_exp+ja,1) = padd%cdlong(ja,1) 
    201             fbdata%caddunit(iadd_exp+ja,1) = padd%cdunit(ja,1) 
     197            fbdata%caddname(1+iadd_clm+ja) = padd%cdname(ja) 
     198            fbdata%caddlong(1+iadd_clm+ja,1) = padd%cdlong(ja,1) 
     199            fbdata%caddunit(1+iadd_clm+ja,1) = padd%cdunit(ja,1) 
    202200         END DO 
    203201 
     
    270268         & ( TRIM(profdata%cvars(1)) /= 'UVEL' ) ) THEN 
    271269         CALL alloc_obfbdata( fbdata, 1, profdata%nprof, ilevel, & 
    272             &                 iadd_expt + iadd, iext, .TRUE. ) 
     270            &                 1 + iadd_clm + iadd, iext, .TRUE. ) 
    273271         fbdata%cname(1)      = profdata%cvars(1) 
    274272         fbdata%coblong(1)    = cllongname 
     
    276274         fbdata%caddlong(1,1) = 'Model interpolated ' // TRIM(cllongname) 
    277275         fbdata%caddunit(1,1) = clunits 
    278          IF ( ln_output_clim ) THEN 
     276         IF ( profdata%lclim ) THEN 
    279277            fbdata%caddlong(2,1) = 'Climatological interpolated ' // TRIM(cllongname) 
    280278            fbdata%caddunit(2,1) = clunits 
     
    287285         END DO 
    288286         DO ja = 1, iadd 
    289             fbdata%caddname(iadd_expt+ja) = padd%cdname(ja) 
    290             fbdata%caddlong(iadd_expt+ja,1) = padd%cdlong(ja,1) 
    291             fbdata%caddunit(iadd_expt+ja,1) = padd%cdunit(ja,1) 
     287            fbdata%caddname(1+iadd_clm+ja) = padd%cdname(ja) 
     288            fbdata%caddlong(1+iadd_clm+ja,1) = padd%cdlong(ja,1) 
     289            fbdata%caddunit(1+iadd_clm+ja,1) = padd%cdunit(ja,1) 
    292290         END DO 
    293291      ENDIF 
    294292 
    295293      fbdata%caddname(1)   = 'Hx' 
    296       IF ( ln_output_clim ) fbdata%caddname(2)   = 'CLM' 
     294      IF ( profdata%lclim ) fbdata%caddname(1+iadd_clm)   = 'CLM' 
    297295       
    298296      WRITE(clfname, FMT="(A,'_fdbk_',I4.4,'.nc')") TRIM(clfiletype), nproc 
     
    348346            DO jk = profdata%npvsta(jo,jvar), profdata%npvend(jo,jvar) 
    349347               ik = profdata%var(jvar)%nvlidx(jk) 
    350                fbdata%padd(ik,jo,1,jvar) = profdata%var(jvar)%vmod(jk) 
    351                IF ( ln_output_clim ) THEN            
    352                   fbdata%padd(ik,jo,2,jvar) = profdata%var(jvar)%vclm(jk)      
    353                ENDIF               
    354348               fbdata%pob(ik,jo,jvar)    = profdata%var(jvar)%vobs(jk) 
    355349               fbdata%pdep(ik,jo)        = profdata%var(jvar)%vdep(jk) 
     
    365359               ENDIF 
    366360               fbdata%iobsk(ik,jo,jvar)  = profdata%var(jvar)%mvk(jk) 
     361                
     362               fbdata%padd(ik,jo,1,jvar) = profdata%var(jvar)%vmod(jk) 
     363               IF ( profdata%lclim ) THEN            
     364                  fbdata%padd(ik,jo,1+iadd_clm,jvar) = profdata%var(jvar)%vclm(jk)      
     365               ENDIF               
    367366               DO ja = 1, iadd 
    368                   fbdata%padd(ik,jo,iadd_exp+ja,jvar) = & 
     367                  fbdata%padd(ik,jo,1+iadd_clm+ja,jvar) = & 
    369368                     & profdata%var(jvar)%vext(jk,padd%ipoint(ja)) 
    370369               END DO 
     
    449448      INTEGER :: je 
    450449      INTEGER :: iadd 
    451       INTEGER :: iadd_exp 
    452450      INTEGER :: iext 
    453451      INTEGER :: indx_std 
    454452      INTEGER :: iadd_std 
    455       INTEGER :: iadd_clm       
     453      INTEGER :: iadd_clm      
     454      INTEGER :: iadd_mdt  
     455 
     456      IF ( PRESENT( pext ) ) THEN 
     457         iext = pext%inum 
     458      ELSE 
     459         iext = 0 
     460      ENDIF 
    456461 
    457462 
    458463      ! Set up number of additional variables to be ouput: 
    459       ! Hx, CLIM, ... 
    460       iadd_exp = 1   ! Hx 
    461       IF ( ln_output_clim ) iadd_exp = iadd_exp + 1 
     464      ! Hx, CLM, STD, MDT... 
    462465  
    463466      IF ( PRESENT( padd ) ) THEN 
     
    466469         iadd = 0 
    467470      ENDIF 
    468  
    469       IF ( PRESENT( pext ) ) THEN 
    470          iext = pext%inum 
    471       ELSE 
    472          iext = 0 
    473       ENDIF 
    474  
     471       
    475472      iadd_std = 0 
    476473      indx_std = -1 
     
    485482       
    486483      iadd_clm = 0 
     484      IF ( surfdata%lclim ) iadd_clm = 1 
     485       
     486      iadd_mdt = 0 
     487      IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) iadd_mdt = 1 
    487488       
    488489      CALL init_obfbdata( fbdata ) 
     
    496497 
    497498         CALL alloc_obfbdata( fbdata, 1, surfdata%nsurf, 1, & 
    498             &                 2 + iadd + iadd_std, 1 + iext, .TRUE. ) 
     499            &                 1 + iadd_mdt + iadd_std + iadd, & 
     500            &                 1 + iext, .TRUE. ) 
    499501 
    500502         clfiletype = 'slafb' 
     
    517519         fbdata%cgrid(1)      = 'T' 
    518520         DO ja = 1, iadd 
    519             fbdata%caddname(2+iadd_std+ja) = padd%cdname(ja) 
    520             fbdata%caddlong(2+iadd_std+ja,1) = padd%cdlong(ja,1) 
    521             fbdata%caddunit(2+iadd_std+ja,1) = padd%cdunit(ja,1) 
     521            fbdata%caddname(1+iadd_mdt+iadd_std+ja) = padd%cdname(ja) 
     522            fbdata%caddlong(1+iadd_mdt+iadd_std+ja,1) = padd%cdlong(ja,1) 
     523            fbdata%caddunit(1+iadd_mdt+iadd_std+ja,1) = padd%cdunit(ja,1) 
    522524         END DO 
    523525 
     
    528530         clunits    = 'Degree centigrade' 
    529531         clgrid     = 'T' 
    530          IF ( ln_output_clim ) iadd_clm = 1 
    531532          
    532533      CASE('ICECONC') 
     
    543544         clunits    = 'psu' 
    544545         clgrid     = 'T' 
    545          IF ( ln_output_clim ) iadd_clm = 1 
    546546          
    547547      CASE('SLCHLTOT','LOGCHL','LogChl','logchl') 
     
    655655       
    656656         CALL alloc_obfbdata( fbdata, 1, surfdata%nsurf, 1, & 
    657             &                 1 + iadd + iadd_std + iadd_clm, iext, .TRUE. ) 
     657            &                 1 + iadd_std + iadd_clm + iadd, iext, .TRUE. ) 
    658658 
    659659         fbdata%cname(1)      = surfdata%cvars(1) 
     
    673673         fbdata%cgrid(1)      = clgrid 
    674674         DO ja = 1, iadd 
    675             fbdata%caddname(1+iadd_std+iadd_clm+ja) = padd%cdname(ja) 
    676             fbdata%caddlong(1+iadd_std+iadd_clm+ja,1) = padd%cdlong(ja,1) 
    677             fbdata%caddunit(1+iadd_std+iadd_clm+ja,1) = padd%cdunit(ja,1) 
     675            fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm+ja) = padd%cdname(ja) 
     676            fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdlong(ja,1) 
     677            fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdunit(ja,1) 
    678678         END DO 
    679679 
     
    682682      fbdata%caddname(1)   = 'Hx' 
    683683      IF ( indx_std /= -1 ) THEN 
    684          IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) iadd_std = iadd_std + 1 
    685          fbdata%caddname(1+iadd_std)   = surfdata%cext(indx_std) 
    686          fbdata%caddlong(1+iadd_std,1) = 'Obs error standard deviation' 
    687          fbdata%caddunit(1+iadd_std,1) = fbdata%cobunit(1) 
    688       ENDIF 
    689        
    690       IF ( ln_output_clim .AND. ( iadd_clm > 0 ) ) THEN 
    691          fbdata%caddname(1+iadd_std+iadd_clm)   = 'CLM' 
    692          fbdata%caddlong(1+iadd_std+iadd_clm,1) = 'Climatology' 
    693          fbdata%caddunit(1+iadd_std+iadd_clm,1) = fbdata%cobunit(1) 
     684         fbdata%caddname(1+iadd_mdt+iadd_std)   = surfdata%cext(indx_std) 
     685         fbdata%caddlong(1+iadd_mdt+iadd_std,1) = 'Obs error standard deviation' 
     686         fbdata%caddunit(1+iadd_mdt+iadd_std,1) = fbdata%cobunit(1) 
     687      ENDIF 
     688       
     689      IF ( surfdata%lclim ) THEN 
     690         fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm)   = 'CLM' 
     691         fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm,1) = 'Climatology' 
     692         fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm,1) = fbdata%cobunit(1) 
    694693      ENDIF 
    695694       
     
    741740            &           fbdata%ptim(jo),   & 
    742741            &           krefdate = 19500101 ) 
    743          fbdata%padd(1,jo,1,1) = surfdata%rmod(jo,1) 
    744          IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) THEN 
    745             fbdata%padd(1,jo,2,1) = surfdata%rext(jo,1) 
    746          ENDIF     
    747          IF ( ln_output_clim .AND. ( iadd_clm > 0 ) ) THEN 
    748             fbdata%padd(1,jo,2,1) = surfdata%rclm(jo,1) 
    749          ENDIF 
    750                       
     742                     
    751743         fbdata%pob(1,jo,1)    = surfdata%robs(jo,1)  
    752744         fbdata%pdep(1,jo)     = 0.0 
     
    764756         ENDIF 
    765757         fbdata%iobsk(1,jo,1)  = 0 
    766          IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) fbdata%pext(1,jo,1) = surfdata%rext(jo,2) 
     758  
     759         ! Additional variables. 
     760         ! Hx is always the first additional variable 
     761         fbdata%padd(1,jo,1,1) = surfdata%rmod(jo,1) 
     762         ! MDT is output as an additional variable if SLA obs type 
     763         IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) THEN 
     764            fbdata%padd(1,jo,1+iadd_mdt,1) = surfdata%rext(jo,1) 
     765         ENDIF     
     766         ! STD is output as an additional variable if available 
    767767         IF ( indx_std /= -1 ) THEN 
    768             fbdata%padd(1,jo,1+iadd_std,1) = surfdata%rext(jo,indx_std) 
     768            fbdata%padd(1,jo,1+iadd_mdt+iadd_std,1) = surfdata%rext(jo,indx_std) 
    769769         ENDIF 
     770         ! CLM is output as an additional variable if available 
     771         IF ( surfdata%lclim ) THEN 
     772            fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm,1) = surfdata%rclm(jo,1) 
     773         ENDIF 
     774         ! Then other additional variables are output 
     775         DO ja = 1, iadd 
     776            fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm+ja,1) = & 
     777               & surfdata%rext(jo,padd%ipoint(ja)) 
     778         END DO 
    770779          
    771          DO ja = 1, iadd 
    772             fbdata%padd(1,jo,2+iadd_std+ja,1) = & 
    773                & surfdata%rext(jo,padd%ipoint(ja)) 
    774          END DO 
     780         ! Extra variables 
     781         IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) fbdata%pext(1,jo,1) = surfdata%rext(jo,2)          
    775782         DO je = 1, iext 
    776783            fbdata%pext(1,jo,1+je) = & 
Note: See TracChangeset for help on using the changeset viewer.