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 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p4zsms.F90 – NEMO

Ignore:
Timestamp:
2020-02-12T15:39:06+01:00 (4 years ago)
Author:
acc
Message:

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

Location:
NEMO/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsms.F90

    r12276 r12377  
    1717   USE p4zlys          ! Calcite saturation 
    1818   USE p4zflx          ! Gas exchange 
    19    USE p4zsbc          ! External source of nutrients 
     19   USE p4zbc           ! External source of nutrients 
    2020   USE p4zsed          ! Sedimentation 
    2121   USE p4zint          ! time interpolation 
     
    3939   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xnegtr     ! Array used to indicate negative tracer values 
    4040 
     41   !! * Substitutions 
     42#  include "do_loop_substitute.h90" 
    4143   !!---------------------------------------------------------------------- 
    4244   !! NEMO/TOP 4.0 , NEMO Consortium (2018) 
     
    4648CONTAINS 
    4749 
    48    SUBROUTINE p4z_sms( kt ) 
     50   SUBROUTINE p4z_sms( kt, Kbb, Kmm, Krhs ) 
    4951      !!--------------------------------------------------------------------- 
    5052      !!                     ***  ROUTINE p4z_sms  *** 
     
    5860      !!--------------------------------------------------------------------- 
    5961      ! 
    60       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
     62      INTEGER, INTENT( in ) ::   kt              ! ocean time-step index       
     63      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! time level index 
    6164      !! 
    6265      INTEGER ::   ji, jj, jk, jnt, jn, jl 
     
    7679        ! 
    7780        IF( .NOT. ln_rsttr ) THEN 
    78             CALL p4z_che                              ! initialize the chemical constants 
    79             CALL ahini_for_at(hi)   !  set PH at kt=nit000 
     81            CALL p4z_che( Kbb, Kmm )                  ! initialize the chemical constants 
     82            CALL ahini_for_at( hi, Kbb )              !  set PH at kt=nit000 
    8083            t_oce_co2_flx_cum = 0._wp 
    8184        ELSE 
    82             CALL p4z_rst( nittrc000, 'READ' )  !* read or initialize all required fields 
     85            CALL p4z_rst( nittrc000, Kbb, Kmm,  'READ' )  !* read or initialize all required fields 
    8386        ENDIF 
    8487        ! 
    8588      ENDIF 
    8689      ! 
    87       IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
     90      IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt, Kbb, Kmm )      ! Relaxation of some tracers 
    8891      ! 
    8992      rfact = r2dttrc 
     
    9295      IF( l_trdtrc )  THEN 
    9396         ALLOCATE( ztrdt(jpi,jpj,jpk,jp_pisces) )  !* store now fields before applying the Asselin filter 
    94          ztrdt(:,:,:,:)  = trn(:,:,:,:) 
    95       ENDIF 
    96       ! 
    97  
    98       IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
     97         ztrdt(:,:,:,:)  = tr(:,:,:,:,Kmm) 
     98      ENDIF 
     99      ! 
     100 
     101      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 
    99102         rfactr  = 1. / rfact 
    100103         rfact2  = rfact / REAL( nrdttrc, wp ) 
     
    110113      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 
    111114         DO jn = jp_pcs0, jp_pcs1              !   SMS on tracer without Asselin time-filter 
    112             trb(:,:,:,jn) = trn(:,:,:,jn) 
     115            tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm) 
    113116         END DO 
    114117      ENDIF 
    115118      ! 
    116       IF( ll_sbc ) CALL p4z_sbc( kt )   ! external sources of nutrients  
     119      IF( ll_bc )    CALL p4z_bc( kt, Kbb, Kmm, Krhs )   ! external sources of nutrients  
    117120      ! 
    118121#if ! defined key_sed_off 
    119       CALL p4z_che              ! computation of chemical constants 
    120       CALL p4z_int( kt )        ! computation of various rates for biogeochemistry 
     122      CALL p4z_che(     Kbb, Kmm       ) ! computation of chemical constants 
     123      CALL p4z_int( kt, Kbb, Kmm       ) ! computation of various rates for biogeochemistry 
    121124      ! 
    122125      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    123126         ! 
    124          CALL p4z_bio( kt, jnt )   ! Biology 
    125          CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
    126          CALL p4z_sed( kt, jnt )   ! Surface and Bottom boundary conditions 
    127          CALL p4z_flx( kt, jnt )   ! Compute surface fluxes 
     127         CALL p4z_bio( kt, jnt, Kbb, Kmm, Krhs )   ! Biology 
     128         CALL p4z_lys( kt, jnt, Kbb,      Krhs )   ! Compute CaCO3 saturation 
     129         CALL p4z_sed( kt, jnt, Kbb, Kmm, Krhs )   ! Surface and Bottom boundary conditions 
     130         CALL p4z_flx( kt, jnt, Kbb, Kmm, Krhs )   ! Compute surface fluxes 
    128131         ! 
    129132         xnegtr(:,:,:) = 1.e0 
    130133         DO jn = jp_pcs0, jp_pcs1 
    131             DO jk = 1, jpk 
    132                DO jj = 1, jpj 
    133                   DO ji = 1, jpi 
    134                      IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 
    135                         ztra             = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 
    136                         xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
    137                      ENDIF 
    138                  END DO 
    139                END DO 
    140             END DO 
     134            DO_3D_11_11( 1, jpk ) 
     135               IF( ( tr(ji,jj,jk,jn,Kbb) + tr(ji,jj,jk,jn,Krhs) ) < 0.e0 ) THEN 
     136                  ztra             = ABS( tr(ji,jj,jk,jn,Kbb) ) / ( ABS( tr(ji,jj,jk,jn,Krhs) ) + rtrn ) 
     137                  xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
     138               ENDIF 
     139            END_3D 
    141140         END DO 
    142141         !                                ! where at least 1 tracer concentration becomes negative 
    143142         !                                !  
    144143         DO jn = jp_pcs0, jp_pcs1 
    145            trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
     144           tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kbb) + xnegtr(:,:,:) * tr(:,:,:,jn,Krhs) 
    146145         END DO 
    147146        ! 
     
    152151          zw3d(:,:,jpk) = 0. 
    153152          DO jk = 1, jpkm1 
    154               zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t_n(:,:,jk) * tmask(:,:,jk) 
     153              zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
    155154          ENDDO 
    156155          ! 
    157156          zw2d(:,:) = 0. 
    158157          DO jk = 1, jpkm1 
    159              zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jptal) 
     158             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jptal,Krhs) 
    160159          ENDDO 
    161160          CALL iom_put( 'INTdtAlk', zw2d ) 
     
    163162          zw2d(:,:) = 0. 
    164163          DO jk = 1, jpkm1 
    165              zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jpdic) 
     164             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpdic,Krhs) 
    166165          ENDDO 
    167166          CALL iom_put( 'INTdtDIC', zw2d ) 
     
    169168          zw2d(:,:) = 0. 
    170169          DO jk = 1, jpkm1 
    171              zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tra(:,:,jk,jpno3) + tra(:,:,jk,jpnh4) ) 
     170             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tr(:,:,jk,jpno3,Krhs) + tr(:,:,jk,jpnh4,Krhs) ) 
    172171          ENDDO 
    173172          CALL iom_put( 'INTdtDIN', zw2d ) 
     
    175174          zw2d(:,:) = 0. 
    176175          DO jk = 1, jpkm1 
    177              zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tra(:,:,jk,jppo4) 
     176             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tr(:,:,jk,jppo4,Krhs) 
    178177          ENDDO 
    179178          CALL iom_put( 'INTdtDIP', zw2d ) 
     
    181180          zw2d(:,:) = 0. 
    182181          DO jk = 1, jpkm1 
    183              zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jpfer) 
     182             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpfer,Krhs) 
    184183          ENDDO 
    185184          CALL iom_put( 'INTdtFer', zw2d ) 
     
    187186          zw2d(:,:) = 0. 
    188187          DO jk = 1, jpkm1 
    189              zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jpsil) 
     188             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpsil,Krhs) 
    190189          ENDDO 
    191190          CALL iom_put( 'INTdtSil', zw2d ) 
     
    195194        ! 
    196195         DO jn = jp_pcs0, jp_pcs1 
    197             tra(:,:,:,jn) = 0._wp 
     196            tr(:,:,:,jn,Krhs) = 0._wp 
    198197         END DO 
    199198         ! 
    200199         IF( ln_top_euler ) THEN 
    201200            DO jn = jp_pcs0, jp_pcs1 
    202                trn(:,:,:,jn) = trb(:,:,:,jn) 
     201               tr(:,:,:,jn,Kmm) = tr(:,:,:,jn,Kbb) 
    203202            END DO 
    204203         ENDIF 
     
    207206      IF( l_trdtrc ) THEN 
    208207         DO jn = jp_pcs0, jp_pcs1 
    209            ztrdt(:,:,:,jn) = ( trb(:,:,:,jn) - ztrdt(:,:,:,jn) ) * rfact2r  
    210            CALL trd_trc( ztrdt(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     208           ztrdt(:,:,:,jn) = ( tr(:,:,:,jn,Kbb) - ztrdt(:,:,:,jn) ) * rfact2r  
     209           CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm )   ! save trends 
    211210         END DO 
    212211         DEALLOCATE( ztrdt )  
     
    216215      IF( ln_sediment ) THEN  
    217216         ! 
    218          CALL sed_model( kt )     !  Main program of Sediment model 
     217         CALL sed_model( kt, Kbb, Kmm, Krhs )     !  Main program of Sediment model 
    219218         ! 
    220219         IF( ln_top_euler ) THEN 
    221220            DO jn = jp_pcs0, jp_pcs1 
    222                trn(:,:,:,jn) = trb(:,:,:,jn) 
     221               tr(:,:,:,jn,Kmm) = tr(:,:,:,jn,Kbb) 
    223222            END DO 
    224223         ENDIF 
     
    226225      ENDIF 
    227226      ! 
    228       IF( lrst_trc )  CALL p4z_rst( kt, 'WRITE' )  !* Write PISCES informations in restart file  
    229       ! 
    230  
    231       IF( lk_iomput .OR. ln_check_mass )  CALL p4z_chk_mass( kt )    ! Mass conservation checking 
    232  
    233       IF( lwm .AND. kt == nittrc000    )  CALL FLUSH( numonp )       ! flush output namelist PISCES 
     227      IF( lrst_trc )  CALL p4z_rst( kt, Kbb, Kmm,  'WRITE' )           !* Write PISCES informations in restart file  
     228      ! 
     229 
     230      IF( lk_iomput .OR. ln_check_mass )  CALL p4z_chk_mass( kt, Kmm ) ! Mass conservation checking 
     231 
     232      IF( lwm .AND. kt == nittrc000    )  CALL FLUSH( numonp )         ! flush output namelist PISCES 
    234233      ! 
    235234      IF( ln_timing )  CALL timing_stop('p4z_sms') 
     
    262261      ENDIF 
    263262 
    264       REWIND( numnatp_ref )              ! Namelist nampisbio in reference namelist : Pisces variables 
    265263      READ  ( numnatp_ref, nampisbio, IOSTAT = ios, ERR = 901) 
    266264901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampisbio in reference namelist' ) 
    267       REWIND( numnatp_cfg )              ! Namelist nampisbio in configuration namelist : Pisces variables 
    268265      READ  ( numnatp_cfg, nampisbio, IOSTAT = ios, ERR = 902 ) 
    269266902   IF( ios >  0 )   CALL ctl_nam ( ios , 'nampisbio in configuration namelist' ) 
     
    293290 
    294291 
    295       REWIND( numnatp_ref )              ! Namelist nampisdmp in reference namelist : Pisces damping 
    296292      READ  ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905) 
    297293905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampisdmp in reference namelist' ) 
    298       REWIND( numnatp_cfg )              ! Namelist nampisdmp in configuration namelist : Pisces damping 
    299294      READ  ( numnatp_cfg, nampisdmp, IOSTAT = ios, ERR = 906 ) 
    300295906   IF( ios >  0 )   CALL ctl_nam ( ios , 'nampisdmp in configuration namelist' ) 
     
    308303      ENDIF 
    309304 
    310       REWIND( numnatp_ref )              ! Namelist nampismass in reference namelist : Pisces mass conservation check 
    311305      READ  ( numnatp_ref, nampismass, IOSTAT = ios, ERR = 907) 
    312306907   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampismass in reference namelist' ) 
    313       REWIND( numnatp_cfg )              ! Namelist nampismass in configuration namelist : Pisces mass conservation check  
    314307      READ  ( numnatp_cfg, nampismass, IOSTAT = ios, ERR = 908 ) 
    315308908   IF( ios >  0 )   CALL ctl_nam ( ios , 'nampismass in configuration namelist' ) 
     
    325318 
    326319 
    327    SUBROUTINE p4z_rst( kt, cdrw ) 
     320   SUBROUTINE p4z_rst( kt, Kbb, Kmm, cdrw ) 
    328321      !!--------------------------------------------------------------------- 
    329322      !!                   ***  ROUTINE p4z_rst  *** 
     
    336329      !!--------------------------------------------------------------------- 
    337330      INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
     331      INTEGER         , INTENT(in) ::   Kbb, Kmm   ! time level indices 
    338332      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    339333      !!--------------------------------------------------------------------- 
     
    348342            CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  ) 
    349343         ELSE 
    350             CALL p4z_che                              ! initialize the chemical constants 
    351             CALL ahini_for_at(hi) 
     344            CALL p4z_che( Kbb, Kmm )                  ! initialize the chemical constants 
     345            CALL ahini_for_at( hi, Kbb ) 
    352346         ENDIF 
    353347         CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 
     
    396390 
    397391 
    398    SUBROUTINE p4z_dmp( kt ) 
     392   SUBROUTINE p4z_dmp( kt, Kbb, Kmm ) 
    399393      !!---------------------------------------------------------------------- 
    400394      !!                    ***  p4z_dmp  *** 
     
    403397      !!---------------------------------------------------------------------- 
    404398      ! 
    405       INTEGER, INTENT( in )  ::     kt ! time step 
     399      INTEGER, INTENT( in )  ::     kt            ! time step 
     400      INTEGER, INTENT( in )  ::     Kbb, Kmm      ! time level indices 
    406401      ! 
    407402      REAL(wp) ::  alkmean = 2426.     ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 
     
    424419            zarea          = 1._wp / glob_sum( 'p4zsms', cvol(:,:,:) ) * 1e6               
    425420 
    426             zalksumn = glob_sum( 'p4zsms', trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    427             zpo4sumn = glob_sum( 'p4zsms', trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    428             zno3sumn = glob_sum( 'p4zsms', trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    429             zsilsumn = glob_sum( 'p4zsms', trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     421            zalksumn = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kmm) * cvol(:,:,:)  ) * zarea 
     422            zpo4sumn = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kmm) * cvol(:,:,:)  ) * zarea * po4r 
     423            zno3sumn = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kmm) * cvol(:,:,:)  ) * zarea * rno3 
     424            zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:)  ) * zarea 
    430425  
    431426            IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
    432             trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 
     427            tr(:,:,:,jptal,Kmm) = tr(:,:,:,jptal,Kmm) * alkmean / zalksumn 
    433428 
    434429            IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
    435             trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 
     430            tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn 
    436431 
    437432            IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
    438             trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 
     433            tr(:,:,:,jpno3,Kmm) = tr(:,:,:,jpno3,Kmm) * no3mean / zno3sumn 
    439434 
    440435            IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
    441             trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 
     436            tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn ) 
    442437            ! 
    443438            ! 
    444439            IF( .NOT. ln_top_euler ) THEN 
    445                zalksumb = glob_sum( 'p4zsms', trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    446                zpo4sumb = glob_sum( 'p4zsms', trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    447                zno3sumb = glob_sum( 'p4zsms', trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    448                zsilsumb = glob_sum( 'p4zsms', trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     440               zalksumb = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kbb) * cvol(:,:,:)  ) * zarea 
     441               zpo4sumb = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kbb) * cvol(:,:,:)  ) * zarea * po4r 
     442               zno3sumb = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kbb) * cvol(:,:,:)  ) * zarea * rno3 
     443               zsilsumb = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kbb) * cvol(:,:,:)  ) * zarea 
    449444  
    450445               IF(lwp) WRITE(numout,*) ' ' 
    451446               IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb 
    452                trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 
     447               tr(:,:,:,jptal,Kbb) = tr(:,:,:,jptal,Kbb) * alkmean / zalksumb 
    453448 
    454449               IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
    455                trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 
     450               tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb 
    456451 
    457452               IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
    458                trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 
     453               tr(:,:,:,jpno3,Kbb) = tr(:,:,:,jpno3,Kbb) * no3mean / zno3sumb 
    459454 
    460455               IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
    461                trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 
     456               tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb ) 
    462457           ENDIF 
    463458        ENDIF 
     
    468463 
    469464 
    470    SUBROUTINE p4z_chk_mass( kt ) 
     465   SUBROUTINE p4z_chk_mass( kt, Kmm ) 
    471466      !!---------------------------------------------------------------------- 
    472467      !!                  ***  ROUTINE p4z_chk_mass  *** 
     
    476471      !!--------------------------------------------------------------------- 
    477472      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
     473      INTEGER, INTENT( in ) ::   Kmm     ! time level indices 
    478474      REAL(wp)             ::  zrdenittot, zsdenittot, znitrpottot 
    479475      CHARACTER(LEN=100)   ::   cltxt 
     
    499495         !   Compute the budget of NO3, ALK, Si, Fer 
    500496         IF( ln_p4z ) THEN 
    501             zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)                      & 
    502                &          +   trn(:,:,:,jpphy) + trn(:,:,:,jpdia)                      & 
    503                &          +   trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  + trn(:,:,:,jpdoc)  &         
    504                &          +   trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  
     497            zwork(:,:,:) =    tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm)                      & 
     498               &          +   tr(:,:,:,jpphy,Kmm) + tr(:,:,:,jpdia,Kmm)                      & 
     499               &          +   tr(:,:,:,jppoc,Kmm) + tr(:,:,:,jpgoc,Kmm)  + tr(:,:,:,jpdoc,Kmm)  &         
     500               &          +   tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm)  
    505501        ELSE 
    506             zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4) + trn(:,:,:,jpnph)   & 
    507                &          +   trn(:,:,:,jpndi) + trn(:,:,:,jpnpi)                      &  
    508                &          +   trn(:,:,:,jppon) + trn(:,:,:,jpgon) + trn(:,:,:,jpdon)   & 
    509                &          + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * no3rat3  
     502            zwork(:,:,:) =    tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) + tr(:,:,:,jpnph,Kmm)   & 
     503               &          +   tr(:,:,:,jpndi,Kmm) + tr(:,:,:,jpnpi,Kmm)                      &  
     504               &          +   tr(:,:,:,jppon,Kmm) + tr(:,:,:,jpgon,Kmm) + tr(:,:,:,jpdon,Kmm)   & 
     505               &          + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * no3rat3  
    510506        ENDIF 
    511507        ! 
     
    517513      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    518514         IF( ln_p4z ) THEN 
    519             zwork(:,:,:) =    trn(:,:,:,jppo4)                                         & 
    520                &          +   trn(:,:,:,jpphy) + trn(:,:,:,jpdia)                      & 
    521                &          +   trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  + trn(:,:,:,jpdoc)  &         
    522                &          +   trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  
     515            zwork(:,:,:) =    tr(:,:,:,jppo4,Kmm)                                         & 
     516               &          +   tr(:,:,:,jpphy,Kmm) + tr(:,:,:,jpdia,Kmm)                      & 
     517               &          +   tr(:,:,:,jppoc,Kmm) + tr(:,:,:,jpgoc,Kmm)  + tr(:,:,:,jpdoc,Kmm)  &         
     518               &          +   tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm)  
    523519        ELSE 
    524             zwork(:,:,:) =    trn(:,:,:,jppo4) + trn(:,:,:,jppph)                      & 
    525                &          +   trn(:,:,:,jppdi) + trn(:,:,:,jpppi)                      &  
    526                &          +   trn(:,:,:,jppop) + trn(:,:,:,jpgop) + trn(:,:,:,jpdop)   & 
    527                &          + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * po4rat3  
     520            zwork(:,:,:) =    tr(:,:,:,jppo4,Kmm) + tr(:,:,:,jppph,Kmm)                      & 
     521               &          +   tr(:,:,:,jppdi,Kmm) + tr(:,:,:,jpppi,Kmm)                      &  
     522               &          +   tr(:,:,:,jppop,Kmm) + tr(:,:,:,jpgop,Kmm) + tr(:,:,:,jpdop,Kmm)   & 
     523               &          + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * po4rat3  
    528524        ENDIF 
    529525        ! 
     
    534530      ! 
    535531      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    536          zwork(:,:,:) =  trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)  
     532         zwork(:,:,:) =  tr(:,:,:,jpsil,Kmm) + tr(:,:,:,jpgsi,Kmm) + tr(:,:,:,jpdsi,Kmm)  
    537533         ! 
    538534         silbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
     
    542538      ! 
    543539      IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    544          zwork(:,:,:) =  trn(:,:,:,jpno3) * rno3 + trn(:,:,:,jptal) + trn(:,:,:,jpcal) * 2.               
     540         zwork(:,:,:) =  tr(:,:,:,jpno3,Kmm) * rno3 + tr(:,:,:,jptal,Kmm) + tr(:,:,:,jpcal,Kmm) * 2.               
    545541         ! 
    546542         alkbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )         ! 
     
    550546      ! 
    551547      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    552          zwork(:,:,:) =   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe)   & 
    553             &         +   trn(:,:,:,jpbfe) + trn(:,:,:,jpsfe)                      & 
    554             &         + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) )  * ferat3     
     548         zwork(:,:,:) =   tr(:,:,:,jpfer,Kmm) + tr(:,:,:,jpnfe,Kmm) + tr(:,:,:,jpdfe,Kmm)   & 
     549            &         +   tr(:,:,:,jpbfe,Kmm) + tr(:,:,:,jpsfe,Kmm)                      & 
     550            &         + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) )  * ferat3     
    555551         ! 
    556552         ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
Note: See TracChangeset for help on using the changeset viewer.