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

Ignore:
Timestamp:
2020-12-12T12:31:26+01:00 (4 years ago)
Author:
dcarneir
Message:

Merging trunk into my branch to keep it updated

File:
1 edited

Legend:

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

    r12820 r14165  
    349349                  fbdata%ivlqc(ik,jo,jvar) = IBSET(profdata%var(jvar)%nvqc(jk),2) 
    350350                  fbdata%ivlqcf(1,ik,jo,jvar) = profdata%var(jvar)%nvqcf(1,jk) 
    351                   fbdata%ivlqcf(2,ik,jo,jvar) = IAND(profdata%var(jvar)%nvqc(jk),b'0000 0000 1111 1111') 
     351                  fbdata%ivlqcf(2,ik,jo,jvar) = IAND(profdata%var(jvar)%nvqc(jk),b'0000000011111111') 
    352352               ELSE 
    353353                  fbdata%ivlqc(ik,jo,jvar) = profdata%var(jvar)%nvqc(jk) 
     
    437437      CHARACTER(LEN=10) :: clfiletype 
    438438      CHARACTER(LEN=12), PARAMETER :: cpname = 'obs_wri_surf' 
    439       CHARACTER(LEN=ilenlong) :: cllongname  ! Long name of variable 
    440       CHARACTER(LEN=ilenunit) :: clunits     ! Units of variable 
    441       CHARACTER(LEN=ilengrid) :: clgrid      ! Grid of variable 
     439      CHARACTER(LEN=ilenlong), DIMENSION(surfdata%nvar) :: cllongname  ! Long name of variable 
     440      CHARACTER(LEN=ilenunit), DIMENSION(surfdata%nvar) :: clunits     ! Units of variable 
     441      CHARACTER(LEN=ilengrid), DIMENSION(surfdata%nvar) :: clgrid      ! Grid of variable 
    442442      INTEGER :: jo 
    443443      INTEGER :: ja 
    444444      INTEGER :: je 
     445      INTEGER :: jv 
    445446      INTEGER :: iadd 
    446447      INTEGER :: iext 
     
    522523      CASE('SST') 
    523524 
    524          clfiletype = 'sstfb' 
    525          cllongname = 'Sea surface temperature' 
    526          clunits    = 'Degree centigrade' 
    527          clgrid     = 'T' 
     525         clfiletype    = 'sstfb' 
     526         cllongname(1) = 'Sea surface temperature' 
     527         clunits(1)    = 'Degree centigrade' 
     528         clgrid(1)     = 'T' 
    528529          
    529530      CASE('ICECONC') 
    530531 
    531          clfiletype = 'sicfb' 
    532          cllongname = 'Sea ice concentration' 
    533          clunits    = 'Fraction' 
    534          clgrid     = 'T' 
     532         clfiletype    = 'sicfb' 
     533         cllongname(1) = 'Sea ice concentration' 
     534         clunits(1)    = 'Fraction' 
     535         clgrid(1)     = 'T' 
    535536 
    536537      CASE('SIT') 
    537538 
    538          clfiletype = 'sitfb' 
    539          cllongname = 'Sea ice thickness' 
    540          clunits    = 'm' 
    541          clgrid     = 'T' 
     539         clfiletype    = 'sitfb' 
     540         cllongname(1) = 'Sea ice thickness' 
     541         clunits(1)    = 'm' 
     542         clgrid(1)     = 'T' 
    542543 
    543544      CASE('FBD') 
     
    552553      CASE('SSS') 
    553554 
    554          clfiletype = 'sssfb' 
    555          cllongname = 'Sea surface salinity' 
    556          clunits    = 'psu' 
    557          clgrid     = 'T' 
     555         clfiletype    = 'sssfb' 
     556         cllongname(1) = 'Sea surface salinity' 
     557         clunits(1)    = 'psu' 
     558         clgrid(1)     = 'T' 
     559 
     560      CASE('UVEL') 
     561 
     562         clfiletype    = 'ssvfb' 
     563         cllongname(1) = 'Eastward sea surface velocity' 
     564         clunits(1)    = 'm s-1' 
     565         clgrid(1)     = 'U' 
     566         cllongname(2) = 'Northward sea surface velocity' 
     567         clunits(2)    = 'm s-1' 
     568         clgrid(2)     = 'V' 
    558569          
    559570      CASE('SLCHLTOT') 
    560571 
    561          clfiletype = 'slchltotfb' 
    562          cllongname = 'Surface total log10(chlorophyll)' 
    563          clunits    = 'log10(mg/m3)' 
    564          clgrid     = 'T' 
     572         clfiletype    = 'slchltotfb' 
     573         cllongname(1) = 'Surface total log10(chlorophyll)' 
     574         clunits(1)    = 'log10(mg/m3)' 
     575         clgrid(1)     = 'T' 
    565576 
    566577      CASE('SLCHLDIA') 
    567578 
    568          clfiletype = 'slchldiafb' 
    569          cllongname = 'Surface diatom log10(chlorophyll)' 
    570          clunits    = 'log10(mg/m3)' 
    571          clgrid     = 'T' 
     579         clfiletype    = 'slchldiafb' 
     580         cllongname(1) = 'Surface diatom log10(chlorophyll)' 
     581         clunits(1)    = 'log10(mg/m3)' 
     582         clgrid(1)     = 'T' 
    572583 
    573584      CASE('SLCHLNON') 
    574585 
    575          clfiletype = 'slchlnonfb' 
    576          cllongname = 'Surface non-diatom log10(chlorophyll)' 
    577          clunits    = 'log10(mg/m3)' 
    578          clgrid     = 'T' 
     586         clfiletype    = 'slchlnonfb' 
     587         cllongname(1) = 'Surface non-diatom log10(chlorophyll)' 
     588         clunits(1)    = 'log10(mg/m3)' 
     589         clgrid(1)     = 'T' 
    579590 
    580591      CASE('SLCHLDIN') 
    581592 
    582          clfiletype = 'slchldinfb' 
    583          cllongname = 'Surface dinoflagellate log10(chlorophyll)' 
    584          clunits    = 'log10(mg/m3)' 
    585          clgrid     = 'T' 
     593         clfiletype    = 'slchldinfb' 
     594         cllongname(1) = 'Surface dinoflagellate log10(chlorophyll)' 
     595         clunits(1)    = 'log10(mg/m3)' 
     596         clgrid(1)     = 'T' 
    586597 
    587598      CASE('SLCHLMIC') 
    588599 
    589          clfiletype = 'slchlmicfb' 
    590          cllongname = 'Surface microphytoplankton log10(chlorophyll)' 
    591          clunits    = 'log10(mg/m3)' 
    592          clgrid     = 'T' 
     600         clfiletype    = 'slchlmicfb' 
     601         cllongname(1) = 'Surface microphytoplankton log10(chlorophyll)' 
     602         clunits(1)    = 'log10(mg/m3)' 
     603         clgrid(1)     = 'T' 
    593604 
    594605      CASE('SLCHLNAN') 
    595606 
    596          clfiletype = 'slchlnanfb' 
    597          cllongname = 'Surface nanophytoplankton log10(chlorophyll)' 
    598          clunits    = 'log10(mg/m3)' 
    599          clgrid     = 'T' 
     607         clfiletype    = 'slchlnanfb' 
     608         cllongname(1) = 'Surface nanophytoplankton log10(chlorophyll)' 
     609         clunits(1)    = 'log10(mg/m3)' 
     610         clgrid(1)     = 'T' 
    600611 
    601612      CASE('SLCHLPIC') 
    602613 
    603          clfiletype = 'slchlpicfb' 
    604          cllongname = 'Surface picophytoplankton log10(chlorophyll)' 
    605          clunits    = 'log10(mg/m3)' 
    606          clgrid     = 'T' 
     614         clfiletype    = 'slchlpicfb' 
     615         cllongname(1) = 'Surface picophytoplankton log10(chlorophyll)' 
     616         clunits(1)    = 'log10(mg/m3)' 
     617         clgrid(1)     = 'T' 
    607618 
    608619      CASE('SCHLTOT') 
     
    615626      CASE('SLPHYTOT') 
    616627 
    617          clfiletype = 'slphytotfb' 
    618          cllongname = 'Surface total log10(phytoplankton carbon)' 
    619          clunits    = 'log10(mmolC/m3)' 
    620          clgrid     = 'T' 
     628         clfiletype    = 'slphytotfb' 
     629         cllongname(1) = 'Surface total log10(phytoplankton carbon)' 
     630         clunits(1)    = 'log10(mmolC/m3)' 
     631         clgrid(1)     = 'T' 
    621632 
    622633      CASE('SLPHYDIA') 
    623634 
    624          clfiletype = 'slphydiafb' 
    625          cllongname = 'Surface diatom log10(phytoplankton carbon)' 
    626          clunits    = 'log10(mmolC/m3)' 
    627          clgrid     = 'T' 
     635         clfiletype    = 'slphydiafb' 
     636         cllongname(1) = 'Surface diatom log10(phytoplankton carbon)' 
     637         clunits(1)    = 'log10(mmolC/m3)' 
     638         clgrid(1)     = 'T' 
    628639 
    629640      CASE('SLPHYNON') 
    630641 
    631          clfiletype = 'slphynonfb' 
    632          cllongname = 'Surface non-diatom log10(phytoplankton carbon)' 
    633          clunits    = 'log10(mmolC/m3)' 
    634          clgrid     = 'T' 
     642         clfiletype    = 'slphynonfb' 
     643         cllongname(1) = 'Surface non-diatom log10(phytoplankton carbon)' 
     644         clunits(1)    = 'log10(mmolC/m3)' 
     645         clgrid(1)     = 'T' 
    635646 
    636647      CASE('SSPM') 
    637648 
    638          clfiletype = 'sspmfb' 
    639          cllongname = 'Surface suspended particulate matter' 
    640          clunits    = 'g/m3' 
    641          clgrid     = 'T' 
     649         clfiletype    = 'sspmfb' 
     650         cllongname(1) = 'Surface suspended particulate matter' 
     651         clunits(1)    = 'g/m3' 
     652         clgrid(1)     = 'T' 
    642653 
    643654      CASE('SKD490') 
    644655 
    645          clfiletype = 'skd490fb' 
    646          cllongname = 'Surface attenuation coefficient of downwelling radiation at 490 nm' 
    647          clunits    = 'm-1' 
    648          clgrid     = 'T' 
     656         clfiletype    = 'skd490fb' 
     657         cllongname(1) = 'Surface attenuation coefficient of downwelling radiation at 490 nm' 
     658         clunits(1)    = 'm-1' 
     659         clgrid(1)     = 'T' 
    649660 
    650661      CASE('SFCO2') 
    651662 
    652          clfiletype = 'sfco2fb' 
    653          cllongname = 'Surface fugacity of carbon dioxide' 
    654          clunits    = 'uatm' 
    655          clgrid     = 'T' 
     663         clfiletype    = 'sfco2fb' 
     664         cllongname(1) = 'Surface fugacity of carbon dioxide' 
     665         clunits(1)    = 'uatm' 
     666         clgrid(1)     = 'T' 
    656667 
    657668      CASE('SPCO2') 
    658669 
    659          clfiletype = 'spco2fb' 
    660          cllongname = 'Surface partial pressure of carbon dioxide' 
    661          clunits    = 'uatm' 
    662          clgrid     = 'T' 
     670         clfiletype    = 'spco2fb' 
     671         cllongname(1) = 'Surface partial pressure of carbon dioxide' 
     672         clunits(1)    = 'uatm' 
     673         clgrid(1)     = 'T' 
    663674 
    664675      CASE DEFAULT 
     
    673684      IF ( TRIM(surfdata%cvars(1)) /= 'SLA' ) THEN 
    674685       
    675          CALL alloc_obfbdata( fbdata, 1, surfdata%nsurf, 1, & 
     686         CALL alloc_obfbdata( fbdata, surfdata%nvar, surfdata%nsurf, 1, & 
    676687            &                 1 + iadd_std + iadd_clm + iadd, iext, .TRUE. ) 
    677688 
    678          fbdata%cname(1)      = surfdata%cvars(1) 
    679          fbdata%coblong(1)    = cllongname 
    680          fbdata%cobunit(1)    = clunits 
     689         DO jv = 1, surfdata%nvar 
     690            fbdata%cname(jv)      = surfdata%cvars(jv) 
     691            fbdata%coblong(jv)    = cllongname(jv) 
     692            fbdata%cobunit(jv)    = clunits(jv) 
     693         END DO 
    681694         DO je = 1, iext 
    682695            fbdata%cextname(je) = pext%cdname(je) 
     
    684697            fbdata%cextunit(je) = pext%cdunit(je,1) 
    685698         END DO 
    686          IF ( TRIM(surfdata%cvars(1)) == 'ICECONC' ) THEN 
    687             fbdata%caddlong(1,1) = 'Model interpolated ICE' 
    688          ELSE 
    689             fbdata%caddlong(1,1) = 'Model interpolated ' // TRIM(surfdata%cvars(1)) 
    690          ENDIF 
    691          fbdata%caddunit(1,1) = clunits 
    692          fbdata%cgrid(1)      = clgrid 
     699         DO jv = 1, surfdata%nvar          
     700            IF ( TRIM(surfdata%cvars(1)) == 'ICECONC' ) THEN 
     701               fbdata%caddlong(1,jv) = 'Model interpolated ICE' 
     702            ELSE 
     703               fbdata%caddlong(1,jv) = 'Model interpolated ' // TRIM(surfdata%cvars(jv)) 
     704            ENDIF 
     705            fbdata%caddunit(1,jv) = clunits(jv) 
     706            fbdata%cgrid(jv)      = clgrid(jv) 
     707         END DO             
    693708         DO ja = 1, iadd 
    694709            fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm+ja) = padd%cdname(ja) 
    695             fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdlong(ja,1) 
    696             fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdunit(ja,1) 
    697          END DO 
    698  
    699       ENDIF 
    700        
     710            DO jv = 1, surfdata%nvar                      
     711               fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm+ja,jv) = padd%cdlong(ja,jv) 
     712               fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm+ja,jv) = padd%cdunit(ja,jv) 
     713            END DO 
     714         END DO 
     715      ENDIF 
     716 
    701717      fbdata%caddname(1)   = 'Hx' 
    702718      IF ( indx_std /= -1 ) THEN 
    703719         fbdata%caddname(1+iadd_mdt+iadd_std)   = surfdata%cext(indx_std) 
    704          fbdata%caddlong(1+iadd_mdt+iadd_std,1) = 'Obs error standard deviation' 
    705          fbdata%caddunit(1+iadd_mdt+iadd_std,1) = fbdata%cobunit(1) 
     720         DO jv = 1, surfdata%nvar                         
     721            fbdata%caddlong(1+iadd_mdt+iadd_std,1) = 'Obs error standard deviation' 
     722            fbdata%caddunit(1+iadd_mdt+iadd_std,1) = fbdata%cobunit(1) 
     723         END DO 
    706724      ENDIF 
    707725       
    708726      IF ( surfdata%lclim ) THEN 
    709727         fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm)   = 'CLM' 
    710          fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm,1) = 'Climatology' 
    711          fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm,1) = fbdata%cobunit(1) 
    712       ENDIF 
    713        
    714        
     728         DO jv = 1, surfdata%nvar                                  
     729            fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm,jv) = 'Climatology' 
     730            fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm,jv) = fbdata%cobunit(1) 
     731         END DO 
     732      ENDIF 
     733 
    715734      WRITE(clfname, FMT="(A,'_fdbk_',I4.4,'.nc')") TRIM(clfiletype), nproc 
    716735 
     
    719738         WRITE(numout,*)'obs_wri_surf :' 
    720739         WRITE(numout,*)'~~~~~~~~~~~~~' 
    721          WRITE(numout,*)'Writing '//TRIM(surfdata%cvars(1))//' feedback file : ',TRIM(clfname) 
     740         WRITE(numout,*)'Writing '//TRIM(clfiletype)//' feedback file : ',TRIM(clfname) 
    722741      ENDIF 
    723742 
     
    733752            fbdata%ioqc(jo)    = 4 
    734753            fbdata%ioqcf(1,jo) = 0 
    735             fbdata%ioqcf(2,jo) = IAND(surfdata%nqc(jo),b'0000 0000 1111 1111') 
     754            fbdata%ioqcf(2,jo) = IAND(surfdata%nqc(jo),b'0000000011111111') 
    736755         ELSE 
    737756            fbdata%ioqc(jo)    = surfdata%nqc(jo) 
     
    745764         fbdata%kindex(jo)    = surfdata%nsfil(jo) 
    746765         IF (ln_grid_global) THEN 
    747             fbdata%iobsi(jo,1) = surfdata%mi(jo) 
    748             fbdata%iobsj(jo,1) = surfdata%mj(jo) 
     766            DO jv = 1, surfdata%nvar 
     767               fbdata%iobsi(jo,jv) = surfdata%mi(jo,jv) 
     768               fbdata%iobsj(jo,jv) = surfdata%mj(jo,jv) 
     769            END DO 
    749770         ELSE 
    750             fbdata%iobsi(jo,1) = mig(surfdata%mi(jo)) 
    751             fbdata%iobsj(jo,1) = mjg(surfdata%mj(jo)) 
     771            DO jv = 1, surfdata%nvar          
     772               fbdata%iobsi(jo,jv) = mig(surfdata%mi(jo,jv)) 
     773               fbdata%iobsj(jo,jv) = mjg(surfdata%mj(jo,jv)) 
     774            END DO                
    752775         ENDIF 
    753776         CALL greg2jul( 0, & 
     
    759782            &           fbdata%ptim(jo),   & 
    760783            &           krefdate = 19500101 ) 
    761                      
    762          fbdata%pob(1,jo,1)    = surfdata%robs(jo,1)  
     784 
    763785         fbdata%pdep(1,jo)     = 0.0 
    764786         fbdata%idqc(1,jo)     = 0 
    765787         fbdata%idqcf(:,1,jo)  = 0 
    766          IF ( surfdata%nqc(jo) > 255 ) THEN 
    767             fbdata%ivqc(jo,1)       = 4 
    768             fbdata%ivlqc(1,jo,1)    = 4 
    769             fbdata%ivlqcf(1,1,jo,1) = 0 
    770             fbdata%ivlqcf(2,1,jo,1) = IAND(surfdata%nqc(jo),b'0000 0000 1111 1111') 
    771          ELSE 
    772             fbdata%ivqc(jo,1)       = surfdata%nqc(jo) 
    773             fbdata%ivlqc(1,jo,1)    = surfdata%nqc(jo) 
    774             fbdata%ivlqcf(:,1,jo,1) = 0 
    775          ENDIF 
    776          fbdata%iobsk(1,jo,1)  = 0 
    777   
    778          ! Additional variables. 
    779          ! Hx is always the first additional variable 
    780          fbdata%padd(1,jo,1,1) = surfdata%rmod(jo,1) 
    781          ! MDT is output as an additional variable if SLA obs type 
    782          IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) THEN 
    783             fbdata%padd(1,jo,1+iadd_mdt,1) = surfdata%rext(jo,1) 
    784          ENDIF     
    785          ! STD is output as an additional variable if available 
    786          IF ( indx_std /= -1 ) THEN 
    787             fbdata%padd(1,jo,1+iadd_mdt+iadd_std,1) = surfdata%rext(jo,indx_std) 
    788          ENDIF 
    789          ! CLM is output as an additional variable if available 
    790          IF ( surfdata%lclim ) THEN 
    791             fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm,1) = surfdata%rclm(jo,1) 
    792          ENDIF 
    793          ! Then other additional variables are output 
    794          DO ja = 1, iadd 
    795             fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm+ja,1) = & 
    796                & surfdata%rext(jo,padd%ipoint(ja)) 
    797          END DO 
     788         DO jv = 1, surfdata%nvar  
     789            fbdata%pob(1,jo,jv)    = surfdata%robs(jo,jv) 
    798790          
     791            IF ( surfdata%nqc(jo) > 255 ) THEN 
     792               fbdata%ivqc(jo,jv)       = 4 
     793               fbdata%ivlqc(1,jo,jv)    = 4 
     794               fbdata%ivlqcf(1,1,jo,jv) = 0 
     795               fbdata%ivlqcf(2,1,jo,jv) = IAND(surfdata%nqc(jo),b'0000000011111111') 
     796            ELSE 
     797               fbdata%ivqc(jo,jv)       = surfdata%nqc(jo) 
     798               fbdata%ivlqc(1,jo,jv)    = surfdata%nqc(jo) 
     799               fbdata%ivlqcf(:,1,jo,jv) = 0 
     800            ENDIF 
     801            fbdata%iobsk(1,jo,jv)  = 0 
     802 
     803           
     804            ! Additional variables. 
     805            ! Hx is always the first additional variable 
     806            fbdata%padd(1,jo,1,jv) = surfdata%rmod(jo,jv) 
     807            ! MDT is output as an additional variable if SLA obs type 
     808            IF ( TRIM(surfdata%cvars(jv)) == 'SLA' ) THEN 
     809               fbdata%padd(1,jo,1+iadd_mdt,jv) = surfdata%rext(jo,1) 
     810            ENDIF     
     811            ! STD is output as an additional variable if available 
     812            IF ( indx_std /= -1 ) THEN 
     813               fbdata%padd(1,jo,1+iadd_mdt+iadd_std,jv) = surfdata%rext(jo,indx_std) 
     814            ENDIF 
     815            ! CLM is output as an additional variable if available 
     816            IF ( surfdata%lclim ) THEN 
     817               fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm,jv) = surfdata%rclm(jo,jv) 
     818            ENDIF 
     819            ! Then other additional variables are output 
     820            DO ja = 1, iadd 
     821               fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm+ja,jv) = & 
     822                  & surfdata%rext(jo,padd%ipoint(ja)) 
     823            END DO 
     824         END DO          
    799825         ! Extra variables 
    800826         IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) fbdata%pext(1,jo,1) = surfdata%rext(jo,2)          
Note: See TracChangeset for help on using the changeset viewer.