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

source: branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 9125

Last change on this file since 9125 was 9125, checked in by timgraham, 6 years ago

Removed wrk_arrays from whole code. No change in SETTE results from this.

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