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 NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsed.F90 @ 12236

Last change on this file since 12236 was 12236, checked in by acc, 4 years ago

Branch 2019/dev_r11943_MERGE_2019. Merge in changes from 2019/fix_sn_cfctl_ticket2328. Fully SETTE tested

  • Property svn:keywords set to Id
File size: 21.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   !!   p4z_sed        :  Compute loss of organic matter in the sediments
12   !!----------------------------------------------------------------------
13   USE oce_trc         !  shared variables between ocean and passive tracers
14   USE trc             !  passive tracers common variables
15   USE sms_pisces      !  PISCES Source Minus Sink variables
16   USE p4zlim          !  Co-limitations of differents nutrients
17   USE p4zint          !  interpolation and computation of various fields
18   USE sed             !  Sediment module
19   USE iom             !  I/O manager
20   USE prtctl_trc      !  print control for debugging
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC   p4z_sed 
26   PUBLIC   p4z_sed_init
27   PUBLIC   p4z_sed_alloc
28 
29   REAL(wp), PUBLIC ::   nitrfix      !: Nitrogen fixation rate
30   REAL(wp), PUBLIC ::   diazolight   !: Nitrogen fixation sensitivty to light
31   REAL(wp), PUBLIC ::   concfediaz   !: Fe half-saturation Cste for diazotrophs
32
33   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot    !: Nitrogen fixation
34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:  ) :: sdenit     !: Nitrate reduction in the sediments
35   !
36   REAL(wp), SAVE :: r1_rday         
37   REAL(wp), SAVE :: sedsilfrac, sedcalfrac
38
39   !!----------------------------------------------------------------------
40   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
41   !! $Id$
42   !! Software governed by the CeCILL license (see ./LICENSE)
43   !!----------------------------------------------------------------------
44CONTAINS
45
46   SUBROUTINE p4z_sed( kt, knt, Kbb, Kmm, Krhs )
47      !!---------------------------------------------------------------------
48      !!                     ***  ROUTINE p4z_sed  ***
49      !!
50      !! ** Purpose :   Compute loss of organic matter in the sediments. This
51      !!              is by no way a sediment model. The loss is simply
52      !!              computed to balance the inout from rivers and dust
53      !!
54      !! ** Method  : - ???
55      !!---------------------------------------------------------------------
56      !
57      INTEGER, INTENT(in) ::   kt, knt ! ocean time step
58      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices
59      INTEGER  ::  ji, jj, jk, ikt
60      REAL(wp) ::  zrivalk, zrivsil, zrivno3
61      REAL(wp) ::  zlim, zfact, zfactcal
62      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zolimit
63      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep
64      REAL(wp) ::  zwstpoc, zwstpon, zwstpop
65      REAL(wp) ::  ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp
66      REAL(wp) ::  xdiano3, xdianh4
67      !
68      CHARACTER (len=25) :: charout
69      REAL(wp), DIMENSION(jpi,jpj    ) :: zdenit2d, zbureff, zwork
70      REAL(wp), DIMENSION(jpi,jpj    ) :: zwsbio3, zwsbio4
71      REAL(wp), DIMENSION(jpi,jpj    ) :: zsedcal, zsedsi, zsedc
72      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight
73      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep
74      !!---------------------------------------------------------------------
75      !
76      IF( ln_timing )  CALL timing_start('p4z_sed')
77      !
78
79      ! Allocate temporary workspace
80      ALLOCATE( ztrpo4(jpi,jpj,jpk) )
81      IF( ln_p5z )    ALLOCATE( ztrdop(jpi,jpj,jpk) )
82
83      zdenit2d(:,:) = 0.e0
84      zbureff (:,:) = 0.e0
85      zwork   (:,:) = 0.e0
86      zsedsi  (:,:) = 0.e0
87      zsedcal (:,:) = 0.e0
88      zsedc   (:,:) = 0.e0
89
90      IF( .NOT.lk_sed ) THEN
91         ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments
92         ! --------------------------------------------------------------------
93         DO jj = 1, jpj
94            DO ji = 1, jpi
95               ikt  = mbkt(ji,jj)
96               zdep = e3t(ji,jj,ikt,Kmm) / xstep
97               zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) )
98               zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) )
99            END DO
100         END DO
101
102         ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used
103         ! Computation of the fraction of organic matter that is permanently buried from Dunne's model
104         ! -------------------------------------------------------
105         DO jj = 1, jpj
106            DO ji = 1, jpi
107              IF( tmask(ji,jj,1) == 1 ) THEN
108                 ikt = mbkt(ji,jj)
109                 zflx = (  tr(ji,jj,ikt,jpgoc,Kbb) * zwsbio4(ji,jj)   &
110                   &     + tr(ji,jj,ikt,jppoc,Kbb) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4
111                 zflx  = LOG10( MAX( 1E-3, zflx ) )
112                 zo2   = LOG10( MAX( 10. , tr(ji,jj,ikt,jpoxy,Kbb) * 1E6 ) )
113                 zno3  = LOG10( MAX( 1.  , tr(ji,jj,ikt,jpno3,Kbb) * 1E6 * rno3 ) )
114                 zdep  = LOG10( gdepw(ji,jj,ikt+1,Kmm) )
115                 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    &
116                   &                + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2
117                 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) )
118                   !
119                 zflx = (  tr(ji,jj,ikt,jpgoc,Kbb) * zwsbio4(ji,jj)   &
120                   &     + tr(ji,jj,ikt,jppoc,Kbb) * zwsbio3(ji,jj) ) * 1E6
121                 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2
122              ENDIF
123            END DO
124         END DO 
125         !
126      ENDIF
127
128      ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean.
129      ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers)
130      ! ------------------------------------------------------
131      IF( .NOT.lk_sed )  zrivsil = 1._wp - sedsilfrac
132
133      DO jj = 1, jpj
134         DO ji = 1, jpi
135            ikt  = mbkt(ji,jj)
136            zdep = xstep / e3t(ji,jj,ikt,Kmm) 
137            zwsc = zwsbio4(ji,jj) * zdep
138            zsiloss = tr(ji,jj,ikt,jpgsi,Kbb) * zwsc
139            zcaloss = tr(ji,jj,ikt,jpcal,Kbb) * zwsc
140            !
141            tr(ji,jj,ikt,jpgsi,Krhs) = tr(ji,jj,ikt,jpgsi,Krhs) - zsiloss
142            tr(ji,jj,ikt,jpcal,Krhs) = tr(ji,jj,ikt,jpcal,Krhs) - zcaloss
143         END DO
144      END DO
145      !
146      IF( .NOT.lk_sed ) THEN
147         DO jj = 1, jpj
148            DO ji = 1, jpi
149               ikt  = mbkt(ji,jj)
150               zdep = xstep / e3t(ji,jj,ikt,Kmm) 
151               zwsc = zwsbio4(ji,jj) * zdep
152               zsiloss = tr(ji,jj,ikt,jpgsi,Kbb) * zwsc
153               zcaloss = tr(ji,jj,ikt,jpcal,Kbb) * zwsc
154               tr(ji,jj,ikt,jpsil,Krhs) = tr(ji,jj,ikt,jpsil,Krhs) + zsiloss * zrivsil 
155               !
156               zfactcal = MIN( excess(ji,jj,ikt), 0.2 )
157               zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) )
158               zrivalk  = sedcalfrac * zfactcal
159               tr(ji,jj,ikt,jptal,Krhs) =  tr(ji,jj,ikt,jptal,Krhs) + zcaloss * zrivalk * 2.0
160               tr(ji,jj,ikt,jpdic,Krhs) =  tr(ji,jj,ikt,jpdic,Krhs) + zcaloss * zrivalk
161               zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss * e3t(ji,jj,ikt,Kmm) 
162               zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss * e3t(ji,jj,ikt,Kmm) 
163            END DO
164         END DO
165      ENDIF
166      !
167      DO jj = 1, jpj
168         DO ji = 1, jpi
169            ikt  = mbkt(ji,jj)
170            zdep = xstep / e3t(ji,jj,ikt,Kmm) 
171            zws4 = zwsbio4(ji,jj) * zdep
172            zws3 = zwsbio3(ji,jj) * zdep
173            tr(ji,jj,ikt,jpgoc,Krhs) = tr(ji,jj,ikt,jpgoc,Krhs) - tr(ji,jj,ikt,jpgoc,Kbb) * zws4 
174            tr(ji,jj,ikt,jppoc,Krhs) = tr(ji,jj,ikt,jppoc,Krhs) - tr(ji,jj,ikt,jppoc,Kbb) * zws3
175            tr(ji,jj,ikt,jpbfe,Krhs) = tr(ji,jj,ikt,jpbfe,Krhs) - tr(ji,jj,ikt,jpbfe,Kbb) * zws4
176            tr(ji,jj,ikt,jpsfe,Krhs) = tr(ji,jj,ikt,jpsfe,Krhs) - tr(ji,jj,ikt,jpsfe,Kbb) * zws3
177         END DO
178      END DO
179      !
180      IF( ln_p5z ) THEN
181         DO jj = 1, jpj
182            DO ji = 1, jpi
183               ikt  = mbkt(ji,jj)
184               zdep = xstep / e3t(ji,jj,ikt,Kmm) 
185               zws4 = zwsbio4(ji,jj) * zdep
186               zws3 = zwsbio3(ji,jj) * zdep
187               tr(ji,jj,ikt,jpgon,Krhs) = tr(ji,jj,ikt,jpgon,Krhs) - tr(ji,jj,ikt,jpgon,Kbb) * zws4
188               tr(ji,jj,ikt,jppon,Krhs) = tr(ji,jj,ikt,jppon,Krhs) - tr(ji,jj,ikt,jppon,Kbb) * zws3
189               tr(ji,jj,ikt,jpgop,Krhs) = tr(ji,jj,ikt,jpgop,Krhs) - tr(ji,jj,ikt,jpgop,Kbb) * zws4
190               tr(ji,jj,ikt,jppop,Krhs) = tr(ji,jj,ikt,jppop,Krhs) - tr(ji,jj,ikt,jppop,Kbb) * zws3
191            END DO
192         END DO
193      ENDIF
194
195      IF( .NOT.lk_sed ) THEN
196         ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after
197         ! denitrification in the sediments. Not very clever, but simpliest option.
198         DO jj = 1, jpj
199            DO ji = 1, jpi
200               ikt  = mbkt(ji,jj)
201               zdep = xstep / e3t(ji,jj,ikt,Kmm) 
202               zws4 = zwsbio4(ji,jj) * zdep
203               zws3 = zwsbio3(ji,jj) * zdep
204               zrivno3 = 1. - zbureff(ji,jj)
205               zwstpoc = tr(ji,jj,ikt,jpgoc,Kbb) * zws4 + tr(ji,jj,ikt,jppoc,Kbb) * zws3
206               zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 )
207               z1pdenit = zwstpoc * zrivno3 - zpdenit
208               zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )
209               tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit
210               tr(ji,jj,ikt,jppo4,Krhs) = tr(ji,jj,ikt,jppo4,Krhs) + zpdenit + zolimit
211               tr(ji,jj,ikt,jpnh4,Krhs) = tr(ji,jj,ikt,jpnh4,Krhs) + zpdenit + zolimit
212               tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) - rdenit * zpdenit
213               tr(ji,jj,ikt,jpoxy,Krhs) = tr(ji,jj,ikt,jpoxy,Krhs) - zolimit * o2ut
214               tr(ji,jj,ikt,jptal,Krhs) = tr(ji,jj,ikt,jptal,Krhs) + rno3 * (zolimit + (1.+rdenit) * zpdenit )
215               tr(ji,jj,ikt,jpdic,Krhs) = tr(ji,jj,ikt,jpdic,Krhs) + zpdenit + zolimit 
216               sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm)
217               zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc * e3t(ji,jj,ikt,Kmm)
218               IF( ln_p5z ) THEN
219                  zwstpop              = tr(ji,jj,ikt,jpgop,Kbb) * zws4 + tr(ji,jj,ikt,jppop,Kbb) * zws3
220                  zwstpon              = tr(ji,jj,ikt,jpgon,Kbb) * zws4 + tr(ji,jj,ikt,jppon,Kbb) * zws3
221                  tr(ji,jj,ikt,jpdon,Krhs) = tr(ji,jj,ikt,jpdon,Krhs) + ( z1pdenit - zolimit ) * zwstpon / (zwstpoc + rtrn)
222                  tr(ji,jj,ikt,jpdop,Krhs) = tr(ji,jj,ikt,jpdop,Krhs) + ( z1pdenit - zolimit ) * zwstpop / (zwstpoc + rtrn)
223               ENDIF
224            END DO
225         END DO
226       ENDIF
227
228
229      ! Nitrogen fixation process
230      ! Small source iron from particulate inorganic iron
231      !-----------------------------------
232      DO jk = 1, jpkm1
233         zlight (:,:,jk) =  ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) ) 
234         zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) )
235      ENDDO
236      IF( ln_p4z ) THEN
237         DO jk = 1, jpkm1
238            DO jj = 1, jpj
239               DO ji = 1, jpi
240                  !                      ! Potential nitrogen fixation dependant on temperature and iron
241                  ztemp = ts(ji,jj,jk,jp_tem,Kmm)
242                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625
243                  !       Potential nitrogen fixation dependant on temperature and iron
244                  xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) )
245                  xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4)
246                  zlim = ( 1.- xdiano3 - xdianh4 )
247                  IF( zlim <= 0.1 )   zlim = 0.01
248                  zfact = zlim * rfact2
249                  ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
250                  ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) )
251                  ztrdp = ztrpo4(ji,jj,jk)
252                  nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk)
253               END DO
254            END DO
255         END DO
256      ELSE       ! p5z
257         DO jk = 1, jpkm1
258            DO jj = 1, jpj
259               DO ji = 1, jpi
260                  !                      ! Potential nitrogen fixation dependant on temperature and iron
261                  ztemp = ts(ji,jj,jk,jp_tem,Kmm)
262                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625
263                  !       Potential nitrogen fixation dependant on temperature and iron
264                  xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) )
265                  xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4)
266                  zlim = ( 1.- xdiano3 - xdianh4 )
267                  IF( zlim <= 0.1 )   zlim = 0.01
268                  zfact = zlim * rfact2
269                  ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
270                  ztrpo4(ji,jj,jk) = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) )
271                  ztrdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4(ji,jj,jk))
272                  ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk)
273                  nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk)
274               END DO
275            END DO
276         END DO
277      ENDIF
278
279      ! Nitrogen change due to nitrogen fixation
280      ! ----------------------------------------
281      IF( ln_p4z ) THEN
282         DO jk = 1, jpkm1
283            DO jj = 1, jpj
284               DO ji = 1, jpi
285                  zfact = nitrpot(ji,jj,jk) * nitrfix
286                  tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0
287                  tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0
288                  tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zfact * 2.0 / 3.0
289                  tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0
290                  tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0
291                  tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0
292                  tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0
293                  tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0
294                  tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0
295                  tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0
296                  tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday
297                  tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + concdnh4 / ( concdnh4 + tr(ji,jj,jk,jppo4,Kbb) ) &
298                  &                     * 0.001 * tr(ji,jj,jk,jpdoc,Kbb) * xstep
299              END DO
300            END DO
301         END DO
302      ELSE    ! p5z
303         DO jk = 1, jpkm1
304            DO jj = 1, jpj
305               DO ji = 1, jpi
306                  zfact = nitrpot(ji,jj,jk) * nitrfix
307                  tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0
308                  tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0
309                  tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) &
310                  &                     * ztrpo4(ji,jj,jk) / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn)
311                  tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0
312                  tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0
313                  tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0  &
314                  &                     - 16.0 / 46.0 * zfact * ztrdop(ji,jj,jk)   &
315                  &                     / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn)
316                  tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0
317                  tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + zfact * 1.0 / 3.0 * 2.0 /3.0
318                  tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 2.0 /3.0
319                  tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0
320                  tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zfact * 1.0 / 3.0 * 1.0 /3.0
321                  tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0
322                  tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0
323                  tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0 
324                  tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0
325                  tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0
326                  tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday
327              END DO
328            END DO
329         END DO
330         !
331      ENDIF
332
333      IF( lk_iomput ) THEN
334         IF( knt == nrdttrc ) THEN
335            zfact = 1.e+3 * rfact2r !  conversion from molC/l/kt  to molN/m3/s
336            IF( iom_use("Nfix"   ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * rno3 * zfact * tmask(:,:,:) )  ! nitrogen fixation
337            IF( iom_use("INTNFIX") ) THEN   ! nitrogen fixation rate in ocean ( vertically integrated )
338               zwork(:,:) = 0.
339               DO jk = 1, jpkm1
340                 zwork(:,:) = zwork(:,:) + nitrpot(:,:,jk) * nitrfix * rno3 * zfact * e3t(:,:,jk,Kmm) * tmask(:,:,jk)
341               ENDDO
342               CALL iom_put( "INTNFIX" , zwork ) 
343            ENDIF
344            IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact )
345            IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * zfact )
346            IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * zfact )
347            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 )
348         ENDIF
349      ENDIF
350      !
351      IF(sn_cfctl%l_prttrc) THEN  ! print mean trends (USEd for debugging)
352         WRITE(charout, fmt="('sed ')")
353         CALL prt_ctl_trc_info(charout)
354         CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm)
355      ENDIF
356      !
357      IF( ln_p5z )    DEALLOCATE( ztrpo4, ztrdop )
358      !
359      IF( ln_timing )  CALL timing_stop('p4z_sed')
360      !
361   END SUBROUTINE p4z_sed
362
363   SUBROUTINE p4z_sed_init
364      !!----------------------------------------------------------------------
365      !!                  ***  routine p4z_sed_init  ***
366      !!
367      !! ** purpose :   initialization of some parameters
368      !!
369      !!----------------------------------------------------------------------
370      !!----------------------------------------------------------------------
371      INTEGER  :: ji, jj, jk, jm
372      INTEGER  :: ios                 ! Local integer output status for namelist read
373      !
374      !!
375      NAMELIST/nampissed/ nitrfix, diazolight, concfediaz
376      !!----------------------------------------------------------------------
377      !
378      IF(lwp) THEN
379         WRITE(numout,*)
380         WRITE(numout,*) 'p4z_sed_init : initialization of sediment mobilisation '
381         WRITE(numout,*) '~~~~~~~~~~~~ '
382      ENDIF
383      !                            !* set file information
384      READ  ( numnatp_ref, nampissed, IOSTAT = ios, ERR = 901)
385901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampissed in reference namelist' )
386      READ  ( numnatp_cfg, nampissed, IOSTAT = ios, ERR = 902 )
387902   IF( ios >  0 )   CALL ctl_nam ( ios , 'nampissed in configuration namelist' )
388      IF(lwm) WRITE ( numonp, nampissed )
389
390      IF(lwp) THEN
391         WRITE(numout,*) '   Namelist : nampissed '
392         WRITE(numout,*) '      nitrogen fixation rate                       nitrfix = ', nitrfix
393         WRITE(numout,*) '      nitrogen fixation sensitivty to light    diazolight  = ', diazolight
394         WRITE(numout,*) '      Fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz
395      ENDIF
396      !
397      r1_rday  = 1. / rday
398      !
399      sedsilfrac = 0.03     ! percentage of silica loss in the sediments
400      sedcalfrac = 0.6      ! percentage of calcite loss in the sediments
401      !
402      lk_sed = ln_sediment .AND. ln_sed_2way 
403      !
404   END SUBROUTINE p4z_sed_init
405
406   INTEGER FUNCTION p4z_sed_alloc()
407      !!----------------------------------------------------------------------
408      !!                     ***  ROUTINE p4z_sed_alloc  ***
409      !!----------------------------------------------------------------------
410      ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc )
411      !
412      IF( p4z_sed_alloc /= 0 )   CALL ctl_stop( 'STOP', 'p4z_sed_alloc: failed to allocate arrays' )
413      !
414   END FUNCTION p4z_sed_alloc
415
416   !!======================================================================
417END MODULE p4zsed
Note: See TracBrowser for help on using the repository browser.