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/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 7508

Last change on this file since 7508 was 7508, checked in by mocavero, 7 years ago

changes on code duplication and workshare construct

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