Changeset 405


Ignore:
Timestamp:
2006-03-20T17:00:08+01:00 (15 years ago)
Author:
opalod
Message:

nemo_v1_024 : CT : bug fix for mean KZ output in dimg output format

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DIA/diawri_dimg.h90

    r389 r405  
    33  !!---------------------------------------------------------------------- 
    44  !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    5    !! $Header$  
    6    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     5  !! $Header$  
     6  !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    77  !!---------------------------------------------------------------------- 
    88 
     
    4343    !!  level 1:  taux(:,:) * umask(:,:,1) zonal stress in N.m-2 
    4444    !!  level 2:  tauy(:,:) * vmask(:,:,1) meridional stress in N. m-2 
    45     !!  level 3:   qt (:,:)                total heat flux (W/m2) 
    46     !!  level 4:   emp (:,:)             E-P flux (mm/day) 
    47     !!  level 5:  tb  (:,:,1)-sst            model SST -forcing sst (degree C) 
    48     !!  level 6:  bsfb(:,:)                streamfunction (m**3/s) 
    49     !!  level 7:  qsr (:,:)                solar flux (W/m2) 
    50     !!  level 8:  qrp (:,:)                  relax component of T flux. 
    51     !!  level 9:  erp (:,:)                  relax component of S flux 
    52     !!  level 10: hmld(:,:)                   turbocline depth 
    53     !!  level 11: hmlp(:,:)                   mixed layer depth 
    54     !!  level 12: freeze (:,:)               Ice cover (1. or 0.) 
    55     !!  level 13: sst(:,:)                   the observed SST we relax to. 
    56     !!  level 14: qct(:,:)                   equivalent flux due to treshold SST 
    57     !!  level 15: fbt(:,:)                   feedback term . 
    58     !!  level 16: gps(:,:)                   the surface pressure (m). 
    59     !!  level 17: spgu(:,:)                  the surface pressure gradient in X direction. 
    60     !!  level 18: spgv(:,:)                  the surface pressure gradient in Y direction. 
     45    !!  level 3:   qt  (:,:)               total heat flux (W/m2) 
     46    !!  level 4:   emp (:,:)               E-P flux (mm/day) 
     47    !!  level 5:  tb  (:,:,1)-sst          model SST -forcing sst (degree C) 
     48    !!  level 6:  bsfb(:,:)         streamfunction (m**3/s) 
     49    !!  level 7:  qsr (:,:)         solar flux (W/m2) 
     50    !!  level 8:  qrp (:,:)                relax component of T flux. 
     51    !!  level 9:  erp (:,:)                relax component of S flux 
     52    !!  level 10: hmld(:,:)                turbocline depth 
     53    !!  level 11: hmlp(:,:)                mixed layer depth 
     54    !!  level 12: freeze (:,:)             Ice cover (1. or 0.) 
     55    !!  level 13: sst(:,:)                 the observed SST we relax to. 
     56    !!  level 14: qct(:,:)                 equivalent flux due to treshold SST 
     57    !!  level 15: fbt(:,:)                 feedback term . 
     58    !!  level 16: emps(:,:)                concentration/dilution water flux 
     59    !!  level 17: fsalt(:,:)               Ice=>ocean net freshwater 
     60    !!  level 18: gps(:,:)                 the surface pressure (m). 
     61    !!  level 19: spgu(:,:)                the surface pressure gradient in X direction. 
     62    !!  level 20: spgv(:,:)                the surface pressure gradient in Y direction. 
    6163    !!  
    6264    !! History  
     
    6971    !!      additions : 97-2002 ( Clipper Group ) dimg files 
    7072    !!                  dec 2003 ( J.M. Molines) f90, mpp output for OPA9.0 
     73    !!   9.0  !  05-05  (S. Theetten) add emps fsalt move gps spgu spgv 2 lines below 
    7174    !!   9.0  !  05-11  (V. Garnier) Surface pressure gradient organization 
    7275    !!---------------------------------------------------------------------- 
     
    9295    REAL(wp), SAVE, DIMENSION (jpi,jpj,jpk) ::  um , vm   ! used to compute mean u, v fields 
    9396    REAL(wp), SAVE, DIMENSION (jpi,jpj,jpk) ::  wm        ! used to compute mean w fields 
     97    REAL(wp), SAVE, DIMENSION (jpi,jpj,jpk) ::  avtm      ! used to compute mean kz fields 
    9498    REAL(wp), SAVE, DIMENSION (jpi,jpj,jpk) ::  tm , sm   ! used to compute mean t, s fields 
    9599    REAL(wp), SAVE, DIMENSION (jpi,jpj,jpk) ::  fsel      ! used to compute mean 2d fields 
     
    105109    ! 
    106110#ifdef key_diaspr 
    107     inbsel = 18 
     111    inbsel = 20 
    108112#else 
    109     inbsel = 15 
    110 #endif 
    111  
    112     IF (inbsel >  jpk) THEN 
    113        IF (lwp) WRITE(numout,*)  & 
     113    inbsel = 17 
     114#endif 
     115 
     116    IF( inbsel >  jpk) THEN 
     117       IF( lwp) WRITE(numout,*)  & 
    114118            ' STOP inbsel =',inbsel,' is larger than jpk=',jpk 
    115119       STOP 
    116     END IF 
     120    ENDIF 
    117121 
    118122 
     
    126130    clver='@!01' 
    127131    ! 
    128     IF ( .NOT. ll_dia_inst ) THEN 
     132    IF( .NOT. ll_dia_inst ) THEN 
    129133       !#if ! defined key_diainstant 
    130134       ! 
     
    132136       !! ---------------------- 
    133137       ! 
    134        IF (kt == nit000 .AND. lwp ) WRITE(numout,*) & 
     138       IF( kt == nit000 .AND. lwp ) WRITE(numout,*) & 
    135139            'THE OUTPUT FILES CONTAINS THE AVERAGE OF EACH FIELD' 
    136140       ! 
    137        IF ( kt == nit000 .AND. kindic > 0 ) THEN 
     141       IF( kt == nit000 ) THEN 
    138142          ! reset arrays for average computation 
    139143          nmoyct = 0 
     
    142146          vm(:,:,:) = 0._wp 
    143147          wm(:,:,:) = 0._wp 
     148          avtm(:,:,:) = 0._wp 
    144149          tm(:,:,:) = 0._wp 
    145150          sm(:,:,:) = 0._wp 
    146151          fsel(:,:,:) = 0._wp 
    147152          ! 
    148        END IF 
     153       ENDIF 
    149154 
    150155       !  cumulate values 
     
    156161       vm(:,:,:)=vm(:,:,:) + vn (:,:,:) 
    157162       wm(:,:,:)=wm(:,:,:) + wn (:,:,:) 
     163       avtm(:,:,:)=avtm(:,:,:) + avt (:,:,:) 
    158164       tm(:,:,:)=tm(:,:,:) + tn (:,:,:) 
    159165       sm(:,:,:)=sm(:,:,:) + sn (:,:,:) 
     
    178184       !        fsel(:,:,14) = fsel(:,:,14) + qct(:,:) 
    179185       !        fsel(:,:,15) = fsel(:,:,15) + fbt(:,:) 
     186       fsel(:,:,16) = fsel(:,:,16) + emps(:,:) 
     187#if defined key_ice_lim 
     188       fsel(:,:,17) = fsel(:,:,17) + fsalt(:,:) 
     189#endif 
    180190#ifdef key_diaspr    
    181        fsel(:,:,16) = fsel(:,:,16) + gps(:,:)/g  
     191       fsel(:,:,18) = fsel(:,:,18) + gps(:,:)/g  
    182192#endif 
    183193       ! 
     
    192202       !      IF (abs(adatrj-iwrite*rwrite) < zdtj/2.      & 
    193203 
    194        IF (  ( MOD (kt-nit000+1,nwrite) ==  0 )          & 
     204       IF(  ( MOD (kt-nit000+1,nwrite) ==  0 )          & 
    195205            &   .OR.       kindic <   0            & 
    196206            &   .OR. ( kt == 1 .AND. kindic > 0)  ) THEN 
     
    200210          vm(:,:,:) = vm(:,:,:) / nmoyct 
    201211          wm(:,:,:) = wm(:,:,:) / nmoyct 
     212          avtm(:,:,:) = avtm(:,:,:) / nmoyct 
    202213          tm(:,:,:) = tm(:,:,:) / nmoyct 
    203214          sm(:,:,:) = sm(:,:,:) / nmoyct 
     
    209220          ! 
    210221#ifdef key_diaspr 
    211           fsel(:,:,16)= gps(:,:)/g 
    212           fsel(:,:,17)= spgu(:,:) 
    213           fsel(:,:,18)= spgv(:,:) 
     222          fsel(:,:,18)= gps(:,:)/g 
     223          fsel(:,:,19)= spgu(:,:) 
     224          fsel(:,:,20)= spgv(:,:) 
    214225#endif 
    215226       ENDIF 
     
    221232       !! ------------------------------ 
    222233       ! 
    223        IF (kt == nit000 .AND. lwp ) WRITE(numout,*) & 
     234       IF( kt == nit000 .AND. lwp ) WRITE(numout,*) & 
    224235            'THE OUTPUT FILES CONTAINS INSTANTANEOUS VALUES OF EACH FIELD' 
    225236       ! 
     
    255266          !         fsel(:,:,14) =  qct(:,:) 
    256267          !         fsel(:,:,15) =  fbt(:,:) 
     268          fsel(:,:,16) =  emps(:,:) 
     269#if defined key_ice_lim 
     270          fsel(:,:,17) =  fsalt(:,:) 
     271#endif 
    257272#ifdef key_diaspr            
    258           fsel(:,:,16) =      gps(:,:) /g 
    259           fsel(:,:,17) =      spgu(:,:) 
    260           fsel(:,:,18) =      spgv(:,:) 
     273          fsel(:,:,18) =      gps(:,:) /g 
     274          fsel(:,:,19) =      spgu(:,:) 
     275          fsel(:,:,20) =      spgv(:,:) 
    261276#endif 
    262277          ! 
     
    269284    ! this file gives a record of the dump date for post processing ( ASCII file ) 
    270285    ! 
    271     IF (  ( MOD (kt-nit000+1,nwrite) ==  0 )          & 
     286    IF(  ( MOD (kt-nit000+1,nwrite) ==  0 )          & 
    272287         &   .OR.       kindic <   0            & 
    273288         &   .OR. ( kt == 1 .AND. kindic > 0)  ) THEN 
    274        OPEN (14,FILE='datrj.out',FORM='FORMATTED', STATUS='UNKNOWN',POSITION='APPEND') 
    275  
    276        IF (lwp) WRITE(14,'(f10.4,1x,i8)') adatrj, ndastp 
     289       OPEN (14,FILE='datrj.out',FORM='FORMATTED', STATUS='UNKNOWN',POSITION='APPEND ') 
     290 
     291       IF( lwp) WRITE(14,'(f10.4,1x,i8)') adatrj, ndastp 
    277292       CLOSE(14) 
    278293 
    279        IF (lwp) WRITE(numout,*)'Days since the begining of the run :',adatrj 
     294       IF( lwp) WRITE(numout,*)'Days since the begining of the run :',adatrj 
    280295 
    281296       !! * U section 
     
    285300       IF ( kindic < 0 )   cltext=TRIM(cexper)//' U(m/s)  instantaneous (explosion)' 
    286301       ! 
    287        IF ( ll_dia_inst) THEN  
     302       IF( ll_dia_inst) THEN  
    288303          CALL dia_wri_dimg(clname, cltext, un, jpk, 'T') 
    289304 
    290305       ELSE  
    291           IF ( kindic ==  -3 ) THEN 
     306          IF( kindic ==  -3 ) THEN 
    292307             ! ... in case of explosion on umax, dump instantateous u field instead of mean. 
    293308             CALL dia_wri_dimg(clname, cltext, un, jpk, 'T') 
    294309          ELSE 
    295310             CALL dia_wri_dimg(clname, cltext, um, jpk, 'T') 
    296           END  IF 
     311          ENDIF 
    297312       ENDIF 
    298313 
     
    302317       cltext=TRIM(cexper)//' V(m/s) '//TRIM(clmode) 
    303318       ! 
    304        IF ( ll_dia_inst) THEN 
     319       IF( ll_dia_inst) THEN 
    305320          CALL dia_wri_dimg(clname, cltext, vn, jpk, 'T') 
    306321       ELSE 
    307322          CALL dia_wri_dimg(clname, cltext, vm, jpk, 'T') 
    308        END IF 
     323       ENDIF 
    309324       ! 
    310325 
     
    312327 
    313328       WRITE(clname,9000) TRIM(cexper),'KZ',iyear,imon,iday 
    314        cltext=TRIM(cexper)//' KZ(m2/s) instantaneous' 
    315  
    316        ! no average on kz (convective area may show up too strongly ) 
    317        CALL dia_wri_dimg(clname, cltext, avt, jpk, 'W') 
     329       cltext=TRIM(cexper)//' KZ(m2/s) '//TRIM(clmode) 
     330 
     331       IF( ll_dia_inst) THEN 
     332          CALL dia_wri_dimg(clname, cltext, avt, jpk, 'W') 
     333       ELSE 
     334          CALL dia_wri_dimg(clname, cltext, avtm, jpk, 'W') 
     335       ENDIF 
    318336       ! 
    319337 
     
    323341       cltext=TRIM(cexper)//' W(m/s) '//TRIM(clmode) 
    324342 
    325        IF ( ll_dia_inst) THEN 
     343       IF( ll_dia_inst) THEN 
    326344          CALL dia_wri_dimg(clname, cltext, wn, jpk, 'W') 
    327345       ELSE 
    328346          CALL dia_wri_dimg(clname, cltext, wm, jpk, 'W') 
    329        END IF 
     347       ENDIF 
    330348 
    331349       !! * T section 
     
    334352       cltext=TRIM(cexper)//' T (DegC) '//TRIM(clmode) 
    335353 
    336        IF (ll_dia_inst) THEN 
     354       IF( ll_dia_inst) THEN 
    337355          CALL dia_wri_dimg(clname, cltext, tn, jpk, 'T') 
    338356       ELSE 
    339357          CALL dia_wri_dimg(clname, cltext, tm, jpk, 'T') 
    340        END IF 
     358       ENDIF 
    341359       ! 
    342360 
     
    346364       cltext=TRIM(cexper)//' S (PSU) '//TRIM(clmode) 
    347365 
    348        IF (ll_dia_inst) THEN 
     366       IF( ll_dia_inst) THEN 
    349367          CALL dia_wri_dimg(clname, cltext, sn, jpk, 'T') 
    350368       ELSE 
    351369          CALL dia_wri_dimg(clname, cltext, sm, jpk, 'T') 
    352        END IF 
     370       ENDIF 
    353371       ! 
    354372 
     
    358376       cltext='2D fields '//TRIM(clmode) 
    359377 
    360        IF (ll_dia_inst) THEN 
     378       IF( ll_dia_inst) THEN 
    361379          CALL dia_wri_dimg(clname, cltext, fsel, inbsel, '2') 
    362380       ELSE 
     
    368386       !! * Log message in numout  
    369387 
    370        IF(lwp)WRITE(numout,*) ' ' 
    371        IF(lwp)WRITE(numout,*) ' **** WRITE in numwri ',kt 
    372  
    373        IF(lwp .AND.        ll_dia_inst) WRITE(numout,*) '    instantaneous fields' 
    374        IF(lwp .AND. .NOT. ll_dia_inst ) WRITE(numout,*) '    average fields with ',nmoyct,'pdt' 
     388       IF( lwp)WRITE(numout,*) ' ' 
     389       IF( lwp)WRITE(numout,*) ' **** WRITE in numwri ',kt 
     390 
     391       IF( lwp .AND.        ll_dia_inst) WRITE(numout,*) '    instantaneous fields' 
     392       IF( lwp .AND. .NOT.  ll_dia_inst) WRITE(numout,*) '    average fields with ',nmoyct,'pdt' 
    375393       ! 
    376394       ! 
    377395       !! * Reset cumulating arrays  and counter to 0 after writing 
    378396       ! 
    379        IF ( .NOT. ll_dia_inst ) THEN 
     397       IF( .NOT. ll_dia_inst ) THEN 
    380398          nmoyct = 0 
    381399          ! 
     
    385403          sm(:,:,:) = 0._wp 
    386404          fsel(:,:,:) = 0._wp 
    387        ENDIF 
    388     END IF 
     405          avtm(:,:,:) = O._wp 
     406       ENDIF 
     407    ENDIF 
    389408    ! 
    3904099000 FORMAT(a,"_",a,"_y",i4.4,"m",i2.2,"d",i2.2,".dimgproc") 
     
    405424    !!-------------------------------------------------------------------- 
    406425 
    407     IF (lwp) WRITE(numout,*) 'dia_wri_state: Dummy call', cdfile_name 
    408     IF (lwp) WRITE(numout,*) '-------------' 
    409     IF (lwp) WRITE(numout,*) 
     426    IF( lwp) WRITE(numout,*) 'dia_wri_state: Dummy call', cdfile_name 
     427    IF( lwp) WRITE(numout,*) '-------------' 
     428    IF( lwp) WRITE(numout,*) 
    410429 
    411430  END SUBROUTINE dia_wri_state 
Note: See TracChangeset for help on using the changeset viewer.