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 @ 7174

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

new top interface : minor improvments of PISCES

File size: 21.7 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                  zfeequi = zFe3(ji,jj,jk) * 1E-9
253                  IF (ln_fecolloid) THEN
254                     zhplus   = max( rtrn, hi(ji,jj,jk) )
255                     fe3sol  = fesol(ji,jj,jk,1) * ( zhplus**3 + 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                     zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9
261                     fe3sol  = 0.
262                  ENDIF
263               ENDIF
264               !
265               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 
266               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s
267               zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc
268               zscave = zfeequi * zlam1b * xstep
269
270               ! Compute the different ratios for scavenging of iron
271               ! to later allocate scavenged iron to the different organic pools
272               ! ---------------------------------------------------------
273               zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b
274               zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b
275
276               !  Increased scavenging for very high iron concentrations found near the coasts
277               !  due to increased lithogenic particles and let say it is unknown processes (precipitation, ...)
278               !  -----------------------------------------------------------
279               zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. )
280               zlamfac = MIN( 1.  , zlamfac )
281               zdep    = MIN( 1., 1000. / gdept_n(ji,jj,jk) )
282               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )
283               zcoag   = zfeequi * zlam1b * xstep + 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer)
284
285               !  Compute the coagulation of colloidal iron. This parameterization
286               !  could be thought as an equivalent of colloidal pumping.
287               !  It requires certainly some more work as it is very poorly constrained.
288               !  ----------------------------------------------------------------
289               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    &
290                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) )
291               zaggdfea = zlam1a * xstep * zfecoll
292               !
293               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)
294               zaggdfeb = zlam1b * xstep * zfecoll
295               !
296               ! precipitation of Fe3+, creation of nanoparticles
297               precip(ji,jj,jk) = MAX( 0., ( zfeequi - fe3sol ) ) * kfep * xstep
298               !
299               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb &
300               &                     - zcoag - precip(ji,jj,jk)
301               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea
302               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb
303               IF( ln_ligand ) THEN
304                 zligco = MAX( ( 0.1 * trn(ji,jj,jk,jplgw) ), ( trn(ji,jj,jk,jplgw) - fe3sol ) )
305                 zaggliga = zlam1a * xstep * zligco
306                 zaggligb = zlam1b * xstep * zligco
307                 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk)
308                 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb
309               ENDIF
310            END DO
311         END DO
312      END DO
313      !
314      !  Define the bioavailable fraction of iron
315      !  ----------------------------------------
316      IF( ln_fechem ) THEN  ;  biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )
317      ELSE                  ;  biron(:,:,:) = trb(:,:,:,jpfer) 
318      ENDIF
319
320      IF( ln_ligand .AND. .NOT.ln_fechem) THEN
321         plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trn(:,:,:,jpfer) +rtrn ) ) )
322         plig(:,:,:) =  MAX( 0. , plig(:,:,:) )
323      ENDIF
324
325      !  Output of some diagnostics variables
326      !     ---------------------------------
327      IF( lk_iomput ) THEN
328         IF( knt == nrdttrc ) THEN
329         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+
330         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1
331         IF( iom_use("TL1")    )  CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1
332         IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL
333         IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron
334         IF( ln_fechem ) THEN
335            IF( iom_use("Fe2")  ) CALL iom_put("Fe2"    , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+
336            IF( iom_use("FeL2") ) CALL iom_put("FeL2"   , zFeL2  (:,:,:)       * tmask(:,:,:) )   ! FeL2
337            IF( iom_use("FeP")  ) CALL iom_put("FeP"    , zFeP   (:,:,:)       * tmask(:,:,:) )   ! FeP
338            IF( iom_use("TL2")  ) CALL iom_put("TL2"    , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2
339         ENDIF
340         ENDIF
341      ENDIF
342
343      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
344         WRITE(charout, FMT="('fechem')")
345         CALL prt_ctl_trc_info(charout)
346         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
347      ENDIF
348      !
349      CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip )
350      IF( ln_fechem )  THEN
351         CALL wrk_dealloc( jpi, jpj,      zstrn, zstrn2 )
352         CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
353      ENDIF
354      !
355      IF( nn_timing == 1 )  CALL timing_stop('p4z_fechem')
356      !
357   END SUBROUTINE p4z_fechem
358
359
360   SUBROUTINE p4z_fechem_init
361      !!----------------------------------------------------------------------
362      !!                  ***  ROUTINE p4z_fechem_init  ***
363      !!
364      !! ** Purpose :   Initialization of iron chemistry parameters
365      !!
366      !! ** Method  :   Read the nampisfer namelist and check the parameters
367      !!      called at the first timestep
368      !!
369      !! ** input   :   Namelist nampisfer
370      !!
371      !!----------------------------------------------------------------------
372      NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep 
373      INTEGER :: ios                 ! Local integer output status for namelist read
374
375      REWIND( numnatp_ref )              ! Namelist nampisfer in reference namelist : Pisces iron chemistry
376      READ  ( numnatp_ref, nampisfer, IOSTAT = ios, ERR = 901)
377901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp )
378
379      REWIND( numnatp_cfg )              ! Namelist nampisfer in configuration namelist : Pisces iron chemistry
380      READ  ( numnatp_cfg, nampisfer, IOSTAT = ios, ERR = 902 )
381902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp )
382      IF(lwm) WRITE ( numonp, nampisfer )
383
384      IF(lwp) THEN                         ! control print
385         WRITE(numout,*) ' '
386         WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer'
387         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
388         WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem    =', ln_fechem
389         WRITE(numout,*) '    variable concentration of ligand          ln_ligvar    =', ln_ligvar
390         WRITE(numout,*) '    Variable colloidal fraction of Fe3+       ln_fecolloid =', ln_fecolloid
391         WRITE(numout,*) '    scavenging rate of Iron                   xlam1        =', xlam1
392         WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust     =', xlamdust
393         WRITE(numout,*) '    ligand concentration in the ocean         ligand       =', ligand
394         WRITE(numout,*) '    rate constant for nanoparticle formation  kfep         =', kfep
395      ENDIF
396      !
397      IF( ln_fechem ) THEN
398         ! initialization of some constants used by the complexe chemistry scheme
399         ! ----------------------------------------------------------------------
400         spd = 3600. * 24.
401         con = 1.E9
402         ! LIGAND KINETICS (values from Witter et al. 2000)
403         ! Weak (L2) ligands
404         ! Phaeophytin
405         kl2 = 12.2E5  * spd / con
406         kb2 = 12.3E-6 * spd
407         ! Strong (L1) ligands
408         ! Saccharides
409         ! kl1 = 12.2E5  * spd / con
410         ! kb1 = 12.3E-6 * spd
411         ! DFOB-
412         kl1 = 19.6e5  * spd / con
413         kb1 = 1.5e-6  * spd
414         ! pcp and remin of Fe3p
415         ks  = 0.075
416         kpr = 0.05
417         ! thermal reduction of Fe3
418         kth = 0.0048 * 24.
419         !
420      ENDIF
421      !
422   END SUBROUTINE p4z_fechem_init
423   !!======================================================================
424END MODULE p4zfechem
Note: See TracBrowser for help on using the repository browser.