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 5965 for branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90 – NEMO

Ignore:
Timestamp:
2015-12-01T16:35:30+01:00 (8 years ago)
Author:
timgraham
Message:

Upgraded branch to r5518 of trunk (v3.6 stable revision)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r4624 r5965  
    1111   !!   'key_pisces'                                       PISCES bio-model 
    1212   !!---------------------------------------------------------------------- 
    13    !!   p4zsms        :  Time loop of passive tracers sms 
     13   !!   p4zsms         :  Time loop of passive tracers sms 
    1414   !!---------------------------------------------------------------------- 
    1515   USE oce_trc         !  shared variables between ocean and passive tracers 
     
    2424   USE p4zsed          !  Sedimentation 
    2525   USE p4zint          !  time interpolation 
     26   USE p4zrem          !  remineralisation 
    2627   USE iom             !  I/O manager 
    27    USE trdmod_oce      !  Ocean trends variables 
    28    USE trdmod_trc      !  TOP trends variables 
     28   USE trd_oce         !  Ocean trends variables 
     29   USE trdtrc          !  TOP trends variables 
    2930   USE sedmodel        !  Sediment model 
    3031   USE prtctl_trc      !  print control for debugging 
     
    3334   PRIVATE 
    3435 
    35    PUBLIC   p4z_sms_init    ! called in p4zsms.F90 
    36    PUBLIC   p4z_sms    ! called in p4zsms.F90 
    37  
    38    REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget 
    39    INTEGER ::  numco2, numnut  !: logical unit for co2 budget 
    40  
     36   PUBLIC   p4z_sms_init   ! called in p4zsms.F90 
     37   PUBLIC   p4z_sms        ! called in p4zsms.F90 
     38 
     39   REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 
     40   REAL(wp) :: xfact1, xfact2 
     41   INTEGER ::  numco2, numnut, numnit  !: logical unit for co2 budget 
     42 
     43   !!* Array used to indicate negative tracer values 
     44   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xnegtr     !: ??? 
     45 
     46 
     47   !! * Substitutions 
     48#  include "top_substitute.h90" 
    4149   !!---------------------------------------------------------------------- 
    4250   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    6169      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    6270      !! 
    63       INTEGER ::   jnt, jn, jl 
     71      INTEGER ::   ji, jj, jk, jnt, jn, jl 
     72      REAL(wp) ::  ztra 
     73#if defined key_kriest 
     74      REAL(wp) ::  zcoef1, zcoef2 
     75#endif 
    6476      CHARACTER (len=25) :: charout 
    65       REAL(wp), POINTER, DIMENSION(:,:,:,:)  :: ztrdpis 
    6677      !!--------------------------------------------------------------------- 
    6778      ! 
    6879      IF( nn_timing == 1 )  CALL timing_start('p4z_sms') 
    6980      ! 
    70       IF( l_trdtrc )  THEN 
    71          CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    72          DO jn = 1, jp_pisces 
    73             jl = jn + jp_pcs0 - 1 
    74             ztrdpis(:,:,:,jn) = trn(:,:,:,jl) 
    75          ENDDO 
    76       ENDIF 
    77       ! 
    7881      IF( kt == nittrc000 ) THEN 
     82        ! 
     83        ALLOCATE( xnegtr(jpi,jpj,jpk) ) 
    7984        ! 
    8085        CALL p4z_che                              ! initialize the chemical constants 
     
    8893      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
    8994      ! 
     95      !                                                                    !   set time step size (Euler/Leapfrog) 
     96      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN   ;    rfact = rdttrc(1)     !  at nittrc000 
     97      ELSEIF( kt <= nittrc000 + nn_dttrc )                          THEN   ;    rfact = 2. * rdttrc(1)   ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 
     98      ENDIF 
     99      ! 
     100      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
     101         rfactr  = 1. / rfact 
     102         rfact2  = rfact / FLOAT( nrdttrc ) 
     103         rfact2r = 1. / rfact2 
     104         xstep = rfact2 / rday         ! Time step duration for biology 
     105         IF(lwp) WRITE(numout,*)  
     106         IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdttra(1) 
     107         IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2 
     108         IF(lwp) WRITE(numout,*) 
     109      ENDIF 
     110 
     111      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 
     112         DO jn = jp_pcs0, jp_pcs1              !   SMS on tracer without Asselin time-filter 
     113            trb(:,:,:,jn) = trn(:,:,:,jn) 
     114         END DO 
     115      ENDIF 
     116      ! 
    90117      IF( ndayflxtr /= nday_year ) THEN      ! New days 
    91118         ! 
     
    105132      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    106133         ! 
    107          CALL p4z_bio (kt, jnt)    ! Biology 
    108          CALL p4z_sed (kt, jnt)    ! Sedimentation 
    109          ! 
     134         CALL p4z_bio( kt, jnt )   ! Biology 
     135         CALL p4z_sed( kt, jnt )   ! Sedimentation 
     136         CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
     137         CALL p4z_flx( kt, jnt )   ! Compute surface fluxes 
     138         ! 
     139         xnegtr(:,:,:) = 1.e0 
    110140         DO jn = jp_pcs0, jp_pcs1 
    111             trb(:,:,:,jn) = trn(:,:,:,jn) 
    112          ENDDO 
    113          ! 
     141            DO jk = 1, jpk 
     142               DO jj = 1, jpj 
     143                  DO ji = 1, jpi 
     144                     IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 
     145                        ztra             = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 
     146                        xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
     147                     ENDIF 
     148                 END DO 
     149               END DO 
     150            END DO 
     151         END DO 
     152         !                                ! where at least 1 tracer concentration becomes negative 
     153         !                                !  
     154         DO jn = jp_pcs0, jp_pcs1 
     155           trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
     156         END DO 
     157        ! 
     158         DO jn = jp_pcs0, jp_pcs1 
     159            tra(:,:,:,jn) = 0._wp 
     160         END DO 
     161         ! 
     162         IF( ln_top_euler ) THEN 
     163            DO jn = jp_pcs0, jp_pcs1 
     164               trn(:,:,:,jn) = trb(:,:,:,jn) 
     165            END DO 
     166         ENDIF 
    114167      END DO 
    115168 
    116       IF( l_trdtrc )  THEN 
    117          DO jn = 1, jp_pisces 
    118             jl = jn + jp_pcs0 - 1 
    119             ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 
    120          ENDDO 
    121       ENDIF 
    122  
    123       CALL p4z_lys( kt )             ! Compute CaCO3 saturation 
    124       CALL p4z_flx( kt )             ! Compute surface fluxes 
    125  
    126       DO jn = jp_pcs0, jp_pcs1 
    127         CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 
    128         CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 
    129         CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 
     169#if defined key_kriest 
     170      !  
     171      zcoef1 = 1.e0 / xkr_massp  
     172      zcoef2 = 1.e0 / xkr_massp / 1.1 
     173      DO jk = 1,jpkm1 
     174         trb(:,:,jk,jpnum) = MAX(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
     175         trb(:,:,jk,jpnum) = MIN(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2              ) 
    130176      END DO 
    131177      ! 
     178#endif 
     179      ! 
     180      ! 
     181      IF( l_trdtrc ) THEN 
     182         DO jn = jp_pcs0, jp_pcs1 
     183           CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     184         END DO 
     185      END IF 
     186      ! 
    132187      IF( lk_sed ) THEN  
    133188         ! 
     
    135190         ! 
    136191         DO jn = jp_pcs0, jp_pcs1 
    137            CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 
     192           CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 
    138193         END DO 
    139194         ! 
     
    142197      IF( lrst_trc )  CALL p4z_rst( kt, 'WRITE' )  !* Write PISCES informations in restart file  
    143198      ! 
    144       IF( l_trdtrc ) THEN 
    145          DO jn = 1, jp_pisces 
    146             jl = jn + jp_pcs0 - 1 
    147              ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 
    148              CALL trd_mod_trc( ztrdpis(:,:,:,jn), jn, jptra_trd_sms, kt )   ! save trends 
    149           END DO 
    150           CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    151       END IF 
    152       ! 
    153       CALL p4z_chk_mass( kt ) ! Mass conservation checking 
     199 
     200      IF( lk_iomput .OR. ln_check_mass )  CALL p4z_chk_mass( kt ) ! Mass conservation checking 
    154201 
    155202      IF ( lwm .AND. kt == nittrc000 ) CALL FLUSH    ( numonp )     ! flush output namelist PISCES 
     
    281328               ztmas   = tmask(ji,jj,jk) 
    282329               ztmas1  = 1. - tmask(ji,jj,jk) 
    283                zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
    284                zco3    = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
    285                zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 
     330               zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
     331               zco3    = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
     332               zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 
    286333               hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 
    287334            END DO 
     
    328375         ENDIF 
    329376         ! 
     377         IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN  ! cumulative total flux of carbon 
     378            CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum  ) 
     379         ELSE 
     380            t_oce_co2_flx_cum = 0._wp 
     381         ENDIF 
     382         ! 
    330383      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
    331384         IF( kt == nitrst ) THEN 
     
    337390         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 
    338391         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
     392         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 
    339393      ENDIF 
    340394      ! 
     
    355409      REAL(wp) ::  silmean = 91.51     ! mean value of silicate 
    356410      ! 
    357       REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 
     411      REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 
     412      REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 
    358413      !!--------------------------------------------------------------------- 
    359414 
     
    368423         zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6               
    369424 
    370          zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    371          zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    372          zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    373          zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     425         zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     426         zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     427         zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     428         zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    374429  
    375          IF(lwp) WRITE(numout,*) '       TALK mean : ', zalksum 
    376          trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 
    377  
    378          IF(lwp) WRITE(numout,*) '       PO4  mean : ', zpo4sum 
    379          trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 
    380  
    381          IF(lwp) WRITE(numout,*) '       NO3  mean : ', zno3sum 
    382          trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 
    383  
    384          IF(lwp) WRITE(numout,*) '       SiO3 mean : ', zsilsum 
    385          trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 
    386          ! 
    387       ENDIF 
    388  
     430         IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
     431         trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 
     432 
     433         IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
     434         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 
     435 
     436         IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
     437         trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 
     438 
     439         IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
     440         trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 
     441         ! 
     442         ! 
     443         IF( .NOT. ln_top_euler ) THEN 
     444            zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     445            zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     446            zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     447            zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     448  
     449            IF(lwp) WRITE(numout,*) ' ' 
     450            IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb 
     451            trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 
     452 
     453            IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
     454            trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 
     455 
     456            IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
     457            trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 
     458 
     459            IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
     460            trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 
     461        ENDIF 
     462        ! 
     463      ENDIF 
     464        ! 
    389465   END SUBROUTINE p4z_dmp 
    390466 
     
    398474      !!--------------------------------------------------------------------- 
    399475      ! 
    400       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    401       !! 
     476      INTEGER , INTENT( in ) ::   kt      ! ocean time-step index       
     477      REAL(wp)               ::  zfact        
     478      REAL(wp) ::  zrdenittot, zsdenittot, znitrpottot 
     479      CHARACTER(LEN=100)   ::   cltxt 
     480      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 
     481      INTEGER :: jk 
     482      !!---------------------------------------------------------------------- 
     483 
     484      ! 
    402485      !!--------------------------------------------------------------------- 
    403486 
     
    406489            CALL ctl_opn( numco2, 'carbon.budget'  , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    407490            CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     491            CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     492            xfact1 = rfact2r * 12. / 1.e15 * ryyss    ! conversion molC/kt --> PgC/yr 
     493            xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss   ! conversion molC/l/s ----> TgN/m3/yr 
     494            cltxt='time-step   Alkalinity        Nitrate        Phosphorus         Silicate           Iron' 
     495            IF( lwp ) WRITE(numnut,*)  TRIM(cltxt) 
     496            IF( lwp ) WRITE(numnut,*)  
    408497         ENDIF 
    409498      ENDIF 
    410499 
    411       IF( ln_check_mass .AND. kt == nitend ) THEN      !   Compute the budget of NO3, ALK, Si, Fer 
     500      ! 
     501      IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
     502         !   Compute the budget of NO3, ALK, Si, Fer 
    412503         no3budget = glob_sum( (   trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)  & 
    413504            &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
     
    417508            &                    + trn(:,:,:,jpgoc)                     & 
    418509#endif 
    419             &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  )  
    420          !  
     510            &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
     511         ! 
     512         no3budget = no3budget / areatot 
     513         CALL iom_put( "pno3tot", no3budget ) 
     514      ENDIF 
     515      ! 
     516      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
     517         po4budget = glob_sum( (   trn(:,:,:,jppo4)                     & 
     518            &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
     519            &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
     520            &                    + trn(:,:,:,jppoc)                     & 
     521#if ! defined key_kriest 
     522            &                    + trn(:,:,:,jpgoc)                     & 
     523#endif 
     524            &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
     525         po4budget = po4budget / areatot 
     526         CALL iom_put( "ppo4tot", po4budget ) 
     527      ENDIF 
     528      ! 
     529      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    421530         silbudget = glob_sum( (   trn(:,:,:,jpsil) + trn(:,:,:,jpgsi)  & 
    422531            &                    + trn(:,:,:,jpdsi)                     ) * cvol(:,:,:)  ) 
    423          !  
     532         ! 
     533         silbudget = silbudget / areatot 
     534         CALL iom_put( "psiltot", silbudget ) 
     535      ENDIF 
     536      ! 
     537      IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    424538         alkbudget = glob_sum( (   trn(:,:,:,jpno3) * rno3              & 
    425539            &                    + trn(:,:,:,jptal)                     & 
    426540            &                    + trn(:,:,:,jpcal) * 2.                ) * cvol(:,:,:)  ) 
    427          !  
     541         ! 
     542         alkbudget = alkbudget / areatot 
     543         CALL iom_put( "palktot", alkbudget ) 
     544      ENDIF 
     545      ! 
     546      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    428547         ferbudget = glob_sum( (   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe)  & 
    429548            &                    + trn(:,:,:,jpdfe)                     & 
     
    434553            &                    + trn(:,:,:,jpzoo) * ferat3            & 
    435554            &                    + trn(:,:,:,jpmes) * ferat3            ) * cvol(:,:,:)  ) 
    436  
    437          ! 
     555         ! 
     556         ferbudget = ferbudget / areatot 
     557         CALL iom_put( "pfertot", ferbudget ) 
     558      ENDIF 
     559      ! 
     560 
     561      ! Global budget of N SMS : denitrification in the water column and in the sediment 
     562      !                          nitrogen fixation by the diazotrophs 
     563      ! -------------------------------------------------------------------------------- 
     564      IF( iom_use( "tnfix" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
     565         znitrpottot  = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 
     566         CALL iom_put( "tnfix"  , znitrpottot * 1.e+3 * rno3 )  ! Global  nitrogen fixation molC/l  to molN/m3  
     567      ENDIF 
     568      ! 
     569      IF( iom_use( "tdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
     570         zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
     571         CALL iom_put( "tdenit"  , zrdenittot * 1.e+3 * rno3 )  ! Total denitrification molC/l to molN/m3  
     572      ENDIF 
     573      ! 
     574      IF( iom_use( "Sdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
     575         zsdenittot   = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 
     576         CALL iom_put( "Sdenit", sdenit(:,:) * zfact * tmask(:,:,1) )  ! Nitrate reduction in the sediments 
     577      ENDIF 
     578 
     579      IF( ln_check_mass .AND. kt == nitend ) THEN   ! Compute the budget of NO3, ALK, Si, Fer 
    438580         t_atm_co2_flx  = t_atm_co2_flx / glob_sum( e1e2t(:,:) ) 
    439          t_oce_co2_flx  = t_oce_co2_flx         * 12. / 1.e15 * (-1 ) 
    440          tpp            = tpp           * 1000. * 12. / 1.E15 
    441          t_oce_co2_exp  = t_oce_co2_exp * 1000. * 12. / 1.E15 
    442          ! 
    443          no3budget = no3budget / areatot 
    444          silbudget = silbudget / areatot 
    445          alkbudget = alkbudget / areatot 
    446          ferbudget = ferbudget / areatot 
    447          ! 
    448          IF(lwp) THEN 
    449             WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp 
    450             WRITE(numnut,9500) ndastp, alkbudget, no3budget, silbudget, ferbudget 
    451          ENDIF 
    452          ! 
    453       ENDIF 
    454        ! 
     581         t_oce_co2_flx  = t_oce_co2_flx         * xfact1 * (-1 ) 
     582         tpp            = tpp           * 1000. * xfact1 
     583         t_oce_co2_exp  = t_oce_co2_exp * 1000. * xfact1 
     584         IF( lwp ) WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp 
     585         IF( lwp ) WRITE(numnut,9100) ndastp, alkbudget        * 1.e+06, & 
     586             &                                no3budget * rno3 * 1.e+06, & 
     587             &                                po4budget * po4r * 1.e+06, & 
     588             &                                silbudget        * 1.e+06, & 
     589             &                                ferbudget        * 1.e+09 
     590         ! 
     591         IF( lwp ) WRITE(numnit,9200) ndastp, znitrpottot * xfact2  , & 
     592         &                             zrdenittot  * xfact2  , & 
     593         &                             zsdenittot  * xfact2 
     594 
     595      ENDIF 
     596      ! 
    455597 9000  FORMAT(i8,f10.5,e18.10,f10.5,f10.5) 
    456  9500  FORMAT(i8,4e18.10)      
     598 9100  FORMAT(i8,5e18.10) 
     599 9200  FORMAT(i8,3f10.5) 
     600 
    457601       ! 
    458602   END SUBROUTINE p4z_chk_mass 
Note: See TracChangeset for help on using the changeset viewer.