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

Last change on this file since 6966 was 6966, checked in by aumont, 8 years ago

various bug fixes and updates on carbon chemistry

File size: 23.3 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
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                  IF (ln_fecolloid) THEN
282                     zfeequi = zFe3(ji,jj,jk) * 1E-9
283                     zhplus   = max( rtrn, hi(ji,jj,jk) )
284                     fe3sol  = fesol(ji,jj,jk,1) * ( 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                  ELSE
289                     zfeequi = zFe3(ji,jj,jk) * 1E-9 
290                     zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9
291                     fe3sol  = 0.
292                     kfep    = 0.
293                  ENDIF
294               ENDIF
295#if defined key_kriest
296               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 
297#else
298               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 
299#endif
300               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s
301               zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc
302               zscave = zfeequi * zlam1b * zstep
303
304               ! Compute the different ratios for scavenging of iron
305               ! to later allocate scavenged iron to the different organic pools
306               ! ---------------------------------------------------------
307               zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b
308#if ! defined key_kriest
309               zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b
310#endif
311
312               !  Increased scavenging for very high iron concentrations found near the coasts
313               !  due to increased lithogenic particles and let say it is unknown processes (precipitation, ...)
314               !  -----------------------------------------------------------
315               zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. )
316               zlamfac = MIN( 1.  , zlamfac )
317               zdep    = MIN( 1., 1000. / fsdept(ji,jj,jk) )
318               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )
319               zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer)
320
321               !  Compute the coagulation of colloidal iron. This parameterization
322               !  could be thought as an equivalent of colloidal pumping.
323               !  It requires certainly some more work as it is very poorly constrained.
324               !  ----------------------------------------------------------------
325               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    &
326                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) + 0. * trb(ji,jj,jk,jppoc) )
327               zaggdfea = zlam1a * zstep * zfecoll
328#if defined key_ligand
329               zligco = max( ( 0.1 * trn(ji,jj,jk,jplgw) ), ( trn(ji,jj,jk,jplgw) - fe3sol ) )
330               zaggliga = zlam1a * zstep * zligco
331#endif
332               !
333#if defined key_kriest
334               zaggdfeb = 0.
335               !
336#  if defined key_ligand
337               zaggligb = 0.
338#  endif
339               !
340               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag
341               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb
342               !
343#else
344               !
345               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)
346               zaggdfeb = zlam1b * zstep * zfecoll
347               !
348#  if defined key_ligand
349               zaggligb = zlam1b * zstep * zligco
350#  endif
351               ! precipitation of Fe3+, creation of nanoparticles
352               precip(ji,jj,jk) = max( 0., (zfeequi - fe3sol) ) * kfep * zstep
353               !
354               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb &
355               &                     - zcoag - precip(ji,jj,jk)
356               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea
357               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb
358#endif
359#if defined key_ligand
360               tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk)
361               tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb
362#endif
363            END DO
364         END DO
365      END DO
366      !
367      !  Define the bioavailable fraction of iron
368      !  ----------------------------------------
369      IF( ln_fechem ) THEN
370          biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )
371      ELSE
372          biron(:,:,:) = trb(:,:,:,jpfer) 
373      ENDIF
374
375#if defined key_ligand
376      IF (.NOT. ln_fechem) THEN
377          plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trn(:,:,:,jpfer) +rtrn ) ) )
378          plig(:,:,:) = max(0. , plig(:,:,:) )
379      ENDIF
380#endif
381
382      !  Output of some diagnostics variables
383      !     ---------------------------------
384      IF( ln_diatrc .AND. lk_iomput ) THEN
385         IF( jnt == nrdttrc ) THEN
386            CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+
387            CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1
388            CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1
389            CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL
390            CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron
391            IF( ln_fechem ) THEN
392               CALL iom_put("Fe2" , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+
393               CALL iom_put("FeL2", zFeL2  (:,:,:)       * tmask(:,:,:) )   ! FeL2
394               CALL iom_put("FeP" , zFeP   (:,:,:)       * tmask(:,:,:) )   ! FeP
395               CALL iom_put("TL2" , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2
396            ENDIF
397         ENDIF
398      ENDIF
399
400      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
401         WRITE(charout, FMT="('fechem')")
402         CALL prt_ctl_trc_info(charout)
403         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
404      ENDIF
405      !
406                       CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip )
407      IF( ln_fechem )  CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
408      !
409      IF( nn_timing == 1 )  CALL timing_stop('p4z_fechem')
410      !
411   END SUBROUTINE p4z_fechem
412
413
414   SUBROUTINE p4z_fechem_init
415      !!----------------------------------------------------------------------
416      !!                  ***  ROUTINE p4z_fechem_init  ***
417      !!
418      !! ** Purpose :   Initialization of iron chemistry parameters
419      !!
420      !! ** Method  :   Read the nampisfer namelist and check the parameters
421      !!      called at the first timestep
422      !!
423      !! ** input   :   Namelist nampisfer
424      !!
425      !!----------------------------------------------------------------------
426      NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep 
427      INTEGER :: ios                 ! Local integer output status for namelist read
428
429      REWIND( numnatp_ref )              ! Namelist nampisfer in reference namelist : Pisces iron chemistry
430      READ  ( numnatp_ref, nampisfer, IOSTAT = ios, ERR = 901)
431901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp )
432
433      REWIND( numnatp_cfg )              ! Namelist nampisfer in configuration namelist : Pisces iron chemistry
434      READ  ( numnatp_cfg, nampisfer, IOSTAT = ios, ERR = 902 )
435902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp )
436      IF(lwm) WRITE ( numonp, nampisfer )
437
438      IF(lwp) THEN                         ! control print
439         WRITE(numout,*) ' '
440         WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer'
441         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
442         WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem    =', ln_fechem
443         WRITE(numout,*) '    variable concentration of ligand          ln_ligvar    =', ln_ligvar
444         WRITE(numout,*) '    Variable colloidal fraction of Fe3+       ln_fecolloid =', ln_fecolloid
445         WRITE(numout,*) '    scavenging rate of Iron                   xlam1        =', xlam1
446         WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust     =', xlamdust
447         WRITE(numout,*) '    ligand concentration in the ocean         ligand       =', ligand
448         WRITE(numout,*) '    rate constant for nanoparticle formation  kfep         =', kfep
449      ENDIF
450      !
451      IF( ln_fechem ) THEN
452         ! initialization of some constants used by the complexe chemistry scheme
453         ! ----------------------------------------------------------------------
454         spd = 3600. * 24.
455         con = 1.E9
456         ! LIGAND KINETICS (values from Witter et al. 2000)
457         ! Weak (L2) ligands
458         ! Phaeophytin
459         kl2 = 12.2E5  * spd / con
460         kb2 = 12.3E-6 * spd
461         ! Strong (L1) ligands
462         ! Saccharides
463         ! kl1 = 12.2E5  * spd / con
464         ! kb1 = 12.3E-6 * spd
465         ! DFOB-
466         kl1 = 19.6e5  * spd / con
467         kb1 = 1.5e-6  * spd
468         ! pcp and remin of Fe3p
469         ks  = 0.075
470         kpr = 0.05
471         ! thermal reduction of Fe3
472         kth = 0.0048 * 24.
473         !
474      ENDIF
475      !
476   END SUBROUTINE p4z_fechem_init
477
478#else
479   !!======================================================================
480   !!  Dummy module :                                   No PISCES bio-model
481   !!======================================================================
482CONTAINS
483   SUBROUTINE p4z_fechem                    ! Empty routine
484   END SUBROUTINE p4z_fechem
485#endif 
486
487   !!======================================================================
488END MODULE p4zfechem
Note: See TracBrowser for help on using the repository browser.