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_r12072_MERGE_OPTION2_2019/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/TOP/PISCES/P4Z/p4zsed.F90 @ 12210

Last change on this file since 12210 was 12210, checked in by cetlod, 4 years ago

dev_merge_option2 : merge in fix_sn_cfctl_ticket2328 branch

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