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

source: branches/2015/dev_merge_2015/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90 @ 6060

Last change on this file since 6060 was 6060, checked in by timgraham, 8 years ago

Merged dev_r5836_noc2_VVL_BY_DEFAULT into branch

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