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

source: branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 7180

Last change on this file since 7180 was 7180, checked in by aumont, 7 years ago

various bug fixes on iron chemistry

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