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.
p5zmicro.F90 in branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z – NEMO

source: branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zmicro.F90 @ 7617

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

update diagnostics + changes in quota code

  • Property svn:executable set to *
File size: 23.8 KB
Line 
1MODULE p5zmicro
2   !!======================================================================
3   !!                         ***  MODULE p5zmicro  ***
4   !! TOP :   PISCES Compute the sources/sinks for microzooplankton
5   !!======================================================================
6   !! History :   1.0  !  2004     (O. Aumont) Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
8   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron
9   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
10   !!----------------------------------------------------------------------
11#if defined key_pisces_quota
12   !!----------------------------------------------------------------------
13   !!   'key_pisces_quota'                                 PISCES bio-model
14   !!----------------------------------------------------------------------
15   !!   p5z_micro       :   Compute the sources/sinks for microzooplankton
16   !!   p5z_micro_init  :   Initialize and read the appropriate namelist
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 p5zsink         !  vertical flux of particulate matter due to sinking
22   USE p5zlim          !  Phytoplankton limitation terms
23   USE iom             !  I/O manager
24   USE prtctl_trc      !  print control for debugging
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   p5z_micro         ! called in p5zbio.F90
30   PUBLIC   p5z_micro_init    ! called in trcsms_pisces.F90
31
32   !! * Shared module variables
33   REAL(wp), PUBLIC ::  part        !: part of calcite not dissolved in microzoo guts
34   REAL(wp), PUBLIC ::  xprefc     !: microzoo preference for POC
35   REAL(wp), PUBLIC ::  xprefn     !: microzoo preference for nanophyto
36   REAL(wp), PUBLIC ::  xprefp     !: microzoo preference for picophyto
37   REAL(wp), PUBLIC ::  xprefd     !: microzoo preference for diatoms
38   REAL(wp), PUBLIC ::  xprefz     !: microzoo preference for microzoo
39   REAL(wp), PUBLIC ::  xthreshdia  !: diatoms feeding threshold for microzooplankton
40   REAL(wp), PUBLIC ::  xthreshpic  !: picophyto feeding threshold for microzooplankton
41   REAL(wp), PUBLIC ::  xthreshphy  !: nanophyto threshold for microzooplankton
42   REAL(wp), PUBLIC ::  xthreshzoo  !: microzoo threshold for microzooplankton
43   REAL(wp), PUBLIC ::  xthreshpoc  !: poc threshold for microzooplankton
44   REAL(wp), PUBLIC ::  xthresh     !: feeding threshold for microzooplankton
45   REAL(wp), PUBLIC ::  resrat      !: exsudation rate of microzooplankton
46   REAL(wp), PUBLIC ::  mzrat       !: microzooplankton mortality rate
47   REAL(wp), PUBLIC ::  grazrat     !: maximal microzoo grazing rate
48   REAL(wp), PUBLIC ::  xkgraz      !: non assimilated fraction of P by microzoo
49   REAL(wp), PUBLIC ::  unassc      !: Efficicency of microzoo growth
50   REAL(wp), PUBLIC ::  unassn      !: Efficicency of microzoo growth
51   REAL(wp), PUBLIC ::  unassp      !: Efficicency of microzoo growth
52   REAL(wp), PUBLIC ::  epsher      !: half sturation constant for grazing 1
53   REAL(wp), PUBLIC ::  srespir     !: half sturation constant for grazing 1
54   REAL(wp), PUBLIC ::  ssigma      !: Fraction excreted as semi-labile DOM
55   LOGICAL,  PUBLIC ::  bmetexc     !: Use of excess carbon for respiration
56
57
58   !!* Substitution
59#  include "top_substitute.h90"
60   !!----------------------------------------------------------------------
61   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
62   !! $Id: p4zmicro.F90 3160 2011-11-20 14:27:18Z cetlod $
63   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
64   !!----------------------------------------------------------------------
65
66CONTAINS
67
68   SUBROUTINE p5z_micro( kt, knt )
69      !!---------------------------------------------------------------------
70      !!                     ***  ROUTINE p5z_micro  ***
71      !!
72      !! ** Purpose :   Compute the sources/sinks for microzooplankton
73      !!
74      !! ** Method  : - ???
75      !!---------------------------------------------------------------------
76      INTEGER, INTENT(in) ::  kt  ! ocean time step
77      INTEGER, INTENT(in) ::  knt 
78      !
79      INTEGER  :: ji, jj, jk
80      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc, zcompapon, zcompapop
81      REAL(wp) :: zcompapi, zgraze  , zdenom, zfact, zstep, zfood, zfoodlim
82      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot
83      REAL(wp) :: zepsherf, zepshert, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi
84      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf
85      REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft
86      REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem
87      REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz
88      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn, zgrasratp
89      REAL(wp) :: zgraznc, zgraznn, zgraznp, zgrazpoc, zgrazpon, zgrazpop, zgrazpof
90      REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz
91      REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess
92      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo
93#if defined key_ligand
94      REAL(wp), POINTER, DIMENSION(:,:,:) :: zzligprod
95#endif
96      CHARACTER (len=25) :: charout
97      !!---------------------------------------------------------------------
98      !
99      IF( nn_timing == 1 )  CALL timing_start('p5z_micro')
100      !
101      CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo )
102      zfezoo(:,:,:) = 0._wp
103#if defined key_ligand
104      CALL wrk_alloc( jpi, jpj, jpk, zzligprod )
105      zzligprod(:,:,:) = 0._wp
106#endif
107      !
108      zmetexcess = 0.0
109      IF ( bmetexc ) zmetexcess = 1.0
110      !
111      DO jk = 1, jpkm1
112         DO jj = 1, jpj
113            DO ji = 1, jpi
114               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )
115               zstep   = xstep
116# if defined key_degrad
117               zstep = zstep * facvol(ji,jj,jk)
118# endif
119               zfact   = zstep * tgfunc2(ji,jj,jk) * zcompaz
120
121               !   Michaelis-Menten mortality rates of microzooplankton
122               !   -----------------------------------------------------
123               zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  &
124               &        + 3. * nitrfac(ji,jj,jk) )
125
126               !   Zooplankton mortality. A square function has been selected with
127               !   no real reason except that it seems to be more stable and may mimic predation.
128               !   ------------------------------------------------------------------------------
129               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo)
130
131               !   Computation of the abundance of the preys
132               !   A threshold can be specified in the namelist
133               !   --------------------------------------------
134               zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia )
135               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 )
136               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthreshzoo ), 0.e0 )
137               zcompapi  = MAX( ( trb(ji,jj,jk,jppic) - xthreshpic ), 0.e0 )
138               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 )
139               
140               !   Microzooplankton grazing
141               !   ------------------------
142               zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi   &
143               &           + xprefz * zcompaz + xprefp * zcompapi
144               zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) )
145               zdenom    = zfoodlim / ( xkgraz + zfoodlim )
146               zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 
147
148               !   An active switching parameterization is used here.
149               !   We don't use the KTW parameterization proposed by
150               !   Vallina et al. because it tends to produce to steady biomass
151               !   composition and the variance of Chl is too low as it grazes
152               !   too strongly on winning organisms. Thus, instead of a square
153               !   a 1.5 power value is used which decreases the pressure on the
154               !   most abundant species
155               !   ------------------------------------------------------------ 
156               ztmp1 = xprefn * zcompaph * ( 0.75 * zcompaph + 0.25 * zcompadi )
157               ztmp2 = xprefp * zcompapi * zcompapi
158               ztmp3 = xprefc * zcompapoc * zcompapoc
159               ztmp4 = xprefd * zcompadi * ( 0.75 * zcompadi + 0.25 * zcompaph )
160               ztmp5 = xprefz * zcompaz * zcompaz
161               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
162               ztmp1 = ztmp1 / ztmptot
163               ztmp2 = ztmp2 / ztmptot
164               ztmp3 = ztmp3 / ztmptot
165               ztmp4 = ztmp4 / ztmptot
166               ztmp5 = ztmp5 / ztmptot
167
168               !   Microzooplankton regular grazing on the different preys
169               !   -------------------------------------------------------
170               zgraznc   = zgraze  * ztmp1  * zdenom
171               zgraznn   = zgraznc * trb(ji,jj,jk,jpnph) / (trb(ji,jj,jk,jpphy) + rtrn)
172               zgraznp   = zgraznc * trb(ji,jj,jk,jppph) / (trb(ji,jj,jk,jpphy) + rtrn)
173               zgraznf   = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn)
174               zgrazpc   = zgraze  * ztmp2  * zdenom
175               zgrazpn   = zgrazpc * trb(ji,jj,jk,jpnpi) / (trb(ji,jj,jk,jppic) + rtrn)
176               zgrazpp   = zgrazpc * trb(ji,jj,jk,jpppi) / (trb(ji,jj,jk,jppic) + rtrn)
177               zgrazpf   = zgrazpc * trb(ji,jj,jk,jppfe) / (trb(ji,jj,jk,jppic) + rtrn)
178               zgrazz    = zgraze  * ztmp5   * zdenom
179               zgrazpoc  = zgraze  * ztmp3   * zdenom
180               zgrazpon  = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn )
181               zgrazpop  = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn )
182               zgrazpof  = zgrazpoc* trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn)
183               zgrazdc   = zgraze  * ztmp4  * zdenom
184               zgrazdn   = zgrazdc * trb(ji,jj,jk,jpndi) / (trb(ji,jj,jk,jpdia) + rtrn)
185               zgrazdp   = zgrazdc * trb(ji,jj,jk,jppdi) / (trb(ji,jj,jk,jpdia) + rtrn)
186               zgrazdf   = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn)
187               !
188               zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc
189               zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3
190               zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3
191               zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3
192               !
193               ! Grazing by microzooplankton
194               IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztotc
195
196               !   Stoichiometruc ratios of the food ingested by zooplanton
197               !   --------------------------------------------------------
198               zgrasratf =  (zgraztotf + rtrn) / ( zgraztotc + rtrn )
199               zgrasratn =  (zgraztotn + rtrn) / ( zgraztotc + rtrn )
200               zgrasratp =  (zgraztotp + rtrn) / ( zgraztotc + rtrn )
201
202               !   Growth efficiency is made a function of the quality
203               !   and the quantity of the preys
204               !   ---------------------------------------------------
205               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3)
206               zbeta = 1./ (epsher - 0.2)
207               zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood * 1E6 )
208               zepsherv  = zepsherf * zepshert
209
210               !   Respiration of microzooplankton
211               !   Excess carbon in the food is used preferentially
212               !   ------------------------------------------------
213               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess
214               zbasresb = MAX(0., zrespz - zexcess)
215               zbasresi = zexcess + MIN(0., zrespz - zexcess) 
216               zrespirc = srespir * zepsherv * zgraztotc + zbasresb
217               
218               !   When excess carbon is used, the other elements in excess
219               !   are also used proportionally to their abundance
220               !   --------------------------------------------------------
221               zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
222               zbasresn = zbasresi * zexcess * zgrasratn 
223               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
224               zbasresp = zbasresi * zexcess * zgrasratp
225               zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn)
226               zbasresf = zbasresi * zexcess * zgrasratf
227
228               !   Voiding of the excessive elements as DOM
229               !   ----------------------------------------
230               zgradoct   = (1. - unassc - zepsherv) * zgraztotc - zbasresi 
231               zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn
232               zgradopt   = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp
233               zgrareft   = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf
234
235               !  Since only semilabile DOM is represented in PISCES
236               !  part of DOM is in fact labile and is then released
237               !  as dissolved inorganic compounds (ssigma)
238               !  --------------------------------------------------
239               zgradoc =  zgradoct * ssigma
240               zgradon =  zgradont * ssigma
241               zgradop =  zgradopt * ssigma
242               zgrarem = (1.0 - ssigma) * zgradoct
243               zgraren = (1.0 - ssigma) * zgradont
244               zgrarep = (1.0 - ssigma) * zgradopt
245               zgraref = zgrareft
246
247               !   Defecation as a result of non assimilated products
248               !   --------------------------------------------------
249               zgrapoc   = zgraztotc * unassc
250               zgrapon   = zgraztotn * unassn
251               zgrapop   = zgraztotp * unassp
252               zgrapof   = zgraztotf * unassc
253
254               !  Addition of respiration to the release of inorganic nutrients
255               !  -------------------------------------------------------------
256               zgrarem = zgrarem + zbasresi + zrespirc
257               zgraren = zgraren + zbasresn + zrespirc * no3rat3
258               zgrarep = zgrarep + zbasresp + zrespirc * po4rat3
259               zgraref = zgraref + zbasresf + zrespirc * ferat3
260
261               !   Update of the TRA arrays
262               !   ------------------------
263               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep
264               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren
265               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc
266#if defined key_ligand
267               tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz
268               zzligprod(ji,jj,jk) = zgradoc * ldocz
269#endif
270               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon
271               tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop
272               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 
273               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref
274               zfezoo(ji,jj,jk)    = zgraref
275               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc   &
276               &                     - ztortz - zgrazz
277               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc
278               tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn
279               tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp
280               tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) - zgrazpc
281               tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) - zgrazpn
282               tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) - zgrazpp
283               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc
284               tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn
285               tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp
286               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn)
287               tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zgrazpc * trb(ji,jj,jk,jppch)/(trb(ji,jj,jk,jppic)+rtrn)
288               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn)
289               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn)
290               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn)
291               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf
292               tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zgrazpf
293               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf
294               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ztortz + zgrapoc - zgrazpoc 
295               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc
296               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc
297               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + no3rat3 * ztortz + zgrapon - zgrazpon
298               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop
299               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz  + zgrapof - zgrazpof
300#if defined key_kriest
301               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro
302#endif
303               !
304               ! calcite production
305               zprcaca = xfracal(ji,jj,jk) * zgraznc
306               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
307               !
308               zprcaca = part * zprcaca
309               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem - zprcaca
310               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca     &
311               &                     + rno3 * zgraren
312               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca
313#if defined key_kriest
314               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortz * xkr_dmicro &
315                                                         - zgrazpoc * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )
316#endif
317            END DO
318         END DO
319      END DO
320      !
321      IF( lk_iomput .AND. knt == nrdttrc ) THEN
322         CALL wrk_alloc( jpi, jpj, jpk, zw3d )
323         IF( iom_use( "GRAZ1" ) ) THEN
324            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton
325            CALL iom_put( "GRAZ1", zw3d )
326         ENDIF
327         IF( iom_use( "FEZOO" ) ) THEN
328            zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   !
329            CALL iom_put( "FEZOO", zw3d )
330         ENDIF
331#if defined key_ligand
332         IF( iom_use( "LPRODZ" ) )  THEN
333            zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)
334            CALL iom_put( "LPRODZ"  , zw3d )
335         ENDIF
336#endif
337         CALL wrk_dealloc( jpi, jpj, jpk, zw3d )
338      ENDIF
339      !
340      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
341         WRITE(charout, FMT="('micro')")
342         CALL prt_ctl_trc_info(charout)
343         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
344      ENDIF
345      !
346      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo )
347#if defined key_ligand
348      CALL wrk_dealloc( jpi, jpj, jpk, zzligprod )
349#endif
350      !
351      IF( nn_timing == 1 )  CALL timing_stop('p5z_micro')
352      !
353   END SUBROUTINE p5z_micro
354
355
356   SUBROUTINE p5z_micro_init
357
358      !!----------------------------------------------------------------------
359      !!                  ***  ROUTINE p5z_micro_init  ***
360      !!
361      !! ** Purpose :   Initialization of microzooplankton parameters
362      !!
363      !! ** Method  :   Read the nampiszoo namelist and check the parameters
364      !!                called at the first timestep (nittrc000)
365      !!
366      !! ** input   :   Namelist nampiszoo
367      !!
368      !!----------------------------------------------------------------------
369
370      NAMELIST/nampiszoo/ part, grazrat, bmetexc, resrat, mzrat, xprefc, xprefn, &
371         &                xprefp, xprefd, xprefz, xthreshdia, xthreshphy, &
372         &                xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, &
373         &                epsher, ssigma, srespir, unassc, unassn, unassp
374
375      INTEGER :: ios                 ! Local integer output status for namelist read
376
377      REWIND( numnatp_ref )              ! Namelist nampiszoo in reference namelist : Pisces microzooplankton
378      READ  ( numnatp_ref, nampiszoo, IOSTAT = ios, ERR = 901)
379901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in reference namelist', lwp )
380
381      REWIND( numnatp_cfg )              ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton
382      READ  ( numnatp_cfg, nampiszoo, IOSTAT = ios, ERR = 902 )
383902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in configuration namelist', lwp )
384      IF(lwm) WRITE ( numonp, nampiszoo )
385
386      IF(lwp) THEN                         ! control print
387         WRITE(numout,*) ' '
388         WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo'
389         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
390         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part        =', part
391         WRITE(numout,*) '    microzoo preference for POC                     xprefc     =', xprefc
392         WRITE(numout,*) '    microzoo preference for nano                    xprefn     =', xprefn
393         WRITE(numout,*) '    microzoo preference for pico                    xprefp     =', xprefp
394         WRITE(numout,*) '    microzoo preference for diatoms                 xprefd     =', xprefd
395         WRITE(numout,*) '    microzoo preference for microzoo                xprefz     =', xprefz
396         WRITE(numout,*) '    diatoms feeding threshold  for microzoo         xthreshdia  =', xthreshdia
397         WRITE(numout,*) '    nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy
398         WRITE(numout,*) '    picophyto feeding threshold for microzoo        xthreshpic  =', xthreshpic
399         WRITE(numout,*) '    poc feeding threshold for microzoo              xthreshpoc  =', xthreshpoc
400         WRITE(numout,*) '    microzoo feeding threshold for microzoo         xthreshzoo  =', xthreshzoo
401         WRITE(numout,*) '    feeding threshold for microzooplankton          xthresh     =', xthresh
402         WRITE(numout,*) '    exsudation rate of microzooplankton             resrat      =', resrat
403         WRITE(numout,*) '    microzooplankton mortality rate                 mzrat       =', mzrat
404         WRITE(numout,*) '    maximal microzoo grazing rate                   grazrat     =', grazrat
405         WRITE(numout,*) '    C egested fraction of fodd by microzoo          unassc      =', unassc
406         WRITE(numout,*) '    N egested fraction of fodd by microzoo          unassn      =', unassn
407         WRITE(numout,*) '    P egested fraction of fodd by microzoo          unassp      =', unassp
408         WRITE(numout,*) '    Efficicency of microzoo growth                  epsher      =', epsher
409         WRITE(numout,*) '    Fraction excreted as semi-labile DOM            ssigma      =', ssigma
410         WRITE(numout,*) '    Active respiration                              srespir     =', srespir
411         WRITE(numout,*) '    half sturation constant for grazing 1           xkgraz      =', xkgraz
412         WRITE(numout,*) '    Use of excess carbon for respiration            bmetexc     =', bmetexc
413      ENDIF
414
415   END SUBROUTINE p5z_micro_init
416
417#else
418   !!======================================================================
419   !!  Dummy module :                                   No PISCES bio-model
420   !!======================================================================
421CONTAINS
422   SUBROUTINE p5z_micro                    ! Empty routine
423   END SUBROUTINE p5z_micro
424#endif 
425
426   !!======================================================================
427END MODULE  p5zmicro
Note: See TracBrowser for help on using the repository browser.