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.
p4zfechem.F90 in branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 6848

Last change on this file since 6848 was 6841, checked in by aumont, 8 years ago

Various bug fixes + explicit gamma function for lability

File size: 23.4 KB
Line 
1MODULE p4zfechem
2   !!======================================================================
3   !!                         ***  MODULE p4zfechem  ***
4   !! TOP :   PISCES Compute iron chemistry and scavenging
5   !!======================================================================
6   !! History :   3.5  !  2012-07 (O. Aumont, A. Tagliabue, C. Ethe) Original code
7   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
8   !!----------------------------------------------------------------------
9#if defined key_pisces || defined key_pisces_quota
10   !!----------------------------------------------------------------------
11   !!   'key_top'       and                                      TOP models
12   !!   'key_pisces*'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !!   p4z_fechem       :  Compute remineralization/scavenging of iron
15   !!   p4z_fechem_init  :  Initialisation of parameters for remineralisation
16   !!   p4z_fechem_alloc :  Allocate remineralisation variables
17   !!----------------------------------------------------------------------
18   USE oce_trc         !  shared variables between ocean and passive tracers
19   USE trc             !  passive tracers common variables
20   USE sms_pisces      !  PISCES Source Minus Sink variables
21   USE p4zopt          !  optical model
22   USE p4zche          !  chemical model
23   USE p4zsbc          !  Boundary conditions from sediments
24   USE prtctl_trc      !  print control for debugging
25   USE iom             !  I/O manager
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   p4z_fechem      ! called in p4zbio.F90
31   PUBLIC   p4z_fechem_init ! called in trcsms_pisces.F90
32
33   !! * Shared module variables
34   LOGICAL          ::  ln_fechem    !: boolean for complex iron chemistry following Tagliabue and voelker
35   LOGICAL          ::  ln_ligvar    !: boolean for variable ligand concentration following Tagliabue and voelker
36   LOGICAL          ::  ln_fecolloid !: boolean for variable colloidal fraction
37   REAL(wp), PUBLIC ::  xlam1        !: scavenging rate of Iron
38   REAL(wp), PUBLIC ::  xlamdust     !: scavenging rate of Iron by dust
39   REAL(wp), PUBLIC ::  ligand       !: ligand concentration in the ocean
40   REAL(wp), PUBLIC ::  kfep         !: rate constant for nanoparticle formation
41
42   REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth
43
44   !!* Substitution
45#  include "top_substitute.h90"
46   !!----------------------------------------------------------------------
47   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
48   !! $Id: p4zrem.F90 3160 2011-11-20 14:27:18Z cetlod $
49   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
50   !!----------------------------------------------------------------------
51CONTAINS
52
53   SUBROUTINE p4z_fechem( kt, jnt )
54      !!---------------------------------------------------------------------
55      !!                     ***  ROUTINE p4z_fechem  ***
56      !!
57      !! ** Purpose :   Compute remineralization/scavenging of iron
58      !!
59      !! ** Method  :   2 different chemistry models are available for iron
60      !!                (1) The simple chemistry model of Aumont and Bopp (2006)
61      !!                    based on one ligand and one inorganic form
62      !!                (2) The complex chemistry model of Tagliabue and
63      !!                    Voelker (2009) based on 2 ligands, 2 inorganic forms
64      !!                    and one particulate form (ln_fechem)
65      !!---------------------------------------------------------------------
66      !
67      INTEGER, INTENT(in) ::   kt, jnt ! ocean time step
68      !
69      INTEGER  ::   ji, jj, jk, jic, jn
70      REAL(wp) ::   zdep, zlam1a, zlam1b, zlamfac
71      REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll, fe3sol
72      REAL(wp) ::   zdenom1, zscave, zaggdfea, zaggdfeb, zcoag
73      REAL(wp) ::   ztrc, zdust
74#if ! defined key_kriest
75      REAL(wp) ::   zdenom2
76#endif
77      REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig, precip
78      REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP
79      REAL(wp), POINTER, DIMENSION(:,:  ) :: zstrn, zstrn2
80      REAL(wp) ::   zzFeL1, zzFeL2, zzFe2, zzFeP, zzFe3, zzstrn2
81      REAL(wp) ::   zrum, zcodel, zargu, zlight
82      REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand
83      REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2
84      REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2
85      REAL(wp) :: ztfe, zoxy, zhplus
86      REAL(wp) :: zstep
87#if defined key_ligand
88      REAL(wp) :: zaggliga, zaggligb
89      REAL(wp) :: dissol, zligco
90#endif
91      CHARACTER (len=25) :: charout
92      !!---------------------------------------------------------------------
93      !
94      IF( nn_timing == 1 )  CALL timing_start('p4z_fechem')
95      !
96      ! Allocate temporary workspace
97      CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip )
98      zFe3 (:,:,:) = 0.
99      zFeL1(:,:,:) = 0.
100      zTL1 (:,:,:) = 0.
101      IF( ln_fechem ) THEN
102         CALL wrk_alloc( jpi, jpj,      zstrn, zstrn2 )
103         CALL wrk_alloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
104         zFe2 (:,:,:) = 0.
105         zFeL2(:,:,:) = 0.
106         zTL2 (:,:,:) = 0.
107         zFeP (:,:,:) = 0.
108      ENDIF
109
110      ! Total ligand concentration : Ligands can be chosen to be constant or variable
111      ! Parameterization from Tagliabue and Voelker (2011)
112      ! -------------------------------------------------
113      IF( ln_ligvar ) THEN
114         ztotlig(:,:,:) =  0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9
115         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. )
116      ELSE
117#if defined key_ligand
118         ztotlig(:,:,:) = trb(:,:,:,jplgw) * 1E9
119#else
120         ztotlig(:,:,:) = ligand * 1E9
121#endif
122      ENDIF
123
124      IF( ln_fechem ) THEN
125
126         ! compute the day length depending on latitude and the day
127         zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp )
128         zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  )
129
130         ! day length in hours
131         zstrn(:,:) = 0.
132         DO jj = 1, jpj
133            DO ji = 1, jpi
134               zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad )
135               zargu = MAX( -1., MIN(  1., zargu ) )
136               zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. )
137            END DO
138         END DO
139
140         ! Maximum light intensity
141         zstrn2(:,:) = zstrn(:,:) / 24.
142         WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.
143         zstrn(:,:) = 24. / zstrn(:,:)
144
145         ! ------------------------------------------------------------
146         ! NEW FE CHEMISTRY ROUTINE from Tagliabue and Volker (2009)
147         ! This model is based on two ligands, Fe2+, Fe3+ and Fep
148         ! Chemistry is supposed to be fast enough to be at equilibrium
149         ! ------------------------------------------------------------
150         DO jn = 1, 2
151!CDIR NOVERRCHK
152         DO jk = 1, jpkm1
153!CDIR NOVERRCHK
154            DO jj = 1, jpj
155!CDIR NOVERRCHK
156               DO ji = 1, jpi
157                  zlight = etot(ji,jj,jk) * zstrn(ji,jj) * float(2-jn)
158                  zzstrn2 = zstrn2(ji,jj) * float(2-jn) + (1. - zstrn2(ji,jj) ) * float(jn-1)
159                  ! Calculate ligand concentrations : assume 2/3rd of excess goes to
160                  ! strong ligands (L1) and 1/3rd to weak ligands (L2)
161                  ztligand       = ztotlig(ji,jj,jk) - ligand * 1E9
162                  zTL1(ji,jj,jk) =                0.000001 + 0.67 * ztligand
163                  zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand
164                  ! ionic strength from Millero et al. 1987
165                  zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn )
166                  zph    = -LOG10( MAX( hi(ji,jj,jk), rtrn) )
167                  zoxy   = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 )
168                  ! Fe2+ oxydation rate from Santana-Casiano et al. (2005)
169                  zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 )  &
170                    &    - 0.04406 * SQRT( tsn(ji,jj,jk,jp_sal) ) - 0.002847 * tsn(ji,jj,jk,jp_sal)
171                  zkox   = ( 10.** zkox ) * spd
172                  zkox   = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn )
173                  ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006)
174                  zkph2 = MAX( 0., 15. * zlight / ( zlight + 2. ) ) * (1. - fr_i(ji,jj))
175                  zkph1 = zkph2 / 5.
176                  ! pass the dfe concentration from PISCES
177                  ztfe = trb(ji,jj,jk,jpfer) * 1e9
178                  ! ----------------------------------------------------------
179                  ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION
180                  ! As shown in Tagliabue and Voelker (2009), Fe3+ is the root of a 3rd order polynom.
181                  ! ----------------------------------------------------------
182                  ! calculate some parameters
183                  za = 1 + ks / kpr
184                  zb = 1 + ( zkph1 + kth ) / ( zkox + rtrn )
185                  zc = 1 + zkph2 / ( zkox + rtrn )
186                  zkappa1 = ( kb1 + zkph1 + kth ) / kl1
187                  zkappa2 = ( kb2 + zkph2 ) / kl2
188                  za2 = zTL1(ji,jj,jk) * zb / za + zTL2(ji,jj,jk) * zc / za + zkappa1 + zkappa2 - ztfe / za
189                  za1 = zkappa2 * zTL1(ji,jj,jk) * zb / za + zkappa1 * zTL2(ji,jj,jk) * zc / za &
190                      & + zkappa1 * zkappa2 - ( zkappa1 + zkappa2 ) * ztfe / za
191                  za0 = -zkappa1 * zkappa2 * ztfe / za
192                  zp  = za1 - za2 * za2 / 3.
193                  zq  = za2 * za2 * za2 * 2. / 27. - za2 * za1 / 3. + za0
194                  zp3 = zp / 3.
195                  zq2 = zq / 2.
196                  zd  = zp3 * zp3 * zp3 + zq2 * zq2
197                  zr  = zq / ABS( zq ) * SQRT( ABS( zp ) / 3. )
198                  ! compute the roots
199                  IF( zp > 0.) THEN
200                     ! zphi = ASINH( zq / ( 2. * zr * zr * zr ) )
201                     zphi =  zq / ( 2. * zr * zr * zr ) 
202                     zphi = LOG( zphi + SQRT( zphi * zphi + 1 ) )  ! asinh(x) = log(x + sqrt(x^2+1))
203                     zxs  = -2. * zr * SINH( zphi / 3. ) - za1 / 3.
204                  ELSE
205                     IF( zd > 0. ) THEN
206                        zfff = MAX( 1., zq / ( 2. * zr * zr * zr ) )
207                        ! zphi = ACOSH( zfff )
208                        zphi = LOG( zfff + SQRT( zfff * zfff - 1 ) )  ! acosh(x) = log(x + sqrt(x^2-1))
209                        zxs = -2. * zr * COSH( zphi / 3. ) - za1 / 3.
210                     ELSE
211                        zfff = MIN( 1., zq / ( 2. * zr * zr * zr ) )
212                        zphi = ACOS( zfff )
213                        DO jic = 1, 3
214                           zfunc = -2 * zr * COS( zphi / 3. + 2. * FLOAT( jic - 1 ) * rpi / 3. ) - za2 / 3.
215                           IF( zfunc > 0. .AND. zfunc <= ztfe)  zxs = zfunc
216                        END DO
217                     ENDIF
218                  ENDIF
219                  ! solve for the other Fe species
220                  zzFe3 = MAX( 0., zxs )
221                  zzFep = MAX( 0., ( ks * zzFe3 / kpr ) )
222                  zkappa2 = ( kb2 + zkph2 ) / kl2
223                  zzFeL2 = MAX( 0., ( zzFe3 * zTL2(ji,jj,jk) ) / ( zkappa2 + zzFe3 ) )
224                  zzFeL1 = MAX( 0., ( ztfe / zb - za / zb * zzFe3 - zc / zb * zzFeL2 ) )
225                  zzFe2  = MAX( 0., ( ( zkph1 * zzFeL1 + zkph2 * zzFeL2 ) / zkox ) )
226                  zFe3(ji,jj,jk)  = zFe3(ji,jj,jk)  + zzFe3 * zzstrn2
227                  zFe2(ji,jj,jk)  = zFe2(ji,jj,jk)  + zzFe2 * zzstrn2
228                  zFeL2(ji,jj,jk) = zFeL2(ji,jj,jk) + zzFeL2 * zzstrn2
229                  zFeL1(ji,jj,jk) = zFeL1(ji,jj,jk) + zzFeL1 * zzstrn2
230                  zFeP(ji,jj,jk)  = zFeP(ji,jj,jk)  + zzFeP * zzstrn2
231               END DO
232            END DO
233         END DO
234         END DO
235      ELSE
236         ! ------------------------------------------------------------
237         ! OLD FE CHEMISTRY ROUTINE from Aumont and Bopp (2006)
238         ! This model is based on one ligand and Fe'
239         ! Chemistry is supposed to be fast enough to be at equilibrium
240         ! ------------------------------------------------------------
241!CDIR NOVERRCHK
242         DO jk = 1, jpkm1
243!CDIR NOVERRCHK
244            DO jj = 1, jpj
245!CDIR NOVERRCHK
246               DO ji = 1, jpi
247                  zTL1(ji,jj,jk) = ztotlig(ji,jj,jk)
248                  zkeq           = fekeq(ji,jj,jk)
249                  zfesatur       = zTL1(ji,jj,jk) * 1E-9
250                  ztfe           = trb(ji,jj,jk,jpfer) 
251                  ! Fe' is the root of a 2nd order polynom
252                  zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe )               &
253                     &             + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2       &
254                     &               + 4. * ztfe * zkeq) ) / ( 2. * zkeq )
255                  zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9
256                  zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) )
257              END DO
258            END DO
259         END DO
260         !
261      ENDIF
262
263      zdust = 0.         ! if no dust available
264!CDIR NOVERRCHK
265      DO jk = 1, jpkm1
266!CDIR NOVERRCHK
267         DO jj = 1, jpj
268!CDIR NOVERRCHK
269            DO ji = 1, jpi
270               zstep = xstep
271# if defined key_degrad
272               zstep = zstep * facvol(ji,jj,jk)
273# endif
274               ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water.
275               ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]).
276               ! Scavenging onto dust is also included as evidenced from the DUNE experiments.
277               ! --------------------------------------------------------------------------------------
278               IF( ln_fechem ) THEN
279                  zfeequi = ( zFe3(ji,jj,jk) + zFe2(ji,jj,jk) + zFeP(ji,jj,jk) ) * 1E-9
280                  zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9
281               ELSE
282                  IF (ln_fecolloid) THEN
283                     zfeequi = zFe3(ji,jj,jk) * 1E-9
284                     zhplus   = max( rtrn, hi(ji,jj,jk) )
285                     fe3sol  = fesol(ji,jj,jk,1) * ( fesol(ji,jj,jk,2) * zhplus**2  &
286                     &         + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4)     &
287                     &         + fesol(ji,jj,jk,5) / zhplus )
288                     zfecoll = max( ( 0.1 * zFeL1(ji,jj,jk) * 1E-9 ), ( zFeL1(ji,jj,jk) * 1E-9 -fe3sol ) )
289                  ELSE
290                     zfeequi = zFe3(ji,jj,jk) * 1E-9 
291                     zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9
292                     fe3sol  = 0.
293                     kfep    = 0.
294                  ENDIF
295               ENDIF
296#if defined key_kriest
297               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 
298#else
299               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 
300#endif
301               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s
302               zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc
303               zscave = zfeequi * zlam1b * zstep
304
305               ! Compute the different ratios for scavenging of iron
306               ! to later allocate scavenged iron to the different organic pools
307               ! ---------------------------------------------------------
308               zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b
309#if ! defined key_kriest
310               zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b
311#endif
312
313               !  Increased scavenging for very high iron concentrations found near the coasts
314               !  due to increased lithogenic particles and let say it is unknown processes (precipitation, ...)
315               !  -----------------------------------------------------------
316               zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. )
317               zlamfac = MIN( 1.  , zlamfac )
318               zdep    = MIN( 1., 1000. / fsdept(ji,jj,jk) )
319               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )
320               zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer)
321
322               !  Compute the coagulation of colloidal iron. This parameterization
323               !  could be thought as an equivalent of colloidal pumping.
324               !  It requires certainly some more work as it is very poorly constrained.
325               !  ----------------------------------------------------------------
326               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    &
327                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) + 0. * trb(ji,jj,jk,jppoc) )
328               zaggdfea = zlam1a * zstep * zfecoll
329#if defined key_ligand
330               zligco = max( ( 0.1 * trn(ji,jj,jk,jplgw) ), ( trn(ji,jj,jk,jplgw) - fe3sol ) )
331               zaggliga = zlam1a * zstep * zligco
332#endif
333               !
334#if defined key_kriest
335               zaggdfeb = 0.
336               !
337#  if defined key_ligand
338               zaggligb = 0.
339#  endif
340               !
341               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag
342               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb
343               !
344#else
345               !
346               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)
347               zaggdfeb = zlam1b * zstep * zfecoll
348               !
349#  if defined key_ligand
350               zaggligb = zlam1b * zstep * zligco
351#  endif
352               ! precipitation of Fe3+, creation of nanoparticles
353               precip(ji,jj,jk) = max( 0., (zfeequi - fe3sol) ) * kfep * zstep
354               !
355               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb &
356               &                     - zcoag - precip(ji,jj,jk)
357               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea
358               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb
359#endif
360#if defined key_ligand
361               tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk)
362               tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb
363#endif
364            END DO
365         END DO
366      END DO
367      !
368      !  Define the bioavailable fraction of iron
369      !  ----------------------------------------
370      IF( ln_fechem ) THEN
371          biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )
372      ELSE
373          biron(:,:,:) = trb(:,:,:,jpfer) 
374      ENDIF
375
376#if defined key_ligand
377      IF (.NOT. ln_fechem) THEN
378          plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trn(:,:,:,jpfer) +rtrn ) ) )
379          plig(:,:,:) = max(0. , plig(:,:,:) )
380      ENDIF
381#endif
382
383      !  Output of some diagnostics variables
384      !     ---------------------------------
385      IF( ln_diatrc .AND. lk_iomput ) THEN
386         IF( jnt == nrdttrc ) THEN
387            CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+
388            CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1
389            CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1
390            CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL
391            CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron
392            IF( ln_fechem ) THEN
393               CALL iom_put("Fe2" , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+
394               CALL iom_put("FeL2", zFeL2  (:,:,:)       * tmask(:,:,:) )   ! FeL2
395               CALL iom_put("FeP" , zFeP   (:,:,:)       * tmask(:,:,:) )   ! FeP
396               CALL iom_put("TL2" , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2
397            ENDIF
398         ENDIF
399      ENDIF
400
401      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
402         WRITE(charout, FMT="('fechem')")
403         CALL prt_ctl_trc_info(charout)
404         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
405      ENDIF
406      !
407                       CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip )
408      IF( ln_fechem )  CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
409      !
410      IF( nn_timing == 1 )  CALL timing_stop('p4z_fechem')
411      !
412   END SUBROUTINE p4z_fechem
413
414
415   SUBROUTINE p4z_fechem_init
416      !!----------------------------------------------------------------------
417      !!                  ***  ROUTINE p4z_fechem_init  ***
418      !!
419      !! ** Purpose :   Initialization of iron chemistry parameters
420      !!
421      !! ** Method  :   Read the nampisfer namelist and check the parameters
422      !!      called at the first timestep
423      !!
424      !! ** input   :   Namelist nampisfer
425      !!
426      !!----------------------------------------------------------------------
427      NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep 
428      INTEGER :: ios                 ! Local integer output status for namelist read
429
430      REWIND( numnatp_ref )              ! Namelist nampisfer in reference namelist : Pisces iron chemistry
431      READ  ( numnatp_ref, nampisfer, IOSTAT = ios, ERR = 901)
432901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp )
433
434      REWIND( numnatp_cfg )              ! Namelist nampisfer in configuration namelist : Pisces iron chemistry
435      READ  ( numnatp_cfg, nampisfer, IOSTAT = ios, ERR = 902 )
436902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp )
437      IF(lwm) WRITE ( numonp, nampisfer )
438
439      IF(lwp) THEN                         ! control print
440         WRITE(numout,*) ' '
441         WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer'
442         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
443         WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem    =', ln_fechem
444         WRITE(numout,*) '    variable concentration of ligand          ln_ligvar    =', ln_ligvar
445         WRITE(numout,*) '    Variable colloidal fraction of Fe3+       ln_fecolloid =', ln_fecolloid
446         WRITE(numout,*) '    scavenging rate of Iron                   xlam1        =', xlam1
447         WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust     =', xlamdust
448         WRITE(numout,*) '    ligand concentration in the ocean         ligand       =', ligand
449         WRITE(numout,*) '    rate constant for nanoparticle formation  kfep         =', kfep
450      ENDIF
451      !
452      IF( ln_fechem ) THEN
453         ! initialization of some constants used by the complexe chemistry scheme
454         ! ----------------------------------------------------------------------
455         spd = 3600. * 24.
456         con = 1.E9
457         ! LIGAND KINETICS (values from Witter et al. 2000)
458         ! Weak (L2) ligands
459         ! Phaeophytin
460         kl2 = 12.2E5  * spd / con
461         kb2 = 12.3E-6 * spd
462         ! Strong (L1) ligands
463         ! Saccharides
464         ! kl1 = 12.2E5  * spd / con
465         ! kb1 = 12.3E-6 * spd
466         ! DFOB-
467         kl1 = 19.6e5  * spd / con
468         kb1 = 1.5e-6  * spd
469         ! pcp and remin of Fe3p
470         ks  = 0.075
471         kpr = 0.05
472         ! thermal reduction of Fe3
473         kth = 0.0048 * 24.
474         !
475      ENDIF
476      !
477   END SUBROUTINE p4z_fechem_init
478
479#else
480   !!======================================================================
481   !!  Dummy module :                                   No PISCES bio-model
482   !!======================================================================
483CONTAINS
484   SUBROUTINE p4z_fechem                    ! Empty routine
485   END SUBROUTINE p4z_fechem
486#endif 
487
488   !!======================================================================
489END MODULE p4zfechem
Note: See TracBrowser for help on using the repository browser.