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/2017/dev_r7881_no_wrk_alloc/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/2017/dev_r7881_no_wrk_alloc/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 7910

Last change on this file since 7910 was 7910, checked in by timgraham, 7 years ago

All wrk_alloc removed

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