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

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

new top interface : bugfixes

File size: 22.2 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               !
304            END DO
305         END DO
306      END DO
307      !
308      !  Define the bioavailable fraction of iron
309      !  ----------------------------------------
310      IF( ln_fechem ) THEN  ;  biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )
311      ELSE                  ;  biron(:,:,:) = trb(:,:,:,jpfer) 
312      ENDIF
313      !
314      IF( ln_ligand ) THEN
315         !
316         DO jk = 1, jpkm1
317            DO jj = 1, jpj
318               DO ji = 1, jpi
319                  zlam1a   = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    &
320                      &    + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) )
321                  !
322                  zlam1b   = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)
323                  zligco   = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ) )
324                  zaggliga = zlam1a * xstep * zligco
325                  zaggligb = zlam1b * xstep * zligco
326                  tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk)
327                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb
328               END DO
329            END DO
330         END DO
331         !
332         IF( .NOT.ln_fechem) THEN
333            plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) )
334            plig(:,:,:) =  MAX( 0. , plig(:,:,:) )
335         ENDIF
336         !
337      ENDIF
338      !  Output of some diagnostics variables
339      !     ---------------------------------
340      IF( lk_iomput ) THEN
341         IF( knt == nrdttrc ) THEN
342         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+
343         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1
344         IF( iom_use("TL1")    )  CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1
345         IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL
346         IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron
347         IF( ln_fechem ) THEN
348            IF( iom_use("Fe2")  ) CALL iom_put("Fe2"    , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+
349            IF( iom_use("FeL2") ) CALL iom_put("FeL2"   , zFeL2  (:,:,:)       * tmask(:,:,:) )   ! FeL2
350            IF( iom_use("FeP")  ) CALL iom_put("FeP"    , zFeP   (:,:,:)       * tmask(:,:,:) )   ! FeP
351            IF( iom_use("TL2")  ) CALL iom_put("TL2"    , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2
352         ENDIF
353         ENDIF
354      ENDIF
355
356      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
357         WRITE(charout, FMT="('fechem')")
358         CALL prt_ctl_trc_info(charout)
359         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
360      ENDIF
361      !
362      CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip )
363      IF( ln_fechem )  THEN
364         CALL wrk_dealloc( jpi, jpj,      zstrn, zstrn2 )
365         CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
366      ENDIF
367      !
368      IF( nn_timing == 1 )  CALL timing_stop('p4z_fechem')
369      !
370   END SUBROUTINE p4z_fechem
371
372
373   SUBROUTINE p4z_fechem_init
374      !!----------------------------------------------------------------------
375      !!                  ***  ROUTINE p4z_fechem_init  ***
376      !!
377      !! ** Purpose :   Initialization of iron chemistry parameters
378      !!
379      !! ** Method  :   Read the nampisfer namelist and check the parameters
380      !!      called at the first timestep
381      !!
382      !! ** input   :   Namelist nampisfer
383      !!
384      !!----------------------------------------------------------------------
385      NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep 
386      INTEGER :: ios                 ! Local integer output status for namelist read
387
388      REWIND( numnatp_ref )              ! Namelist nampisfer in reference namelist : Pisces iron chemistry
389      READ  ( numnatp_ref, nampisfer, IOSTAT = ios, ERR = 901)
390901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp )
391
392      REWIND( numnatp_cfg )              ! Namelist nampisfer in configuration namelist : Pisces iron chemistry
393      READ  ( numnatp_cfg, nampisfer, IOSTAT = ios, ERR = 902 )
394902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp )
395      IF(lwm) WRITE ( numonp, nampisfer )
396
397      IF(lwp) THEN                         ! control print
398         WRITE(numout,*) ' '
399         WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer'
400         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
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
411         ! initialization of some constants used by the complexe chemistry scheme
412         ! ----------------------------------------------------------------------
413         spd = 3600. * 24.
414         con = 1.E9
415         ! LIGAND KINETICS (values from Witter et al. 2000)
416         ! Weak (L2) ligands
417         ! Phaeophytin
418         kl2 = 12.2E5  * spd / con
419         kb2 = 12.3E-6 * spd
420         ! Strong (L1) ligands
421         ! Saccharides
422         ! kl1 = 12.2E5  * spd / con
423         ! kb1 = 12.3E-6 * spd
424         ! DFOB-
425         kl1 = 19.6e5  * spd / con
426         kb1 = 1.5e-6  * spd
427         ! pcp and remin of Fe3p
428         ks  = 0.075
429         kpr = 0.05
430         ! thermal reduction of Fe3
431         kth = 0.0048 * 24.
432         !
433      ENDIF
434      !
435   END SUBROUTINE p4z_fechem_init
436   !!======================================================================
437END MODULE p4zfechem
Note: See TracBrowser for help on using the repository browser.