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 NEMO/branches/UKMO/NEMO4_beta_mirror/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/UKMO/NEMO4_beta_mirror/src/TOP/PISCES/P4Z/p4zfechem.F90 @ 9950

Last change on this file since 9950 was 9950, checked in by davestorkey, 6 years ago

UKMO/NEMO4_beta_mirror branch: remove SVN keywords

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