Changeset 3320


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

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

Location:
trunk/NEMOGCM/NEMO/TOP_SRC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90

    r3295 r3320  
    6060      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    6161      !! 
    62       INTEGER ::   jnt, jn 
     62      INTEGER ::   jnt, jn, jl 
    6363      CHARACTER (len=25) :: charout 
     64      REAL(wp), POINTER, DIMENSION(:,:,:,:)  :: ztrdpis 
    6465      !!--------------------------------------------------------------------- 
    6566      ! 
     
    6869      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL trc_sms_pisces_dmp( kt )  ! Relaxation of some tracers 
    6970                                                                   CALL trc_sms_pisces_mass_conserv( kt ) ! Mass conservation checking 
     71      IF( l_trdtrc )  THEN 
     72         CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
     73         DO jn = 1, jp_pisces 
     74            jl = jn + jp_pcs0 - 1 
     75            ztrdpis(:,:,:,jn) = trn(:,:,:,jl) 
     76         ENDDO 
     77      ENDIF 
    7078 
    7179      IF( ndayflxtr /= nday_year ) THEN      ! New days 
     
    8290      ENDIF 
    8391 
     92 
    8493      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    8594         ! 
     
    8796         CALL p4z_sed (kt, jnt)    ! compute soft tissue remineralisation 
    8897         ! 
    89          trb(:,:,:,:) = trn(:,:,:,:) 
     98         DO jn = jp_pcs0, jp_pcs1 
     99            trb(:,:,:,jn) = trn(:,:,:,jn) 
     100         ENDDO 
    90101         ! 
    91102      END DO 
     103 
     104      IF( l_trdtrc )  THEN 
     105         DO jn = 1, jp_pisces 
     106            jl = jn + jp_pcs0 - 1 
     107            ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 
     108         ENDDO 
     109      ENDIF 
    92110 
    93111      CALL p4z_lys( kt )             ! Compute CaCO3 saturation 
     
    101119 
    102120      IF( l_trdtrc ) THEN 
    103           DO jn = jp_pcs0, jp_pcs1 
    104             CALL trd_mod_trc( tra(:,:,:,jn), jn, jptra_trd_sms, kt )   ! save trends 
     121         DO jn = 1, jp_pisces 
     122            jl = jn + jp_pcs0 - 1 
     123             ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 
     124             CALL trd_mod_trc( ztrdpis(:,:,:,jn), jn, jptra_trd_sms, kt )   ! save trends 
    105125          END DO 
     126          CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    106127      END IF 
    107128 
  • 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         ! 
  • trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trdmod_trc_oce.F90

    r2715 r3320  
    3838 
    3939   INTEGER, PARAMETER ::            & !: mixed layer trends indices 
    40         jpmld_trc_xad     =  1,     & !:     zonal      \ 
    41         jpmld_trc_yad     =  2,     & !:     meridonal   > advection 
    42         jpmld_trc_zad     =  3,     & !:     vertical   / 
     40        jpmld_trc_xad     =  1,     & !:     zonal       advection      
     41        jpmld_trc_yad     =  2,     & !:     meridonal   ========= 
     42        jpmld_trc_zad     =  3,     & !:     vertical    ========= 
    4343        jpmld_trc_ldf     =  4,     & !:     lateral diffusion (geopot. or iso-neutral) 
    4444        jpmld_trc_zdf     =  5,     & !:     vertical diffusion (TKE) 
Note: See TracChangeset for help on using the changeset viewer.