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 3320 for trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trdmld_trc.F90 – NEMO

Ignore:
Timestamp:
2012-03-05T17:37:52+01:00 (12 years ago)
Author:
cetlod
Message:

trunk:bugfix on trends diagnostics in the mixed-layer, see ticket#928 and ticket #930

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trdmld_trc.F90

    r3294 r3320  
    3535   USE sms_pisces        ! PISCES bio-model 
    3636   USE sms_lobster       ! LOBSTER bio-model 
     37   USE wrk_nemo          ! Memory allocation 
    3738 
    3839   IMPLICIT NONE 
     
    6768   !! * Substitutions 
    6869#  include "top_substitute.h90" 
     70#  include "zdfddm_substitute.h90" 
    6971   !!---------------------------------------------------------------------- 
    7072   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    388390      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztmlrad2            !  | (-> for trb<0 corr in trcrad) 
    389391      ! 
    390       CHARACTER (LEN= 5) ::   clvar 
     392      CHARACTER (LEN=10) ::   clvar 
    391393#if defined key_dimgout 
    392394      INTEGER ::   iyear,imon,iday 
     
    801803               !-- Output the fields 
    802804               clvar = trim(ctrcnm(jn))//"ml"                        ! e.g. detml, zooml, nh4ml, etc. 
    803                CALL histwrite( nidtrd(jn), clvar         , it, tml_trc(:,:,jn), ndimtrd1, ndextrd1 )  
    804                CALL histwrite( nidtrd(jn), clvar//"_tot" , it, ztmltot(:,:,jn), ndimtrd1, ndextrd1 )  
    805                CALL histwrite( nidtrd(jn), clvar//"_res" , it, ztmlres(:,:,jn), ndimtrd1, ndextrd1 )  
     805               CALL histwrite( nidtrd(jn), trim(clvar)         , it, tml_trc(:,:,jn), ndimtrd1, ndextrd1 )  
     806               CALL histwrite( nidtrd(jn), trim(clvar)//"_tot" , it, ztmltot(:,:,jn), ndimtrd1, ndextrd1 )  
     807               CALL histwrite( nidtrd(jn), trim(clvar)//"_res" , it, ztmlres(:,:,jn), ndimtrd1, ndextrd1 )  
    806808            
    807809               DO jl = 1, jpltrd_trc - 2 
    808                   CALL histwrite( nidtrd(jn), trim(clvar//ctrd_trc(jl,2)),             & 
     810                  CALL histwrite( nidtrd(jn), trim(clvar)//trim(ctrd_trc(jl,2)),             & 
    809811                    &          it, tmltrd_trc(:,:,jl,jn), ndimtrd1, ndextrd1 ) 
    810812               END DO 
    811813 
    812                CALL histwrite( nidtrd(jn), trim(clvar//ctrd_trc(jpmld_trc_radb,2)),    &  ! now trcrad    : jpltrd_trc - 1 
     814               CALL histwrite( nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmld_trc_radb,2)),    &  ! now trcrad    : jpltrd_trc - 1 
    813815                    &          it, ztmlrad(:,:,jn), ndimtrd1, ndextrd1 ) 
    814816 
    815                CALL histwrite( nidtrd(jn), trim(clvar//ctrd_trc(jpmld_trc_atf,2)),     &  ! now Asselin   : jpltrd_trc 
     817               CALL histwrite( nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmld_trc_atf,2)),     &  ! now Asselin   : jpltrd_trc 
    816818                    &          it, ztmlatf(:,:,jn), ndimtrd1, ndextrd1 ) 
    817819                      
     
    827829      ELSE                                                        ! <<< write the trends for passive tracer mean diagnostics 
    828830          
    829                   
    830831         DO jn = 1, jptra 
    831832            ! 
     
    835836               clvar = trim(ctrcnm(jn))//"ml"                        ! e.g. detml, zooml, nh4ml, etc. 
    836837 
    837                CALL histwrite( nidtrd(jn), clvar         , it, tml_sum_trc(:,:,jn), ndimtrd1, ndextrd1 ) 
    838                CALL histwrite( nidtrd(jn), clvar//"_tot" , it,    ztmltot2(:,:,jn), ndimtrd1, ndextrd1 )  
    839                CALL histwrite( nidtrd(jn), clvar//"_res" , it,    ztmlres2(:,:,jn), ndimtrd1, ndextrd1 )  
     838               CALL histwrite( nidtrd(jn), trim(clvar)         , it, tml_sum_trc(:,:,jn), ndimtrd1, ndextrd1 ) 
     839               CALL histwrite( nidtrd(jn), trim(clvar)//"_tot" , it,    ztmltot2(:,:,jn), ndimtrd1, ndextrd1 )  
     840               CALL histwrite( nidtrd(jn), trim(clvar)//"_res" , it,    ztmlres2(:,:,jn), ndimtrd1, ndextrd1 )  
    840841 
    841842               DO jl = 1, jpltrd_trc - 2 
    842                   CALL histwrite( nidtrd(jn), trim(clvar//ctrd_trc(jl,2)),           & 
     843                  CALL histwrite( nidtrd(jn), trim(clvar)//trim(ctrd_trc(jl,2)),           & 
    843844                    &          it, ztmltrd2(:,:,jl,jn), ndimtrd1, ndextrd1 ) 
    844845               END DO 
    845846             
    846                CALL histwrite( nidtrd(jn), trim(clvar//ctrd_trc(jpmld_trc_radb,2)),   &  ! now trcrad    : jpltrd_trc - 1 
     847               CALL histwrite( nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmld_trc_radb,2)),   &  ! now trcrad    : jpltrd_trc - 1 
    847848                 &          it, ztmlrad2(:,:,jn), ndimtrd1, ndextrd1 ) 
    848849 
    849                CALL histwrite( nidtrd(jn), trim(clvar//ctrd_trc(jpmld_trc_atf,2)),    &  ! now Asselin   : jpltrd_trc 
     850               CALL histwrite( nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmld_trc_atf,2)),    &  ! now Asselin   : jpltrd_trc 
    850851                 &          it, ztmlatf2(:,:,jn), ndimtrd1, ndextrd1 ) 
    851852 
     
    11481149      !!---------------------------------------------------------------------- 
    11491150      INTEGER :: inum   ! logical unit 
    1150       INTEGER :: ilseq, jl, jn 
     1151      INTEGER :: ilseq, jl, jn, iiter 
    11511152      REAL(wp) ::   zjulian, zsto, zout 
    11521153      CHARACTER (LEN=40) ::   clop 
     
    11541155      CHARACTER (LEN=12) ::   clmxl 
    11551156      CHARACTER (LEN=16) ::   cltrcu 
    1156       CHARACTER (LEN= 5) ::   clvar 
     1157      CHARACTER (LEN=10) ::   clvar 
    11571158 
    11581159      !!---------------------------------------------------------------------- 
     
    11921193      ENDIF 
    11931194 
    1194       IF( ln_trcadv_muscl .AND. .NOT. ln_trdmld_trc_instant ) THEN 
     1195      IF( ( ln_trcadv_muscl .OR. ln_trcadv_muscl2 ) .AND. .NOT. ln_trdmld_trc_instant ) THEN 
    11951196         WRITE(numout,cform_err) 
    11961197         WRITE(numout,*) '                Currently, you can NOT use simultaneously tracer MUSCL    ' 
     
    12051206      ENDIF 
    12061207 
    1207       IF( ln_trcadv_muscl2 .AND. .NOT. ln_trdmld_trc_instant ) THEN 
    1208          WRITE(numout,cform_err) 
    1209          WRITE(numout,*) '                Currently, you can NOT use simultaneously tracer MUSCL2    ' 
    1210          WRITE(numout,*) '                advection and window averaged diagnostics of ML trends.   ' 
    1211          WRITE(numout,*) '                WHY? Everything in trdmld_trc is coded for leap-frog, and ' 
    1212          WRITE(numout,*) '                MUSCL scheme is Euler forward for passive tracers (note   ' 
    1213          WRITE(numout,*) '                that MUSCL is leap-frog for active tracers T/S).          ' 
    1214          WRITE(numout,*) '                In particuliar, entrainment trend would be FALSE. However ' 
    1215          WRITE(numout,*) '                this residual is correct for instantaneous ML diagnostics.' 
    1216          WRITE(numout,*)  
    1217          nstop = nstop + 1 
    1218       ENDIF 
    1219  
    12201208      ! I.2 Initialize arrays to zero or read a restart file 
    12211209      ! ---------------------------------------------------- 
     
    13021290#  endif 
    13031291      zout = nn_trd_trc * rdt 
     1292      iiter = ( nittrc000 - 1 ) / nn_dttrc 
    13041293 
    13051294      IF(lwp) WRITE (numout,*) '                netCDF initialization' 
     
    13391328            CALL dia_nam( clhstnam, nn_trd_trc, csuff ) 
    13401329            CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,                                            & 
    1341                &        1, jpi, 1, jpj, nittrc000, zjulian, rdt, nh_t(jn), nidtrd(jn), domain_id=nidom, snc4chunks=snc4set ) 
     1330               &        1, jpi, 1, jpj, iiter, zjulian, rdt, nh_t(jn), nidtrd(jn), domain_id=nidom, snc4chunks=snc4set ) 
    13421331       
    13431332            !-- Define the ML depth variable 
     
    13521341          CALL dia_nam( clhstnam, nn_trd_trc, 'trdbio' ) 
    13531342          CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,                                            & 
    1354              &             1, jpi, 1, jpj, nittrc000, zjulian, rdt, nh_tb, nidtrdbio, domain_id=nidom, snc4chunks=snc4set ) 
     1343             &             1, jpi, 1, jpj, iiter, zjulian, rdt, nh_tb, nidtrdbio, domain_id=nidom, snc4chunks=snc4set ) 
    13551344#endif 
    13561345 
     
    13731362         IF( ln_trdtrc(jn) ) THEN 
    13741363            clvar = trim(ctrcnm(jn))//"ml"                           ! e.g. detml, zooml, no3ml, etc. 
    1375             CALL histdef(nidtrd(jn), clvar,           clmxl//" "//trim(ctrcnm(jn))//" Mixed Layer ",                         & 
     1364            CALL histdef(nidtrd(jn), trim(clvar),           clmxl//" "//trim(ctrcnm(jn))//" Mixed Layer ",                         & 
    13761365              & "mmole-N/m3", jpi, jpj, nh_t(jn), 1  , 1, 1  , -99 , 32, clop, zsto, zout )            
    1377             CALL histdef(nidtrd(jn), clvar//"_tot"  , clmxl//" "//trim(ctrcnm(jn))//" Total trend ",                         &  
     1366            CALL histdef(nidtrd(jn), trim(clvar)//"_tot"  , clmxl//" "//trim(ctrcnm(jn))//" Total trend ",                         &  
    13781367              &       cltrcu, jpi, jpj, nh_t(jn), 1  , 1, 1  , -99 , 32, clop, zout, zout )  
    1379             CALL histdef(nidtrd(jn), clvar//"_res"  , clmxl//" "//trim(ctrcnm(jn))//" dh/dt Entrainment (Resid.)",           &  
     1368            CALL histdef(nidtrd(jn), trim(clvar)//"_res"  , clmxl//" "//trim(ctrcnm(jn))//" dh/dt Entrainment (Resid.)",           &  
    13801369              &       cltrcu, jpi, jpj, nh_t(jn), 1  , 1, 1  , -99 , 32, clop, zout, zout )                    
    13811370          
    13821371            DO jl = 1, jpltrd_trc - 2                                ! <== only true if jpltrd_trc == jpmld_trc_atf 
    1383                CALL histdef(nidtrd(jn), trim(clvar//ctrd_trc(jl,2)), clmxl//" "//clvar//ctrd_trc(jl,1),                      &  
     1372               CALL histdef(nidtrd(jn), trim(clvar)//trim(ctrd_trc(jl,2)), clmxl//" "//clvar//ctrd_trc(jl,1),                      &  
    13841373                 &    cltrcu, jpi, jpj, nh_t(jn), 1  , 1, 1  , -99 , 32, clop, zsto, zout ) ! IOIPSL: time mean 
    13851374            END DO                                                                         ! if zsto=rdt above 
    13861375          
    1387             CALL histdef(nidtrd(jn), trim(clvar//ctrd_trc(jpmld_trc_radb,2)), clmxl//" "//clvar//ctrd_trc(jpmld_trc_radb,1), &  
     1376            CALL histdef(nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmld_trc_radb,2)), clmxl//" "//clvar//ctrd_trc(jpmld_trc_radb,1), &  
    13881377              &       cltrcu, jpi, jpj, nh_t(jn), 1  , 1, 1  , -99 , 32, clop, zout, zout ) ! IOIPSL: NO time mean 
    13891378          
    1390             CALL histdef(nidtrd(jn), trim(clvar//ctrd_trc(jpmld_trc_atf,2)), clmxl//" "//clvar//ctrd_trc(jpmld_trc_atf,1),   &  
     1379            CALL histdef(nidtrd(jn), trim(clvar)//trim(ctrd_trc(jpmld_trc_atf,2)), clmxl//" "//clvar//ctrd_trc(jpmld_trc_atf,1),   &  
    13911380              &       cltrcu, jpi, jpj, nh_t(jn), 1  , 1, 1  , -99 , 32, clop, zout, zout ) ! IOIPSL: NO time mean 
    13921381         ! 
Note: See TracChangeset for help on using the changeset viewer.