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

source: branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 7162

Last change on this file since 7162 was 7162, checked in by cetlod, 7 years ago

new top interface : Add PISCES quota model

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