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.
p4zsed.F90 in branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90 @ 4148

Last change on this file since 4148 was 4148, checked in by cetlod, 10 years ago

merge in trunk changes between r3853 and r3940 and commit the changes, see ticket #1169

File size: 19.4 KB
Line 
1MODULE p4zsed
2   !!======================================================================
3   !!                         ***  MODULE p4sed  ***
4   !! TOP :   PISCES Compute loss of organic matter in the sediments
5   !!======================================================================
6   !! History :   1.0  !  2004-03 (O. Aumont) Original code
7   !!             2.0  !  2007-12 (C. Ethe, G. Madec)  F90
8   !!             3.4  !  2011-06 (C. Ethe) USE of fldread
9   !!             3.5  !  2012-07 (O. Aumont) improvment of river input of nutrients
10   !!----------------------------------------------------------------------
11#if defined key_pisces
12   !!----------------------------------------------------------------------
13   !!   'key_pisces'                                       PISCES bio-model
14   !!----------------------------------------------------------------------
15   !!   p4z_sed        :  Compute loss of organic matter in the sediments
16   !!----------------------------------------------------------------------
17   USE oce_trc         !  shared variables between ocean and passive tracers
18   USE trc             !  passive tracers common variables
19   USE sms_pisces      !  PISCES Source Minus Sink variables
20   USE p4zsink         !  vertical flux of particulate matter due to sinking
21   USE p4zopt          !  optical model
22   USE p4zlim          !  Co-limitations of differents nutrients
23   USE p4zrem          !  Remineralisation of organic matter
24   USE p4zsbc          !  External source of nutrients
25   USE p4zint          !  interpolation and computation of various fields
26   USE iom             !  I/O manager
27   USE prtctl_trc      !  print control for debugging
28
29   IMPLICIT NONE
30   PRIVATE
31
32   PUBLIC   p4z_sed   
33
34   !! * Module variables
35   REAL(wp) :: ryyss                    !: number of seconds per year
36   REAL(wp) :: r1_ryyss                 !: inverse of ryyss
37   REAL(wp) :: rmtss                    !: number of seconds per month
38   REAL(wp) :: r1_rday                  !: inverse of rday
39
40   INTEGER ::  numnit 
41
42
43   !!* Substitution
44#  include "top_substitute.h90"
45   !!----------------------------------------------------------------------
46   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
47   !! $Header:$
48   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
49   !!----------------------------------------------------------------------
50CONTAINS
51
52   SUBROUTINE p4z_sed( kt, jnt )
53      !!---------------------------------------------------------------------
54      !!                     ***  ROUTINE p4z_sed  ***
55      !!
56      !! ** Purpose :   Compute loss of organic matter in the sediments. This
57      !!              is by no way a sediment model. The loss is simply
58      !!              computed to balance the inout from rivers and dust
59      !!
60      !! ** Method  : - ???
61      !!---------------------------------------------------------------------
62      !
63      INTEGER, INTENT(in) ::   kt, jnt ! ocean time step
64      INTEGER  ::   ji, jj, jk, ikt
65#if ! defined key_sed
66      REAL(wp) ::   zsumsedsi, zsumsedpo4, zsumsedcal
67      REAL(wp) ::   zrivalk, zrivsil, zrivno3
68#endif
69      REAL(wp) ::  zwflux, zfminus, zfplus
70      REAL(wp) ::  zlim, zfact, zfactcal
71      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit
72      REAL(wp) ::  zsiloss, zcaloss, zwsbio3, zwsbio4, zwscal, zdep, zwstpoc
73      REAL(wp) ::  ztrfer, ztrpo4, zwdust
74      REAL(wp) ::  zrdenittot, zsdenittot, znitrpottot
75      !
76      CHARACTER (len=25) :: charout
77      REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3, zwork4
78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice
79      REAL(wp), POINTER, DIMENSION(:,:,:) :: znitrpot, zirondep
80      !!---------------------------------------------------------------------
81      !
82      IF( nn_timing == 1 )  CALL timing_start('p4z_sed')
83      !
84      IF( kt == nit000 .AND. jnt == 1 )  THEN
85         ryyss    = nyear_len(1) * rday    ! number of seconds per year and per month
86         rmtss    = ryyss / raamo
87         r1_rday  = 1. / rday
88         r1_ryyss = 1. / ryyss
89         IF( ln_check_mass .AND. lwp)  &
90           &  CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea )
91      ENDIF
92      !
93      ! Allocate temporary workspace
94      CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4 )
95      CALL wrk_alloc( jpi, jpj, jpk, znitrpot )
96      zdenit2d(:,:) = 0.e0
97
98      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al.
99      ! ----------------------------------------------------
100      IF( ln_ironice ) THEN 
101         !                                             
102         CALL wrk_alloc( jpi, jpj, zironice )
103         !                                             
104         DO jj = 1, jpj
105            DO ji = 1, jpi
106               zdep    = rfact2 / fse3t(ji,jj,1)
107               zwflux  = fmmflx(ji,jj) / 1000._wp
108               zfminus = MIN( 0._wp, -zwflux ) * trn(ji,jj,1,jpfer) * zdep
109               zfplus  = MAX( 0._wp, -zwflux ) * icefeinput * zdep
110               zironice(ji,jj) =  zfplus + zfminus
111            END DO
112         END DO
113         !
114         trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + zironice(:,:) 
115         !                                             
116         IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc )   &
117            &   CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! iron flux from ice
118         CALL wrk_dealloc( jpi, jpj, zironice )
119         !                                             
120      ENDIF
121
122      ! Add the external input of nutrients from dust deposition
123      ! ----------------------------------------------------------
124      IF( ln_dust ) THEN
125         !                                             
126         CALL wrk_alloc( jpi, jpj,      zpdep, zsidep )
127         CALL wrk_alloc( jpi, jpj, jpk, zirondep      )
128         !                                              ! Iron and Si deposition at the surface
129         IF( ln_solub ) THEN
130            zirondep(:,:,1) = solub(:,:) * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss 
131         ELSE
132            zirondep(:,:,1) = dustsolub  * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss 
133         ENDIF
134         zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 28.1  * rmtss )
135         zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 31.   * rmtss ) / po4r 
136         !                                              ! Iron solubilization of particles in the water column
137         zwdust = 0.005 / ( wdust * 55.85 * 30.42 ) / ( 45. * rday ) 
138         DO jk = 2, jpkm1
139            zirondep(:,:,jk) = dust(:,:) * zwdust * rfact2 * EXP( -fsdept(:,:,jk) / 1000. )
140         END DO
141         !                                              ! Iron solubilization of particles in the water column
142         trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep   (:,:)
143         trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep  (:,:)
144         trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:) 
145         !                                             
146         IF( ln_diatrc ) THEN
147            zfact = 1.e+3 * rfact2r
148            IF( lk_iomput ) THEN
149               IF( jnt == nrdttrc ) THEN
150                  CALL iom_put( "Irondep", zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron
151                  CALL iom_put( "pdust"  , dust(:,:) / ( wdust * 30.42 * 0.035 )  * tmask(:,:,1) ) ! dust concentration at surface
152               ENDIF
153            ELSE
154               trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1)
155            ENDIF
156         ENDIF
157         CALL wrk_dealloc( jpi, jpj,      zpdep, zsidep )
158         CALL wrk_dealloc( jpi, jpj, jpk, zirondep      )
159         !                                             
160      ENDIF
161     
162      ! Add the external input of nutrients from river
163      ! ----------------------------------------------------------
164      IF( ln_river ) THEN
165         trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2
166         trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2
167         trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2
168         trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2
169         trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2
170         trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2
171      ENDIF
172     
173      ! Add the external input of nutrients from nitrogen deposition
174      ! ----------------------------------------------------------
175      IF( ln_ndepo ) THEN
176         trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2
177         trn(:,:,1,jptal) = trn(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2
178      ENDIF
179
180      ! Add the external input of iron from sediment mobilization
181      ! ------------------------------------------------------
182      IF( ln_ironsed ) THEN
183         trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2
184         !
185         IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc )   &
186            &   CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments
187      ENDIF
188
189      ! Add the external input of iron from hydrothermal vents
190      ! ------------------------------------------------------
191      IF( ln_hydrofe ) THEN
192         trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2
193         !
194         IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc )   &
195            &   CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input
196      ENDIF
197
198#if ! defined key_sed
199      ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used
200      ! -------------------------------------------------------
201      DO jj = 1, jpj
202         DO ji = 1, jpi
203           IF( tmask(ji,jj,1) == 1 ) THEN
204              ikt = mbkt(ji,jj)
205# if defined key_kriest
206              zflx =    trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt)    * 1E3 * 1E6 / 1E4
207# else
208              zflx = (  trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt)   &
209                &     + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) )  * 1E3 * 1E6 / 1E4
210#endif
211              zflx  = LOG10( MAX( 1E-3, zflx ) )
212              zo2   = LOG10( MAX( 10. , trn(ji,jj,ikt,jpoxy) * 1E6 ) )
213              zno3  = LOG10( MAX( 1.  , trn(ji,jj,ikt,jpno3) * 1E6 * rno3 ) )
214              zdep  = LOG10( fsdepw(ji,jj,ikt+1) )
215              zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    &
216              &                + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2
217              zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) )
218           ENDIF
219         END DO
220      END DO 
221      ! Loss of biogenic silicon, Caco3 organic carbon in the sediments.
222      ! First, the total loss is computed.
223      ! The factor for calcite comes from the alkalinity effect
224      ! -------------------------------------------------------------
225      DO jj = 1, jpj
226         DO ji = 1, jpi
227            ikt = mbkt(ji,jj) 
228# if defined key_kriest
229            zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * wscal (ji,jj,ikt)
230            zwork2(ji,jj) = trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt)
231# else
232            zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * wsbio4(ji,jj,ikt)
233            zwork2(ji,jj) = trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt) + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) 
234# endif
235            ! For calcite, burial efficiency is made a function of saturation
236            zfactcal      = MIN( excess(ji,jj,ikt), 0.2 )
237            zfactcal      = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) )
238            zwork3(ji,jj) = trn(ji,jj,ikt,jpcal) * wscal (ji,jj,ikt) * 2.e0 * zfactcal
239         END DO
240      END DO
241      zsumsedsi  = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday
242      zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday
243      zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday
244#endif
245
246      ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean.
247      ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers)
248      ! ------------------------------------------------------
249#if ! defined key_sed
250      zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / zsumsedsi
251      zrivno3 =  1._wp - ( rivdininput * r1_ryyss ) / zsumsedpo4
252#endif
253
254      DO jj = 1, jpj
255         DO ji = 1, jpi
256            ikt  = mbkt(ji,jj)
257            zdep = xstep / fse3t(ji,jj,ikt)
258            zwsbio4 = wsbio4(ji,jj,ikt) * zdep
259            zwscal  = wscal (ji,jj,ikt) * zdep
260# if defined key_kriest
261            zsiloss = trn(ji,jj,ikt,jpgsi) * zwsbio4
262# else
263            zsiloss = trn(ji,jj,ikt,jpgsi) * zwscal
264# endif
265            zcaloss = trn(ji,jj,ikt,jpcal) * zwscal
266            !
267            trn(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss
268            trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss
269#if ! defined key_sed
270            trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil 
271            zfactcal = MIN( excess(ji,jj,ikt), 0.2 )
272            zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) )
273            zrivalk  =  1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / zsumsedcal 
274            trn(ji,jj,ikt,jptal) =  trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0
275            trn(ji,jj,ikt,jpdic) =  trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk
276#endif
277         END DO
278      END DO
279
280      DO jj = 1, jpj
281         DO ji = 1, jpi
282            ikt     = mbkt(ji,jj)
283            zdep    = xstep / fse3t(ji,jj,ikt)
284            zwsbio4 = wsbio4(ji,jj,ikt) * zdep
285            zwsbio3 = wsbio3(ji,jj,ikt) * zdep
286# if ! defined key_kriest
287            trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zwsbio4
288            trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zwsbio3
289            trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zwsbio4
290            trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zwsbio3
291            zwstpoc =  trn(ji,jj,ikt,jpgoc) * zwsbio4 + trn(ji,jj,ikt,jppoc) * zwsbio3 
292# else
293            trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zwsbio4
294            trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zwsbio3
295            trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zwsbio3
296            zwstpoc = trn(ji,jj,ikt,jppoc) * zwsbio3 
297# endif
298
299#if ! defined key_sed
300            ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification
301            ! in the sediments and just above the sediments. Not very clever, but simpliest option.
302            zpdenit  = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 )
303            z1pdenit = zwstpoc * zrivno3 - zpdenit
304            zolimit = MIN( ( trn(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )
305            zdenitt = MIN(  0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) )
306            trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt
307            trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt
308            trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt
309            trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt)
310            trn(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut
311            trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) )
312            trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt
313            zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt)
314#endif
315         END DO
316      END DO
317
318      ! Nitrogen fixation process
319      !-----------------------------------
320      DO jk = 1, jpkm1
321         DO jj = 1, jpj
322            DO ji = 1, jpi
323               !                                       ! Potential nitrogen fixation dependant on temperature and iron
324               zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) )
325               IF( zlim <= 0.2 )   zlim = 0.01
326#if defined key_degrad
327               zfact = zlim * rfact2 * facvol(ji,jj,jk)
328#else
329               zfact = zlim * rfact2
330#endif
331               ztrfer = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       )
332               ztrpo4 = trn  (ji,jj,jk,jppo4) / ( concnnh4   + trn  (ji,jj,jk,jppo4) ) 
333               znitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   &
334                 &         *  zfact * MIN( ztrfer, ztrpo4 ) * ( 1.- EXP( -etot(ji,jj,jk) / diazolight ) )
335            END DO
336         END DO
337      END DO
338 
339      IF( ln_check_mass ) THEN
340         ! The total gain from nitrogen fixation is scaled to balance the loss by denitrification
341         ! -------------------------------------------------------------
342         zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) )
343         zsdenittot   = glob_sum ( zwork4(:,:)   * e1e2t(:,:) )
344         znitrpottot  = glob_sum ( znitrpot(:,:,:)                        * cvol(:,:,:) )
345         IF( kt == nitend .AND. jnt == nrdttrc ) THEN
346            zfact = 1.e+3 * rfact2r * rno3 * 365. * 86400. * 14. / 1e12
347            IF(lwp) WRITE(numnit,9100) ndastp, znitrpottot * nitrfix * zfact, zrdenittot * zfact , zsdenittot * zfact
348         ENDIF
349       ENDIF
350
351      ! Nitrogen change due to nitrogen fixation
352      ! ----------------------------------------
353      DO jk = 1, jpkm1
354         DO jj = 1, jpj
355            DO ji = 1, jpi
356               ! zfact = znitrpot(ji,jj,jk) * ( zrdenittot + zsdenittot ) / znitrpottot
357               zfact = znitrpot(ji,jj,jk) * nitrfix
358               trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) +             zfact
359               trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3      * zfact
360               trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit     * zfact 
361               trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + 30. / 46. * zfact
362           END DO
363         END DO
364      END DO
365      !
366      IF( ln_diatrc ) THEN
367         zfact = 1.e+3 * rfact2r
368         IF( lk_iomput ) THEN
369            IF( jnt == nrdttrc ) THEN
370               CALL iom_put( "Nfix"  , znitrpot(:,:,:) * nitrfix * rno3 * zfact * tmask(:,:,:) )  ! nitrogen fixation
371               CALL iom_put( "Sdenit", zwork4(:,:)               * rno3 * zfact * tmask(:,:,1) )  ! Nitrate reduction in the sediments
372            ENDIF
373         ELSE
374            trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrfix * zfact * fse3t(:,:,1) * tmask(:,:,1)
375         ENDIF
376      ENDIF
377      !
378      IF(ln_ctl) THEN  ! print mean trends (USEd for debugging)
379         WRITE(charout, fmt="('sed ')")
380         CALL prt_ctl_trc_info(charout)
381         CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm)
382      ENDIF
383      !
384      CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4 )
385      CALL wrk_dealloc( jpi, jpj, jpk, znitrpot )
386      !
387      IF( nn_timing == 1 )  CALL timing_stop('p4z_sed')
388      !
389 9100  FORMAT(i8,3f10.5)
390      !
391   END SUBROUTINE p4z_sed
392
393#else
394   !!======================================================================
395   !!  Dummy module :                                   No PISCES bio-model
396   !!======================================================================
397CONTAINS
398   SUBROUTINE p4z_sed                         ! Empty routine
399   END SUBROUTINE p4z_sed
400#endif 
401
402   !!======================================================================
403END MODULE  p4zsed
Note: See TracBrowser for help on using the repository browser.